diff --git a/src/r_segs.c b/src/r_segs.c
index ca24df586aa5011651c6f1e960dff944bb3bec64..9b1533daac612a19078fff4d149465b2be6d5d43 100644
--- a/src/r_segs.c
+++ b/src/r_segs.c
@@ -1903,9 +1903,11 @@ void R_StoreWallRange(INT32 start, INT32 stop)
 			&& backsector->ceilingpic == skyflatnum)
 		{
 #ifdef ESLOPE
-			worldtopslope = worldhighslope =
+			worldtopslope = max(worldtopslope, worldhighslope);
+			worldhighslope = worldtopslope;
 #endif
-			worldtop = worldhigh;
+			worldtop = max(worldtop, worldhigh);
+			worldhigh = worldtop;
 		}
 
 		ds_p->sprtopclip = ds_p->sprbottomclip = NULL;
@@ -2065,8 +2067,13 @@ void R_StoreWallRange(INT32 start, INT32 stop)
 			markceiling = false;
 		}
 
+#ifdef ESLOPE
+		if ((worldhigh <= worldbottom && worldhighslope <= worldbottomslope) ||
+		    (worldlow >= worldtop && worldlowslope >= worldtopslope))
+#else
 		if (backsector->ceilingheight <= frontsector->floorheight ||
 		    backsector->floorheight >= frontsector->ceilingheight)
+#endif
 		{
 			// closed door
 			markceiling = markfloor = true;