diff --git a/code/modules/client/preference/character.dm b/code/modules/client/preference/character.dm
index 7ab967ed7e0..a55b0cb0ac7 100644
--- a/code/modules/client/preference/character.dm
+++ b/code/modules/client/preference/character.dm
@@ -95,6 +95,11 @@
/// Character slot number, used for saves and stuff.
var/slot_number = 0
+// Fuckery to prevent null characters
+/datum/character_save/New()
+ randomise()
+ real_name = random_name(gender, species)
+
/datum/character_save/proc/save(client/C)
var/organlist
var/rlimblist
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index befa6f05c8e..dced83d93db 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -494,7 +494,10 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
for(var/i in 1 to length(character_saves))
var/datum/character_save/CS = character_saves[i]
- name = CS.real_name || "Character [i]"
+ if(CS.from_db)
+ name = CS.real_name
+ else
+ name = "Character [i]"
if(i == default_slot)
name = "[name]"
dat += "[name]
"