diff --git a/src/d_main.c b/src/d_main.c
index 397406293295211dfb4a9749c391c8a237544711..c4e22ed8a8c5ba1e9989ad77a815ebd583f384e7 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -649,14 +649,6 @@ void D_SRB2Loop(void)
 		}
 		else if (rendertimeout < entertic) // in case the server hang or netsplit
 		{
-			// Lagless camera! Yay!
-			if (gamestate == GS_LEVEL && netgame)
-			{
-				if (splitscreen && camera2.chase)
-					P_MoveChaseCamera(&players[secondarydisplayplayer], &camera2, false);
-				if (camera.chase)
-					P_MoveChaseCamera(&players[displayplayer], &camera, false);
-			}
 			D_Display();
 
 			if (moviemode)
diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index e80d07b767b6874cd99d83b7e651446b90b0ef69..0dbcb1c048c7a3f270cb786ed9c0f5fef55504d1 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -373,7 +373,7 @@ consvar_t cv_runscripts = {"runscripts", "Yes", 0, CV_YesNo, NULL, 0, NULL, NULL
 consvar_t cv_pause = {"pausepermission", "Server", CV_NETVAR, pause_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
 consvar_t cv_mute = {"mute", "Off", CV_NETVAR|CV_CALL, CV_OnOff, Mute_OnChange, 0, NULL, NULL, 0, 0, NULL};
 
-consvar_t cv_sleep = {"cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL};
+consvar_t cv_sleep = {"cpusleep", "0", CV_SAVE|CV_NOSHOWHELP, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL};
 
 char timedemo_name[256];
 boolean timedemo_csv;
diff --git a/src/doomdef.h b/src/doomdef.h
index d13ff9bc04542a69d3a9fae40b506bd63fa077b4..5b3721fd82975f6d0024d925a2f618207be7f531 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -370,7 +370,7 @@ typedef enum
 // State updates, number of tics / second.
 // NOTE: used to setup the timer rate, see I_StartupTimer().
 #define TICRATE 35
-#define NEWTICRATERATIO 1 // try 4 for 140 fps :)
+#define NEWTICRATERATIO 2 // try 4 for 140 fps :)
 #define NEWTICRATE (TICRATE*NEWTICRATERATIO)
 
 #define MUSICRATE 1000 // sound timing is calculated by milliseconds
diff --git a/src/f_wipe.c b/src/f_wipe.c
index b0982a957a8525a69bc5d38c7aefc0e3852b2dcf..a695003c63da979e28f240ba161c554290fda2bc 100644
--- a/src/f_wipe.c
+++ b/src/f_wipe.c
@@ -416,7 +416,7 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
 	for (;;)
 	{
 		// get fademask first so we can tell if it exists or not
-		fmask = F_GetFadeMask(wipetype, wipeframe++);
+		fmask = F_GetFadeMask(wipetype, wipeframe);
 		if (!fmask)
 			break;
 
@@ -425,6 +425,9 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
 			I_Sleep();
 		lastwipetic = nowtime;
 
+		if (nowtime % NEWTICRATERATIO == 0)
+			wipeframe++;
+
 #ifdef HWRENDER
 		if (rendermode == render_opengl)
 		{
diff --git a/src/g_game.c b/src/g_game.c
index 2a12dd298093c091338762fba50b59c711c8eb19..38187ece0284d32892d9a4f2eca2a11cf549127e 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -979,7 +979,7 @@ angle_t localangle, localangle2;
 
 static fixed_t forwardmove[2] = {25<<FRACBITS>>16, 50<<FRACBITS>>16};
 static fixed_t sidemove[2] = {25<<FRACBITS>>16, 50<<FRACBITS>>16}; // faster!
-static fixed_t angleturn[3] = {640, 1280, 320}; // + slow turn
+static fixed_t angleturn[3] = {640/NEWTICRATERATIO, 1280/NEWTICRATERATIO, 320/NEWTICRATERATIO}; // + slow turn
 
 void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
 {
diff --git a/src/g_game.h b/src/g_game.h
index e7f4a4677c2a95c19edde0c76a15471a495e6081..f89fd1e2cf6cf08a93586ef76c6e451c9b1d81bc 100644
--- a/src/g_game.h
+++ b/src/g_game.h
@@ -79,7 +79,7 @@ extern consvar_t cv_ghost_bestscore, cv_ghost_besttime, cv_ghost_bestrings, cv_g
 // mouseaiming (looking up/down with the mouse or keyboard)
 #define KB_LOOKSPEED (1<<25)
 #define MAXPLMOVE (50)
-#define SLOWTURNTICS (6)
+#define SLOWTURNTICS (6*NEWTICRATERATIO)
 
 // build an internal map name MAPxx from map number
 const char *G_BuildMapName(INT32 map);
diff --git a/src/p_local.h b/src/p_local.h
index 286d7201f341504b2832932ea0c90b1ac1b993c7..d7191cb559f96c96eaeb38bdc968e5cc1006afca 100644
--- a/src/p_local.h
+++ b/src/p_local.h
@@ -280,6 +280,7 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state);
 void P_RunShields(void);
 void P_RunOverlays(void);
 void P_HandleMinecartSegments(mobj_t *mobj);
+void P_ClearShieldsAndOverlays(void);
 void P_MobjThinker(mobj_t *mobj);
 boolean P_RailThinker(mobj_t *mobj);
 void P_PushableThinker(mobj_t *mobj);
diff --git a/src/p_mobj.c b/src/p_mobj.c
index dea4a7a4d2528217d12b62f44cd5726ad2506bfd..bbb43c63b9005fa9d968e834f383fc998252897a 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -482,6 +482,9 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
 		for (;(state = seenstate[i]) > S_NULL; i = state - 1)
 			seenstate[i] = S_NULL; // erase memory of states
 
+#if NEWTICRATERATIO != 1
+	mobj->tics *= NEWTICRATERATIO;
+#endif
 	return true;
 }
 
@@ -1523,6 +1526,11 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
 			gravityadd = -gravityadd;
 			mo->eflags ^= MFE_VERTICALFLIP;
 		}
+
+#if NEWTICRATERATIO != 1
+		gravityadd /= NEWTICRATERATIO;
+#endif		
+
 		if (wasflip == !(mo->eflags & MFE_VERTICALFLIP)) // note!! == ! is not equivalent to != here - turns numeric into bool this way
 			P_PlayerFlip(mo);
 	}
@@ -1673,8 +1681,13 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy)
 			if (twodlevel || player->mo->flags2 & MF2_TWOD) // Otherwise handled in P_3DMovement
 			{
 				const fixed_t ns = FixedDiv(549*ORIG_FRICTION,500*FRACUNIT);
+#if NEWTICRATERATIO != 1
+				mo->momx = FixedMul(mo->momx, FRACUNIT - (FRACUNIT - ns) / NEWTICRATERATIO);
+				mo->momy = FixedMul(mo->momy, FRACUNIT - (FRACUNIT - ns) / NEWTICRATERATIO);
+#else
 				mo->momx = FixedMul(mo->momx, ns);
 				mo->momy = FixedMul(mo->momy, ns);
+#endif
 			}
 		}
 		else if (abs(player->rmomx) < FixedMul(STOPSPEED, mo->scale)
@@ -1693,6 +1706,18 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy)
 		}
 		else if (!(mo->eflags & MFE_SPRUNG))
 		{
+#if NEWTICRATERATIO != 1
+			if (oldx == mo->x && oldy == mo->y) // didn't go anywhere
+			{
+				mo->momx = FixedMul(mo->momx, FRACUNIT - (FRACUNIT - ORIG_FRICTION) / NEWTICRATERATIO);
+				mo->momy = FixedMul(mo->momy, FRACUNIT - (FRACUNIT - ORIG_FRICTION) / NEWTICRATERATIO);
+			}
+			else
+			{
+				mo->momx = FixedMul(mo->momx, FRACUNIT - (FRACUNIT - mo->friction) / NEWTICRATERATIO);
+				mo->momy = FixedMul(mo->momy, FRACUNIT - (FRACUNIT - mo->friction) / NEWTICRATERATIO);
+			}
+#else
 			if (oldx == mo->x && oldy == mo->y) // didn't go anywhere
 			{
 				mo->momx = FixedMul(mo->momx, ORIG_FRICTION);
@@ -1703,6 +1728,7 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy)
 				mo->momx = FixedMul(mo->momx, mo->friction);
 				mo->momy = FixedMul(mo->momy, mo->friction);
 			}
