diff --git a/code/modules/asset_cache/assets/chat.dm b/code/modules/asset_cache/assets/chat.dm
index 471e8ce85dc..890f05afe39 100644
--- a/code/modules/asset_cache/assets/chat.dm
+++ b/code/modules/asset_cache/assets/chat.dm
@@ -11,3 +11,7 @@
if (icon != 'icons/ui/chat/language.dmi')
var/icon_state = initial(L.icon_state)
insert_icon("language-[icon_state]", uni_icon(icon, icon_state))
+
+ var/datum/universal_icon/byond_member = uni_icon('icons/ui/chat/member_content.dmi', "blag")
+ byond_member.scale(16, 16)
+ insert_icon("byond_member", byond_member)
diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm
index 7aa9ffd8fb8..cb02dc6d248 100644
--- a/code/modules/client/verbs/ooc.dm
+++ b/code/modules/client/verbs/ooc.dm
@@ -77,12 +77,27 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
mob.log_talk(raw_msg, LOG_OOC)
var/keyname = key
- if(prefs.unlock_content)
- if(prefs.toggles & MEMBER_PUBLIC)
- keyname = "[icon2html('icons/ui/chat/member_content.dmi', world, "blag")][keyname]"
+ var/list/key_tags
+ var/key_prefix = ""
+ var/visible_unlock = prefs.unlock_content && (prefs.toggles & MEMBER_PUBLIC)
+
+ // heart first lol
if(prefs.hearted)
- var/datum/asset/spritesheet_batched/sheet = get_asset_datum(/datum/asset/spritesheet_batched/chat)
- keyname = "[sheet.icon_tag("emoji-heart")][keyname]"
+ LAZYADD(key_tags, "emoji-heart")
+ if(visible_unlock)
+ LAZYADD(key_tags, "byond_member")
+
+ if(LAZYLEN(key_tags))
+ var/datum/asset/spritesheet_batched/chat/sheet = get_asset_datum(/datum/asset/spritesheet_batched/chat)
+ for(var/icon_name in key_tags)
+ key_prefix = "[key_prefix][sheet.icon_tag(icon_name)]"
+ key_prefix = "[key_prefix]"
+
+ keyname = "[key_prefix][keyname]"
+
+ if(visible_unlock)
+ keyname = "[keyname]"
+
//The linkify span classes and linkify=TRUE below make ooc text get clickable chat href links if you pass in something resembling a url
for(var/client/receiver as anything in GLOB.clients)
if(!receiver.prefs) // Client being created or deleted. Despite all, this can be null.