diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index d228a9df1b7..040a14f7802 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -126,8 +126,12 @@
if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
usr << "The round is either not ready, or has already finished..."
return
- var/relevent_cap = max(config.hard_popcap, config.extreme_popcap)
- if(relevent_cap && living_player_count() >= relevent_cap && !(ckey(key) in admin_datums))
+ var/relevant_cap
+ if(config.hard_popcap && config.extreme_popcap)
+ relevant_cap = min(config.hard_popcap, config.extreme_popcap)
+ else
+ relevant_cap = max(config.hard_popcap, config.extreme_popcap)
+ if(relevant_cap && living_player_count() >= relevant_cap && !(ckey(key) in admin_datums))
usr << "[config.hard_popcap_message]"
return
LateChoices()