diff --git a/src/android/i_sound.c b/src/android/i_sound.c
index 3b65790a4ba754571b6645c1948c248523bf92b0..d7a7973d402550c6184c5b6597f70529608de58e 100644
--- a/src/android/i_sound.c
+++ b/src/android/i_sound.c
@@ -184,7 +184,7 @@ void I_StopFadingSong(void)
 {
 }
 
-boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, boolean stopafterfade)
+boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)source_volume;
@@ -192,7 +192,7 @@ boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms
         return false;
 }
 
-boolean I_FadeSong(UINT8 target_volume, UINT32 ms)
+boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)ms;
@@ -205,10 +205,9 @@ boolean I_FadeOutStopSong(UINT32 ms)
         return false;
 }
 
-boolean I_FadeInStartDigSong(const char *musicname, UINT16 track, boolean looping, UINT32 position, UINT32 fadeinms, boolean queuepostfade)
+boolean I_FadeInPlaySong(UINT32 ms, boolean looping)
 {
-        (void)musicname;
+        (void)ms;
         (void)looping;
-        (void)fadeinms;
         return false;
 }
diff --git a/src/djgppdos/i_sound.c b/src/djgppdos/i_sound.c
index 519904d24c659cc66da10a76d5b40cb78e72f80d..00e0f8c901b7f1df8cb5cb9a6c149316e9eb0a42 100644
--- a/src/djgppdos/i_sound.c
+++ b/src/djgppdos/i_sound.c
@@ -588,7 +588,7 @@ void I_StopFadingSong(void)
 {
 }
 
-boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, boolean stopafterfade)
+boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)source_volume;
@@ -596,7 +596,7 @@ boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms
 	return false;
 }
 
-boolean I_FadeSong(UINT8 target_volume, UINT32 ms)
+boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)ms;
@@ -609,10 +609,9 @@ boolean I_FadeOutStopSong(UINT32 ms)
 	return false;
 }
 
-boolean I_FadeInStartDigSong(const char *musicname, UINT16 track, boolean looping, UINT32 position, UINT32 fadeinms, boolean queuepostfade)
+boolean I_FadeInPlaySong(UINT32 ms, boolean looping)
 {
-	(void)musicname;
-	(void)looping;
-	(void)fadeinms;
-	return false;
+        (void)ms;
+        (void)looping;
+        return false;
 }
diff --git a/src/dummy/i_sound.c b/src/dummy/i_sound.c
index f4efb0ecfc403851ceb34d8eb365729f7a9df258..89c4006314eed3e6d902fdf3bd443b7cf0ecfcf7 100644
--- a/src/dummy/i_sound.c
+++ b/src/dummy/i_sound.c
@@ -94,6 +94,37 @@ boolean I_SetSongSpeed(float speed)
 	return false;
 }
 
+/// ------------------------
+//  MUSIC SEEKING
+/// ------------------------
+
+UINT32 I_GetSongLength(void)
+{
+	return 0;
+}
+
+boolean I_SetSongLoopPoint(UINT32 looppoint)
+{
+        (void)looppoint;
+        return false;
+}
+
+UINT32 I_GetSongLoopPoint(void)
+{
+	return 0;
+}
+
+boolean I_SetSongPosition(UINT32 position)
+{
+    (void)position;
+    return false;
+}
+
+UINT32 I_GetSongPosition(void)
+{
+    return 0;
+}
+
 /// ------------------------
 //  MUSIC PLAYBACK
 /// ------------------------
@@ -143,6 +174,10 @@ boolean I_SetSongTrack(int track)
 	return false;
 }
 
+/// ------------------------
+//  MUSIC FADING
+/// ------------------------
+
 void I_SetInternalMusicVolume(UINT8 volume)
 {
 	(void)volume;
@@ -152,7 +187,7 @@ void I_StopFadingSong(void)
 {
 }
 
-boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, boolean stopafterfade)
+boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)source_volume;
@@ -160,7 +195,7 @@ boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms
 	return false;
 }
 
