diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm
index d34456e4533..5b9c0a094ab 100644
--- a/code/game/objects/items/weapons/clown_items.dm
+++ b/code/game/objects/items/weapons/clown_items.dm
@@ -15,7 +15,15 @@
/*
* Soap
*/
-/obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist
+/obj/item/weapon/soap/New()
+ ..()
+ create_reagents(5)
+ wet()
+
+/obj/item/weapon/soap/proc/wet()
+ reagents.add_reagent("cleaner", 5)
+
+/obj/item/weapon/soap/Crossed(AM as mob|obj)
if (istype(AM, /mob/living))
var/mob/living/M = AM
M.slip("the [src.name]",3)
@@ -32,7 +40,9 @@
else if(istype(target,/turf))
user << "You scrub \the [target.name] clean."
var/turf/T = target
- T.clean(src)
+ T.clean(src, user)
+ else if(istype(target,/obj/structure/sink))
+ wet()
else
user << "You clean \the [target.name]."
target.clean_blood()
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index abf5e08a3be..e50ce867967 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -14,19 +14,7 @@
/obj/item/weapon/mop/New()
- create_reagents(5)
-
-//expects an atom containing the reagents used to clean the turf
-/turf/proc/clean(atom/source)
- if(source.reagents.has_reagent("water", 1))
- clean_blood()
- if(istype(src, /turf/simulated))
- var/turf/simulated/T = src
- T.dirt = 0
- for(var/obj/effect/O in src)
- if(istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay))
- qdel(O)
- source.reagents.trans_to_turf(src, 1, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.
+ create_reagents(30)
/obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity)
if(!proximity) return
@@ -40,7 +28,7 @@
if(do_after(user, 40))
var/turf/T = get_turf(A)
if(T)
- T.clean(src)
+ T.clean(src, user)
user << "You have finished mopping!"
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index e46e664eb88..de114e912d0 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -396,3 +396,17 @@
if(A.density && !(A.flags & ON_BORDER))
return 1
return 0
+
+//expects an atom containing the reagents used to clean the turf
+/turf/proc/clean(atom/source, mob/user)
+ if(source.reagents.has_reagent("water", 1) || source.reagents.has_reagent("cleaner", 1))
+ clean_blood()
+ if(istype(src, /turf/simulated))
+ var/turf/simulated/T = src
+ T.dirt = 0
+ for(var/obj/effect/O in src)
+ if(istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay))
+ qdel(O)
+ else
+ user << "\The [source] is too dry to wash that."
+ source.reagents.trans_to_turf(src, 1, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.