diff --git a/src/p_inter.c b/src/p_inter.c
index 58dc198ebf1a1e422a4959aa901325ed510277b2..5cf55ce0562b117af1abe20416352f216dd347e3 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -334,16 +334,18 @@ void P_DoMatchSuper(player_t *player)
 			}
 }
 
-static void P_CollectRing(player_t *player, mobj_t *special)
+static boolean P_CollectRing(player_t *player, mobj_t *special)
 {
 	if (!(P_CanPickupItem(player, false)) && !(special->flags2 & MF2_NIGHTSPULL))
-		return;
+		return false;
 
 	special->momx = special->momy = special->momz = 0;
 	P_GivePlayerRings(player, 1);
 
 	if ((maptol & TOL_NIGHTS) && special->type != MT_FLINGRING && special->type != MT_FLINGCOIN)
 		P_DoNightsScore(player);
+
+	return true;
 }
 
 /** Takes action based on a ::MF_SPECIAL thing touched by a player.
@@ -637,7 +639,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
 		case MT_NIGHTSSTAR:
 		case MT_REDTEAMRING:
 		case MT_BLUETEAMRING:
-			P_CollectRing(player, special);
+			if (!P_CollectRing(player, special))
+				return;
 			break;
 		case MT_BLUESPHERE:
 		case MT_FLINGBLUESPHERE: