diff --git a/src/actionspecials.h b/src/actionspecials.h
index 6d9d2feb8..4ab222b2c 100644
--- a/src/actionspecials.h
+++ b/src/actionspecials.h
@@ -176,7 +176,7 @@ DEFINE_SPECIAL(Sector_SetCeilingScale, 188, 5, 5, 5)
 DEFINE_SPECIAL(Sector_SetFloorScale, 189, 5, 5, 5)
 DEFINE_SPECIAL(Static_Init, 190, -1, -1, 4)
 DEFINE_SPECIAL(SetPlayerProperty, 191, 3, 3, 3)
-DEFINE_SPECIAL(Ceiling_LowerToHighestFloor, 192, 2, 4, 4)
+DEFINE_SPECIAL(Ceiling_LowerToHighestFloor, 192, 2, 4, 5)
 DEFINE_SPECIAL(Ceiling_LowerInstant, 193, 3, 5, 5)
 DEFINE_SPECIAL(Ceiling_RaiseInstant, 194, 3, 4, 4)
 DEFINE_SPECIAL(Ceiling_CrushRaiseAndStayA, 195, 4, 5, 5)
@@ -222,7 +222,7 @@ DEFINE_SPECIAL(Light_MaxNeighbor, 234, 1, 1, 1)
 DEFINE_SPECIAL(Floor_TransferTrigger, 235, 1, 1, 1)
 DEFINE_SPECIAL(Floor_TransferNumeric, 236, 1, 1, 1)
 DEFINE_SPECIAL(ChangeCamera, 237, 3, 3, 3)
-DEFINE_SPECIAL(Floor_RaiseToLowestCeiling, 238, 2, 4, 4)
+DEFINE_SPECIAL(Floor_RaiseToLowestCeiling, 238, 2, 4, 5)
 DEFINE_SPECIAL(Floor_RaiseByValueTxTy, 239, 3, 3, 3)
 DEFINE_SPECIAL(Floor_RaiseByTexture, 240, 2, 4, 4)
 DEFINE_SPECIAL(Floor_LowerToLowestTxTy, 241, 2, 2, 2)
@@ -238,21 +238,21 @@ DEFINE_SPECIAL(Floor_Donut, 250, 3, 3, 3)
 DEFINE_SPECIAL(FloorAndCeiling_LowerRaise, 251, 3, 4, 4)
 DEFINE_SPECIAL(Ceiling_RaiseToNearest, 252, 2, 3, 3)
 DEFINE_SPECIAL(Ceiling_LowerToLowest, 253, 2, 4, 4)
-DEFINE_SPECIAL(Ceiling_LowerToFloor, 254, 2, 4, 4)
+DEFINE_SPECIAL(Ceiling_LowerToFloor, 254, 2, 4, 5)
 DEFINE_SPECIAL(Ceiling_CrushRaiseAndStaySilA, 255, 4, 5, 5)
 
 DEFINE_SPECIAL(Floor_LowerToHighestEE, 256, 2, 3, 3)
 DEFINE_SPECIAL(Floor_RaiseToLowest, 257, 1, 3, 3)
 DEFINE_SPECIAL(Floor_LowerToLowestCeiling, 258, 2, 3, 3)
-DEFINE_SPECIAL(Floor_RaiseToCeiling, 259, 2, 4, 4)
-DEFINE_SPECIAL(Floor_ToCeilingInstant, 260, 1, 3, 3)
+DEFINE_SPECIAL(Floor_RaiseToCeiling, 259, 2, 4, 5)
+DEFINE_SPECIAL(Floor_ToCeilingInstant, 260, 1, 3, 4)
 DEFINE_SPECIAL(Floor_LowerByTexture, 261, 2, 3, 3)
 DEFINE_SPECIAL(Ceiling_RaiseToHighest, 262, 2, 3, 3)
 DEFINE_SPECIAL(Ceiling_ToHighestInstant, 263, 1, 3, 3)
 DEFINE_SPECIAL(Ceiling_LowerToNearest, 264, 2, 4, 4)
 DEFINE_SPECIAL(Ceiling_RaiseToLowest, 265, 2, 3, 3)
 DEFINE_SPECIAL(Ceiling_RaiseToHighestFloor, 266, 2, 3, 3)