+#endif
 
 			mo->friction = ORIG_FRICTION;
 		}
@@ -1861,6 +1887,14 @@ void P_XYMovement(mobj_t *mo)
 	xmove = mo->momx;
 	ymove = mo->momy;
 
+#if NEWTICRATERATIO != 1
+	if (player)
+	{
+		xmove /= NEWTICRATERATIO;
+		ymove /= NEWTICRATERATIO;
+	}
+#endif
+
 	oldx = mo->x;
 	oldy = mo->y;
 
@@ -2910,7 +2944,7 @@ static void P_PlayerZMovement(mobj_t *mo)
 		mo->eflags &= ~MFE_APPLYPMOMZ;
 	}
 
-	mo->z += mo->momz;
+	mo->z += mo->momz / NEWTICRATERATIO;
 	onground = P_IsObjectOnGround(mo);
 
 	// Have player fall through floor?
@@ -6866,9 +6900,9 @@ void P_RunShields(void)
 	for (i = 0; i < numshields; i++)
 	{
 		P_ShieldLook(shields[i], shields[i]->threshold);
-		P_SetTarget(&shields[i], NULL);
+		//P_SetTarget(&shields[i], NULL);
 	}
-	numshields = 0;
+	//numshields = 0;
 }
 
 static boolean P_AddShield(mobj_t *thing)
