diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index c5650192d239c44f2a0b86b913698e4bd99d1e21..b2f6ec500f1e4513998a96818a72e596bd9dd6fb 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -90,6 +90,7 @@ static UINT32 fading_timer;
 static UINT32 fading_duration;
 static INT32 fading_id;
 static void (*fading_callback)(void);
+static boolean fading_do_callback;
 
 #ifdef HAVE_LIBGME
 static Music_Emu *gme;
@@ -106,6 +107,7 @@ static void var_cleanup(void)
 	 is_fading = false;
 
 	fading_callback = NULL;
+	fading_do_callback = false;
 
 	internal_volume = 100;
 }
@@ -202,6 +204,13 @@ void I_ShutdownSound(void)
 
 void I_UpdateSound(void)
 {
+	if (fading_do_callback)
+	{
+		if (fading_callback)
+			(*fading_callback)();
+		fading_callback = NULL;
+		fading_do_callback = false;
+	}
 }
 
 /// ------------------------
@@ -526,9 +535,8 @@ static UINT32 get_adjusted_position(UINT32 position)
 
 static void do_fading_callback(void)
 {
-	if (fading_callback)
-		(*fading_callback)();
-	fading_callback = NULL;
+	// TODO: Should I use a mutex here or something?
+	fading_do_callback = true;
 }
 
 /// ------------------------