diff --git a/src/doomdef.h b/src/doomdef.h
index 3d02871e47108230f472f0740970fe3a3d2b2a7b..565d1aadff0b3166051f26fdc1fcc7a42370a993 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -490,6 +490,7 @@ extern INT32 cv_debug;
 #define DBG_SETUP       0x0400
 #define DBG_LUA         0x0800
 #define DBG_RANDOMIZER  0x1000
+#define DBG_VIEWMORPH   0x2000
 
 // =======================
 // Misc stuff for later...
diff --git a/src/r_main.c b/src/r_main.c
index d4d05ad4482556677c924b21b0601381f4aa2942..91e1b3fe76f98a5929c9d47f851a8fa38a371ff3 100644
--- a/src/r_main.c
+++ b/src/r_main.c
@@ -667,8 +667,34 @@ void R_ApplyViewMorph(void)
 	if (!viewmorph.use)
 		return;
 
-	for (p = 0; p < end; p++)
-		tmpscr[p] = srcscr[viewmorph.scrmap[p]];
+	if (cv_debug & DBG_VIEWMORPH)
+	{
+		UINT8 border = 32;
+		UINT8 grid = 160;
+		INT32 ws = vid.width / 4;
+		INT32 hs = vid.width * (vid.height / 4);
+
+		memcpy(tmpscr, srcscr, vid.width*vid.height);
+		for (p = 0; p < vid.width; p++)
+		{
+			tmpscr[viewmorph.scrmap[p]] = border;
+			tmpscr[viewmorph.scrmap[p + hs]] = grid;
+			tmpscr[viewmorph.scrmap[p + hs*2]] = grid;
+			tmpscr[viewmorph.scrmap[p + hs*3]] = grid;
+			tmpscr[viewmorph.scrmap[end - 1 - p]] = border;
+		}
+		for (p = vid.width; p < end; p += vid.width)
+		{
+			tmpscr[viewmorph.scrmap[p]] = border;
+			tmpscr[viewmorph.scrmap[p + ws]] = grid;
+			tmpscr[viewmorph.scrmap[p + ws*2]] = grid;
+			tmpscr[viewmorph.scrmap[p + ws*3]] = grid;
+			tmpscr[viewmorph.scrmap[end - 1 - p]] = border;
+		}
+	}
+	else
+		for (p = 0; p < end; p++)
+			tmpscr[p] = srcscr[viewmorph.scrmap[p]];
 
 	VID_BlitLinearScreen(tmpscr, screens[0],
 			vid.width*vid.bpp, vid.height, vid.width*vid.bpp, vid.width);