-DEFINE_SPECIAL(Ceiling_ToFloorInstant, 267, 1, 3, 3)
+DEFINE_SPECIAL(Ceiling_ToFloorInstant, 267, 1, 3, 4)
 DEFINE_SPECIAL(Ceiling_RaiseByTexture, 268, 2, 3, 3)
 DEFINE_SPECIAL(Ceiling_LowerByTexture, 269, 2, 4, 4)
 DEFINE_SPECIAL(Stairs_BuildDownDoom, 270, 5, 5, 5)
diff --git a/src/p_ceiling.cpp b/src/p_ceiling.cpp
index 8a0c8f9ef..c635d9743 100644
--- a/src/p_ceiling.cpp
+++ b/src/p_ceiling.cpp
@@ -309,7 +309,7 @@ bool P_CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int t
 		break;
 
 	case DCeiling::ceilLowerToHighestFloor:
-		targheight = sec->FindHighestFloorSurrounding (&spot);
+		targheight = sec->FindHighestFloorSurrounding (&spot) + height;
 		ceiling->m_BottomHeight = sec->ceilingplane.PointToDist (spot, targheight);
 		ceiling->m_Direction = -1;
 		break;
@@ -359,13 +359,13 @@ bool P_CreateCeiling(sector_t *sec, DCeiling::ECeiling type, line_t *line, int t
 		break;
 
 	case DCeiling::ceilLowerToFloor:
-		targheight = sec->FindHighestFloorPoint (&spot);
+		targheight = sec->FindHighestFloorPoint (&spot) + height;
 		ceiling->m_BottomHeight = sec->ceilingplane.PointToDist (spot, targheight);
 		ceiling->m_Direction = -1;
 		break;
 
 	case DCeiling::ceilRaiseToFloor:	// [RH] What's this for?
-		targheight = sec->FindHighestFloorPoint (&spot);
+		targheight = sec->FindHighestFloorPoint (&spot) + height;
 		ceiling->m_TopHeight = sec->ceilingplane.PointToDist (spot, targheight);
 		ceiling->m_Direction = 1;
 		break;
diff --git a/src/p_floor.cpp b/src/p_floor.cpp
index 3f2b06f95..10bcf6d7e 100644
--- a/src/p_floor.cpp
+++ b/src/p_floor.cpp
@@ -387,13 +387,13 @@ bool P_CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line,
 
 	case DFloor::floorRaiseToCeiling:
 		floor->m_Direction = 1;
-		newheight = sec->FindLowestCeilingPoint(&spot);
+		newheight = sec->FindLowestCeilingPoint(&spot) - height;
 		floor->m_FloorDestDist = sec->floorplane.PointToDist(spot, newheight);
 		break;
 
 	case DFloor::floorLowerToLowestCeiling:
 		floor->m_Direction = -1;
-		newheight = sec->FindLowestCeilingSurrounding(&spot);
+		newheight = sec->FindLowestCeilingSurrounding(&spot) - height;
 		floor->m_FloorDestDist = sec->floorplane.PointToDist(spot, newheight);
 		break;
 
@@ -406,7 +406,7 @@ bool P_CreateFloor(sector_t *sec, DFloor::EFloor floortype, line_t *line,
 	case DFloor::floorLowerToCeiling:
 		// [RH] Essentially instantly raises the floor to the ceiling
 		floor->m_Direction = -1;
-		newheight = sec->FindLowestCeilingPoint(&spot);
+		newheight = sec->FindLowestCeilingPoint(&spot) - height;
 		floor->m_FloorDestDist = sec->floorplane.PointToDist(spot, newheight);
 		break;
 
diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp
index 307529636..dc6170c24 100644
--- a/src/p_lnspec.cpp
+++ b/src/p_lnspec.cpp
@@ -420,9 +420,9 @@ FUNC(LS_Floor_RaiseInstant)
 }
 
 FUNC(LS_Floor_ToCeilingInstant)
-// Floor_ToCeilingInstant (tag, change, crush)
+// Floor_ToCeilingInstant (tag, change, crush, gap)
 {
-	return EV_DoFloor (DFloor::floorLowerToCeiling, ln, arg0, 0, 0, CRUSH(arg2), CHANGE(arg1), true);
+	return EV_DoFloor (DFloor::floorLowerToCeiling, ln, arg0, 0, arg3, CRUSH(arg2), CHANGE(arg1), true);
 }
 
 FUNC(LS_Floor_MoveToValueTimes8)
@@ -448,7 +448,7 @@ FUNC(LS_Floor_RaiseToLowestCeiling)
 FUNC(LS_Floor_LowerToLowestCeiling)
 // Floor_LowerToLowestCeiling (tag, speed, change)
 {
-	return EV_DoFloor (DFloor::floorLowerToLowestCeiling, ln, arg0, SPEED(arg1), 0, -1, CHANGE(arg2), true);
+	return EV_DoFloor (DFloor::floorLowerToLowestCeiling, ln, arg0, SPEED(arg1), arg4, -1, CHANGE(arg2), true);
 }
 
 FUNC(LS_Floor_RaiseByTexture)
@@ -464,9 +464,9 @@ FUNC(LS_Floor_LowerByTexture)
 }
 
 FUNC(LS_Floor_RaiseToCeiling)
