anchor.diff:  
   	verify_keybindings_valid()		// one of these days this will runtime and you'll be glad that i put it in a different proc so no one gets their saves wiped
   
  -	return 1
  +	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()) // this updtates char slots
  +				save_character()
  +		default_slot = old_default_slot
  +		max_save_slots = old_max_save_slots
  +		save_preferences()
  +
  +	return TRUE
   
   /datum/preferences/proc/verify_keybindings_valid()
   	// Sanitize the actual keybinds to make sure they exist.
  
positive.code: 			gear_points -= init_cost
  
  	//try to fix any outdated data if necessary
  	if(needs_update >= 0)
  		update_character(needs_update, S)		//needs_update == savefile_version if we need an update (positive integer)
  
  
negative.code: 
  /datum/preferences/proc/load_preferences()
  	if(!path)
  		return FALSE
  	if(world.time < loadprefcooldown)
  		if(istype(parent))
  			to_chat(parent, "<span class='warning'>You're attempting to load your preferences a little too fast. Wait half a second, then try again.</span>")
  		return FALSE
  	loadprefcooldown = world.time + PREF_SAVELOAD_COOLDOWN
  	if(!fexists(path))
  		return FALSE
  
  	var/savefile/S = new /savefile(path)
  	if(!S)
  		return FALSE
  	S.cd = "/"
  
  	var/needs_update = savefile_needs_update(S)
  	if(needs_update == -2)		//fatal, can't load any data
  		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.
  		return FALSE
  
  	. = TRUE
  
  