diff --git a/src/lua_baselib.c b/src/lua_baselib.c
index 6a8784259277126582ade924b6f745d27c7c739c..093683660ddb57a05e4792d872fe57e422f8aaaa 100644
--- a/src/lua_baselib.c
+++ b/src/lua_baselib.c
@@ -719,7 +719,7 @@ static int lib_pRestoreMusic(lua_State *L)
 	NOHUD
 	if (!player)
 		return LUA_ErrInvalid(L, "player_t");
-	else if (P_IsLocalPlayer(player))
+	if (P_IsLocalPlayer(player))
 		P_RestoreMusic(player);
 	return 0;
 }
diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index 0a6c268250ba45af3b13d8ba063b8e67c0ddf8fc..8fea27d8940a05d2a7ec01488fe67afbce3d33ac 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -1107,6 +1107,7 @@ boolean I_LoadSong(char *data, size_t len)
 	)
 		I_UnloadSong();
 
+	// always do this whether or not a music already exists
 	var_cleanup();
 
 #ifdef HAVE_LIBGME
diff --git a/src/sdl/sdl_sound.c b/src/sdl/sdl_sound.c
index 25c21a07a9a44847518667d1088c2b5805ef360a..d3b51b15e5e0a0c58a9c25819754b4be4c6a0157 100644
--- a/src/sdl/sdl_sound.c
+++ b/src/sdl/sdl_sound.c
@@ -1480,7 +1480,7 @@ void I_StopFadingSong(void)
 {
 }
 
-boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void));
+boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void))
 {
 	(void)target_volume;
 	(void)source_volume;
@@ -1488,7 +1488,7 @@ boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms
 	return false;
 }
 
-boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void));
+boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void))
 {
 	(void)target_volume;
 	(void)ms;
diff --git a/src/win32/win_snd.c b/src/win32/win_snd.c
index 85cae2ed191e0b42b8fc92f70961fe8f4cf6802b..543de3231a762bffd7a69f702774a5bcd92b5107 100644
--- a/src/win32/win_snd.c
+++ b/src/win32/win_snd.c
@@ -812,10 +812,10 @@ void I_SetMusicVolume(UINT8 volume)
 
 UINT32 I_GetSongLength()
 {
-	if (midimode)
+	if (I_SongType() == MU_MID)
 		return 0;
 	UINT32 length;
-	e = FMOD_Sound_GetLength(music_stream, length, FMOD_TIMEUNIT_MS);
+	FMR_MUSIC(FMOD_Sound_GetLength(music_stream, &length, FMOD_TIMEUNIT_MS));
 	return length;
 }
 
@@ -832,7 +832,7 @@ UINT32 I_GetSongLoopPoint(void)
 
 boolean I_SetSongPosition(UINT32 position)
 {
-	if(midimode)
+	if(I_SongType() == MU_MID)
 		// Dummy out; this works for some MIDI, but not others.
 		// SDL does not support this for any MIDI.
 		return false;
@@ -852,7 +852,7 @@ boolean I_SetSongPosition(UINT32 position)
 
 UINT32 I_GetSongPosition(void)
 {
-	if(midimode)
+	if(I_SongType() == MU_MID)
 		// Dummy out because unsupported, even though FMOD does this correctly.
 		return 0;
 	FMOD_RESULT e;
@@ -922,7 +922,7 @@ void I_StopFadingSong(void)
 {
 }
 
-boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void));
+boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void))
 {
 	(void)target_volume;
 	(void)source_volume;
@@ -930,7 +930,7 @@ boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms
 	return false;
 }
 
-boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void));
+boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void))
 {
 	(void)target_volume;
 	(void)ms;