diff --git a/baystation12.dme b/baystation12.dme
index 94e28f30395..3f651677205 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -492,6 +492,7 @@
#include "code\game\objects\items\devices\handtv.dm"
#include "code\game\objects\items\devices\laserpointer.dm"
#include "code\game\objects\items\devices\lightreplacer.dm"
+#include "code\game\objects\items\devices\megaphone.dm"
#include "code\game\objects\items\devices\multitool.dm"
#include "code\game\objects\items\devices\paicard.dm"
#include "code\game\objects\items\devices\pipe_painter.dm"
@@ -740,6 +741,7 @@
#include "code\modules\assembly\shock_kit.dm"
#include "code\modules\assembly\signaler.dm"
#include "code\modules\assembly\timer.dm"
+#include "code\modules\assembly\voice.dm"
#include "code\modules\awaymissions\bluespaceartillery.dm"
#include "code\modules\awaymissions\corpse.dm"
#include "code\modules\awaymissions\exile.dm"
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
new file mode 100644
index 00000000000..ec8075e85bc
--- /dev/null
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -0,0 +1,55 @@
+/obj/item/device/megaphone
+ name = "megaphone"
+ desc = "A device used to project your voice. Loudly."
+ icon_state = "megaphone"
+ item_state = "radio"
+ w_class = 1.0
+ flags = FPRINT | TABLEPASS | CONDUCT
+
+ var/spamcheck = 0
+ var/emagged = 0
+ var/insults = 0
+ var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TATER!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!")
+
+/obj/item/device/megaphone/attack_self(mob/living/user as mob)
+ if (user.client)
+ if(user.client.prefs.muted & MUTE_IC)
+ src << "\red You cannot speak in IC (muted)."
+ return
+ if(!ishuman(user))
+ user << "\red You don't know how to use this!"
+ return
+ if(user.silent)
+ return
+ if(spamcheck)
+ user << "\red \The [src] needs to recharge!"
+ return
+
+ var/message = copytext(sanitize(input(user, "Shout a message?", "Megaphone", null) as text),1,MAX_MESSAGE_LEN)
+ if(!message)
+ return
+ message = capitalize(message)
+ if ((src.loc == user && usr.stat == 0))
+ if(emagged)
+ if(insults)
+ for(var/mob/O in (viewers(user)))
+ O.show_message("[user] broadcasts, \"[pick(insultmsg)]\"",2) // 2 stands for hearable message
+ insults--
+ else
+ user << "\red *BZZZZzzzzzt*"
+ else
+ for(var/mob/O in (viewers(user)))
+ O.show_message("[user] broadcasts, \"[message]\"",2) // 2 stands for hearable message
+
+ spamcheck = 1
+ spawn(20)
+ spamcheck = 0
+ return
+
+/obj/item/device/megaphone/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/weapon/card/emag) && !emagged)
+ user << "\red You overload \the [src]'s voice synthesizer."
+ emagged = 1
+ insults = rand(1, 3)//to prevent dickflooding
+ return
+ return
\ No newline at end of file
diff --git a/maps/tgstation-redux-WIP.dmm b/maps/tgstation-redux-WIP.dmm
index 8f8d5d57726..6eb362a2514 100644
--- a/maps/tgstation-redux-WIP.dmm
+++ b/maps/tgstation-redux-WIP.dmm
@@ -431,7 +431,7 @@
"aio" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/main)
"aip" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/security/main)
"aiq" = (/obj/structure/closet/secure_closet/security,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/main)
-"air" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/item/device/assembly/timer,/turf/simulated/floor{tag = "icon-redfull (NORTHWEST)"; icon_state = "redfull"; dir = 9},/area/security/main)
+"air" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/item/device/assembly/timer,/obj/item/device/megaphone,/turf/simulated/floor{tag = "icon-redfull (NORTHWEST)"; icon_state = "redfull"; dir = 9},/area/security/main)
"ais" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/main)
"ait" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor{tag = "icon-redfull (NORTHWEST)"; icon_state = "redfull"; dir = 9},/area/security/main)
"aiu" = (/turf/simulated/floor,/area/security/main)
@@ -4998,7 +4998,7 @@
"bSf" = (/obj/machinery/door/airlock/research{name = "Xenobiology Access"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bSg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bSh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bSi" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing)
+"bSi" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table,/obj/item/device/assembly/voice,/obj/item/device/assembly/voice,/obj/item/device/assembly/voice,/obj/item/device/assembly/voice,/obj/item/device/assembly/voice,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing)
"bSj" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table,/obj/item/device/assembly/signaler{pixel_x = 8; pixel_y = 8},/obj/item/device/assembly/signaler{pixel_x = 5; pixel_y = -5},/obj/item/device/assembly/signaler{pixel_x = 3; pixel_y = 4},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler{pixel_x = 4; pixel_y = -2},/obj/item/device/assembly/signaler{pixel_x = 4; pixel_y = -2},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing)
"bSk" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing)
"bSl" = (/obj/machinery/atmospherics/trinary/mixer{dir = 8; req_access = null; target_pressure = 1.5e+007},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing)