anchor.diff:  			translate_binary = TRUE
   		if(keyslot2.syndie)
   			syndie = TRUE
  -		if (keyslot2.independent)
  +		if(keyslot2.independent)
   			independent = TRUE
   
   		for(var/ch_name in channels)
   			secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name])
  +
  +	var/list/old_language_list = language_list?.Copy()
  +	language_list = list()
  +	if(keyslot?.translated_language)
  +		language_list += keyslot.translated_language
  +	if(keyslot2?.translated_language)
  +		language_list += keyslot2.translated_language
  +
  +	// If we're equipped on a mob, we should make sure all the languages
  +	// learned from our installed key chips are all still accurate
  +	var/mob/mob_loc = loc
  +	if(istype(mob_loc) && mob_loc.get_item_by_slot(slot_flags) == src)
  +		// Remove all the languages we may not be able to know anymore
  +		for(var/language in old_language_list)
  +			mob_loc.remove_language(language, understood = TRUE, spoken = FALSE, source = LANGUAGE_RADIOKEY)
  +
  +		// And grant all the languages we definitely should know now
  +		grant_headset_languages(mob_loc)
   
   /obj/item/radio/headset/AltClick(mob/living/user)
   	if(!istype(user) || !Adjacent(user) || user.incapacitated())
  
positive.code: 	set_listening(TRUE)
  	recalculateChannels()
  	possibly_deactivate_in_loc()
  	RegisterSignal(src, COMSIG_ITEM_EQUIPPED, .proc/learn_language)
  	RegisterSignal(src, COMSIG_ITEM_POST_UNEQUIP, .proc/unlearn_language)
  
  /obj/item/radio/headset/proc/possibly_deactivate_in_loc()
  	if(ismob(loc))
  
negative.code: 	else
  		return ..()
  
  /obj/item/radio/headset/recalculateChannels()
  	. = ..()
  	if(keyslot2)
  