diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm
new file mode 100644
index 00000000000..662649f087f
--- /dev/null
+++ b/code/game/machinery/poolcontroller.dm
@@ -0,0 +1,66 @@
+/obj/machinery/poolcontroller
+ name = "Pool Controller"
+ desc = "A controller for the nearby pool."
+ icon = 'icons/obj/airlock_machines.dmi'
+ icon_state = "airlock_control_standby"
+ var/list/linkedturfs = list()
+ var/temperature = "normal"
+ var/srange = 5
+
+/obj/machinery/poolcontroller/New()
+ for(var/turf/simulated/floor/beach/water/W in range(srange,src))
+ src.linkedturfs += W
+ processing_objects.Add(src)
+
+/obj/machinery/poolcontroller/attack_hand()
+ if(!Adjacent(usr))
+ usr << "You moved away."
+ return
+ var/temp = input("What temperature would you like to set the pool to?", "Pool Temperature") in list("Hot","Cold","Normal","Cancel")
+ switch(temp)
+ if("Hot")
+ temperature = "hot"
+ if("Cold")
+ temperature = "cold"
+ if("Normal")
+ temperature = "normal"
+ if("Cancel")
+ return
+
+ usr << "You flick the pool temperature to [temperature]."
+
+/obj/machinery/poolcontroller/process()
+ if(!linkedturfs)
+ processing_objects.Remove(src)
+ return
+ for(var/turf/simulated/floor/beach/water/W in linkedturfs)
+ for(var/mob/M in W)
+ if(M)
+ updateMobs()
+
+/obj/machinery/poolcontroller/proc/updateMobs()
+ for(var/turf/simulated/floor/beach/water/W in linkedturfs)
+ for(var/mob/M in W)
+ switch(temperature)
+ if("hot")
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.bodytemperature = min(500, H.bodytemperature + 35)
+ H.adjustFireLoss(5)
+ H << "The water is searing hot!"
+ else
+ M.bodytemperature = min(500, M.bodytemperature + 35)
+ M << "The water is searing hot!"
+
+ if("cold")
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.bodytemperature = max(80, H.bodytemperature - 80)
+ H.adjustFireLoss(5)
+ H << "The water is freezing!"
+ else
+ M.bodytemperature = max(80, M.bodytemperature - 80)
+ M << "The water is freezing!"
+
+ if("normal")
+ return
\ No newline at end of file
diff --git a/paradise.dme b/paradise.dme
index d84b2c5f513..488f052f047 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -449,6 +449,7 @@
#include "code\game\machinery\OpTable.dm"
#include "code\game\machinery\overview.dm"
#include "code\game\machinery\PDApainter.dm"
+#include "code\game\machinery\poolcontroller.dm"
#include "code\game\machinery\portable_tag_turret.dm"
#include "code\game\machinery\portable_turret.dm"
#include "code\game\machinery\programmable_unloader.dm"