diff --git a/src/dehacked.c b/src/dehacked.c
index 3f021847a08603be0b96a9f0d04a8bf190aa34ac..f95695e4f4f36e20b1d81705519f33ce53127359 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -1160,6 +1160,8 @@ static void readlevelheader(MYFILE *f, INT32 num)
 				mapheaderinfo[num-1]->muspostbosstrack = ((UINT16)i - 1);
 			else if (fastcmp(word, "MUSICPOSTBOSSPOS"))
 				mapheaderinfo[num-1]->muspostbosspos = (UINT32)get_number(word2);
+			else if (fastcmp(word, "MUSICPOSTBOSSFADEIN"))
+				mapheaderinfo[num-1]->muspostbossfadein = (UINT32)get_number(word2);
 			else if (fastcmp(word, "FORCECHARACTER"))
 			{
 				strlcpy(mapheaderinfo[num-1]->forcecharacter, word2, SKINNAMESIZE+1);
diff --git a/src/doomstat.h b/src/doomstat.h
index f51baec2370926a9334775cc1725996cf0b8d314..5682dcff6ac8770d27fb6107c883f08d13484c35 100644
--- a/src/doomstat.h
+++ b/src/doomstat.h
@@ -262,7 +262,8 @@ typedef struct
 	// Music stuff.
 	char muspostbossname[7];    ///< Post-bossdeath music.
 	UINT16 muspostbosstrack;    ///< Post-bossdeath track.
-	UINT32 muspostbosspos; ///< Post-bossdeath position
+	UINT32 muspostbosspos;      ///< Post-bossdeath position
+	UINT32 muspostbossfadein;   ///< Post-bossdeath fade-in milliseconds.
 
 	// Lua stuff.
 	// (This is not ifdeffed so the map header structure can stay identical, just in case.)
diff --git a/src/lua_maplib.c b/src/lua_maplib.c
index 77b6120baa5263abd10caf566d4a0041fb379726..878ff03c9489bcf35ca6de10bf88edc2fe7561f1 100644
--- a/src/lua_maplib.c
+++ b/src/lua_maplib.c
@@ -1768,6 +1768,8 @@ static int mapheaderinfo_get(lua_State *L)
 		lua_pushinteger(L, header->muspostbosstrack);
 	else if (fastcmp(field,"muspostbosspos"))
 		lua_pushinteger(L, header->muspostbosspos);
+	else if (fastcmp(field,"muspostbossfadein"))
+		lua_pushinteger(L, header->muspostbossfadein);
 	else if (fastcmp(field,"forcecharacter"))
 		lua_pushstring(L, header->forcecharacter);
 	else if (fastcmp(field,"weather"))
diff --git a/src/p_enemy.c b/src/p_enemy.c
index 7670aa5433d8a253dae788b3e6b9cd348db75a15..8964691ccaf9ea3b671a7a8c9ea7d40c98c3ba6e 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -3544,7 +3544,8 @@ void A_BossDeath(mobj_t *mo)
 			// don't change if we're in another tune
 			// but in case we're in jingle, use our parked mapmus variables so the correct track restores
 			if (!changed)
-				S_ChangeMusicAdvanced(mapmusname, mapmusflags, true, mapmusposition, (1*MUSICRATE)+(MUSICRATE/2), 0);
+				S_ChangeMusicAdvanced(mapmusname, mapmusflags, true, mapmusposition, (1*MUSICRATE)+(MUSICRATE/2),
+					mapheaderinfo[gamemap-1]->muspostbossfadein);
 		}
 	}
 
diff --git a/src/p_setup.c b/src/p_setup.c
index 716d51d7bd4abdb07b4de7226a3cc4cb9029d5ae..e18dadaa82d561fab1b1e609d038a1484e2d3757 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -212,6 +212,7 @@ static void P_ClearSingleMapHeaderInfo(INT16 i)
 	mapheaderinfo[num]->muspostbossname[6] = 0;
 	mapheaderinfo[num]->muspostbosstrack = 0;
 	mapheaderinfo[num]->muspostbosspos = 0;
+	mapheaderinfo[num]->muspostbossfadein = 0;
 	mapheaderinfo[num]->forcecharacter[0] = '\0';
 	mapheaderinfo[num]->weather = 0;
 	mapheaderinfo[num]->skynum = 1;