diff --git a/src/lua_baselib.c b/src/lua_baselib.c
index 08f6e3051a0ca9cca71792bafaf80dedb5fa4c77..f34e65421b0b33e47badb7424de50cc99e42f5d8 100644
--- a/src/lua_baselib.c
+++ b/src/lua_baselib.c
@@ -954,14 +954,9 @@ static int lib_pRestoreMusic(lua_State *L)
 	INLEVEL
 	if (!player)
 		return LUA_ErrInvalid(L, "player_t");
-	if (!player || P_IsLocalPlayer(player))
-	{
+	else if (P_IsLocalPlayer(player))
 		P_RestoreMusic(player);
-		lua_pushboolean(L, true);
-	}
-	else
-		lua_pushnil(L);
-	return 1;
+	return 0;
 }
 
 static int lib_pSpawnShieldOrb(lua_State *L)
@@ -2241,13 +2236,8 @@ static int lib_sChangeMusic(lua_State *L)
 	fadeinms = (UINT32)luaL_optinteger(L, 7, 0);
 
 	if (!player || P_IsLocalPlayer(player))
-	{
 		S_ChangeMusicEx(music_name, music_flags, looping, position, prefadems, fadeinms);
-		lua_pushboolean(L, true);
-	}
-	else
-		lua_pushnil(L);
-	return 1;
+	return 0;
 }
 
 static int lib_sSpeedMusic(lua_State *L)
@@ -2263,10 +2253,23 @@ static int lib_sSpeedMusic(lua_State *L)
 			return LUA_ErrInvalid(L, "player_t");
 	}
 	if (!player || P_IsLocalPlayer(player))
-		lua_pushboolean(L, S_SpeedMusic(speed));
-	else
-		lua_pushnil(L);
-	return 1;
+		S_SpeedMusic(speed);
+	return 0;
+}
+
+static int lib_sStopMusic(lua_State *L)
+{
+	player_t *player = NULL;
+	NOHUD
+	if (!lua_isnone(L, 1) && lua_isuserdata(L, 1))
+	{
+		player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
+		if (!player)
+			return LUA_ErrInvalid(L, "player_t");
+	}
+	if (!player || P_IsLocalPlayer(player))
+		S_StopMusic();
+	return 0;
 }
 
 static int lib_sOriginPlaying(lua_State *L)
@@ -2646,6 +2649,7 @@ static luaL_Reg lib[] = {
 	{"S_StopSound",lib_sStopSound},
 	{"S_ChangeMusic",lib_sChangeMusic},
 	{"S_SpeedMusic",lib_sSpeedMusic},
+	{"S_StopMusic",lib_sStopMusic},
 	{"S_OriginPlaying",lib_sOriginPlaying},
 	{"S_IdPlaying",lib_sIdPlaying},
 	{"S_SoundPlaying",lib_sSoundPlaying},
diff --git a/src/lua_hook.h b/src/lua_hook.h
index fb793019b745f17a091b82df55197b0eeccd11bd..822edf79fe127224e50ee10a4f7330ce68ae63e4 100644
--- a/src/lua_hook.h
+++ b/src/lua_hook.h
@@ -48,7 +48,6 @@ enum hook {
 	hook_MobjMoveBlocked,
 	hook_MapThingSpawn,
 	hook_FollowMobj,
-	hook_MusicChange,
 
 	hook_MAX // last hook
 };
diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c
index 55bcb76c0be3a08cd073602980f8165184983186..53886f7bada25666c4d2efc6c53e8b153e9cd721 100644
--- a/src/lua_hooklib.c
+++ b/src/lua_hooklib.c
@@ -59,7 +59,6 @@ const char *const hookNames[hook_MAX+1] = {
 	"MobjMoveBlocked",
 	"MapThingSpawn",
 	"FollowMobj",
-	"MusicChange",
 	NULL
 };
 
diff --git a/src/s_sound.c b/src/s_sound.c
index 1cb1d117d6f3736dd06e04de47788316b370a20f..864af7165a1964cb11f83c5399900a45bbb3e1f8 100644
--- a/src/s_sound.c
+++ b/src/s_sound.c
@@ -38,7 +38,7 @@ extern INT32 msg_id;
 #include "p_local.h" // camera info
 #include "fastcmp.h"
 
-#ifdef HAVE_BLUA
+#if defined(HAVE_BLUA) && defined(HAVE_LUA_MUSICPLUS)
 #include "lua_hook.h" // MusicChange hook
 #endif