diff --git a/src/i_sound.h b/src/i_sound.h
index 5368f3fd6fa331b867f6ddb887a3d6facd8a809d..7cb7ee9b012d279b024aa3a2ae78e746ec143404 100644
--- a/src/i_sound.h
+++ b/src/i_sound.h
@@ -122,7 +122,7 @@ void I_ShutdownMusic(void);
 
 	\return	void
 */
-void I_PauseSong(INT32 handle);
+void I_PauseSong(void);
 
 /**	\brief	RESUME game handling
 
@@ -130,7 +130,7 @@ void I_PauseSong(INT32 handle);
 
 	\return	void
 */
-void I_ResumeSong(INT32 handle);
+void I_ResumeSong(void);
 
 //
 //  MIDI I/O
@@ -153,7 +153,7 @@ void I_SetMIDIMusicVolume(UINT8 volume);
 
 	\todo Remove this
 */
-boolean I_LoadSong(void *data, size_t len);
+boolean I_LoadSong(char *data, size_t len);
 
 /**	\brief	Called by anything that wishes to start music
 
@@ -164,7 +164,7 @@ boolean I_LoadSong(void *data, size_t len);
 
 	\todo pass music name, not handle
 */
-boolean I_PlaySong(void);
+boolean I_PlaySong(boolean looping);
 
 /**	\brief	Stops a song over 3 seconds
 
diff --git a/src/s_sound.c b/src/s_sound.c
index 81e3e78e6f85f6793cc30021bd627327cc4aad68..7a0b99c303305df29d6c43a99cdd0c5acdebac79 100644
--- a/src/s_sound.c
+++ b/src/s_sound.c
@@ -1316,11 +1316,10 @@ static char      music_name[7]; // up to 6-character name
 static boolean   mus_forcemidi  = 0;  // force midi even when digital exists
 static boolean   mus_paused     = 0;  // whether songs are mus_paused
 
-static boolean S_LoadMusic(const char *mname, boolean looping)
+static boolean S_LoadMusic(const char *mname)
 {
 	lumpnum_t mlumpnum;
 	void *mdata;
-	INT32 mhandle;
 
 	if (nomidimusic || music_disabled)
 		return false; // didn't search.
@@ -1354,7 +1353,7 @@ static boolean S_LoadMusic(const char *mname, boolean looping)
 		return false;
 }
 
-static void S_UnloadSong(void)
+static void S_UnloadMusic(void)
 {
 	I_UnloadSong();
 	music_name[0] = 0;
@@ -1365,12 +1364,9 @@ static boolean S_PlayMusic(const char *mname, boolean looping)
 	if (nodigimusic || digital_disabled)
 		return false; // try midi
 
-	if (!S_LoadSong(mname, looping))
-		return false;
-
-	if (!I_PlaySong())
+	if (!I_PlaySong(looping))
 	{
-		S_UnloadSong();
+		S_UnloadMusic();
 		return false;
 	}
 
@@ -1394,7 +1390,7 @@ void S_ChangeMusic(const char *mmusic, UINT16 mflags, boolean looping)
 	if (strncmp(music_name, mmusic, 6))
 	{
 		S_StopMusic(); // shutdown old music
-		if (!S_LoadMusic(mmusic, looping) && !S_PlayMusic(mmusic, looping))
+		if (!S_LoadMusic(mmusic) && !S_PlayMusic(mmusic, looping))
 		{
 			CONS_Alert(CONS_ERROR, M_GetText("Music lump %.6s not found!\n"), mmusic);
 			return;
@@ -1414,7 +1410,7 @@ void S_StopMusic(void)
 		return;
 
 	if (mus_paused)
-		I_ResumeSong(music_handle);
+		I_ResumeSong();
 
 	S_SpeedMusic(1.0f);
 	I_StopSong();
@@ -1424,7 +1420,6 @@ void S_StopMusic(void)
 	Z_ChangeTag(music_data, PU_CACHE);
 #endif
 
-	music_data = NULL;
 	music_name[0] = 0;
 
 	if (cv_closedcaptioning.value)
@@ -1434,7 +1429,7 @@ void S_StopMusic(void)
 	}
 }
 
-void S_SetMusicVolume(INT32 volume)
+void S_SetDigMusicVolume(INT32 volume)
 {
 	if (volume < 0 || volume > 31)
 		CONS_Alert(CONS_WARNING, "musicvolume should be between 0-31\n");
@@ -1536,11 +1531,11 @@ void S_Start(void)
 void S_PauseAudio(void)
 {
 	if (!nodigimusic)
-		I_PauseSong(0);
+		I_PauseSong();
 
 	if (music_playing && !mus_paused)
 	{
-		I_PauseSong(music_handle);
+		I_PauseSong();
 		mus_paused = true;
 	}
 
@@ -1555,11 +1550,11 @@ void S_PauseAudio(void)
 void S_ResumeAudio(void)
 {
 	if (!nodigimusic)
-		I_ResumeSong(0);
+		I_ResumeSong();
 	else
 	if (music_playing && mus_paused)
 	{
-		I_ResumeSong(music_handle);
+		I_ResumeSong();
 		mus_paused = false;
 	}
 
diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c
index bd3f5e60a9c371f6f95c06311b1974c1046ceb25..48bb61649c9176f363bcef7bfff4eb739362dea2 100644
--- a/src/sdl/i_video.c
+++ b/src/sdl/i_video.c
@@ -566,7 +566,7 @@ static void Impl_HandleWindowEvent(SDL_WindowEvent evt)
 		// Tell game we got focus back, resume music if necessary
 		window_notinfocus = false;
 		if (!paused)
-			I_ResumeSong(0); //resume it
+			I_ResumeSong(); //resume it
 
 		if (!firsttimeonmouse)
 		{
@@ -578,7 +578,7 @@ static void Impl_HandleWindowEvent(SDL_WindowEvent evt)
 	{
 		// Tell game we lost focus, pause music
 		window_notinfocus = true;
-		I_PauseSong(0);
+		I_PauseSong();
 
 		if (!disable_mouse)
 		{
diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index 113c75d63232608dcf29b9403ff75e15e2af67fb..f67784fcd20626fe52f3334ab26e0637a4967139 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -491,16 +491,14 @@ void I_ShutdownMusic(void)
 	music = NULL;
 }
 
-void I_PauseSong(INT32 handle)
+void I_PauseSong(void)
 {
-	(void)handle;
 	Mix_PauseMusic();
 	songpaused = true;
 }
 
-void I_ResumeSong(INT32 handle)
+void I_ResumeSong(void)
 {
-	(void)handle;
 	Mix_ResumeMusic();
 	songpaused = false;
 }
@@ -570,7 +568,7 @@ boolean I_SetSongTrack(int track)
 // MIDI Music
 //
 
-boolean I_LoadSong(void *data, size_t len)
+boolean I_LoadSong(char *data, size_t len)
 {
 	I_Assert(!music);
 #ifdef HAVE_LIBGME
@@ -667,6 +665,8 @@ boolean I_LoadSong(void *data, size_t len)
 	else if (!gme_open_data(data, len, &gme, 44100))
 	{
 		gme_equalizer_t eq = {GME_TREBLE, GME_BASS, 0,0,0,0,0,0,0,0};
+		gme_set_equalizer(gme, &eq);
+		Mix_HookMusic(mix_gme, gme);
 		return true;
 	}
 #endif
@@ -680,43 +680,41 @@ boolean I_LoadSong(void *data, size_t len)
 
 	// Find the OGG loop point.
 	loop_point = 0.0f;
-	if (looping)
+
+	const char *key1 = "LOOP";
+	const char *key2 = "POINT=";
+	const char *key3 = "MS=";
+	const size_t key1len = strlen(key1);
+	const size_t key2len = strlen(key2);
+	const size_t key3len = strlen(key3);
+	char *p = data;
+	while ((UINT32)(p - data) < len)
 	{
-		const char *key1 = "LOOP";
-		const char *key2 = "POINT=";
-		const char *key3 = "MS=";
-		const size_t key1len = strlen(key1);
-		const size_t key2len = strlen(key2);
-		const size_t key3len = strlen(key3);
-		char *p = data;
-		while ((UINT32)(p - data) < len)
+		if (strncmp(p++, key1, key1len))
+			continue;
+		p += key1len-1; // skip OOP (the L was skipped in strncmp)
+		if (!strncmp(p, key2, key2len)) // is it LOOPPOINT=?
 		{
-			if (strncmp(p++, key1, key1len))
-				continue;
-			p += key1len-1; // skip OOP (the L was skipped in strncmp)
-			if (!strncmp(p, key2, key2len)) // is it LOOPPOINT=?
-			{
-				p += key2len; // skip POINT=
-				loop_point = (float)((44.1L+atoi(p)) / 44100.0L); // LOOPPOINT works by sample count.
-				// because SDL_Mixer is USELESS and can't even tell us
-				// something simple like the frequency of the streaming music,
-				// we are unfortunately forced to assume that ALL MUSIC is 44100hz.
-				// This means a lot of tracks that are only 22050hz for a reasonable downloadable file size will loop VERY badly.
-			}
-			else if (!strncmp(p, key3, key3len)) // is it LOOPMS=?
-			{
-				p += key3len; // skip MS=
-				loop_point = (float)(atoi(p) / 1000.0L); // LOOPMS works by real time, as miliseconds.
-				// Everything that uses LOOPMS will work perfectly with SDL_Mixer.
-			}
-			// Neither?! Continue searching.
+			p += key2len; // skip POINT=
+			loop_point = (float)((44.1L+atoi(p)) / 44100.0L); // LOOPPOINT works by sample count.
+			// because SDL_Mixer is USELESS and can't even tell us
+			// something simple like the frequency of the streaming music,
+			// we are unfortunately forced to assume that ALL MUSIC is 44100hz.
+			// This means a lot of tracks that are only 22050hz for a reasonable downloadable file size will loop VERY badly.
+		}
+		else if (!strncmp(p, key3, key3len)) // is it LOOPMS=?
+		{
+			p += key3len; // skip MS=
+			loop_point = (float)(atoi(p) / 1000.0L); // LOOPMS works by real time, as miliseconds.
+			// Everything that uses LOOPMS will work perfectly with SDL_Mixer.
 		}
+		// Neither?! Continue searching.
 	}
 
 	return true;
 }
 
-boolean I_PlaySong(void)
+boolean I_PlaySong(boolean looping)
 {
 	if (!music)
 		return false;
@@ -725,8 +723,6 @@ boolean I_PlaySong(void)
 	{
 		gme_start_track(gme, 0);
 		current_track = 0;
-		gme_set_equalizer(gme, &eq);
-		Mix_HookMusic(mix_gme, gme);
 		return true;
 	}
 #endif
@@ -782,7 +778,6 @@ void I_UnloadSong(void)
 	if (!midimode || !music)
 		return;
 
-	(void)handle;
 	Mix_FreeMusic(music);
 	music = NULL;
 }