diff --git a/source/games/blood/src/triggers.cpp b/source/games/blood/src/triggers.cpp
index f996be9a8..eda5d092e 100644
--- a/source/games/blood/src/triggers.cpp
+++ b/source/games/blood/src/triggers.cpp
@@ -861,8 +861,7 @@ void TranslateSector(sectortype* pSector, int a2, int a3, int a4, int a5, int a6
 		vertexscan(wal, [&](walltype* wal)
 			{
 				viewInterpolateWall(wal);
-				wal->pos = vec;
-				wal->moved();
+				wal->move(vec);
 			});
 	};
 
diff --git a/source/games/duke/src/sectors.cpp b/source/games/duke/src/sectors.cpp
index c8a4f77ce..dbc7b7064 100644
--- a/source/games/duke/src/sectors.cpp
+++ b/source/games/duke/src/sectors.cpp
@@ -318,12 +318,14 @@ void setanimatevalue(int type, int index, double value)
 		sector[index].setceilingz((int)value);
 		break;
 	case anim_vertexx:
-		wall[index].moved();
+		wall[index].pos.X = value * worldtomap;
 		wall[index].pos.X = value * maptoworld;
+		wall[index].moved();
 		break;
 	case anim_vertexy:
-		wall[index].moved();
+		wall[index].pos.Y = value * worldtomap;
 		wall[index].pos.Y = value * maptoworld;
+		wall[index].moved();
 		break;
 	default:
 		assert(false);
diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h
index e8c163f3e..27538765c 100644
--- a/source/games/sw/src/game.h
+++ b/source/games/sw/src/game.h
@@ -1564,10 +1564,10 @@ enum
     SO_TURRET = 97,
     SO_VEHICLE = 98,
     // #define SO_SPEED_BOAT 99
-    MAXSO = INT32_MAX
+    MAXSO = INT32_MAX / 2
 };
 
-inline bool SO_EMPTY(SECTOR_OBJECT* sop) { return (sop->pmid.X == INT32_MAX); }
+inline bool SO_EMPTY(SECTOR_OBJECT* sop) { return (sop->pmid.X == MAXSO); }
 
 extern SECTOR_OBJECT SectorObject[MAX_SECTOR_OBJECTS];
 
diff --git a/source/games/sw/src/interpso.cpp b/source/games/sw/src/interpso.cpp
index e95c5f5b9..1f10df614 100644
--- a/source/games/sw/src/interpso.cpp
+++ b/source/games/sw/src/interpso.cpp
@@ -133,12 +133,12 @@ static void setvalue(so_interp::interp_data& element, double value)
     switch (type)
     {
     case soi_wallx:
-        wall[index].moved();
         wall[index].pos.X = value;
+        wall[index].moved();
         break;
     case soi_wally:
-        wall[index].moved();
         wall[index].pos.Y = value;
+        wall[index].moved();
         break;
     case soi_ceil:
         sector[index].setceilingz((int)value);
diff --git a/source/games/sw/src/sector.cpp b/source/games/sw/src/sector.cpp
index d9444ee3d..4296c8caa 100644
--- a/source/games/sw/src/sector.cpp
+++ b/source/games/sw/src/sector.cpp
@@ -379,7 +379,7 @@ void SectorSetup(void)
         SectorObject[ndx].mid_sector = nullptr;
         SectorObject[ndx].op_main_sector = nullptr;
         SectorObject[ndx].morph_wall_point = nullptr;
-        SectorObject[ndx].pmid.X = INT32_MAX;
+        SectorObject[ndx].pmid.X = MAXSO;
     }
 
     memset(SineWaveFloor, 0, sizeof(SineWaveFloor));
diff --git a/source/games/sw/src/track.cpp b/source/games/sw/src/track.cpp
index 51fd8713b..653ed0630 100644
--- a/source/games/sw/src/track.cpp
+++ b/source/games/sw/src/track.cpp
@@ -2669,24 +2669,6 @@ void VehicleSetSmoke(SECTOR_OBJECT* sop, ANIMATOR* animator)
 }
 
 
-void KillSectorObject(SECTOR_OBJECT* sop)
-{
-    int newx = MAXSO;
-    int newy = MAXSO;
-    short newang = 0;
-
-    if (sop->track < SO_OPERATE_TRACK_START)
-        return;
-
-    sop->ang_tgt = sop->ang_moving = newang;
-
-    sop->spin_ang = 0;
-    sop->ang = sop->ang_tgt;
-
-    RefreshPoints(sop, newx - sop->pmid.X, newy - sop->pmid.Y, false);
-}
-
-
 void TornadoSpin(SECTOR_OBJECT* sop)
 {
     short delta_ang, speed;