-boolean I_FadeSong(UINT8 target_volume, UINT32 ms)
+boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)ms;
@@ -173,52 +208,9 @@ boolean I_FadeOutStopSong(UINT32 ms)
 	return false;
 }
 
-boolean I_FadeInStartDigSong(const char *musicname, UINT16 track, boolean looping, UINT32 position, UINT32 fadeinms, boolean queuepostfade)
-{
-	(void)musicname;
-	(void)looping;
-	(void)fadeinms;
-	return false;
-}
-
-UINT32 I_GetSongLength(void)
-{
-	return 0;
-}
-
-boolean I_SetSongLoopPoint(UINT32 looppoint)
+boolean I_FadeInPlaySong(UINT32 ms, boolean looping)
 {
-        (void)looppoint;
+        (void)ms;
+        (void)looping;
         return false;
 }
-
-UINT32 I_GetSongLoopPoint(void)
-{
-	return 0;
-}
-
-boolean I_SetSongPosition(UINT32 position)
-{
-    (void)position;
-    return false;
-}
-
-UINT32 I_GetSongPosition(void)
-{
-    return 0;
-}
-
-boolean I_SongPlaying(void)
-{
-	return false;
-}
-
-boolean I_SongPaused(void)
-{
-	return false;
-}
-
-musictype_t I_SongType(void)
-{
-	return MU_NONE;
-}
diff --git a/src/sdl/sdl_sound.c b/src/sdl/sdl_sound.c
index 9dd13731c67f6d19b83de33d2b8a11a6aa1b42a3..044abf89a17278d2fd9b2a33e7ea3854cd22ff52 100644
--- a/src/sdl/sdl_sound.c
+++ b/src/sdl/sdl_sound.c
@@ -1813,7 +1813,7 @@ void I_StopFadingSong(void)
 {
 }
 
-boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, boolean stopafterfade)
+boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)source_volume;
@@ -1821,7 +1821,7 @@ boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms
 	return false;
 }
 
-boolean I_FadeSong(UINT8 target_volume, UINT32 ms)
+boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)ms;
@@ -1834,12 +1834,11 @@ boolean I_FadeOutStopSong(UINT32 ms)
 	return false;
 }
 
-boolean I_FadeInStartDigSong(const char *musicname, UINT16 track, boolean looping, UINT32 position, UINT32 fadeinms, boolean queuepostfade)
+boolean I_FadeInPlaySong(UINT32 ms, boolean looping)
 {
-	(void)musicname;
-	(void)looping;
-	(void)fadeinms;
-	return false;
+        (void)ms;
+        (void)looping;
+        return false;
 }
 
 /// ------------------------
diff --git a/src/win32/win_snd.c b/src/win32/win_snd.c
index d31439922948d00e9c051b25248ce450e325eb51..d6264c10e6fcd98c7395361c760d79319d1b1223 100644
--- a/src/win32/win_snd.c
+++ b/src/win32/win_snd.c
@@ -942,7 +942,7 @@ void I_StopFadingSong(void)
 {
 }
 
-boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, boolean stopafterfade)
+boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)source_volume;
@@ -950,7 +950,7 @@ boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms
 	return false;
 }
 
-boolean I_FadeSong(UINT8 target_volume, UINT32 ms)
+boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void));
 {
 	(void)target_volume;
 	(void)ms;
@@ -963,11 +963,9 @@ boolean I_FadeOutStopSong(UINT32 ms)
 	return false;
 }
 
-boolean I_FadeInStartDigSong(const char *musicname, UINT16 track, boolean looping, UINT32 position, UINT32 fadeinms, boolean queuepostfade)
+boolean I_FadeInPlaySong(UINT32 ms, boolean looping)
 {
-	(void)musicname;
-	(void)looping;
-	(void)fadeinms;
-	return false;
+        (void)ms;
+        (void)looping;
+        return false;
 }
-