@@ -6917,7 +6951,7 @@ void P_RunOverlays(void)
 
 		// grab next in chain, then unset the chain target
 		next = mo->hnext;
-		P_SetTarget(&mo->hnext, NULL);
+		//P_SetTarget(&mo->hnext, NULL);
 
 		if (!mo->target)
 			continue;
@@ -6976,7 +7010,7 @@ void P_RunOverlays(void)
 			P_SetThingPosition(mo);
 		P_CheckPosition(mo, mo->x, mo->y);
 	}
-	P_SetTarget(&overlaycap, NULL);
+	//P_SetTarget(&overlaycap, NULL);
 }
 
 // Called only when MT_OVERLAY thinks.
@@ -7015,6 +7049,27 @@ static void P_RemoveOverlay(mobj_t *thing)
 	}
 }
 
+void P_ClearShieldsAndOverlays(void)
+{
+	INT32 i;
+    mobj_t *mo, *next = NULL;
+
+    // clear overlay list
+    for (mo = overlaycap; mo; mo = next)
+    {
+        // grab next in chain, then unset the chain target
+        next = mo->hnext;
+        P_SetTarget(&mo->hnext, NULL);
+    }
+    P_SetTarget(&overlaycap, NULL);
+
+	// clear shields list
+	for (i = 0; i < numshields; i++)
+		P_SetTarget(&shields[i], NULL);
+
+    numshields = 0;
+}
+
 void A_BossDeath(mobj_t *mo);
 // AI for the Koopa boss.
 static void P_KoopaThinker(mobj_t *koopa)
diff --git a/src/p_tick.c b/src/p_tick.c
index e0f60bd2256d74455de893c85fac2584d94fda75..68a03bf8762bdf8167ba0040e2a828384950917c 100644
--- a/src/p_tick.c
+++ b/src/p_tick.c
@@ -334,6 +334,14 @@ static inline void P_RunThinkers(void)
 
 }
 
+static inline void P_RunPlayerThinkers(void)
+{
+	UINT8 i;
+	for (i = 0; i < MAXPLAYERS; i++)
+		if (playeringame[i] && players[i].mo)
+			players[i].mo->thinker.function.acp1(players[i].mo);
+}
+
 //
 // P_DoAutobalanceTeams()
 //
@@ -618,21 +626,18 @@ void P_Ticker(boolean run)
 	if (!S_MusicPaused())
 		S_AdjustMusicStackTics();
 
-	postimgtype = postimgtype2 = postimg_none;
-
 	P_MapStart();
 
-	if (run)
-	{
-		if (demorecording)
-			G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0);
-		if (demoplayback)
-			G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);
+	postimgtype = postimgtype2 = postimg_none;
 
-		for (i = 0; i < MAXPLAYERS; i++)
-			if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))
-				P_PlayerThink(&players[i]);
-	}
+	if (demorecording)
+		G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0);
+	if (demoplayback)
+		G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);
+
+	for (i = 0; i < MAXPLAYERS; i++)
+		if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))
+			P_PlayerThink(&players[i]);
 
 	// Keep track of how long they've been playing!
 	if (!demoplayback) // Don't increment if a demo is playing.
