diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 5cff548b620..7b273d9fc6e 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -60,7 +60,8 @@ calculate the longest number of ticks the MC can wait between each cycle without
for(var/datum/subsystem/S in subsystems)
S.Initialize(world.timeofday, zlevel)
sleep(-1)
-
+ for(var/datum/subsystem/S in subsystems)
+ S.AfterInitialize(zlevel)
world << "Initializations complete"
world.log << "Initializations complete"
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index 5c74da6d84d..86b00f971db 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -56,10 +56,12 @@ var/datum/subsystem/air/SSair
/datum/subsystem/air/Initialize(timeofday, zlevel)
- setup_allturfs(zlevel)
setup_atmos_machinery(zlevel)
..()
+/datum/subsystem/air/AfterInitialize(zlevel)
+ setup_allturfs(zlevel)
+
#define MC_AVERAGE(average, current) (0.8*(average) + 0.2*(current))
/datum/subsystem/air/fire()
var/timer = world.timeofday
@@ -167,15 +169,14 @@ var/datum/subsystem/air/SSair
EG.dismantle()
/datum/subsystem/air/proc/setup_allturfs(z_level)
+ active_turfs.Cut()
var/z_start = 1
var/z_finish = world.maxz
if(1 <= z_level && z_level <= world.maxz)
z_level = round(z_level)
z_start = z_level
z_finish = z_level
-
var/list/turfs_to_init = block(locate(1, 1, z_start), locate(world.maxx, world.maxy, z_finish))
-
for(var/turf/simulated/T in turfs_to_init)
T.CalculateAdjacentTurfs()
if(!T.blocks_air)
diff --git a/code/controllers/subsystems.dm b/code/controllers/subsystems.dm
index 5e10dcbcfd6..777bc2e5a1e 100644
--- a/code/controllers/subsystems.dm
+++ b/code/controllers/subsystems.dm
@@ -37,6 +37,9 @@
world << "[msg]"
world.log << msg
+/datum/subsystem/proc/AfterInitialize()
+ return
+
//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc.
/datum/subsystem/proc/stat_entry(msg)
var/dwait = ""