diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm
new file mode 100644
index 0000000000..8ffa13cac9
--- /dev/null
+++ b/code/game/objects/structures/catwalk.dm
@@ -0,0 +1,83 @@
+// Based on catwalk.dm from https://github.com/Endless-Horizon/CEV-Eris
+/obj/structure/catwalk
+ layer = TURF_LAYER + 0.5
+ icon = 'icons/turf/catwalks.dmi'
+ icon_state = "catwalk"
+ name = "catwalk"
+ desc = "Cats really don't like these things."
+ density = 0
+ anchored = 1.0
+
+/obj/structure/catwalk/New()
+ ..()
+ spawn(4)
+ if(src)
+ for(var/obj/structure/catwalk/C in get_turf(src))
+ if(C != src)
+ qdel(C)
+ update_icon()
+ redraw_nearby_catwalks()
+
+/obj/structure/catwalk/Destroy()
+ ..()
+ redraw_nearby_catwalks()
+
+/obj/structure/catwalk/proc/redraw_nearby_catwalks()
+ for(var/direction in alldirs)
+ if(locate(/obj/structure/catwalk, get_step(src, direction)))
+ var/obj/structure/catwalk/L = locate(/obj/structure/catwalk, get_step(src, direction))
+ L.update_icon() //so siding get updated properly
+
+
+/obj/structure/catwalk/update_icon()
+ var/connectdir = 0
+ for(var/direction in cardinal)
+ if(locate(/obj/structure/catwalk, get_step(src, direction)))
+ connectdir |= direction
+
+ //Check the diagonal connections for corners, where you have, for example, connections both north and east. In this case it checks for a north-east connection to determine whether to add a corner marker or not.
+ var/diagonalconnect = 0 //1 = NE; 2 = SE; 4 = NW; 8 = SW
+ //NORTHEAST
+ if(connectdir & NORTH && connectdir & EAST)
+ if(locate(/obj/structure/catwalk, get_step(src, NORTHEAST)))
+ diagonalconnect |= 1
+ //SOUTHEAST
+ if(connectdir & SOUTH && connectdir & EAST)
+ if(locate(/obj/structure/catwalk, get_step(src, SOUTHEAST)))
+ diagonalconnect |= 2
+ //NORTHWEST
+ if(connectdir & NORTH && connectdir & WEST)
+ if(locate(/obj/structure/catwalk, get_step(src, NORTHWEST)))
+ diagonalconnect |= 4
+ //SOUTHWEST
+ if(connectdir & SOUTH && connectdir & WEST)
+ if(locate(/obj/structure/catwalk, get_step(src, SOUTHWEST)))
+ diagonalconnect |= 8
+
+ icon_state = "catwalk[connectdir]-[diagonalconnect]"
+
+
+/obj/structure/catwalk/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ qdel(src)
+ if(2.0)
+ qdel(src)
+ return
+
+/obj/structure/catwalk/attackby(obj/item/C as obj, mob/user as mob)
+ if (istype(C, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = C
+ if(WT.isOn())
+ if(WT.remove_fuel(0, user))
+ to_chat(user, "Slicing lattice joints ...")
+ PoolOrNew(/obj/item/stack/rods, src.loc)
+ PoolOrNew(/obj/item/stack/rods, src.loc)
+ PoolOrNew(/obj/structure/lattice, src.loc)
+ qdel(src)
+ return ..()
+
+/obj/structure/catwalk/Crossed()
+ . = ..()
+ if(isliving(usr))
+ playsound(src, pick('sound/effects/footstep/catwalk1.ogg', 'sound/effects/footstep/catwalk2.ogg', 'sound/effects/footstep/catwalk3.ogg', 'sound/effects/footstep/catwalk4.ogg', 'sound/effects/footstep/catwalk5.ogg'), 25, 1)
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 0eb48e94e0..cd39971e6e 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -67,7 +67,16 @@
user << "Slicing lattice joints ..."
PoolOrNew(/obj/item/stack/rods, src.loc)
qdel(src)
-
+ return
+ if (istype(C, /obj/item/stack/rods))
+ var/obj/item/stack/rods/R = C
+ if(R.use(2))
+ user << "You start connecting \the [R.name] to \the [src.name] ..."
+ if(do_after(user, 5 SECONDS))
+ src.alpha = 0 // Note: I don't know why this is set, Eris did it, just trusting for now. ~Leshana
+ PoolOrNew(/obj/structure/catwalk, src.loc)
+ qdel(src)
+ return
return
/obj/structure/lattice/proc/updateOverlays()
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index 122e1aa4cd..24af78a8f9 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -139,6 +139,8 @@
if(locate(/obj/structure/lattice, loc))
return FALSE
+ if(locate(/obj/structure/catwalk, loc))
+ return FALSE
// See if something prevents us from falling.
var/turf/below = GetBelow(src)
diff --git a/icons/turf/catwalks.dmi b/icons/turf/catwalks.dmi
new file mode 100644
index 0000000000..9e3d3d977c
Binary files /dev/null and b/icons/turf/catwalks.dmi differ
diff --git a/sound/effects/footstep/catwalk1.ogg b/sound/effects/footstep/catwalk1.ogg
new file mode 100644
index 0000000000..5d6ad7b4a0
Binary files /dev/null and b/sound/effects/footstep/catwalk1.ogg differ
diff --git a/sound/effects/footstep/catwalk2.ogg b/sound/effects/footstep/catwalk2.ogg
new file mode 100644
index 0000000000..07a624dbe4
Binary files /dev/null and b/sound/effects/footstep/catwalk2.ogg differ
diff --git a/sound/effects/footstep/catwalk3.ogg b/sound/effects/footstep/catwalk3.ogg
new file mode 100644
index 0000000000..acff22e386
Binary files /dev/null and b/sound/effects/footstep/catwalk3.ogg differ
diff --git a/sound/effects/footstep/catwalk4.ogg b/sound/effects/footstep/catwalk4.ogg
new file mode 100644
index 0000000000..7235a6b9fe
Binary files /dev/null and b/sound/effects/footstep/catwalk4.ogg differ
diff --git a/sound/effects/footstep/catwalk5.ogg b/sound/effects/footstep/catwalk5.ogg
new file mode 100644
index 0000000000..c33f248acd
Binary files /dev/null and b/sound/effects/footstep/catwalk5.ogg differ
diff --git a/vorestation.dme b/vorestation.dme
index d2cc5088d9..21b4fe41af 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -982,6 +982,7 @@
#include "code\game\objects\random\random_vr.dm"
#include "code\game\objects\structures\barsign.dm"
#include "code\game\objects\structures\bedsheet_bin.dm"
+#include "code\game\objects\structures\catwalk.dm"
#include "code\game\objects\structures\coathanger.dm"
#include "code\game\objects\structures\curtains.dm"
#include "code\game\objects\structures\displaycase.dm"