@@ -643,20 +648,23 @@ void P_Ticker(boolean run)
 
 	if (runemeraldmanager)
 		P_EmeraldManager(); // Power stone mode
-
+	
 	if (run)
 	{
+		P_ClearShieldsAndOverlays();
 		P_RunThinkers();
+	}
+	else
+		P_RunPlayerThinkers();
 
-		// Run any "after all the other thinkers" stuff
-		for (i = 0; i < MAXPLAYERS; i++)
-			if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))
-				P_PlayerAfterThink(&players[i]);
+	// Run any "after all the other thinkers" stuff
+	for (i = 0; i < MAXPLAYERS; i++)
+		if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))
+			P_PlayerAfterThink(&players[i]);
 
 #ifdef HAVE_BLUA
-		LUAh_ThinkFrame();
+	LUAh_ThinkFrame();
 #endif
-	}
 
 	// Run shield positioning
 	P_RunShields();
@@ -728,6 +736,12 @@ void P_Ticker(boolean run)
 			G_GhostTicker();
 	}
 
+	// Always move the camera.
+	if (splitscreen && camera2.chase)
+		P_MoveChaseCamera(&players[secondarydisplayplayer], &camera2, false);
+	if (camera.chase)
+		P_MoveChaseCamera(&players[displayplayer], &camera, false);
+
 	P_MapEnd();
 
 //	Z_CheckMemCleanup();
@@ -761,6 +775,7 @@ void P_PreTicker(INT32 frames)
 				memcpy(&players[i].cmd, &temptic, sizeof(ticcmd_t));
 			}
 
+		P_ClearShieldsAndOverlays();
 		P_RunThinkers();
 
 		// Run any "after all the other thinkers" stuff
diff --git a/src/p_user.c b/src/p_user.c
index ea42a2c360b86449c688133c33631d8508b44e77..1f6ba72fb8323633f0cbc282db9e54e67a291d22 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -5699,6 +5699,9 @@ static void P_2dMovement(player_t *player)
 	angle_t movepushangle = 0;
 	fixed_t normalspd = FixedMul(player->normalspeed, player->mo->scale);
 
+	if ((gametic % NEWTICRATERATIO) != 0)
+		return;
+
 	cmd = &player->cmd;
 
 	if (player->exiting || player->pflags & PF_STASIS)
@@ -5885,6 +5888,9 @@ static void P_3dMovement(player_t *player)
 	totalthrust.z = FRACUNIT*P_MobjFlip(player->mo)/3; // A bit of extra push-back on slopes
 #endif // ESLOPE
 
+	if ((gametic % NEWTICRATERATIO) != 0)
+		return;
+
 	// Get the old momentum; this will be needed at the end of the function! -SH
 	oldMagnitude = R_PointToDist2(player->mo->momx - player->cmomx, player->mo->momy - player->cmomy, 0, 0);
 
@@ -7106,9 +7112,9 @@ static void P_NiGHTSMovement(player_t *player)
 
 	if (player->drillmeter > 96*20)
 		player->drillmeter = 96*20;
-
-	if (player->drilldelay)
-		player->drilldelay--;
+	if (gametic % NEWTICRATERATIO == 0)
+		if (player->drilldelay)
+			player->drilldelay--;
 
 	if (!(cmd->buttons & BT_JUMP))
 	{
@@ -7135,14 +7141,16 @@ static void P_NiGHTSMovement(player_t *player)
 		&& !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS1]
 			&& player->mo->state <= &states[S_PLAY_NIGHTS_TRANS6])
 		&& !player->exiting)
-			player->nightstime--;
+			if (gametic % NEWTICRATERATIO == 0)
+				player->nightstime--;
 	}
 	else if (gametype != GT_RACE && gametype != GT_COMPETITION
 	&& !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS1]
 			&& player->mo->state <= &states[S_PLAY_NIGHTS_TRANS6])
 	&& !(player->capsule && player->capsule->reactiontime)
 	&& !player->exiting)
-		player->nightstime--;
+		if (gametic % NEWTICRATERATIO == 0)
+			player->nightstime--;
 
 	if (!player->nightstime)
 	{
@@ -7405,9 +7413,11 @@ static void P_NiGHTSMovement(player_t *player)
 		{
 			if (player->speed < MAXDRILLSPEED)
 				player->speed += 150;
-
-			if (--player->drillmeter == 0)
-				player->drilldelay = TICRATE*2;
+			if (gametic % NEWTICRATERATIO == 0)
+			{
+				if (--player->drillmeter == 0)
+					player->drilldelay = TICRATE * 2;
+			}
 		}
 
 		if (player->speed < 0)
@@ -10248,8 +10258,8 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
 	}
 	else
 	{
-		thiscam->momx = FixedMul(x - thiscam->x, camspeed);
-		thiscam->momy = FixedMul(y - thiscam->y, camspeed);
+		thiscam->momx = FixedMul(x - thiscam->x, camspeed / NEWTICRATERATIO);
+		thiscam->momy = FixedMul(y - thiscam->y, camspeed / NEWTICRATERATIO);
 
 		if (GETSECSPECIAL(thiscam->subsector->sector->special, 1) == 6
 			&& thiscam->z < thiscam->subsector->sector->floorheight + 256*FRACUNIT
@@ -10258,7 +10268,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
 			thiscam->momz = 0; // Don't go down a death pit
 		}
 		else
-			thiscam->momz = FixedMul(z - thiscam->z, camspeed);
+			thiscam->momz = FixedMul(z - thiscam->z, camspeed / NEWTICRATERATIO);
 	}
 
 	// compute aming to look the viewed point
@@ -11421,7 +11431,8 @@ void P_PlayerThink(player_t *player)
 	// If it is set, start subtracting
 	// Don't allow it to go back to 0
 	if (player->exiting > 1 && player->exiting < 3*TICRATE)
-		player->exiting--;
+		if (gametic % NEWTICRATERATIO == 0)
+			player->exiting--;
 
 	if (player->exiting && countdown2)
 		player->exiting = 5;
@@ -11617,8 +11628,11 @@ void P_PlayerThink(player_t *player)
 
 	if (player->linktimer && !player->powers[pw_nights_linkfreeze])
 	{
-		if (--player->linktimer <= 0) // Link timer
-			player->linkcount = 0;
+		if (gametic % NEWTICRATERATIO == 0)
+		{
+			if (--player->linktimer <= 0) // Link timer
+				player->linkcount = 0;
+		}
 	}
 
 	// Move around.
@@ -11922,6 +11936,10 @@ void P_PlayerThink(player_t *player)
 	// Counters, time dependent power ups.
 	// Time Bonus & Ring Bonus count settings
 
