diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index bd9fc8a7d10..63af5844e70 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -13,11 +13,17 @@
var/_wifi_id
var/datum/wifi/sender/button/wifi_sender
-/obj/machinery/button/New()
+/obj/machinery/button/initialize()
..()
if(_wifi_id)
wifi_sender = new(_wifi_id)
+/obj/machinery/button/Destroy()
+ if(wifi_sender)
+ qdel(wifi_sender)
+ wifi_sender = null
+ return..()
+
/obj/machinery/button/attack_ai(mob/user as mob)
return src.attack_hand(user)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 3cf38a6ef7d..98d4b928a42 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -190,15 +190,18 @@
var/_wifi_id
var/datum/wifi/receiver/button/crematorium/wifi_receiver
-/obj/structure/crematorium/New()
+/obj/structure/crematorium/initialize()
..()
if(_wifi_id)
- wifi_receiver = new(_wifi_id)
+ wifi_receiver = new(_wifi_id, src)
/obj/structure/crematorium/Destroy()
if(connected)
qdel(connected)
connected = null
+ if(wifi_receiver)
+ qdel(wifi_receiver)
+ wifi_receiver = null
return ..()
/obj/structure/crematorium/proc/update()
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 11ad0b7e7a1..3a8441f0188 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/_wifi_id
var/datum/wifi/receiver/button/emitter/wifi_receiver
/obj/machinery/power/emitter/verb/rotate()
@@ -41,13 +42,16 @@
..()
if(state == 2 && anchored)
connect_to_network()
- wifi_receiver = new(id, src)
+ if(_wifi_id)
+ wifi_receiver = new(_wifi_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()
+ if(wifi_receiver)
+ qdel(wifi_receiver)
+ wifi_receiver = null
..()
/obj/machinery/power/emitter/update_icon()
diff --git a/code/modules/wireless/devices.dm b/code/modules/wireless/devices.dm
index fbc3bfc321d..40a293c17de 100644
--- a/code/modules/wireless/devices.dm
+++ b/code/modules/wireless/devices.dm
@@ -1,6 +1,16 @@
/datum/wifi/receiver/button
var/obj/parent
+/datum/wifi/receiver/button/New(var/new_id, var/obj/O)
+ id = new_id
+ if(istype(O))
+ parent = O
+ ..()
+
+/datum/wifi/receiver/button/Destroy()
+ parent = null
+ return ..()
+
/datum/wifi/receiver/button/proc/activate(mob/living/user)
@@ -11,27 +21,17 @@
//-------------------------------
// 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)
+ if(istype(E))
+ 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)
+ if(istype(C))
+ C.cremate(user)
diff --git a/code/modules/wireless/interfaces.dm b/code/modules/wireless/interfaces.dm
index 275c3f90358..22dfa92e149 100644
--- a/code/modules/wireless/interfaces.dm
+++ b/code/modules/wireless/interfaces.dm
@@ -5,9 +5,10 @@
connected_devices = new()
/datum/wifi/Destroy(var/wifi/device)
- ..()
for(var/datum/wifi/D in connected_devices)
D.disconnect_device(src)
+ disconnect_device(D)
+ return ..()
/datum/wifi/proc/connect_device(var/datum/wifi/device)
connected_devices |= device
@@ -26,9 +27,8 @@
wirelessProcess.add_device(src)
/datum/wifi/receiver/Destroy()
- ..()
wirelessProcess.remove_device(src)
-
+ return ..()
/datum/wifi/sender
@@ -37,6 +37,7 @@
/datum/wifi/sender/New(var/new_target)
..()
target = new_target
+ send_connection_request()
/datum/wifi/sender/proc/set_target(var/new_target)
target = new_target