anchor.diff:  
   /obj/item/card/id/syndicate/attack_self(mob/user)
   	if(isliving(user) && user.mind)
  +		var/first_use = registered_name ? FALSE : TRUE
   		if(!(user.mind.special_role || anyone)) //Unless anyone is allowed, only syndies can use the card, to stop metagaming.
  -			if(!registered_name) //If a non-syndie is the first to forge an unassigned agent ID, then anyone can forge it.
  +			if(first_use) //If a non-syndie is the first to forge an unassigned agent ID, then anyone can forge it.
   				anyone = TRUE
   			else
   				return ..()
   
  -		var/popup_input = alert(user, "Choose Action", "Agent ID", "Show", "Forge/Reset")
  +		var/popup_input = alert(user, "Choose Action", "Agent ID", "Show", "Forge/Reset", "Change Account ID")
   		if(user.incapacitated())
   			return
  -		if(popup_input == "Forge/Reset" && !registered_name)
  +		if(popup_input == "Forge/Reset" && !forged)
   			var/input_name = stripped_input(user, "What name would you like to put on this card? Leave blank to randomise.", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name), MAX_NAME_LEN)
   			input_name = reject_bad_name(input_name)
   			if(!input_name)
   				// Invalid/blank names give a randomly generated one.
   				if(user.gender == FEMALE)
  +					input_name = "[pick(GLOB.first_names_female)] [pick(GLOB.last_names)]"
  +				else
   					input_name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
  -				else
  -					input_name = "[pick(GLOB.first_names_female)] [pick(GLOB.last_names)]"
   
   			var/target_occupation = stripped_input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", assignment ? assignment : "Assistant", MAX_MESSAGE_LEN)
   			if(!target_occupation)
  
positive.code: 			registered_name = input_name
  			assignment = target_occupation
  			update_label()
  			to_chat(user, "<span class='notice'>You successfully forge the ID card.</span>")
  			return
  	return ..()
  
  /obj/item/card/id/syndicate/anyone
  	anyone = TRUE
  
negative.code: 	name = "agent card"
  	access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE)
  	var/anyone = FALSE //Can anyone forge the ID or just syndicate?
  	var/forged = FALSE //have we set a custom name and job assignment, or will we use what we're given when we chameleon change?
  
  /obj/item/card/id/syndicate/Initialize()
  	. = ..()
  