diff --git a/src/p_setup.c b/src/p_setup.c
index 50df3c01a4544111573996de4323816a7a4c99ef..9bc334ff060a1700f0de137b2441ef47f63c2274 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -691,58 +691,39 @@ void P_ScanThings(INT16 mapnum, INT16 wadnum, INT16 lumpnum)
 }
 #endif
 
-static void P_SpawnEmeraldHunt(void)
+static void P_SpawnEmeraldHunt(int amount)
 {
-	INT32 emer1, emer2, emer3;
+	INT32 emer[amount];
 	INT32 timeout = 0; // keeps from getting stuck
 	fixed_t x, y, z;
 
-	emer1 = emer2 = emer3 = 0;
-
 	//increment spawn numbers because zero is valid.
-	emer1 = (P_RandomKey(numhuntemeralds)) + 1;
+	emer[0] = (P_RandomKey(numhuntemeralds)) + 1;
 	while (timeout++ < 100)
 	{
-		emer2 = (P_RandomKey(numhuntemeralds)) + 1;
+		emer[1] = (P_RandomKey(numhuntemeralds)) + 1;
 
-		if (emer2 != emer1)
+		if (emer[1] != emer[0])
 			break;
 	}
 
 	timeout = 0;
 	while (timeout++ < 100)
 	{
-		emer3 = (P_RandomKey(numhuntemeralds)) + 1;
+		emer[2] = (P_RandomKey(numhuntemeralds)) + 1;
 
-		if (emer3 != emer2 && emer3 != emer1)
+		if (emer[2] != emer[1] && emer[2] != emer[0])
 			break;
 	}
 
 	//decrement spawn values to the actual number because zero is valid.
-	if (emer1--)
-	{
-		x = huntemeralds[emer1]->x<<FRACBITS;
-		y = huntemeralds[emer1]->y<<FRACBITS;
-		z = P_GetMapThingSpawnHeight(MT_EMERHUNT, huntemeralds[emer1], x, y);
-		P_SpawnMobj(x, y, z, MT_EMERHUNT);
-	}
-
-	if (emer2--)
-	{
-		x = huntemeralds[emer2]->x<<FRACBITS;
-		y = huntemeralds[emer2]->y<<FRACBITS;
-		z = P_GetMapThingSpawnHeight(MT_EMERHUNT, huntemeralds[emer2], x, y);
-		P_SetMobjStateNF(P_SpawnMobj(x, y, z, MT_EMERHUNT),
-		mobjinfo[MT_EMERHUNT].spawnstate+1);
-	}
-
-	if (emer3--)
+	for (int i = 0; i < amount; i++)
 	{
-		x = huntemeralds[emer3]->x<<FRACBITS;
-		y = huntemeralds[emer3]->y<<FRACBITS;
-		z = P_GetMapThingSpawnHeight(MT_EMERHUNT, huntemeralds[emer3], x, y);
+		x = huntemeralds[emer[i]-1]->x<<FRACBITS;
+		y = huntemeralds[emer[i]-1]->y<<FRACBITS;
+		z = P_GetMapThingSpawnHeight(MT_EMERHUNT, huntemeralds[emer[i]-1], x, y);
 		P_SetMobjStateNF(P_SpawnMobj(x, y, z, MT_EMERHUNT),
-		mobjinfo[MT_EMERHUNT].spawnstate+2);
+		mobjinfo[MT_EMERHUNT].spawnstate+i);
 	}
 }
 
@@ -791,7 +772,7 @@ static void P_SpawnMapThings(boolean spawnemblems)
 
 	// random emeralds for hunt
 	if (numhuntemeralds)
-		P_SpawnEmeraldHunt();
+		P_SpawnEmeraldHunt(3);
 }
 
 // Experimental groovy write function!