diff --git a/src/android/i_sound.c b/src/android/i_sound.c
index ecf96f2f053cf2ca8e3cb135b34cfc7e2dccd0c0..1011dbb6a5580f2325355b93ffa4d743b2e64c01 100644
--- a/src/android/i_sound.c
+++ b/src/android/i_sound.c
@@ -64,12 +64,12 @@ void I_InitMusic(void){}
 
 void I_ShutdownMusic(void){}
 
-void I_PauseSong(INT32 handle)
+void I_PauseSong(void)
 {
         (void)handle;
 }
 
-void I_ResumeSong(INT32 handle)
+void I_ResumeSong(void)
 {
         (void)handle;
 }
@@ -80,23 +80,19 @@ void I_ResumeSong(INT32 handle)
 
 UINT8 midimusic_started = 0;
 
-void I_InitMIDIMusic(void){}
-
-void I_ShutdownMIDIMusic(void){}
-
-void I_SetMIDIMusicVolume(INT32 volume)
-{
-        (void)volume;
-}
-
-INT32 I_RegisterSong(void *data, size_t len)
+boolean I_LoadSong(char *data, size_t len)
 {
         (void)data;
         (void)len;
         return -1;
 }
 
-boolean I_PlaySong(INT32 handle, INT32 looping)
+void I_SetMIDIMusicVolume(INT32 volume)
+{
+        (void)volume;
+}
+
+boolean I_PlaySong(boolean looping)
 {
         (void)handle;
         (void)looping;
diff --git a/src/djgppdos/i_sound.c b/src/djgppdos/i_sound.c
index 88fc807f408cb4f285086fdabd854658b83063ad..105e8d67a0fbb2bb3ebd1f09a6ce47f90f48dd16 100644
--- a/src/djgppdos/i_sound.c
+++ b/src/djgppdos/i_sound.c
@@ -408,31 +408,7 @@ void I_ShutdownMIDIMusic(void)
 	music_started=false;
 }
 
-void I_InitDigMusic(void)
-{
-//	CONS_Printf("Digital music not yet supported under DOS.\n");
-}
-
-void I_ShutdownDigMusic(void)
-{
-//	CONS_Printf("Digital music not yet supported under DOS.\n");
-}
-
-void I_InitMusic(void)
-{
-	if (!nodigimusic)
-		I_InitDigMusic();
-	if (!nomidimusic)
-		I_InitMIDIMusic();
-}
-
-void I_ShutdownMusic(void)
-{
-	I_ShutdownMIDIMusic();
-	I_ShutdownDigMusic();
-}
-
-boolean I_PlaySong(INT32 handle, INT32 looping)
+boolean I_PlaySong(boolean looping)
 {
 	handle = 0;
 	if (nomidimusic)
@@ -495,7 +471,7 @@ void I_UnRegisterSong(INT32 handle)
 	//destroy_midi(currsong);
 }
 
-INT32 I_RegisterSong(void *data, size_t len)
+boolean I_LoadSong(char *data, size_t len)
 {
 	int e = len; //Alam: For error
 	if (nomidimusic)
diff --git a/src/dummy/i_sound.c b/src/dummy/i_sound.c
index 51dbb610d13657ab567bfd8314ea53dc6ba40350..2f6f0001c0ef6bcf70f9f85ffa39bfa13eac0446 100644
--- a/src/dummy/i_sound.c
+++ b/src/dummy/i_sound.c
@@ -70,7 +70,7 @@ void I_PauseSong(INT32 handle)
 	(void)handle;
 }
 
-void I_ResumeSong(INT32 handle)
+void I_ResumeSong(void)
 {
 	(void)handle;
 }
@@ -79,23 +79,14 @@ void I_ResumeSong(INT32 handle)
 //  MIDI I/O
 //
 
-void I_InitMIDIMusic(void){}
-
-void I_ShutdownMIDIMusic(void){}
-
-void I_SetMIDIMusicVolume(UINT8 volume)
-{
-	(void)volume;
-}
-
-INT32 I_RegisterSong(void *data, size_t len)
+boolean I_LoadSong(char *data, size_t len)
 {
 	(void)data;
 	(void)len;
 	return -1;
 }
 
-boolean I_PlaySong(INT32 handle, boolean looping)
+boolean I_PlaySong(boolean looping)
 {
 	(void)handle;
 	(void)looping;
diff --git a/src/sdl/sdl_sound.c b/src/sdl/sdl_sound.c
index 6c70c163b0c041c8c4dec78656e38ec3126f2176..c714f675b7afe83d9f82d9370c349ebf9d9c98b1 100644
--- a/src/sdl/sdl_sound.c
+++ b/src/sdl/sdl_sound.c
@@ -1605,7 +1605,7 @@ static void I_PauseGME(void)
 #endif
 }
 
