diff --git a/code/datums/weather/weather_types.dm b/code/datums/weather/weather_types.dm
index 9533aadc2c..43cc3c6ed8 100644
--- a/code/datums/weather/weather_types.dm
+++ b/code/datums/weather/weather_types.dm
@@ -154,12 +154,56 @@
L.adjustToxLoss(4)
-
-
-
-
/datum/weather/rad_storm/end()
if(..())
return
priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert")
- spawn(300) revoke_maint_all_access()
\ No newline at end of file
+ spawn(300) revoke_maint_all_access()
+
+/datum/weather/solar_flare
+ name = "solar flare"
+ desc = "A solar flare from the local star knocks out power on the station."
+
+ telegraph_duration = 300
+ telegraph_message = "You feel a slight tingling in the air."
+
+ weather_message = "Everything shuts off all at once, and the station becomes dark and lifeless."
+ weather_duration_lower = 450
+ weather_duration_upper = 900
+ weather_sound = 'sound/effects/powerdown.ogg'
+
+ end_duration = 100
+ end_message = "The buzz of electronics returns once more as the power turns back on."
+ end_sound = 'sound/effects/powerup.ogg'
+
+ area_type = /area
+ protected_areas = list(/area/maintenance, /area/turret_protected/ai_upload, /area/turret_protected/ai_upload_foyer, /area/turret_protected/ai, /area/engine/engineering)
+ target_z = ZLEVEL_STATION
+
+ immunity_type = null
+
+/datum/weather/solar_flare/update_areas()
+ for(var/V in impacted_areas)
+ var/area/A = V
+ if(stage == MAIN_STAGE)
+ A.power_light = 0
+ A.power_equip = 0
+ A.power_environ = 0
+ A.power_change()
+ for(var/obj/machinery/power/apc/apc in machines)
+ apc.shorted_old = apc.shorted
+ var/area/C = get_area(apc)
+ if(C in impacted_areas)
+ apc.shorted = TRUE
+ else
+ A.power_light = 1
+ A.power_equip = 1
+ A.power_environ = 1
+ A.power_change()
+ for(var/obj/machinery/power/apc/apc in machines)
+ apc.shorted = apc.shorted_old
+
+/datum/weather/solar_flare/end()
+ if(..())
+ return
+ addtimer(GLOBAL_PROC, "priority_announce", 60, FALSE, "The solar flare has ended. Please return to work.", "Anomaly Alert")
diff --git a/code/modules/events/solar_flare.dm b/code/modules/events/solar_flare.dm
new file mode 100644
index 0000000000..5f64570c7d
--- /dev/null
+++ b/code/modules/events/solar_flare.dm
@@ -0,0 +1,17 @@
+/datum/round_event_control/solar_flare
+ name = "Solar Flare"
+ typepath = /datum/round_event/solar_flare
+ max_occurrences = 1
+
+/datum/round_event/solar_flare
+
+/datum/round_event/solar_flare/setup()
+ startWhen = 3
+ endWhen = startWhen + 1
+ announceWhen = 1
+
+/datum/round_event/solar_flare/announce()
+ priority_announce("Incoming solar flare detected near the station. Expect power outages in all exposed areas for a short duration.", "Anomaly Alert", 'sound/effects/alert.ogg')
+
+/datum/round_event/solar_flare/start()
+ SSweather.run_weather("solar flare",1)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 9df9e9337c..17a3075c11 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -55,6 +55,7 @@
var/cell_type = 2500 // 0=no cell, 1=regular, 2=high-cap (x5) <- old, now it's just 0=no cell, otherwise dictate cellcapacity by changing this value. 1 used to be 1000, 2 was 2500
var/opened = 0 //0=closed, 1=opened, 2=cover removed
var/shorted = 0
+ var/shorted_old = 0 //for solar flare
var/lighting = 3
var/equipment = 3
var/environ = 3
@@ -1156,4 +1157,4 @@
/obj/item/weapon/electronics/apc
name = "power control module"
icon_state = "power_mod"
- desc = "Heavy-duty switching circuits for power control."
\ No newline at end of file
+ desc = "Heavy-duty switching circuits for power control."
diff --git a/sound/effects/powerdown.ogg b/sound/effects/powerdown.ogg
new file mode 100644
index 0000000000..04c7bc643d
Binary files /dev/null and b/sound/effects/powerdown.ogg differ
diff --git a/sound/effects/powerup.ogg b/sound/effects/powerup.ogg
new file mode 100644
index 0000000000..d218a17331
Binary files /dev/null and b/sound/effects/powerup.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 8b2b7e3725..d6799401b0 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1112,6 +1112,7 @@
#include "code\modules\events\processor_overload.dm"
#include "code\modules\events\radiation_storm.dm"
#include "code\modules\events\shuttle_loan.dm"
+#include "code\modules\events\solar_flare.dm"
#include "code\modules\events\spacevine.dm"
#include "code\modules\events\spider_infestation.dm"
#include "code\modules\events\spontaneous_appendicitis.dm"