diff --git a/src/p_tick.c b/src/p_tick.c
index f009ecc2c15d589983dcff5c4ee79c859c78c491..bc70c3324cebf3a458d1e37931df5a85c32c2989 100644
--- a/src/p_tick.c
+++ b/src/p_tick.c
@@ -303,6 +303,19 @@ static inline void P_RunThinkers(void)
 	}
 }
 
+static inline void P_RunPlayerThinkers(void)
+{
+	for (currentthinker = thinkercap.next; currentthinker != &thinkercap; currentthinker = currentthinker->next)
+	{
+		if (currentthinker->function.acp1 == (actionf_p1)P_MobjThinker)
+		{
+			mobj_t *mobj = (mobj_t *)currentthinker;
+			if (mobj->type == MT_PLAYER)
+				currentthinker->function.acp1(currentthinker);
+		}
+	}
+}
+
 //
 // P_DoAutobalanceTeams()
 //
@@ -592,19 +605,16 @@ void P_Ticker(boolean run)
 
 	P_MapStart();
 
-	if (run)
-	{
-		postimgtype = postimgtype2 = postimg_none;
+	postimgtype = postimgtype2 = postimg_none;
 
-		if (demorecording)
-			G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0);
-		if (demoplayback)
-			G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);
+	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]);
-	}
+	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!
 	totalplaytime++;
@@ -616,18 +626,18 @@ void P_Ticker(boolean run)
 		P_EmeraldManager(); // Power stone mode
 
 	if (run)
-	{
 		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();