diff --git a/src/g_demo.cpp b/src/g_demo.cpp
index f126da4f9cbbd121c4339fe824f60459817cb1ed..db33917073ab8495d6ab1f930e4f78ad51a71ba6 100644
--- a/src/g_demo.cpp
+++ b/src/g_demo.cpp
@@ -165,6 +165,7 @@ demoghost *ghosts = NULL;
 // - 0x000A (Ring Racers v2.0)
 //   - A bug was preventing control after ending a drift.
 //     Older behavior is kept around for staff ghost compat.
+//   - Also, polyobject bounce-back was fixed!
 
 #define DEMOVERSION 0x000B
 
diff --git a/src/p_map.c b/src/p_map.c
index 84126fb8d3400e892cb873bd701d8f6911923190..bb7868dd44a22ca29359c0fa65dc8c7e678c3744 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -2186,6 +2186,8 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y, TryMoveResult_t *re
 		}
 	}
 
+	P_ClearTestLines();
+
 	// The bounding box is extended by MAXRADIUS
 	// because mobj_ts are grouped into mapblocks
 	// based on their origin point, and can overlap
@@ -2323,8 +2325,6 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y, TryMoveResult_t *re
 
 	validcount++;
 
-	P_ClearTestLines();
-
 	// check lines
 	for (bx = xl; bx <= xh; bx++)
 	{
diff --git a/src/p_polyobj.c b/src/p_polyobj.c
index 80f03d0f7339827689d6f483f8411f00b62b33e3..82eb95432ee1035b53f0a651c36ac5b48ca29132 100644
--- a/src/p_polyobj.c
+++ b/src/p_polyobj.c
@@ -201,6 +201,10 @@ boolean P_BBoxInsidePolyobj(polyobj_t *po, fixed_t *bbox)
 	{
 		if (P_BoxOnLineSide(bbox, po->lines[i]) == 0)
 			return false;
+		if (g_tm.sweep && !G_CompatLevel(0x000A))
+		{
+			P_TestLine(po->lines[i]);
+		}
 	}
 
 	return true;