-// Floor_RaiseToCeiling (tag, speed, change, crush)
+// Floor_RaiseToCeiling (tag, speed, change, crush, gap)
 {
-	return EV_DoFloor (DFloor::floorRaiseToCeiling, ln, arg0, SPEED(arg1), 0, CRUSH(arg3), CHANGE(arg2), true);
+	return EV_DoFloor (DFloor::floorRaiseToCeiling, ln, arg0, SPEED(arg1), arg4, CRUSH(arg3), CHANGE(arg2), true);
 }
 
 FUNC(LS_Floor_RaiseByValueTxTy)
@@ -706,9 +706,9 @@ FUNC(LS_Ceiling_MoveToValue)
 }
 
 FUNC(LS_Ceiling_LowerToHighestFloor)
-// Ceiling_LowerToHighestFloor (tag, speed, change, crush)
+// Ceiling_LowerToHighestFloor (tag, speed, change, crush, gap)
 {
-	return EV_DoCeiling (DCeiling::ceilLowerToHighestFloor, ln, arg0, SPEED(arg1), 0, 0, CRUSH(arg3), 0, CHANGE(arg2));
+	return EV_DoCeiling (DCeiling::ceilLowerToHighestFloor, ln, arg0, SPEED(arg1), 0, arg4, CRUSH(arg3), 0, CHANGE(arg2));
 }
 
 FUNC(LS_Ceiling_LowerInstant)
@@ -808,15 +808,15 @@ FUNC(LS_Ceiling_ToHighestInstant)
 }
 
 FUNC(LS_Ceiling_ToFloorInstant)
-// Ceiling_ToFloorInstant (tag, change, crush)
+// Ceiling_ToFloorInstant (tag, change, crush, gap)
 {
-	return EV_DoCeiling (DCeiling::ceilRaiseToFloor, ln, arg0, 2, 0, 0, CRUSH(arg2), 0, CHANGE(arg1));
+	return EV_DoCeiling (DCeiling::ceilRaiseToFloor, ln, arg0, 2, 0, arg3, CRUSH(arg2), 0, CHANGE(arg1));
 }
 
 FUNC(LS_Ceiling_LowerToFloor)
-// Ceiling_LowerToFloor (tag, speed, change, crush)
+// Ceiling_LowerToFloor (tag, speed, change, crush, gap)
 {
-	return EV_DoCeiling (DCeiling::ceilLowerToFloor, ln, arg0, SPEED(arg1), 0, 0, CRUSH(arg3), 0, CHANGE(arg4));
+	return EV_DoCeiling (DCeiling::ceilLowerToFloor, ln, arg0, SPEED(arg1), 0, arg4, CRUSH(arg3), 0, CHANGE(arg4));
 }
 
 FUNC(LS_Ceiling_LowerByTexture)