diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index d228a9df1b7..3f81826c816 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -126,7 +126,11 @@
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)
+ var/relevent_cap
+ if(config.hard_popcap && config.extreme_popcap)
+ relevent_cap = min(config.hard_popcap, config.extreme_popcap)
+ else
+ relevent_cap = max(config.hard_popcap, config.extreme_popcap)
if(relevent_cap && living_player_count() >= relevent_cap && !(ckey(key) in admin_datums))
usr << "[config.hard_popcap_message]"
return