anchor.diff:  	if (!ismob(target))
   		extra_classes |= "small"
   
  +	var/list/prefixes
  +
   	// Append radio icon if from a virtual speaker
   	if (extra_classes.Find("virtual-speaker"))
   		var/image/r_icon = image('icons/UI_Icons/chat/chat_icons.dmi', icon_state = "radio")
  -		text =  "\icon[r_icon]&nbsp;[text]"
  +		LAZYADD(prefixes, "\icon[r_icon]")
   	else if (extra_classes.Find("emote"))
   		var/image/r_icon = image('icons/UI_Icons/chat/chat_icons.dmi', icon_state = "emote")
  -		text =  "\icon[r_icon]&nbsp;[text]"
  +		LAZYADD(prefixes, "\icon[r_icon]")
  +
  +	// Append language icon if the language uses one
  +	var/datum/language/language_instance = GLOB.language_datum_instances[language]
  +	if (language_instance?.display_icon(owner))
  +		var/icon/language_icon = LAZYACCESS(language_icons, language)
  +		if (isnull(language_icon))
  +			language_icon = icon(language_instance.icon, icon_state = language_instance.icon_state)
  +			language_icon.Scale(CHAT_MESSAGE_ICON_SIZE, CHAT_MESSAGE_ICON_SIZE)
  +			LAZYSET(language_icons, language, language_icon)
  +		LAZYADD(prefixes, "\icon[language_icon]")
  +
  +	text = "[prefixes?.Join("&nbsp;")][text]"
   
   	// We dim italicized text to make it more distinguishable from regular text
   	var/tgt_color = extra_classes.Find("italics") ? target.chat_color_darkened : target.chat_color
  
positive.code:   * * text - The text content of the overlay
    * * target - The target atom to display the overlay at
    * * owner - The mob that owns this overlay, only this mob will be able to view it
    * * extra_classes - Extra classes to apply to the span that holds the text
    * * lifespan - The lifespan of the message in deciseconds
    */
  /datum/chatmessage/New(text, atom/target, mob/owner, list/extra_classes = list(), lifespan = CHAT_MESSAGE_LIFESPAN)
  	. = ..()
  	if (!istype(target))
  		CRASH("Invalid target given for chatmessage")
  
negative.code: #define CHAT_LAYER_Z_STEP			0.0001
  /// The number of z-layer 'slices' usable by the chat message layering
  #define CHAT_LAYER_MAX_Z			(CHAT_LAYER_MAX - CHAT_LAYER) / CHAT_LAYER_Z_STEP
  /// The dimensions of the chat message icons
  #define CHAT_MESSAGE_ICON_SIZE		9
  /// Macro from Lummox used to get height from a MeasureText proc
  #define WXH_TO_HEIGHT(x)			text2num(copytext(x, findtextEx(x, "x") + 1))
  
  