+	// Only do these counters at 35 FPS
+	if ((gametic % NEWTICRATERATIO) != 0)
+		return;
+
 	if (player->ammoremovaltimer)
 	{
 		if (--player->ammoremovaltimer == 0)
@@ -12214,12 +12232,6 @@ void P_PlayerAfterThink(player_t *player)
 
 	if (player->playerstate == PST_DEAD)
 	{
-		// camera may still move when guy is dead
-		//if (!netgame)
-		{
-			if (thiscam && thiscam->chase)
-				P_MoveChaseCamera(player, thiscam, false);
-		}
 		if (player->followmobj)
 		{
 			P_RemoveMobj(player->followmobj);
@@ -12619,8 +12631,6 @@ void P_PlayerAfterThink(player_t *player)
 				player->viewz = player->mo->z + player->mo->height - player->viewheight;
 			else
 				player->viewz = player->mo->z + player->viewheight;
-			if (server || addedtogame)
-				P_MoveChaseCamera(player, thiscam, false); // calculate the camera movement
 		}
 	}
 
diff --git a/src/screen.c b/src/screen.c
index 3c4b2bc62181405a5438bb7e0dc6a1f8736d038b..3b2c8e24cebf8d42a1d6316e7abe45344060baef 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -397,7 +397,7 @@ boolean SCR_IsAspectCorrect(INT32 width, INT32 height)
 
 // XMOD FPS display
 // moved out of os-specific code for consistency
-static boolean fpsgraph[TICRATE];
+static boolean fpsgraph[NEWTICRATE];
 static tic_t lasttic;
 
 void SCR_DisplayTicRate(void)
@@ -408,22 +408,22 @@ void SCR_DisplayTicRate(void)
 	INT32 ticcntcolor = 0;
 	const INT32 h = vid.height-(8*vid.dupy);
 
-	for (i = lasttic + 1; i < TICRATE+lasttic && i < ontic; ++i)
-		fpsgraph[i % TICRATE] = false;
+	for (i = lasttic + 1; i < NEWTICRATE+lasttic && i < ontic; ++i)
+		fpsgraph[i % NEWTICRATE] = false;
 
-	fpsgraph[ontic % TICRATE] = true;
+	fpsgraph[ontic % NEWTICRATE] = true;
 
-	for (i = 0;i < TICRATE;++i)
+	for (i = 0;i < NEWTICRATE;++i)
 		if (fpsgraph[i])
 			++totaltics;
 
-	if (totaltics <= TICRATE/2) ticcntcolor = V_REDMAP;
-	else if (totaltics == TICRATE) ticcntcolor = V_GREENMAP;
+	if (totaltics <= NEWTICRATE/2) ticcntcolor = V_REDMAP;
+	else if (totaltics == NEWTICRATE) ticcntcolor = V_GREENMAP;
 
 	V_DrawString(vid.width-(72*vid.dupx), h,
 		V_YELLOWMAP|V_NOSCALESTART|V_USERHUDTRANS, "FPS:");
 	V_DrawString(vid.width-(40*vid.dupx), h,
-		ticcntcolor|V_NOSCALESTART|V_USERHUDTRANS, va("%02d/%02u", totaltics, TICRATE));
+		ticcntcolor|V_NOSCALESTART|V_USERHUDTRANS, va("%02d/%02u", totaltics, NEWTICRATE));
 
 	lasttic = ontic;
 }
diff --git a/src/sdl/Srb2SDL-vc10.vcxproj b/src/sdl/Srb2SDL-vc10.vcxproj
index 0d1fa1a4b5df7947be1559b1663175c592a087d3..33b33f66b6ae6dfe873f4bdd236cce5875d729ec 100644
--- a/src/sdl/Srb2SDL-vc10.vcxproj
+++ b/src/sdl/Srb2SDL-vc10.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
     <ProjectConfiguration Include="Debug|ARM">
@@ -440,7 +440,7 @@
     </ClCompile>
     <ClCompile Include="..\r_main.c" />
     <ClCompile Include="..\r_plane.c" />
-	<ClCompile Include="..\r_patch.c" />
+  <ClCompile Include="..\r_patch.c" />
     <ClCompile Include="..\r_portal.c" />
     <ClCompile Include="..\r_segs.c" />
     <ClCompile Include="..\r_sky.c" />
diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c
index c876a323f3fbbce1b4a716994cc92a34a09c8913..a3d316c17a8738fd60d663dce7d0e8856c90dcbf 100644
--- a/src/sdl/i_video.c
+++ b/src/sdl/i_video.c
@@ -96,7 +96,7 @@ rendermode_t rendermode=render_soft;
 boolean highcolor = false;
 
 // synchronize page flipping with screen refresh
-consvar_t cv_vidwait = {"vid_wait", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
+consvar_t cv_vidwait = {"vid_wait", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
 static consvar_t cv_stretch = {"stretch", "Off", CV_SAVE|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
 
 UINT8 graphics_started = 0; // Is used in console.c and screen.c
diff --git a/src/v_video.c b/src/v_video.c
index 0e741df9fc3dc003549aa8b8c1a24d3a4c01b71a..22b398f10ec67cd84c8cce1e63ea070ede6b5da3 100644
--- a/src/v_video.c
+++ b/src/v_video.c
@@ -3147,7 +3147,7 @@ void V_DoPostProcessor(INT32 view, postimg_t type, INT32 param)
 		UINT8 *tmpscr = screens[4];
 		UINT8 *srcscr = screens[0];
 		INT32 y;
-		angle_t disStart = (leveltime * 128) & FINEMASK; // in 0 to FINEANGLE
+		angle_t disStart = (leveltime * 128 / NEWTICRATERATIO) & FINEMASK; // in 0 to FINEANGLE
 		INT32 newpix;
 		INT32 sine;
 		//UINT8 *transme = transtables + ((tr_trans50-1)<<FF_TRANSSHIFT);