diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index b55a354945..cd65fb9f91 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -250,7 +250,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"])
- if(istype(R, /obj/item/device/radio/headset))
+ if(istype(R, /obj/item/device/radio/headset) && !R.adhoc_fallback)
continue
if(R.receive_range(display_freq, level) > -1)
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 842fb09816..260c32cd57 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -39,6 +39,7 @@ var/global/list/default_medbay_channels = list(
var/listening = 1
var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h
var/subspace_transmission = 0
+ var/adhoc_fallback = FALSE //Falls back to 'radio' mode if subspace not available
var/syndie = 0//Holder to see if it's a syndicate encrypted radio
var/centComm = 0//Holder to see if it's a CentCom encrypted radio
flags = CONDUCT
@@ -414,9 +415,15 @@ var/global/list/default_medbay_channels = list(
for(var/obj/machinery/telecomms/allinone/R in telecomms_list)
R.receive_signal(signal)
- // Receiving code can be located in Telecommunications.dm
- return signal.data["done"] && position.z in signal.data["level"]
+ if(signal.data["done"] && position.z in signal.data["level"])
+ return TRUE //Huzzah, sent via subspace
+ else if(adhoc_fallback) //Less huzzah, we have to fallback
+ to_chat(loc,"\The [src] pings as it falls back to local radio transmission.")
+ subspace_transmission = FALSE
+ return Broadcast_Message(connection, M, voicemask, pick(M.speak_emote),
+ src, message, displayname, jobname, real_name, M.voice_name,
+ signal.transmission_method, signal.data["compression"], list(position.z), connection.frequency,verb,speaking)
/* ###### Intercoms and station-bounced radios ###### */
@@ -463,10 +470,10 @@ var/global/list/default_medbay_channels = list(
for(var/obj/machinery/telecomms/receiver/R in telecomms_list)
R.receive_signal(signal)
-
- sleep(rand(10,25)) // wait a little...
-
if(signal.data["done"] && position.z in signal.data["level"])
+ if(adhoc_fallback)
+ to_chat(loc,"\The [src] pings as it reestablishes subspace communications.")
+ subspace_transmission = TRUE
// we're done here.
return 1