diff --git a/CHANGES b/CHANGES
index be5d78206..84dbb27fa 100644
--- a/CHANGES
+++ b/CHANGES
@@ -18,6 +18,7 @@ Emulation fixes:
  - GB Video: Delay LYC STAT check (fixes mgba.io/i/1331)
  - GB Video: Fix window being enabled mid-scanline (fixes mgba.io/i/1328)
  - GB I/O: Filter IE top bits properly (fixes mgba.io/i/1329)
+ - GBA Video: Fix wrapped sprite mosaic clamping (fixes mgba.io/i/1432)
 Other fixes:
  - Qt: Fix some Qt display driver race conditions
  - Core: Improved lockstep driver reliability (Le Hoang Quyen)
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0000.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0000.png
new file mode 100644
index 000000000..d05b02e16
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0000.png differ
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0001.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0001.png
new file mode 100644
index 000000000..bcb7a39ea
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0001.png differ
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0002.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0002.png
new file mode 100644
index 000000000..92763de4a
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0002.png differ
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0003.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0003.png
new file mode 100644
index 000000000..c48410ca5
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0003.png differ
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0004.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0004.png
new file mode 100644
index 000000000..11cb7a1f4
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0004.png differ
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0005.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0005.png
new file mode 100644
index 000000000..0796c9e35
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0005.png differ
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0006.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0006.png
new file mode 100644
index 000000000..8172f4670
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0006.png differ
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/baseline_0007.png b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0007.png
new file mode 100644
index 000000000..3ccd126c3
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/baseline_0007.png differ
diff --git a/cinema/gba/obj/sma2-mosaic-clamp/test.mvl b/cinema/gba/obj/sma2-mosaic-clamp/test.mvl
new file mode 100644
index 000000000..9fece4fdb
Binary files /dev/null and b/cinema/gba/obj/sma2-mosaic-clamp/test.mvl differ
diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c
index 4c83844ad..86c3bc409 100644
--- a/src/gba/renderers/video-software.c
+++ b/src/gba/renderers/video-software.c
@@ -808,12 +808,12 @@ static void _drawScanline(struct GBAVideoSoftwareRenderer* renderer, int y) {
 			if ((y < sprite->y && (sprite->endY - 256 < 0 || y >= sprite->endY - 256)) || y >= sprite->endY) {
 				continue;
 			}
-			if (GBAObjAttributesAIsMosaic(sprite->obj.a)) {
+			if (GBAObjAttributesAIsMosaic(sprite->obj.a) && mosaicV > 1) {
 				localY = mosaicY;
-				if (localY < sprite->y) {
+				if (localY < sprite->y && sprite->y < GBA_VIDEO_VERTICAL_PIXELS) {
 					localY = sprite->y;
 				}
-				if (localY >= sprite->endY) {
+				if (localY >= (sprite->endY & 0xFF)) {
 					localY = sprite->endY - 1;
 				}
 			}