diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index 6ccedc12488503251ec12371033aa7259c2556c8..759bd7dde3d5b206aa6497c5510d63416edd5e6e 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -68,6 +68,7 @@ static UINT8 music_volume, midi_volume, sfx_volume;
 static float loop_point;
 static boolean songpaused;
 static UINT32 music_bytes;
+static boolean is_looping;
 
 #ifdef HAVE_LIBGME
 static Music_Emu *gme;
@@ -440,9 +441,14 @@ void I_SetSfxVolume(UINT8 volume)
 // Music hooks
 static void music_loop(void)
 {
-	Mix_PlayMusic(music, 0);
-	Mix_SetMusicPosition(loop_point);
-	music_bytes = loop_point/1000.0L*44100.0L*4; //assume 44.1khz, 4-byte length (see I_GetMusicPosition)
+	if (is_looping)
+	{
+		Mix_PlayMusic(music, 0);
+		Mix_SetMusicPosition(loop_point);
+		music_bytes = loop_point/1000.0L*44100.0L*4; //assume 44.1khz, 4-byte length (see I_GetMusicPosition)
+	}
+	else
+		music_bytes = 0;
 }
 
 static void count_music_bytes(int chan, void *stream, int len, void *udata)
@@ -558,6 +564,7 @@ void I_ShutdownDigMusic(void)
 #endif
 	if (!music)
 		return;
+	is_looping = false;
 	music_bytes = 0;
 	Mix_UnregisterEffect(MIX_CHANNEL_POST, count_music_bytes);
 	Mix_HookMusicFinished(NULL);
@@ -689,6 +696,7 @@ boolean I_StartDigSong(const char *musicname, boolean looping)
 	}
 
 	// Find the OGG loop point.
+	is_looping = looping;
 	loop_point = 0.0f;
 	if (looping)
 	{
@@ -755,6 +763,7 @@ void I_StopDigSong(void)
 #endif
 	if (!music)
 		return;
+	is_looping = false;
 	music_bytes = 0;
 	Mix_UnregisterEffect(MIX_CHANNEL_POST, count_music_bytes);
 	Mix_HookMusicFinished(NULL);
@@ -857,6 +866,7 @@ void I_ShutdownMIDIMusic(void)
 {
 	if (!midimode || !music)
 		return;
+	is_looping = false;
 	//MIDI does count correctly, but dummy out because unsupported
 	//music_bytes = 0;
 	//Mix_UnregisterEffect(MIX_CHANNEL_POST, count_music_bytes);
@@ -900,7 +910,11 @@ boolean I_PlaySong(INT32 handle, boolean looping)
 		return false;
 	}
 
+	is_looping = looping;
+
 	//MIDI does count correctly, but dummy out because unsupported
+	//If this is enabled, you need to edit Mix_PlayMusic above to never loop (0) 
+	//and register the music_loop callback
 	//music_bytes = 0;
 	//if(!Mix_RegisterEffect(MIX_CHANNEL_POST, count_music_bytes, NULL, NULL))
 	//	CONS_Alert(CONS_WARNING, "Error registering SDL music position counter: %s\n", Mix_GetError());
@@ -914,6 +928,8 @@ void I_StopSong(INT32 handle)
 	if (!midimode || !music)
 		return;
 
+	is_looping = false;
+
 	//MIDI does count correctly, but dummy out because unsupported
 	//music_bytes = 0;
 	//Mix_UnregisterEffect(MIX_CHANNEL_POST, count_music_bytes);
@@ -926,6 +942,8 @@ void I_UnRegisterSong(INT32 handle)
 	if (!midimode || !music)
 		return;
 
+	is_looping = false;
+
 	//MIDI does count correctly, but dummy out because unsupported
 	//music_bytes = 0;
 	//Mix_UnregisterEffect(MIX_CHANNEL_POST, count_music_bytes);