diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index 9b84a1247c0415fc8cf05bfed0a09202e171c800..ca22724b6661eaecece4c0cf22bc085cd0f66e7e 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -656,7 +656,6 @@ boolean I_LoadSong(char *data, size_t len)
 	{
 		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
@@ -712,16 +711,17 @@ void I_UnloadSong(void)
 
 boolean I_PlaySong(boolean looping)
 {
-	if (!music)
-		return false;
-#ifdef HAVE_GME
+#ifdef HAVE_LIBGME
 	if (gme)
 	{
 		gme_start_track(gme, 0);
 		current_track = 0;
+		Mix_HookMusic(mix_gme, gme);
 		return true;
 	}
 #endif
+	else if (!music)
+		return false;
 
 	if (Mix_PlayMusic(music, looping && loop_point == 0.0f ? -1 : 0) == -1)
 	{
diff --git a/src/win32/win_snd.c b/src/win32/win_snd.c
index 2960ff7d26863164da71d54378e274a1d9cd435c..2e05c4f72fced7c5c5c5ccd6e1b511a9f1af0610 100644
--- a/src/win32/win_snd.c
+++ b/src/win32/win_snd.c
@@ -675,7 +675,6 @@ boolean I_LoadSong(char *data, size_t len)
 		fmt.decodebuffersize = (44100 * 2) / 35;
 		fmt.pcmreadcallback = GMEReadCallback;
 		fmt.userdata = gme;
-		FMR(FMOD_System_CreateStream(fsys, NULL, FMOD_OPENUSER | (looping ? FMOD_LOOP_NORMAL : 0), &fmt, &music_stream));
 		return true;
 	}
 #endif
@@ -772,6 +771,7 @@ boolean I_PlaySong(boolean looping)
 	{
 		gme_start_track(gme, 0);
 		current_track = 0;
+		FMR(FMOD_System_CreateStream(fsys, NULL, FMOD_OPENUSER | (looping ? FMOD_LOOP_NORMAL : 0), &fmt, &music_stream));
 		FMR(FMOD_System_PlaySound(fsys, FMOD_CHANNEL_FREE, music_stream, false, &music_channel));
 		FMR(FMOD_Channel_SetVolume(music_channel, music_volume / 31.0));
 		FMR(FMOD_Channel_SetPriority(music_channel, 0));