diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 74cd53b0ae..b3c8a6422f 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -48,6 +48,13 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
cli.prefs.save_character()
if (!silent && LAZYLEN(cut))
to_chat(to_chat_target || user, "Some quirks have been cut from your character because of these quirks conflicting with your job assignment: [english_list(cut)].")
+
+ var/mob/living/carbon/human/H = user
+ if(istype(H) && H.dna?.species)
+ var/datum/species/S = H.dna.species
+ if(S.remove_blacklisted_quirks(H))
+ to_chat(to_chat_target || user, "Some quirks have been cut from your character due to them conflicting with your species: [english_list(S.removed_quirks)]")
+
/datum/controller/subsystem/processing/quirks/proc/quirk_path_by_name(name)
return quirks[name]
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 93d2c47795..1c5bdb6114 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -581,16 +581,32 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
// shamelessly inspired by antag_datum.remove_blacklisted_quirks()
/datum/species/proc/remove_blacklisted_quirks(mob/living/carbon/C)
- var/mob/living/L = C.mind?.current
- if(istype(L))
+ . = 0
+ if(istype(C))
if(!balance_point_values)
- for(var/q in L.roundstart_quirks)
+ for(var/q in C.roundstart_quirks)
var/datum/quirk/Q = q
if(Q.type in blacklisted_quirks)
- qdel(Q)
removed_quirks += Q.type
+ . += 1
+ qdel(Q)
else
- removed_quirks += SSquirks.filter_quirks(L.roundstart_quirks, blacklisted_quirks)
+ var/point_overhead = 0
+ for(var/datum/quirk/Q as anything in C.roundstart_quirks)
+ if(Q.type in blacklisted_quirks)
+ point_overhead -= Q.value
+ removed_quirks += Q.type
+ . += 1
+ qdel(Q)
+ if(point_overhead)
+ for(var/datum/quirk/Q as anything in C.roundstart_quirks)
+ if(Q.value > 0)
+ point_overhead -= Q.value
+ removed_quirks += Q.type
+ . += 1
+ qdel(Q)
+ if(!point_overhead)
+ break
// restore any quirks that we removed
/datum/species/proc/restore_quirks(mob/living/carbon/C)