diff --git a/src/p_map.c b/src/p_map.c
index 98a85e6141b53b567b0189009b28908e30124b02..c1e73e9f8605cc6d2e495051824306283a3429ef 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -2021,7 +2021,7 @@ static boolean PIT_CheckLine(line_t *ld)
 boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y)
 {
 	INT32 xl, xh, yl, yh, bx, by;
-	subsector_t *newsubsec = thing->subsector;
+	subsector_t *newsubsec;
 	boolean blockval = true;
 
 	ps_checkposition_calls.value.i++;
@@ -2045,6 +2045,8 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y)
 
 	if (thing->x != x || thing->y != y)
 		newsubsec = R_PointInSubsector(x, y);
+	else
+		newsubsec = thing->subsector;
 	ceilingline = blockingline = NULL;
 
 	// The base floor / ceiling is from the subsector