diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
new file mode 100644
index 00000000000..ff59f3f9585
--- /dev/null
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -0,0 +1,155 @@
+
+/*
+
+ All telecommunications interactions:
+
+*/
+
+/obj/machinery/telecomms
+ var
+ temp = "" // output message
+
+
+
+ attackby(obj/item/P as obj, mob/user as mob)
+
+ // Using a multitool lets you access the receiver's interface
+ if(istype(P, /obj/item/device/multitool))
+ attack_hand(user)
+
+ attack_hand(var/mob/user as mob)
+
+ // You need a multitool to use this.
+ if(user.equipped())
+ if(!istype(user.equipped(), /obj/item/device/multitool))
+ return
+ else
+ return
+
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ var/obj/item/device/multitool/P = user.equipped()
+
+ user.machine = src
+ var/dat
+ dat = "[src.name]
[src.name] Access
"
+ dat += "
[temp]
"
+
+ if(id != "" && id)
+ dat += "
Identification String: [id]"
+ else
+ dat += "
Identification String: NULL"
+ dat += "
Network: [network]"
+ dat += "
Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]"
+ dat += "
Linked Network Entities: "
+ for(var/obj/machinery/telecomms/T in links)
+ dat += "- \ref[T] [T.name] ([T.id])
"
+ dat += "
"
+
+ dat += "
Filtering Frequencies: "
+ var/i = 0
+
+ if(length(freq_listening))
+ for(var/x in freq_listening)
+ i++
+ if(i < length(freq_listening))
+ dat += "[format_frequency(x)] GHz\[X\]; "
+ else
+ dat += "[format_frequency(x)] GHz\[X\]"
+ else
+ dat += "NONE"
+
+ dat += "
\[Add Filter\]"
+ dat += "
"
+ if(P.buffer)
+ dat += "
MULTITOOL BUFFER: \ref[P.buffer] [P.buffer] \[Link\] \[Flush\]"
+ else
+ dat += "
MULTITOOL BUFFER: \[Add Machine\]"
+
+ dat += ""
+ temp = ""
+ user << browse(dat, "window=[src.name];size=520x500;can_resize=0")
+ onclose(user, "dormitory")
+
+ Topic(href, href_list)
+
+ if(usr.equipped())
+ if(!istype(usr.equipped(), /obj/item/device/multitool))
+ return
+ else
+ return
+
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ var/obj/item/device/multitool/P = usr.equipped()
+
+ if(href_list["input"])
+ switch(href_list["input"])
+
+ if("id")
+ var/newid = input(usr, "Specify the new ID for this machine", src, id) as null|text
+ if(newid && usr in range(1, src))
+ id = newid
+ temp = "-% New ID assigned: \"[id]\" %-"
+
+ if("network")
+ var/newnet = input(usr, "Specify the new network for this machine. This will break all current links.", src, network) as null|text
+ if(newnet && usr in range(1, src) && newnet != network)
+
+ if(length(newnet) > 15)
+ temp = "-% Too many characters in new network tag %-"
+
+ else
+ for(var/obj/machinery/telecomms/T in links)
+ T.links.Remove(src)
+
+ network = newnet
+ links = list()
+ temp = "-% New network tag assigned: \"[network]\" %-"
+
+
+ if("freq")
+ var/newfreq = input(usr, "Specify a new frequency to filter (GHz). Decimals assigned automatically.", src, network) as null|num
+ if(newfreq && usr in range(1, src))
+ if(!(newfreq in freq_listening))
+
+ if(findtext(num2text(newfreq), "."))
+ newfreq *= 10 // shift the decimal one place
+
+ freq_listening.Add(newfreq)
+ temp = "-% New frequency filter assigned: \"[newfreq] GHz\" %-"
+
+ if(href_list["delete"])
+
+ var/x = freq_listening[text2num(href_list["delete"])]
+ temp = "-% Removed frequency filter [x] %-"
+ freq_listening.Remove(x)
+
+ if(href_list["link"])
+
+ if(P.buffer)
+ if( (!(src in P.buffer.links)) && (!(P.buffer in src.links)))
+ P.buffer.links.Add(src)
+ src.links.Add(P.buffer)
+
+ else
+ temp = "-% Unable to acquire buffer %-"
+
+ if(href_list["buffer"])
+
+ P.buffer = src
+
+
+ if(href_list["flush"])
+
+ P.buffer = null
+
+
+ usr.machine = src
+ src.add_fingerprint(usr)
+
+ updateUsrDialog()
+
+