-void I_PauseSong(INT32 handle)
+void I_PauseSong(void)
 {
 	(void)handle;
 	I_PauseGME();
@@ -1625,7 +1625,7 @@ static void I_ResumeGME(void)
 #endif
 }
 
-void I_ResumeSong(INT32 handle)
+void I_ResumeSong(void)
 {
 	(void)handle;
 	I_ResumeGME();
@@ -1669,7 +1669,7 @@ void I_UnRegisterSong(INT32 handle)
 #endif
 }
 
-INT32 I_RegisterSong(void *data, size_t len)
+boolean I_LoadSong(char *data, size_t len)
 {
 #ifdef HAVE_MIXER
 	if (nomidimusic || !musicStarted)
diff --git a/src/win32/win_main.c b/src/win32/win_main.c
index 6c774f5576dad667e64f990b2082df815049b563..bfe620a4343e88a45d8389005ba10df86aa409f3 100644
--- a/src/win32/win_main.c
+++ b/src/win32/win_main.c
@@ -110,9 +110,9 @@ static LRESULT CALLBACK MainWndproc(HWND hWnd, UINT message, WPARAM wParam, LPAR
 
 			// pause music when alt-tab
 			if (appActive  && !paused)
-				I_ResumeSong(0);
+				I_ResumeSong();
 			else if (!paused)
-				I_PauseSong(0);
+				I_PauseSong();
 			{
 				HANDLE ci = GetStdHandle(STD_INPUT_HANDLE);
 				DWORD mode;
diff --git a/src/win32/win_snd.c b/src/win32/win_snd.c
index f168f1fe35efae4e483dd417142515f1849fe734..18c88d267ae28fea5f3a9d66f9c6d7a905528735 100644
--- a/src/win32/win_snd.c
+++ b/src/win32/win_snd.c
@@ -456,14 +456,14 @@ void I_ShutdownMusic(void)
 	I_ShutdownMIDIMusic();
 }
 
-void I_PauseSong(INT32 handle)
+void I_PauseSong(void)
 {
 	UNREFERENCED_PARAMETER(handle);
 	if (music_stream)
 		FMR_MUSIC(FMOD_Channel_SetPaused(music_channel, true));
 }
 
-void I_ResumeSong(INT32 handle)
+void I_ResumeSong(void)
 {
 	UNREFERENCED_PARAMETER(handle);
 	if (music_stream)
@@ -644,60 +644,64 @@ boolean I_StartDigSong(const char *musicname, boolean looping)
 	current_track = 0;
 
 	// Try to find a loop point in streaming music formats (ogg, mp3)
-	if (looping)
+	FMOD_RESULT e;
+	FMOD_TAG tag;
+	unsigned int loopstart, loopend;
+
+	// A proper LOOPPOINT is its own tag, stupid.
+	e = FMOD_Sound_GetTag(music_stream, "LOOPPOINT", 0, &tag);
+	if (e != FMOD_ERR_TAGNOTFOUND)
 	{
-		FMOD_RESULT e;
-		FMOD_TAG tag;
-		unsigned int loopstart, loopend;
+		FMR(e);
+		loopstart = atoi((char *)tag.data); // assumed to be a string data tag.
+		FMR(FMOD_Sound_GetLoopPoints(music_stream, NULL, FMOD_TIMEUNIT_PCM, &loopend, FMOD_TIMEUNIT_PCM));
+		if (loopstart > 0)
+			FMR(FMOD_Sound_SetLoopPoints(music_stream, loopstart, FMOD_TIMEUNIT_PCM, loopend, FMOD_TIMEUNIT_PCM));
+		return true;
+	}
+
+	// todo
+	// if(music type == MIDI)
+	// {
+	// 	FMR(FMOD_Sound_SetMode(music_stream, FMOD_LOOP_NORMAL));
+	// 	return true;
+	// }
 
-		// A proper LOOPPOINT is its own tag, stupid.
-		e = FMOD_Sound_GetTag(music_stream, "LOOPPOINT", 0, &tag);
-		if (e != FMOD_ERR_TAGNOTFOUND)
+	// Use LOOPMS for time in miliseconds.
+	e = FMOD_Sound_GetTag(music_stream, "LOOPMS", 0, &tag);
+	if (e != FMOD_ERR_TAGNOTFOUND)
+	{
+		FMR(e);
+		loopstart = atoi((char *)tag.data); // assumed to be a string data tag.
+		FMR(FMOD_Sound_GetLoopPoints(music_stream, NULL, FMOD_TIMEUNIT_MS, &loopend, FMOD_TIMEUNIT_PCM));
+		if (loopstart > 0)
+			FMR(FMOD_Sound_SetLoopPoints(music_stream, loopstart, FMOD_TIMEUNIT_MS, loopend, FMOD_TIMEUNIT_PCM));
+		return true;
+	}
+
+	// Try to fetch it from the COMMENT tag, like A.J. Freda
+	e = FMOD_Sound_GetTag(music_stream, "COMMENT", 0, &tag);
+	if (e != FMOD_ERR_TAGNOTFOUND)
+	{
+		char *loopText;
+		// Handle any errors that arose, first
+		FMR(e);
+		// Figure out where the number starts
+		loopText = strstr((char *)tag.data,"LOOPPOINT=");
+		if (loopText != NULL)
 		{
-			FMR(e);
-			loopstart = atoi((char *)tag.data); // assumed to be a string data tag.
+			// Skip the "LOOPPOINT=" part.
+			loopText += 10;
+			// Convert it to our looppoint
+			// FMOD seems to ensure the tag is properly NULL-terminated.
+			// atoi will stop when it reaches anything that's not a number.
+			loopstart = atoi(loopText);
+			// Now do the rest like above
 			FMR(FMOD_Sound_GetLoopPoints(music_stream, NULL, FMOD_TIMEUNIT_PCM, &loopend, FMOD_TIMEUNIT_PCM));
 			if (loopstart > 0)
 				FMR(FMOD_Sound_SetLoopPoints(music_stream, loopstart, FMOD_TIMEUNIT_PCM, loopend, FMOD_TIMEUNIT_PCM));
-			return true;
-		}
-
-		// Use LOOPMS for time in miliseconds.
-		e = FMOD_Sound_GetTag(music_stream, "LOOPMS", 0, &tag);
-		if (e != FMOD_ERR_TAGNOTFOUND)
-		{
-			FMR(e);
-			loopstart = atoi((char *)tag.data); // assumed to be a string data tag.
-			FMR(FMOD_Sound_GetLoopPoints(music_stream, NULL, FMOD_TIMEUNIT_MS, &loopend, FMOD_TIMEUNIT_PCM));
-			if (loopstart > 0)
-				FMR(FMOD_Sound_SetLoopPoints(music_stream, loopstart, FMOD_TIMEUNIT_MS, loopend, FMOD_TIMEUNIT_PCM));
-			return true;
-		}
-
-		// Try to fetch it from the COMMENT tag, like A.J. Freda
-		e = FMOD_Sound_GetTag(music_stream, "COMMENT", 0, &tag);
-		if (e != FMOD_ERR_TAGNOTFOUND)
-		{
-			char *loopText;
-			// Handle any errors that arose, first
-			FMR(e);
-			// Figure out where the number starts
-			loopText = strstr((char *)tag.data,"LOOPPOINT=");
-			if (loopText != NULL)
-			{
-				// Skip the "LOOPPOINT=" part.
-				loopText += 10;
-				// Convert it to our looppoint
-				// FMOD seems to ensure the tag is properly NULL-terminated.
-				// atoi will stop when it reaches anything that's not a number.
-				loopstart = atoi(loopText);
-				// Now do the rest like above
-				FMR(FMOD_Sound_GetLoopPoints(music_stream, NULL, FMOD_TIMEUNIT_PCM, &loopend, FMOD_TIMEUNIT_PCM));
-				if (loopstart > 0)
-					FMR(FMOD_Sound_SetLoopPoints(music_stream, loopstart, FMOD_TIMEUNIT_PCM, loopend, FMOD_TIMEUNIT_PCM));
-			}
-			return true;
 		}
+		return true;
 	}
 
 	// No special loop point, but we're playing so it's all good.
@@ -825,7 +829,7 @@ void I_SetMIDIMusicVolume(UINT8 volume)
 		FMR_MUSIC(FMOD_Channel_SetVolume(music_channel, volume / 31.0));
 }
 
-INT32 I_RegisterSong(void *data, size_t len)
+boolean I_PlaySong(boolean looping)
 {
 	FMOD_CREATESOUNDEXINFO fmt;
 	memset(&fmt, 0, sizeof(FMOD_CREATESOUNDEXINFO));