anchor.diff:  	pda_style		= sanitize_inlist(pda_style, GLOB.pda_styles, initial(pda_style))
   	pda_color		= sanitize_hexcolor(pda_color, 6, 1, initial(pda_color))
   	key_bindings 	= sanitize_keybindings(key_bindings)
  -
  +	
  +	if(needs_update >= 0) //save the updated version
  +		var/old_default_slot = default_slot
  +		var/old_max_save_slots = max_save_slots
  +		
  +		for (var/slot in S.dir) //but first, update all current character slots.
  +			if (copytext(slot, 1, 10) != "character")
  +				continue
  +			var/slotnum = text2num(copytext(slot, 10))
  +			if (!slotnum)
  +				continue
  +			max_save_slots = max(max_save_slots, slotnum) //so we can still update byond member slots after they lose memeber status
  +			default_slot = slotnum
  +			if (load_character())
  +				save_character()
  +		default_slot = old_default_slot
  +		max_save_slots = old_max_save_slots
  +		save_preferences()
   
   	return TRUE
   
  
positive.code: 			pref_species = new newtype
  
  	scars_index = rand(1,5)
  
  	if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000")
  		WRITE_FILE(S["features["mcolor"]"]	, "#FFF")
  
  	if(!S["feature_ethcolor"] || S["feature_ethcolor"] == "#000")
  		WRITE_FILE(S["feature_ethcolor"]	, "9c3030")
  
  	//Character
  	READ_FILE(S["real_name"], real_name)
  
negative.code: 
  	//try to fix any outdated data if necessary
  	if(needs_update >= 0)
  		var/bacpath = "[path].updatebac" //todo: if the savefile version is higher then the server, check the backup, and give the player a prompt to load the backup
  		if (fexists(bacpath))
  			fdel(bacpath) //only keep 1 version of backup
  		fcopy(S, bacpath) //byond helpfully lets you use a savefile for the first arg.
  		update_preferences(needs_update, S)		//needs_update = savefile_version if we need an update (positive integer)
  		
  		
  
  	//Sanitize
  	asaycolor		= sanitize_ooccolor(sanitize_hexcolor(asaycolor, 6, 1, initial(asaycolor)))
  