diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm
index 9d21fece152..cf0ff74e03c 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm
@@ -28,6 +28,40 @@ Thus, the two variables affect pump operation are set in New():
var/id = null
var/datum/radio_frequency/radio_connection
+/obj/machinery/atmospherics/binary/pump/CtrlClick(mob/living/user)
+ if(!istype(user) || user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user) && !issilicon(usr))
+ return
+ if(!ishuman(usr) && !issilicon(usr))
+ return
+ on = !on
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/binary/pump/AICtrlClick()
+ on = !on
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/binary/pump/AltClick(mob/living/user)
+ if(!istype(user) || user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user) && !issilicon(usr))
+ return
+ if(!ishuman(usr) && !issilicon(usr))
+ return
+ target_pressure = MAX_OUTPUT_PRESSURE
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/binary/pump/AIAltClick()
+ target_pressure = MAX_OUTPUT_PRESSURE
+ update_icon()
+ return ..()
+
/obj/machinery/atmospherics/binary/pump/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
index a64c94e7fc5..7480ea45eb5 100644
--- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
@@ -28,6 +28,40 @@ Thus, the two variables affect pump operation are set in New():
var/id = null
var/datum/radio_frequency/radio_connection
+/obj/machinery/atmospherics/binary/volume_pump/CtrlClick(mob/living/user)
+ if(!istype(user) || user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user) && !issilicon(usr))
+ return
+ if(!ishuman(usr) && !issilicon(usr))
+ return
+ on = !on
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/binary/volume_pump/AICtrlClick()
+ on = !on
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/binary/volume_pump/AltClick(mob/living/user)
+ if(!istype(user) || user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user) && !issilicon(usr))
+ return
+ if(!ishuman(usr) && !issilicon(usr))
+ return
+ transfer_rate = MAX_TRANSFER_RATE
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/binary/volume_pump/AIAltClick()
+ transfer_rate = MAX_TRANSFER_RATE
+ update_icon()
+ return ..()
+
/obj/machinery/atmospherics/binary/volume_pump/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
index 903f917e0c6..d0f0075a3bf 100755
--- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
@@ -22,6 +22,39 @@ Filter types:
var/frequency = 0
var/datum/radio_frequency/radio_connection
+/obj/machinery/atmospherics/trinary/filter/CtrlClick(mob/living/user)
+ if(!istype(user) || user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user) && !issilicon(usr))
+ return
+ if(!ishuman(usr) && !issilicon(usr))
+ return
+ on = !on
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/trinary/filter/AICtrlClick()
+ on = !on
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/trinary/filter/AltClick(mob/living/user)
+ if(!istype(user) || user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user) && !issilicon(usr))
+ return
+ if(!ishuman(usr) && !issilicon(usr))
+ return
+ target_pressure = MAX_OUTPUT_PRESSURE
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/trinary/filter/AIAltClick()
+ target_pressure = MAX_OUTPUT_PRESSURE
+ update_icon()
+ return ..()
/obj/machinery/atmospherics/trinary/filter/Destroy()
if(radio_controller)
diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
index 0c64804b6da..7a962c3626c 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
@@ -12,6 +12,40 @@
//node 3 is the outlet, nodes 1 & 2 are intakes
+/obj/machinery/atmospherics/trinary/mixer/CtrlClick(mob/living/user)
+ if(!istype(user) || user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user) && !issilicon(usr))
+ return
+ if(!ishuman(usr) && !issilicon(usr))
+ return
+ on = !on
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/trinary/mixer/AICtrlClick()
+ on = !on
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/trinary/mixer/AltClick(mob/living/user)
+ if(!istype(user) || user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!in_range(src, user) && !issilicon(usr))
+ return
+ if(!ishuman(usr) && !issilicon(usr))
+ return
+ target_pressure = MAX_OUTPUT_PRESSURE
+ update_icon()
+ return ..()
+
+/obj/machinery/atmospherics/trinary/mixer/AIAltClick()
+ target_pressure = MAX_OUTPUT_PRESSURE
+ update_icon()
+ return ..()
+
/obj/machinery/atmospherics/trinary/mixer/flipped
icon_state = "mmap"
flipped = 1