anchor.diff:  	var/mail_waiting = 0
   	/// Mail Holiday: AKA does mail arrive today? Always blocked on Sundays.
   	var/mail_blocked = FALSE
  +	/// List used to track partially completed processing steps
  +	/// Allows for proper yielding
  +	var/list/cached_processing
  +	/// Tracks what bit of processing we're on, so we can resume post yield in the right place
  +	var/processing_part
  +	/// Tracks a temporary sum of all money in the system
  +	/// We need this on the subsystem because of yielding and such
  +	var/temporary_total = 0
   
   /datum/controller/subsystem/economy/Initialize(timeofday)
   	//removes cargo from the split
  
positive.code: 	bank_accounts_by_id = SSeconomy.bank_accounts_by_id
  	dep_cards = SSeconomy.dep_cards
  
  /datum/controller/subsystem/economy/fire(resumed = 0)
  	var/temporary_total = 0
  	var/delta_time = wait / (5 MINUTES)
  	departmental_payouts()
  	station_total = 0
  	station_target_buffer += STATION_TARGET_BUFFER
  	for(var/account in bank_accounts_by_id)
  		var/datum/bank_account/bank_account = bank_accounts_by_id[account]
  		if(bank_account?.account_job && !ispath(bank_account.account_job))
  			temporary_total += (bank_account.account_job.paycheck * STARTING_PAYCHECKS)
  		bank_account.payday(1)
  		station_total += bank_account.account_balance
  	station_target = max(round(temporary_total / max(bank_accounts_by_id.len * 2, 1)) + station_target_buffer, 1)
  	if(!HAS_TRAIT(SSeconomy, TRAIT_MARKET_CRASHING))
  		price_update()
  	var/effective_mailcount = round(living_player_count()/(inflation_value - 0.5)) //More mail at low inflation, and vis versa.
  	mail_waiting += clamp(effective_mailcount, 1, MAX_MAIL_PER_MINUTE * delta_time)
  
  /**
   * Handy proc for obtaining a department's bank account, given the department ID, AKA the define assigned for what department they're under.
   */
  /datum/controller/subsystem/economy/proc/get_dep_account(dep_id)
  	for(var/datum/bank_account/department/D in generated_accounts)
  		if(D.department_id == dep_id)
  			return D
  
  /**
   * Departmental income payments are kept static and linear for every department, and paid out once every 5 minutes, as determined by MAX_GRANT_DPT.
   * Iterates over every department account for the same payment.
   */
  /datum/controller/subsystem/economy/proc/departmental_payouts()
  	for(var/iteration in department_accounts)
  		var/datum/bank_account/dept_account = get_dep_account(iteration)
  		if(!dept_account)
  			continue
  		dept_account.adjust_money(MAX_GRANT_DPT)
  
  /**
   * Updates the prices of all station vendors with the inflation_value, increasing/decreasing costs across the station, and alerts the crew.
  
negative.code:  * Iterates over the machines list for vending machines, resets their regular and premium product prices (Not contraband), and sends a message to the newscaster network.
   **/
  /datum/controller/subsystem/economy/proc/price_update()
  	var/list/cached_processing = src.cached_processing
  	for(var/i in 1 to length(cached_processing))
  		var/obj/machinery/vending/V = cached_processing[i]
  		V.reset_prices(V.product_records, V.coin_records)
  		if(MC_TICK_CHECK)
  			cached_processing.Cut(1, i + 1)
  			return FALSE
  	earning_report = "<b>Sector Economic Report</b><br><br> Sector vendor prices is currently at <b>[SSeconomy.inflation_value()*100]%</b>.<br><br> The station spending power is currently <b>[station_total] Credits</b>, and the crew's targeted allowance is at <b>[station_target] Credits</b>.<br><br> That's all from the <i>Nanotrasen Economist Division</i>."
  	GLOB.news_network.submit_article(earning_report, "Station Earnings Report", "Station Announcements", null, update_alert = FALSE)
  	return TRUE
  
  /**
   * Proc that returns a value meant to shift inflation values in vendors, based on how much money exists on the station.
  