diff --git a/baystation12.dme b/baystation12.dme
index 33e934a351d..49e1fe9bcb4 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -1832,6 +1832,7 @@
#include "code\modules\virus2\helpers.dm"
#include "code\modules\virus2\isolator.dm"
#include "code\modules\virus2\items_devices.dm"
+#include "code\modules\wireless\devices.dm"
#include "code\modules\wireless\interfaces.dm"
#include "code\modules\xgm\xgm_gas_data.dm"
#include "code\modules\xgm\xgm_gas_mixture.dm"
diff --git a/code/controllers/Processes/wireless.dm b/code/controllers/Processes/wireless.dm
index ccb99734dc3..9db8cb9b550 100644
--- a/code/controllers/Processes/wireless.dm
+++ b/code/controllers/Processes/wireless.dm
@@ -46,4 +46,4 @@ var/datum/controller/process/wireless/wirelessProcess
input_queue -= C
if(!target_found)
output_queue += C
- scheck()
\ No newline at end of file
+ scheck()
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 70557a2e18b..bd9fc8a7d10 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -10,9 +10,20 @@
idle_power_usage = 2
active_power_usage = 4
+ var/_wifi_id
+ var/datum/wifi/sender/button/wifi_sender
+
+/obj/machinery/button/New()
+ ..()
+ if(_wifi_id)
+ wifi_sender = new(_wifi_id)
/obj/machinery/button/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/button/attackby(obj/item/weapon/W, mob/user as mob)
- return src.attack_hand(user)
\ No newline at end of file
+/obj/machinery/button/attackby(obj/item/weapon/W, mob/user as mob) return src.attack_hand(user)
+
+/obj/machinery/button/attack_hand(mob/living/user)
+ ..()
+ if(wifi_sender)
+ wifi_sender.activate(user)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 9f8eed2eb57..3cf38a6ef7d 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -187,6 +187,14 @@
var/id = 1
var/locked = 0
+ var/_wifi_id
+ var/datum/wifi/receiver/button/crematorium/wifi_receiver
+
+/obj/structure/crematorium/New()
+ ..()
+ if(_wifi_id)
+ wifi_receiver = new(_wifi_id)
+
/obj/structure/crematorium/Destroy()
if(connected)
qdel(connected)
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 51093296b27..11ad0b7e7a1 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -24,6 +24,7 @@
var/state = 0
var/locked = 0
+ var/datum/wifi/receiver/button/emitter/wifi_receiver
/obj/machinery/power/emitter/verb/rotate()
set name = "Rotate"
@@ -40,11 +41,13 @@
..()
if(state == 2 && anchored)
connect_to_network()
+ wifi_receiver = new(id, src)
/obj/machinery/power/emitter/Destroy()
message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1)
log_game("Emitter deleted at ([x],[y],[z])")
investigate_log("deleted at ([x],[y],[z])","singulo")
+ wifi_receiver.Destroy()
..()
/obj/machinery/power/emitter/update_icon()
diff --git a/code/modules/wireless/devices.dm b/code/modules/wireless/devices.dm
new file mode 100644
index 00000000000..fbc3bfc321d
--- /dev/null
+++ b/code/modules/wireless/devices.dm
@@ -0,0 +1,37 @@
+/datum/wifi/receiver/button
+ var/obj/parent
+
+/datum/wifi/receiver/button/proc/activate(mob/living/user)
+
+
+/datum/wifi/sender/button/proc/activate(mob/living/user)
+ for(var/datum/wifi/receiver/button/B in connected_devices)
+ B.activate(user)
+
+//-------------------------------
+// Emitter
+//-------------------------------
+/datum/wifi/receiver/button/emitter/New(var/new_id, var/obj/machinery/power/emitter/E)
+ id = new_id
+ if(istype(E))
+ parent = E
+ ..()
+
+/datum/wifi/receiver/button/emitter/activate(mob/living/user)
+ ..()
+ var/obj/machinery/power/emitter/E = parent
+ E.activate(user)
+
+//-------------------------------
+// Crematorium
+//-------------------------------
+/datum/wifi/receiver/button/crematorium/New(var/new_id, var/obj/structure/crematorium/C)
+ id = new_id
+ if(istype(C))
+ parent = C
+ ..()
+
+/datum/wifi/receiver/button/crematorium/activate(mob/living/user)
+ ..()
+ var/obj/structure/crematorium/C = parent
+ C.cremate(user)
diff --git a/code/modules/wireless/manager.dm b/code/modules/wireless/manager.dm
deleted file mode 100644
index 4922732785f..00000000000
--- a/code/modules/wireless/manager.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-/datum/wifi_manager
- var/list/pending_connections
- var/list/receiver_list
- var/list/failed_connections
-
-/datum/wifi_manager/New()
- pending_connections = new()
- receiver_list = new()
- failed_connections = new()
-
-/datum/wifi_manager/proc/add_device(var/datum/wifi/receiver/R)
- receiver_list |= R
-
-/datum/wifi_manager/proc/remove_device(var/datum/wifi/receiver/R)
- receiver_list -= R
-
-/datum/wifi_manager/proc/add_request(var/datum/connection_request/C)
- pending_connections += C
-
-/datum/wifi_manager/proc/process()
- //check any failed connections from the previous pass
- if(failed_connections.len > 0)
- for(var/datum/connection_request/C in failed_connections)
- var/target_found = 0
- for(var/datum/wifi/receiver/R in receiver_list)
- if(R.id == C.target)
- var/datum/wifi/sender/S = C.source
- S.connect_device(R)
- R.connect_device(S)
- target_found = 1
- failed_connections -= C
- if(!target_found)
- log_debug("[C.source] could not connect to \"[C.target]\"")
-
- //check and try assigning any pending connections
- if(pending_connections.len > 0)
- for(var/datum/connection_request/C in pending_connections)
- var/target_found = 0
- for(var/datum/wifi/receiver/R in receiver_list)
- if(R.id == C.target)
- var/datum/wifi/sender/S = C.source
- S.connect_device(R)
- R.connect_device(S)
- target_found = 1
- pending_connections -= C
- if(!target_found)
- failed_connections += C