diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 27c37f19c1a..ce6afe9311e 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -516,6 +516,10 @@ About the new airlock wires panel:
var/obj/machinery/door/airlock/airlock = painter.available_paint_jobs["[painter.paint_setting]"] // get the airlock type path associated with the airlock name the user just chose
var/obj/structure/door_assembly/assembly = initial(airlock.assemblytype)
+ if(assemblytype == assembly)
+ to_chat(user, "This airlock is already painted [painter.paint_setting]!")
+ return
+
if(airlock_material == "glass" && initial(assembly.noglass)) // prevents painting glass airlocks with a paint job that doesn't have a glass version, such as the freezer
to_chat(user, "This paint job can only be applied to non-glass airlocks.")
return
diff --git a/code/game/objects/items/devices/floor_painter.dm b/code/game/objects/items/devices/floor_painter.dm
index 889138c9c91..ae5a75d5622 100644
--- a/code/game/objects/items/devices/floor_painter.dm
+++ b/code/game/objects/items/devices/floor_painter.dm
@@ -4,7 +4,8 @@
name = "floor painter"
icon = 'icons/obj/device.dmi'
icon_state = "floor_painter"
- item_state = "electronic"
+ item_state = "floor_painter"
+ usesound = 'sound/effects/spray2.ogg'
var/floor_icon
var/floor_state = "floor"
@@ -31,10 +32,16 @@
return
var/turf/simulated/floor/plasteel/F = A
+
+ if(F.icon_state == floor_state && F.dir == floor_dir)
+ to_chat(user, "This is already painted [floor_state] [dir2text(floor_dir)]!")
+ return
+
if(!istype(F))
to_chat(user, "\The [src] can only be used on station flooring.")
return
+ playsound(loc, usesound, 30, TRUE)
F.icon_state = floor_state
F.icon_regular_floor = floor_state
F.dir = floor_dir
diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm
index 842a96c2af2..c386e64a19d 100644
--- a/code/game/objects/items/devices/pipe_painter.dm
+++ b/code/game/objects/items/devices/pipe_painter.dm
@@ -1,8 +1,9 @@
/obj/item/pipe_painter
name = "pipe painter"
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "labeler1"
- item_state = "flight"
+ icon = 'icons/obj/device.dmi'
+ icon_state = "pipe_painter"
+ item_state = "pipe_painter"
+ usesound = 'sound/effects/spray2.ogg'
var/list/modes
var/mode
@@ -18,13 +19,19 @@
return
var/obj/machinery/atmospherics/pipe/P = A
+ if(P.pipe_color == "[GLOB.pipe_colors[mode]]")
+ to_chat(user, "This pipe is aready painted [mode]!")
+ return
+
var/turf/T = P.loc
if(P.level < 2 && T.level==1 && isturf(T) && T.intact)
to_chat(user, "You must remove the plating first.")
return
+ playsound(loc, usesound, 30, TRUE)
P.change_color(GLOB.pipe_colors[mode])
+
/obj/item/pipe_painter/attack_self(mob/user as mob)
mode = input("Which colour do you want to use?", "Pipe Painter", mode) in modes
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index 88cfce57ed9..ddc012075f6 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index 44934af9bfc..b13e2c3307d 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 75838e00075..668d53ea644 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