diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 15dfc43a7db..63836e9ecc6 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -188,6 +188,11 @@
//Can you use it?
+/obj/item/device/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
+ J.put_in_cart(src, user)
+ J.myreplacer = src
+ J.update_icon()
+
/obj/item/device/lightreplacer/proc/CanUse(var/mob/living/user)
src.add_fingerprint(user)
//Not sure what else to check for. Maybe if clumsy?
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index eef11d00953..44dd498c426 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -53,4 +53,9 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A as turf)
spawn(5)
reagents.clear_reagents()
mopcount = 0
- return
\ No newline at end of file
+ return
+
+/obj/item/weapon/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
+ J.put_in_cart(src, user)
+ J.mymop=src
+ J.update_icon()
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index a591567f701..bde3d2d5550 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -47,6 +47,11 @@
icon_state = "trashbag2"
else icon_state = "trashbag3"
+/obj/item/weapon/storage/bag/trash/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
+ J.put_in_cart(src, user)
+ J.mybag=src
+ J.update_icon()
+
// -----------------------------
// Plastic Bag
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index ce96dc510a4..15096c49b22 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -400,4 +400,164 @@
/obj/item/key/ambulance
name = "ambulance key"
desc = "A keyring with a small steel key, and tag with a red cross on it."
- icon_state = "keydoc"
\ No newline at end of file
+ icon_state = "keydoc"
+
+//TG style Janicart
+
+/obj/structure/janitorialcart
+ name = "janitorial cart"
+ desc = "This is the alpha and omega of sanitation."
+ icon = 'icons/obj/janitor.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/weapon/storage/bag/trash/mybag = null
+ var/obj/item/weapon/mop/mymop = null
+ var/obj/item/weapon/reagent_containers/spray/cleaner/myspray = null
+ var/obj/item/device/lightreplacer/myreplacer = null
+ var/signs = 0
+ var/const/max_signs = 4
+
+
+/obj/structure/janitorialcart/New()
+ create_reagents(100)
+
+
+/obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user)
+ if(reagents.total_volume < 1)
+ user << "[src] is out of water!"
+ else
+ reagents.trans_to(mop, 5) //
+ user << "You wet [mop] in [src]."
+ playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
+
+/obj/structure/janitorialcart/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/janitorialcart/attackby(obj/item/I, mob/user)
+ var/fail_msg = "There is already one of those in [src]."
+
+ if(istype(I, /obj/item/weapon/mop))
+ var/obj/item/weapon/mop/m=I
+ if(m.reagents.total_volume < m.reagents.maximum_volume)
+ wet_mop(m, user)
+ return
+ if(!mymop)
+ m.janicart_insert(user, src)
+ else
+ user << fail_msg
+
+ else if(istype(I, /obj/item/weapon/storage/bag/trash))
+ if(!mybag)
+ var/obj/item/weapon/storage/bag/trash/t=I
+ t.janicart_insert(user, src)
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/weapon/reagent_containers/spray/cleaner))
+ if(!myspray)
+ put_in_cart(I, user)
+ myspray=I
+ update_icon()
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/device/lightreplacer))
+ if(!myreplacer)
+ var/obj/item/device/lightreplacer/l=I
+ l.janicart_insert(user,src)
+ else
+ user << fail_msg
+ else if(istype(I, /obj/item/weapon/caution))
+ if(signs < max_signs)
+ put_in_cart(I, user)
+ signs++
+ update_icon()
+ else
+ user << "[src] can't hold any more signs."
+ else if(mybag)
+ mybag.attackby(I, user)
+ else if(istype(I, /obj/item/weapon/crowbar))
+ user.visible_message("[user] begins to empty the contents of [src].")
+ if(do_after(user, 30))
+ usr << "You empty the contents of [src]'s bucket onto the floor."
+ reagents.reaction(src.loc)
+ src.reagents.clear_reagents()
+
+/obj/structure/janitorialcart/attack_hand(mob/user)
+ user.set_machine(src)
+ var/dat
+ if(mybag)
+ dat += "[mybag.name]
"
+ if(mymop)
+ dat += "[mymop.name]
"
+ if(myspray)
+ dat += "[myspray.name]
"
+ if(myreplacer)
+ dat += "[myreplacer.name]
"
+ if(signs)
+ dat += "[signs] sign\s
"
+ var/datum/browser/popup = new(user, "janicart", name, 240, 160)
+ popup.set_content(dat)
+ popup.open()
+
+
+/obj/structure/janitorialcart/Topic(href, href_list)
+ if(!in_range(src, usr))
+ return
+ if(!isliving(usr))
+ return
+ var/mob/living/user = usr
+ if(href_list["garbage"])
+ if(mybag)
+ user.put_in_hands(mybag)
+ user << "You take [mybag] from [src]."
+ mybag = null
+ if(href_list["mop"])
+ if(mymop)
+ user.put_in_hands(mymop)
+ user << "You take [mymop] from [src]."
+ mymop = null
+ if(href_list["spray"])
+ if(myspray)
+ user.put_in_hands(myspray)
+ user << "You take [myspray] from [src]."
+ myspray = null
+ if(href_list["replacer"])
+ if(myreplacer)
+ user.put_in_hands(myreplacer)
+ user << "You take [myreplacer] from [src]."
+ myreplacer = null
+ if(href_list["sign"])
+ if(signs)
+ var/obj/item/weapon/caution/Sign = locate() in src
+ if(Sign)
+ user.put_in_hands(Sign)
+ user << "You take \a [Sign] from [src]."
+ signs--
+ else
+ WARNING("Signs ([signs]) didn't match contents")
+ signs = 0
+
+ update_icon()
+ updateUsrDialog()
+
+
+/obj/structure/janitorialcart/update_icon()
+ overlays = null
+ if(mybag)
+ overlays += "cart_garbage"
+ if(mymop)
+ overlays += "cart_mop"
+ if(myspray)
+ overlays += "cart_spray"
+ if(myreplacer)
+ overlays += "cart_replacer"
+ if(signs)
+ overlays += "cart_sign[signs]"
\ No newline at end of file
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index 92a8c6c528f..57314ee7f05 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