diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index cc641b8b0dbbfaa5011bb4916b2880aa986ce805..e0117815577b26a28b7df2d511823f181a6c481a 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -313,7 +313,7 @@ static CV_PossibleValue_t timetic_cons_t[] = {{0, "Normal"}, {1, "Centiseconds"}
 consvar_t cv_timetic = {"timerres", "Normal", CV_SAVE, timetic_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
 
 static CV_PossibleValue_t powerupdisplay_cons_t[] = {{0, "Never"}, {1, "First-person only"}, {2, "Always"}, {0, NULL}};
-consvar_t cv_powerupdisplay = {"powerupdisplay", "First-person only", CV_SAVE, powerupdisplay_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
+consvar_t cv_powerupdisplay = {"powerupdisplay", "First-person only", CV_SAVE, powerupdisplay_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
 
 consvar_t cv_resetmusic = {"resetmusic", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
 
diff --git a/src/m_menu.c b/src/m_menu.c
index 4857df104d4de5cc98df0582a7f0b19f2f4ba986..f10c6b653d7a089a12fd9232dd5f383d51a40841 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -1188,7 +1188,7 @@ static menuitem_t OP_VideoOptionsMenu[] =
 #endif
 
 	{IT_HEADER, NULL, "Color Profile", NULL, 30},
-	{IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Brightness (F11)", &cv_globalgamma,      36},
+	{IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Brightness (F11)", &cv_globalgamma,36},
 	{IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Saturation", &cv_globalsaturation, 41},
 	{IT_SUBMENU|IT_STRING, NULL, "Advanced Settings...",     &OP_ColorOptionsDef,  46},
 
diff --git a/src/screen.c b/src/screen.c
index 5b16992c7c0d1cb229bbc409f96b8b0f74d67f71..cd97b62fa7e58fad34e964a9c95ac68d8c33971c 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -414,7 +414,7 @@ void SCR_DisplayTicRate(void)
 	tic_t ontic = I_GetTime();
 	tic_t totaltics = 0;
 	INT32 ticcntcolor = 0;
-	INT32 offs = (cv_debug ? 8 : 0);
+	const INT32 h = vid.height-(8*vid.dupy);
 
 	for (i = lasttic + 1; i < TICRATE+lasttic && i < ontic; ++i)
 		fpsgraph[i % TICRATE] = false;
@@ -428,9 +428,9 @@ void SCR_DisplayTicRate(void)
 	if (totaltics <= TICRATE/2) ticcntcolor = V_REDMAP;
 	else if (totaltics == TICRATE) ticcntcolor = V_GREENMAP;
 
-	V_DrawString(vid.width-((24+(6*offs))*vid.dupx), vid.height-((16-offs)*vid.dupy),
-		V_YELLOWMAP|V_NOSCALESTART, "FPS");
-	V_DrawString(vid.width-(40*vid.dupx), vid.height-(8*vid.dupy),
+	V_DrawString(vid.width-(72*vid.dupx), h,
+		V_YELLOWMAP|V_NOSCALESTART, "FPS:");
+	V_DrawString(vid.width-(40*vid.dupx), h,
 		ticcntcolor|V_NOSCALESTART, va("%02d/%02u", totaltics, TICRATE));
 
 	lasttic = ontic;
diff --git a/src/st_stuff.c b/src/st_stuff.c
index ab78595b4b0ac94a46f70de5c3e2fecebaaa73a3..3b07d375ee3789977ff3829d479a4a2b266c963e 100644
--- a/src/st_stuff.c
+++ b/src/st_stuff.c
@@ -453,80 +453,145 @@ static void ST_DrawNightsOverlayNum(fixed_t x /* right border */, fixed_t y, fix
 // Devmode information
 static void ST_drawDebugInfo(void)
 {
-	INT32 height = 192;
+	INT32 height = 0;
 
 	if (!(stplyr->mo && cv_debug))
 		return;
 
-	if (cv_ticrate.value)
-		height -= 12;
+#define VFLAGS V_MONOSPACE|V_SNAPTOTOP|V_SNAPTORIGHT
 
-#define dist 4
-#define VFLAGS V_MONOSPACE|V_SNAPTOBOTTOM|V_SNAPTORIGHT
-
-	if (cv_debug & DBG_BASIC)
+	if (vid.dupx == 1)
 	{
-		const fixed_t d = AngleFixed(stplyr->mo->angle);
-		V_DrawRightAlignedString(320, height - 24, VFLAGS, va("X: %6d", stplyr->mo->x>>FRACBITS));
-		V_DrawRightAlignedString(320, height - 16, VFLAGS, va("Y: %6d", stplyr->mo->y>>FRACBITS));
-		V_DrawRightAlignedString(320, height - 8,  VFLAGS, va("Z: %6d", stplyr->mo->z>>FRACBITS));
-		V_DrawRightAlignedString(320, height,      VFLAGS, va("A: %6d", FixedInt(d)));
+		if (cv_debug & DBG_BASIC)
+		{
+			const fixed_t d = AngleFixed(stplyr->mo->angle);
+			V_DrawRightAlignedString(320,  0, VFLAGS, va("X: %6d", stplyr->mo->x>>FRACBITS));
+			V_DrawRightAlignedString(320,  8, VFLAGS, va("Y: %6d", stplyr->mo->y>>FRACBITS));
+			V_DrawRightAlignedString(320, 16, VFLAGS, va("Z: %6d", stplyr->mo->z>>FRACBITS));
+			V_DrawRightAlignedString(320, 24, VFLAGS, va("A: %6d", FixedInt(d)));
 
-		height -= (32+dist);
-	}
+			height += 4*9;
+		}
 
-	if (cv_debug & DBG_DETAILED)
+		if (cv_debug & (DBG_MEMORY|DBG_RANDOMIZER|DBG_DETAILED))
+		{
+			V_DrawRightAlignedThinString(320,   height, VFLAGS|V_REDMAP, "INFO NOT AVAILABLE");
+			V_DrawRightAlignedThinString(320, 8+height, VFLAGS|V_REDMAP, "AT THIS RESOLUTION");
+		}
+	}
+	else
 	{
-		V_DrawRightAlignedString(320, height - 104, VFLAGS, va("SHIELD: %5x", stplyr->powers[pw_shield]));
-		V_DrawRightAlignedString(320, height - 96,  VFLAGS, va("SCALE: %5d%%", (stplyr->mo->scale*100)/FRACUNIT));
-		V_DrawRightAlignedString(320, height - 88,  VFLAGS, va("CARRY: %5x", stplyr->powers[pw_carry]));
-		V_DrawRightAlignedString(320, height - 80,  VFLAGS, va("AIR: %4d, %3d", stplyr->powers[pw_underwater], stplyr->powers[pw_spacetime]));
+#define h 4
+#define dist 2
+#define V_DrawDebugLine(str) V_DrawRightAlignedSmallString(320, height, VFLAGS, str);\
+								height += h
 
-		// Flags
-		V_DrawRightAlignedString(304-92, height - 72, VFLAGS, "PF:");
-		V_DrawString(304-90,             height - 72, VFLAGS|((stplyr->pflags & PF_STARTJUMP)     ? V_GREENMAP : V_REDMAP), "SJ");
-		V_DrawString(304-72,             height - 72, VFLAGS|((stplyr->pflags & PF_JUMPED)        ? V_GREENMAP : V_REDMAP), "JD");
-		V_DrawString(304-54,             height - 72, VFLAGS|((stplyr->pflags & PF_SPINNING)      ? V_GREENMAP : V_REDMAP), "SP");
-		V_DrawString(304-36,             height - 72, VFLAGS|((stplyr->pflags & PF_STARTDASH)     ? V_GREENMAP : V_REDMAP), "ST");
-		V_DrawString(304-18,             height - 72, VFLAGS|((stplyr->pflags & PF_THOKKED)       ? V_GREENMAP : V_REDMAP), "TH");
-		V_DrawString(304,                height - 72, VFLAGS|((stplyr->pflags & PF_SHIELDABILITY) ? V_GREENMAP : V_REDMAP), "SH");
+		if (cv_debug & DBG_MEMORY)
+		{
+			V_DrawDebugLine(va("Heap: %8sKB", sizeu1(Z_TotalUsage()>>10)));
 
-		V_DrawRightAlignedString(320, height - 64, VFLAGS, va("CEILZ: %6d", stplyr->mo->ceilingz>>FRACBITS));
-		V_DrawRightAlignedString(320, height - 56, VFLAGS, va("FLOORZ: %6d", stplyr->mo->floorz>>FRACBITS));
+			height += dist;
+		}
 
-		V_DrawRightAlignedString(320, height - 48, VFLAGS, va("CNVX: %6d", stplyr->cmomx>>FRACBITS));
-		V_DrawRightAlignedString(320, height - 40, VFLAGS, va("CNVY: %6d", stplyr->cmomy>>FRACBITS));
-		V_DrawRightAlignedString(320, height - 32, VFLAGS, va("PLTZ: %6d", stplyr->mo->pmomz>>FRACBITS));
+		if (cv_debug & DBG_RANDOMIZER) // randomizer testing
+		{
+			fixed_t peekres = P_RandomPeek();
+			peekres *= 10000;     // Change from fixed point
+			peekres >>= FRACBITS; // to displayable decimal
 
-		V_DrawRightAlignedString(320, height - 24, VFLAGS, va("MOMX: %6d", stplyr->rmomx>>FRACBITS));
-		V_DrawRightAlignedString(320, height - 16, VFLAGS, va("MOMY: %6d", stplyr->rmomy>>FRACBITS));
-		V_DrawRightAlignedString(320, height - 8,  VFLAGS, va("MOMZ: %6d", stplyr->mo->momz>>FRACBITS));
+			V_DrawDebugLine(va("Init: %08x", P_GetInitSeed()));
+			V_DrawDebugLine(va("Seed: %08x", P_GetRandSeed()));
+			V_DrawDebugLine(va("==  :    .%04d", peekres));
 
-		V_DrawRightAlignedString(320, height,      VFLAGS, va("SPEED: %6d", stplyr->speed>>FRACBITS));
+			height += dist;
+		}
 
-		height -= (112+dist);
-	}
+		if (cv_debug & DBG_DETAILED)
+		{
+#define V_DrawDebugFlag(f, str) V_DrawRightAlignedSmallString(w, height, VFLAGS|f, str);\
+								w -= 9
+			const fixed_t d = AngleFixed(stplyr->drawangle);
+			INT32 w = 320;
 
-	if (cv_debug & DBG_RANDOMIZER) // randomizer testing
-	{
-		fixed_t peekres = P_RandomPeek();
-		peekres *= 10000;     // Change from fixed point
-		peekres >>= FRACBITS; // to displayable decimal
+			V_DrawDebugLine(va("SHIELD: %5x", stplyr->powers[pw_shield]));
+			V_DrawDebugLine(va("SCALE: %5d%%", (stplyr->mo->scale*100)>>FRACBITS));
+			V_DrawDebugLine(va("CARRY: %5x", stplyr->powers[pw_carry]));
+			V_DrawDebugLine(va("AIR: %4d, %3d", stplyr->powers[pw_underwater], stplyr->powers[pw_spacetime]));
+			V_DrawDebugLine(va("ABILITY: %3d, %3d", stplyr->charability, stplyr->charability2));
+			V_DrawDebugLine(va("ACTIONSPD: %5d", stplyr->actionspd>>FRACBITS));
+			V_DrawDebugLine(va("PEEL: %3d", stplyr->dashmode));
+			V_DrawDebugLine(va("SCOREADD: %3d", stplyr->scoreadd));
 
-		V_DrawRightAlignedString(320, height - 16, VFLAGS, va("Init: %08x", P_GetInitSeed()));
-		V_DrawRightAlignedString(320, height - 8,  VFLAGS, va("Seed: %08x", P_GetRandSeed()));
-		V_DrawRightAlignedString(320, height,      VFLAGS, va("==  :    .%04d", peekres));
+			// Flags
+			V_DrawDebugFlag(((stplyr->pflags & PF_SHIELDABILITY)  ? V_GREENMAP : V_REDMAP), "SH");
+			V_DrawDebugFlag(((stplyr->pflags & PF_THOKKED)        ? V_GREENMAP : V_REDMAP), "TH");
+			V_DrawDebugFlag(((stplyr->pflags & PF_STARTDASH)      ? V_GREENMAP : V_REDMAP), "ST");
+			V_DrawDebugFlag(((stplyr->pflags & PF_SPINNING)       ? V_GREENMAP : V_REDMAP), "SP");
+			V_DrawDebugFlag(((stplyr->pflags & PF_NOJUMPDAMAGE)   ? V_GREENMAP : V_REDMAP), "ND");
+			V_DrawDebugFlag(((stplyr->pflags & PF_JUMPED)         ? V_GREENMAP : V_REDMAP), "JD");
+			V_DrawDebugFlag(((stplyr->pflags & PF_STARTJUMP)      ? V_GREENMAP : V_REDMAP), "SJ");
+			V_DrawDebugFlag(0, "PF/SF:");
+			height += h;
+			w = 320;
+			V_DrawDebugFlag(((stplyr->pflags & PF_INVIS)          ? V_GREENMAP : V_REDMAP), "*I");
+			V_DrawDebugFlag(((stplyr->pflags & PF_NOCLIP)         ? V_GREENMAP : V_REDMAP), "*C");
+			V_DrawDebugFlag(((stplyr->pflags & PF_GODMODE)        ? V_GREENMAP : V_REDMAP), "*G");
+			V_DrawDebugFlag(((stplyr->charflags & SF_SUPER)       ? V_GREENMAP : V_REDMAP), "SU");
+			V_DrawDebugFlag(((stplyr->pflags & PF_APPLYAUTOBRAKE) ? V_GREENMAP : V_REDMAP), "AA");
+			V_DrawDebugFlag(((stplyr->pflags & PF_SLIDING)        ? V_GREENMAP : V_REDMAP), "SL");
+			V_DrawDebugFlag(((stplyr->pflags & PF_BOUNCING)       ? V_GREENMAP : V_REDMAP), "BO");
+			V_DrawDebugFlag(((stplyr->pflags & PF_GLIDING)        ? V_GREENMAP : V_REDMAP), "GL");
+			height += h;
 
-		height -= (24+dist);
-	}
+			V_DrawDebugLine(va("CEILINGZ: %6d", stplyr->mo->ceilingz>>FRACBITS));
+			V_DrawDebugLine(va("FLOORZ: %6d", stplyr->mo->floorz>>FRACBITS));
 
-	if (cv_debug & DBG_MEMORY)
-	{
-		V_DrawRightAlignedString(320, height,     VFLAGS, va("Heap: %7sKB", sizeu1(Z_TotalUsage()>>10)));
+			V_DrawDebugLine(va("CMOMX: %6d", stplyr->cmomx>>FRACBITS));
+			V_DrawDebugLine(va("CMOMY: %6d", stplyr->cmomy>>FRACBITS));
+			V_DrawDebugLine(va("PMOMZ: %6d", stplyr->mo->pmomz>>FRACBITS));
+
+			w = 320;
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_APPLYPMOMZ)      ? V_GREENMAP : V_REDMAP), "AP");
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_SPRUNG)          ? V_GREENMAP : V_REDMAP), "SP");
+			//V_DrawDebugFlag(((stplyr->mo->eflags & MFE_PUSHED)          ? V_GREENMAP : V_REDMAP), "PU"); -- not relevant to players
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_GOOWATER)        ? V_GREENMAP : V_REDMAP), "GW");
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_VERTICALFLIP)    ? V_GREENMAP : V_REDMAP), "VF");
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_JUSTSTEPPEDDOWN) ? V_GREENMAP : V_REDMAP), "JS");
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_UNDERWATER)      ? V_GREENMAP : V_REDMAP), "UW");
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_TOUCHWATER)      ? V_GREENMAP : V_REDMAP), "TW");
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_JUSTHITFLOOR)    ? V_GREENMAP : V_REDMAP), "JH");
+			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_ONGROUND)        ? V_GREENMAP : V_REDMAP), "OG");
+			V_DrawDebugFlag(0, "MFE:");
+			height += h;
+
+			V_DrawDebugLine(va("MOMX: %6d", stplyr->rmomx>>FRACBITS));
+			V_DrawDebugLine(va("MOMY: %6d", stplyr->rmomy>>FRACBITS));
+			V_DrawDebugLine(va("MOMZ: %6d", stplyr->mo->momz>>FRACBITS));
+
+			V_DrawDebugLine(va("SPEED: %6d", stplyr->speed>>FRACBITS));
+
+			V_DrawDebugLine(va("DRAWANGLE: %6d", FixedInt(d)));
+
+			height += dist;
+#undef V_DrawDebugFlag
+		}
+
+		if (cv_debug & DBG_BASIC)
+		{
+			const fixed_t d = AngleFixed(stplyr->mo->angle);
+			V_DrawDebugLine(va("X: %6d", stplyr->mo->x>>FRACBITS));
+			V_DrawDebugLine(va("Y: %6d", stplyr->mo->y>>FRACBITS));
+			V_DrawDebugLine(va("Z: %6d", stplyr->mo->z>>FRACBITS));
+			V_DrawDebugLine(va("A: %6d", FixedInt(d)));
+
+			//height += dist;
+		}
 	}
 
-#undef VFLAGS
+#undef V_DrawDebugLine
 #undef dist
+#undef h
+#undef VFLAGS
 }
 
 static void ST_drawScore(void)
@@ -1917,8 +1982,8 @@ static void ST_drawTextHUD(void)
 		else
 			textHUDdraw(M_GetText("\x82""FIRE:""\x80 Enter game"))
 
-		textHUDdraw(M_GetText("\x82""SPIN:""\x80 Sink"))
-		textHUDdraw(M_GetText("\x82""JUMP:""\x80 Float"))
+		textHUDdraw(M_GetText("\x82""SPIN:""\x80 Lower"))
+		textHUDdraw(M_GetText("\x82""JUMP:""\x80 Rise"))
 
 		dof12 = true;
 		dospecheader = true;