diff --git a/src/s_sound.c b/src/s_sound.c
index 1f68cc392ff8456c112460e0d1d8102795586ded..829ff0a980a84518a374bae0cdb5e0e22a03c390 100644
--- a/src/s_sound.c
+++ b/src/s_sound.c
@@ -36,6 +36,7 @@ extern INT32 msg_id;
 #include "d_main.h"
 #include "r_sky.h" // skyflatnum
 #include "p_local.h" // camera info
+#include "fastcmp.h"
 
 #ifdef HW3SOUND
 // 3D Sound Interface
@@ -592,17 +593,21 @@ dontplay:
 	// Handle closed caption input.
 	if (cv_closedcaptioning.value && sfx->caption[0] != '/')
 	{
-		UINT8 i, set = 7;
+		UINT8 i, set = 7, moveup = 255;
 
 		for (i = 0; i < set; i++)
 		{
-			if ((sfx == closedcaptions[i].s)
+			boolean same = ((sfx == closedcaptions[i].s) || (closedcaptions[i].s && fastcmp(sfx->caption, closedcaptions[i].s->caption)));
+			if (same
 			|| !(closedcaptions[i].c || closedcaptions[i].s) || (sfx->priority >= closedcaptions[i].s->priority))
 			{
 				set = i;
+				if (closedcaptions[i].s && !same && (sfx->priority >= closedcaptions[i].s->priority))
+					moveup = i;
 				break;
 			}
 		}
+
 		if (sfx != closedcaptions[set].s)
 		{
 			for (i = 7; i > set; i--)
@@ -615,6 +620,22 @@ dontplay:
 				}
 			}
 		}
+
+		if (moveup != 255)
+		{
+			for (i = moveup; i < 7; i++)
+			{
+				if (!(closedcaptions[i].c || closedcaptions[i].s))
+					break;
+			}
+			for (; i > set; i--)
+			{
+				closedcaptions[i].c = closedcaptions[i-1].c;
+				closedcaptions[i].s = closedcaptions[i-1].s;
+				closedcaptions[i].t = closedcaptions[i-1].t;
+			}
+		}
+
 		closedcaptions[set].c = &channels[cnum];
 		closedcaptions[set].s = sfx;
 		closedcaptions[set].t = TICRATE+2;
diff --git a/src/sounds.c b/src/sounds.c
index e2ee03df19733d8662d303839c85a42f37e83cde..3a4c9cd5e981be753f24b0dbc5d10a4489d5c727 100644
--- a/src/sounds.c
+++ b/src/sounds.c
@@ -377,10 +377,10 @@ sfxinfo_t S_sfx[NUMSFX] =
   {"s3k97",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Wind"},
   {"s3k98",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Falling spike"},
   {"s3k99",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Bounce"},
-  {"s3k9a",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, ""},
+  {"s3k9a",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Click"},
   {"s3k9b",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Crusher stomp"},
   {"s3k9c",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Got Super Emerald"},
-  {"s3k9d",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Targetting"},
+  {"s3k9d",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Targeting"},
   {"s3k9e",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Metallic clink"},
   {"s3k9f",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Super transformation"},
   {"s3ka0",  false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Launch"},