diff --git a/src/p_map.c b/src/p_map.c
index ed35b0cf1f56bca45b11d69ee2200753ad16d69f..9751856d06b3bf2cbeaf6ed86f10a5a8c4e2c6f8 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -985,7 +985,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
 				tmthing->player->powers[pw_carry] = CR_ROLLOUT;
 				P_SetTarget(&tmthing->tracer, thing);
 				P_SetObjectMomZ(thing, tmthing->momz, true);
-				return false;
+				return true;
 			}
 		}
 		else if (tmthing->type == thing->type)
@@ -1004,6 +1004,9 @@ static boolean PIT_CheckThing(mobj_t *thing)
 	{
 		if (tmthing->z > thing->z + thing->height || thing->z > tmthing->z + tmthing->height || !thing->health)
 			return true;
+		
+		if (thing == tmthing->target)
+			return true;
 
 		if (thing->flags & MF_SPRING)
 		{
@@ -1660,8 +1663,8 @@ static boolean PIT_CheckThing(mobj_t *thing)
 		}
 	}
 
-	if ((!tmthing->player) && (thing->player))
-		; // no solid thing should ever be able to step up onto a player
+	if ((tmthing->flags & MF_SPRING || tmthing->type == MT_STEAM) && (thing->player))
+		; // springs and gas jets should never be able to step up onto a player
 	// z checking at last
 	// Treat noclip things as non-solid!
 	else if ((thing->flags & (MF_SOLID|MF_NOCLIP)) == MF_SOLID