diff --git a/src/info.c b/src/info.c
index 698e6c25f535ea83d505cbe2cf95f419635a264f..f00d32e0a01449fb41d8c8f3df986815d6829ea4 100644
--- a/src/info.c
+++ b/src/info.c
@@ -1911,18 +1911,18 @@ state_t states[NUMSTATES] =
 	{SPR_BBLS, 3, 8, {A_BubbleCheck}, 0, 0, S_BUBBLES1}, // S_BUBBLES4
 
 	// Level End Sign
-	{SPR_SIGN,                0, -1, {A_SignPlayer}, -3, 0, S_NULL},                    // S_SIGN
-	{SPR_SIGN,                0,  1,   {A_SignSpin}, 30, 0, S_SIGNSPIN2},            // S_SIGNSPIN1
-	{SPR_SIGN,                0,  0,     {A_Repeat},  4, S_SIGNSPIN1, S_SIGNSPIN3},   // S_SIGNSPIN2
-	{SPR_SIGN,                0,  0, {A_SignPlayer}, -2, 0, S_SIGNSPIN4},                // S_SIGNSPIN3
-	{SPR_SIGN,                0,  1,   {A_SignSpin}, 30, 0, S_SIGNSPIN5},            // S_SIGNSPIN4
-	{SPR_SIGN,                0,  0,     {A_Repeat},  4, S_SIGNSPIN4, S_SIGNSPIN6},   // S_SIGNSPIN5
-	{SPR_SIGN,                0,  0, {A_SignPlayer}, -3, 0, S_SIGNSPIN1},                // S_SIGNSPIN6
-	{SPR_SIGN,                0,  1, {A_SignPlayer}, -1, 0, S_SIGNSLOW},                // S_SIGNPLAYER
-	{SPR_SIGN,                0,  1,   {A_SignSpin}, 30, 0, S_SIGNSLOW},                // S_SIGNSLOW
-	{SPR_SIGN,                0, -1,         {NULL},  0, 0, S_NULL},                    // S_SIGNSTOP
-	{SPR_SIGN, FF_PAPERSPRITE|2, -1,         {NULL},  0, 0, S_NULL},                    // S_SIGNBOARD
-	{SPR_SIGN, FF_PAPERSPRITE|1, -1,         {NULL},  0, 29, S_NULL},                   // S_EGGMANSIGN
+	{SPR_SIGN,                0, -1, {A_SignPlayer}, -3, 0, S_NULL},                // S_SIGN
+	{SPR_SIGN,                0,  1,   {A_SignSpin}, 30, 0, S_SIGNSPIN2},           // S_SIGNSPIN1
+	{SPR_SIGN,                0,  0,     {A_Repeat},  4, S_SIGNSPIN1, S_SIGNSPIN3}, // S_SIGNSPIN2
+	{SPR_SIGN,                0,  0, {A_SignPlayer}, -2, 0, S_SIGNSPIN4},           // S_SIGNSPIN3
+	{SPR_SIGN,                0,  1,   {A_SignSpin}, 30, 0, S_SIGNSPIN5},           // S_SIGNSPIN4
+	{SPR_SIGN,                0,  0,     {A_Repeat},  4, S_SIGNSPIN4, S_SIGNSPIN6}, // S_SIGNSPIN5
+	{SPR_SIGN,                0,  0, {A_SignPlayer}, -3, 0, S_SIGNSPIN1},           // S_SIGNSPIN6
+	{SPR_SIGN,                0,  1, {A_SignPlayer}, -1, 0, S_SIGNSLOW},            // S_SIGNPLAYER
+	{SPR_SIGN,                0,  1,   {A_SignSpin}, 30, 0, S_SIGNSLOW},            // S_SIGNSLOW
+	{SPR_SIGN,                0, -1,         {NULL},  0, 0, S_NULL},                // S_SIGNSTOP
+	{SPR_SIGN, FF_PAPERSPRITE|2, -1,         {NULL},  0, 0, S_NULL},                // S_SIGNBOARD
+	{SPR_SIGN, FF_PAPERSPRITE|1, -1,         {NULL},  0, 29, S_NULL},               // S_EGGMANSIGN
 
 	// Spike Ball
 	{SPR_SPIK, 0, 1, {NULL}, 0, 0, S_SPIKEBALL2}, // S_SPIKEBALL1
@@ -7794,12 +7794,12 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
 		sfx_None,       // attacksound
 		S_SIGNPLAYER,   // painstate
 		MT_SPARK,       // painchance
-		sfx_None,       // painsound
+		sfx_s3kb8,      // painsound
 		S_EGGMANSIGN,   // meleestate
 		S_NULL,         // missilestate
 		S_SIGNSTOP,     // deathstate
 		S_NULL,         // xdeathstate
-		sfx_None,       // deathsound
+		sfx_s3k64,      // deathsound
 		8,              // speed
 		36*FRACUNIT,    // radius
 		32*FRACUNIT,    // height
diff --git a/src/p_enemy.c b/src/p_enemy.c
index 27033acbcaaf1db1f52aeefb50f8c7201908da67..3cb2b3354969376524c8e18f8daaf22e65ac6af5 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -5031,7 +5031,6 @@ void A_UnsetSolidSteam(mobj_t *actor)
 void A_SignSpin(mobj_t *actor)
 {
 	INT32 locvar1 = var1;
-	INT32 locvar2 = var2;
 	INT16 i;
 	angle_t rotateangle = FixedAngle(locvar1 << FRACBITS);
 
@@ -5042,6 +5041,11 @@ void A_SignSpin(mobj_t *actor)
 
 	if (P_IsObjectOnGround(actor) && P_MobjFlip(actor) * actor->momz <= 0)
 	{
+		if (actor->flags2 & MF2_BOSSFLEE)
+		{
+			S_StartSound(actor, actor->info->deathsound);
+			actor->flags2 &= ~MF2_BOSSFLEE;
+		}
 		if (actor->spawnpoint)
 		{
 			angle_t mapangle = FixedAngle(actor->spawnpoint->angle << FRACBITS);
@@ -5058,14 +5062,20 @@ void A_SignSpin(mobj_t *actor)
 		}
 		else // no mapthing? just finish in your current angle
 		{
-			P_SetMobjState(actor, locvar2);
+			P_SetMobjState(actor, actor->info->deathstate);
 			return;
 		}
 	}
 	else
 	{
+		if (!(actor->flags2 & MF2_BOSSFLEE))
+		{
+			S_StartSound(actor, actor->info->painsound);
+			actor->flags2 |= MF2_BOSSFLEE;
+		}
 		actor->movedir = rotateangle;
 	}
+
 	actor->angle += actor->movedir;
 	if (actor->tracer == NULL || P_MobjWasRemoved(actor->tracer)) return;
 	for (i = -1; i < 2; i += 2)
diff --git a/src/sounds.c b/src/sounds.c
index 197bfc0660a303dc213d139ca6c7137439f303b4..b067903b1fca6fdb5ae0bc61e083db79ad7d9919 100644
--- a/src/sounds.c
+++ b/src/sounds.c
@@ -578,7 +578,7 @@ sfxinfo_t S_sfx[NUMSFX] =
   {"s3kb5",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Clink"},
   {"s3kb6",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Spin launch"},
   {"s3kb7",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Tumbler"},
-  {"s3kb8",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Falling signpost"},
+  {"s3kb8",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Spinning signpost"},
   {"s3kb9",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Ring loss"},
   {"s3kba",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Flight"},
   {"s3kbb",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Tired flight"},