diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm
index 98061c458c6..85996cd61b3 100644
--- a/code/game/objects/structures/catwalk.dm
+++ b/code/game/objects/structures/catwalk.dm
@@ -28,8 +28,15 @@
/obj/structure/catwalk/Destroy()
redraw_nearby_catwalks()
+ update_falling()
return ..()
+/obj/structure/catwalk/proc/update_falling()
+ spawn(1) //We get called in Destroy() and things. We might not be gone yet, so let's just put this off.
+ if(istype(loc, /turf/simulated/open))
+ var/turf/simulated/open/O = loc
+ O.update() //Will cause anything on the open turf to fall if it should
+
/obj/structure/catwalk/proc/redraw_nearby_catwalks()
for(var/direction in alldirs)
var/obj/structure/catwalk/L = locate() in get_step(src, direction)
@@ -83,6 +90,7 @@
if(hatch_open)
playsound(src, 'sound/items/Crowbar.ogg', 100, 2)
to_chat(user, "You pry open \the [src]'s maintenance hatch.")
+ update_falling()
else
playsound(src, 'sound/items/Deconstruct.ogg', 100, 2)
to_chat(user, "You shut \the [src]'s maintenance hatch.")