diff --git a/baystation12.dme b/baystation12.dme
index bd4705e5d7c..adeb1dcc9e0 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -725,6 +725,7 @@
#include "code\game\objects\structures\displaycase.dm"
#include "code\game\objects\structures\door_assembly.dm"
#include "code\game\objects\structures\electricchair.dm"
+#include "code\game\objects\structures\engicart.dm"
#include "code\game\objects\structures\extinguisher.dm"
#include "code\game\objects\structures\false_walls.dm"
#include "code\game\objects\structures\flora.dm"
diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm
new file mode 100644
index 00000000000..ed96aa27e08
--- /dev/null
+++ b/code/game/objects/structures/engicart.dm
@@ -0,0 +1,173 @@
+/obj/structure/engineeringcart
+ name = "engineering cart"
+ desc = "A cart for storing engineering items."
+ icon = 'icons/obj/engicart.dmi'
+ icon_state = "cart"
+ anchored = 0
+ density = 1
+ flags = OPENCONTAINER
+ //copypaste sorry
+ var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
+ var/obj/item/stack/sheet/glass/myglass = null
+ var/obj/item/stack/sheet/metal/mymetal = null
+ var/obj/item/stack/sheet/plasteel/myplasteel = null
+ var/obj/item/device/flashlight/myflashlight = null
+ var/obj/item/weapon/storage/toolbox/mechanical/mybluetoolbox = null
+ var/obj/item/weapon/storage/toolbox/electrical/myyellowtoolbox = null
+ var/obj/item/weapon/storage/toolbox/emergency/myredtoolbox = null
+ var/obj/item/taperoll/engineering/myengitape = null
+
+/obj/structure/engineeringcart/proc/put_in_cart(obj/item/I, mob/user)
+ user.drop_item()
+ I.loc = src
+ updateUsrDialog()
+ user << "You put [I] into [src]."
+ return
+/obj/structure/engineeringcart/attackby(obj/item/I, mob/user)
+ var/fail_msg = "There is already one of those in [src]."
+ if(istype(I, /obj/item/stack/sheet/glass))
+ if(!myglass)
+ put_in_cart(I, user)
+ myglass=I
+ update_icon()
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/stack/sheet/metal))
+ if(!mymetal)
+ put_in_cart(I, user)
+ mymetal=I
+ update_icon()
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/stack/sheet/plasteel))
+ if(!myplasteel)
+ put_in_cart(I, user)
+ myplasteel=I
+ update_icon()
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/device/flashlight))
+ if(!myflashlight)
+ put_in_cart(I, user)
+ myflashlight=I
+ update_icon()
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/weapon/storage/toolbox/mechanical))
+ if(!mybluetoolbox)
+ put_in_cart(I, user)
+ mybluetoolbox=I
+ update_icon()
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/weapon/storage/toolbox/electrical))
+ if(!myyellowtoolbox)
+ put_in_cart(I, user)
+ myyellowtoolbox=I
+ update_icon()
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/weapon/storage/toolbox))
+ if(!myredtoolbox)
+ put_in_cart(I, user)
+ myredtoolbox=I
+ update_icon()
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/taperoll/engineering/))
+ if(!myengitape)
+ put_in_cart(I, user)
+ myengitape=I
+ update_icon()
+ else
+ user << fail_msg
+
+/obj/structure/engineeringcart/attack_hand(mob/user)
+ user.set_machine(src)
+ var/dat
+ if(myglass)
+ dat += "[myglass.name]
"
+ if(mymetal)
+ dat += "[mymetal.name]
"
+ if(myplasteel)
+ dat += "[myplasteel.name]
"
+ if(myflashlight)
+ dat += "[myflashlight.name]
"
+ if(mybluetoolbox)
+ dat += "[mybluetoolbox.name]
"
+ if(myredtoolbox)
+ dat += "[myredtoolbox.name]
"
+ if(myyellowtoolbox)
+ dat += "[myyellowtoolbox.name]
"
+ if(myengitape)
+ dat += "[myengitape.name]
"
+ var/datum/browser/popup = new(user, "engicart", name, 240, 160)
+ popup.set_content(dat)
+ popup.open()
+/obj/structure/engineeringcart/Topic(href, href_list)
+ if(!in_range(src, usr))
+ return
+ if(!isliving(usr))
+ return
+ var/mob/living/user = usr
+ if(href_list["glass"])
+ if(myglass)
+ user.put_in_hands(myglass)
+ user << "You take [myglass] from [src]."
+ myglass = null
+ if(href_list["metal"])
+ if(mymetal)
+ user.put_in_hands(mymetal)
+ user << "You take [mymetal] from [src]."
+ mymetal = null
+ if(href_list["plasteel"])
+ if(myplasteel)
+ user.put_in_hands(myplasteel)
+ user << "You take [myplasteel] from [src]."
+ myplasteel = null
+ if(href_list["flashlight"])
+ if(myflashlight)
+ user.put_in_hands(myflashlight)
+ user << "You take [myflashlight] from [src]."
+ myflashlight = null
+ if(href_list["bluetoolbox"])
+ if(mybluetoolbox)
+ user.put_in_hands(mybluetoolbox)
+ user << "You take [mybluetoolbox] from [src]."
+ mybluetoolbox = null
+ if(href_list["redtoolbox"])
+ if(myredtoolbox)
+ user.put_in_hands(myredtoolbox)
+ user << "You take [myredtoolbox] from [src]."
+ myredtoolbox = null
+ if(href_list["yellowtoolbox"])
+ if(myyellowtoolbox)
+ user.put_in_hands(myyellowtoolbox)
+ user << "You take [myyellowtoolbox] from [src]."
+ myyellowtoolbox = null
+ if(href_list["engitape"])
+ if(myengitape)
+ user.put_in_hands(myengitape)
+ user << "You take [myengitape] from [src]."
+ myengitape = null
+
+ update_icon()
+ updateUsrDialog()
+/obj/structure/engineeringcart/update_icon()
+ overlays = null
+ if(myglass)
+ overlays += "cart_glass"
+ if(mymetal)
+ overlays += "cart_metal"
+ if(myplasteel)
+ overlays += "cart_plasteel"
+ if(myflashlight)
+ overlays += "cart_flashlight"
+ if(mybluetoolbox)
+ overlays += "cart_bluetoolbox"
+ if(myredtoolbox)
+ overlays += "cart_redtoolbox"
+ if(myyellowtoolbox)
+ overlays += "cart_yellowtoolbox"
+ if(myengitape)
+ overlays += "cart_engitape"
diff --git a/icons/obj/engicart.dmi b/icons/obj/engicart.dmi
new file mode 100644
index 00000000000..3e171fc173e
Binary files /dev/null and b/icons/obj/engicart.dmi differ