diff --git a/src/y_inter.c b/src/y_inter.c
index 34e58494f1b9b9cc1c04d068d2db43b1cccf2c7d..8b5c9efc76a81a2a7dfd4333fd70bfd17356bab7 100644
--- a/src/y_inter.c
+++ b/src/y_inter.c
@@ -83,6 +83,10 @@ typedef union
 		INT32 passedx3;
 		INT32 passedx4;
 
+		INT32 emeraldbounces;
+		INT32 emeraldmomy;
+		INT32 emeraldy;
+
 		y_bonus_t bonuses[2];
 		patch_t *bonuspatches[2];
 
@@ -646,7 +650,6 @@ void Y_IntermissionDrawer(void)
 		}
 
 		// draw the emeralds
-		//if (intertic & 1)
 		if (LUA_HudEnabled(hud_intermissionemeralds))
 		{
 			boolean drawthistic = !(ALL7EMERALDS(emeralds) && (intertic & 1));
@@ -663,10 +666,6 @@ void Y_IntermissionDrawer(void)
 			}
 			else if (em < 7)
 			{
-				static UINT8 emeraldbounces = 0;
-				static INT32 emeraldmomy = 20;
-				static INT32 emeraldy = -40;
-
 				if (drawthistic)
 					for (i = 0; i < 7; ++i)
 					{
@@ -677,45 +676,15 @@ void Y_IntermissionDrawer(void)
 
 				emeraldx = 152 + (em-3)*28;
 
-				if (intertic <= 1)
+				if (intertic > 1)
 				{
-					emeraldbounces = 0;
-					emeraldmomy = 20;
-					emeraldy = -40;
-				}
-				else
-				{
-					if (!stagefailed)
-					{
-						if (emeraldbounces < 3)
-						{
-							emeraldy += (++emeraldmomy);
-							if (emeraldy > 74)
-							{
-								S_StartSound(NULL, sfx_tink); // tink
-								emeraldbounces++;
-								emeraldmomy = -(emeraldmomy/2);
-								emeraldy = 74;
-							}
-						}
-					}
-					else
+					if (stagefailed && data.spec.emeraldy < (vid.height/vid.dupy)+16)
 					{
-						if (emeraldy < (vid.height/vid.dupy)+16)
-						{
-							emeraldy += (++emeraldmomy);
-							emeraldx += intertic - 6;
-						}
-						if (emeraldbounces < 1 && emeraldy > 74)
-						{
-							S_StartSound(NULL, sfx_shldls); // nope
-							emeraldbounces++;
-							emeraldmomy = -(emeraldmomy/2);
-							emeraldy = 74;
-						}
+						emeraldx += intertic - 6;
 					}
+
 					if (drawthistic)
-						V_DrawScaledPatch(emeraldx, emeraldy, 0, emeraldpics[0][em]);
+						V_DrawScaledPatch(emeraldx, data.spec.emeraldy, 0, emeraldpics[0][em]);
 				}
 			}
 		}
@@ -1153,6 +1122,45 @@ void Y_Ticker(void)
 				S_ChangeMusicInternal("_clear", false); // don't loop it
 			tallydonetic = -1;
 		}
+		
+		// emerald bounce
+		if (intertic <= 1)
+		{
+			data.spec.emeraldbounces = 0;
+			data.spec.emeraldmomy = 20;
+			data.spec.emeraldy = -40;
+		}
+		else
+		{
+			if (!stagefailed)
+			{
+				if (data.spec.emeraldbounces < 3)
+				{
+					data.spec.emeraldy += (++data.spec.emeraldmomy);
+					if (data.spec.emeraldy > 74)
+					{
+						S_StartSound(NULL, sfx_tink); // tink
+						data.spec.emeraldbounces++;
+						data.spec.emeraldmomy = -(data.spec.emeraldmomy/2);
+						data.spec.emeraldy = 74;
+					}
+				}
+			}
+			else
+			{
+				if (data.spec.emeraldy < (vid.height/vid.dupy)+16)
+				{
+					data.spec.emeraldy += (++data.spec.emeraldmomy);
+				}
+				if (data.spec.emeraldbounces < 1 && data.spec.emeraldy > 74)
+				{
+					S_StartSound(NULL, sfx_shldls); // nope
+					data.spec.emeraldbounces++;
+					data.spec.emeraldmomy = -(data.spec.emeraldmomy/2);
+					data.spec.emeraldy = 74;
+				}
+			}
+		}
 
 		if (intertic < 2*TICRATE) // TWO second pause before tally begins, thank you mazmazz
 			return;