diff --git a/src/events.cpp b/src/events.cpp
index 7ef72b0db..17fc30bea 100755
--- a/src/events.cpp
+++ b/src/events.cpp
@@ -174,8 +174,9 @@ bool E_CheckHandler(DStaticEventHandler* handler)
 
 bool E_IsStaticType(PClass* type)
 {
-	return (type->IsDescendantOf(RUNTIME_CLASS(DStaticEventHandler)) && // make sure it's from our hierarchy at all.
-			!type->IsDescendantOf(RUNTIME_CLASS(DEventHandler)));
+	assert(type != nullptr);
+	assert(type->IsDescendantOf(RUNTIME_CLASS(DStaticEventHandler)));
+	return !type->IsDescendantOf(RUNTIME_CLASS(DEventHandler));
 }
 
 void E_SerializeEvents(FSerializer& arc)
@@ -230,27 +231,24 @@ void E_SerializeEvents(FSerializer& arc)
 	}
 }
 
-static void E_InitStaticHandler(PClass* type, FString typestring, bool map)
+static PClass* E_GetHandlerClass(const FString& typeName)
 {
+	PClass* type = PClass::FindClass(typeName);
+
 	if (type == nullptr)
 	{
-		I_Error("Fatal: unknown event handler class %s in MAPINFO!\n", typestring.GetChars());
-		return;
-
+		I_Error("Fatal: unknown event handler class %s", typeName.GetChars());
+	}
+	else if (!type->IsDescendantOf(RUNTIME_CLASS(DStaticEventHandler)))
+	{
+		I_Error("Fatal: event handler class %s is not derived from StaticEventHandler", typeName.GetChars());
 	}
 
-	if (E_IsStaticType(type) && map)
-	{
-		I_Error("Fatal: invalid event handler class %s in MAPINFO!\nMap-specific event handlers cannot be static.\n", typestring.GetChars());
-		return;
-	}
-	/*
-	if (!E_IsStaticType(type) && !map)
-	{
-		Printf("%cGWarning: invalid event handler class %s in MAPINFO!\nMAPINFO event handlers should inherit Static* directly!\n", TEXTCOLOR_ESCAPE, typestring.GetChars());
-		return;
-	}*/
+	return type;
+}
 
+static void E_InitHandler(PClass* type)
+{
 	// check if type already exists, don't add twice.
 	bool typeExists = false;
 	for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next)
@@ -269,41 +267,34 @@ static void E_InitStaticHandler(PClass* type, FString typestring, bool map)
 
 void E_InitStaticHandlers(bool map)
 {
+	// don't initialize map handlers if restoring from savegame.
 	if (savegamerestore)
 		return;
 
 	// just make sure
 	E_Shutdown(map);
 
-	if (map) // don't initialize map handlers if restoring from savegame.
+	// initialize event handlers from gameinfo
+	for (const FString& typeName : gameinfo.EventHandlers)
 	{
-		// load non-static handlers from gameinfo
-		for (unsigned int i = 0; i < gameinfo.EventHandlers.Size(); i++)
-		{
-			FString typestring = gameinfo.EventHandlers[i];
-			PClass* type = PClass::FindClass(typestring);
-			if (!type || E_IsStaticType(type)) // don't init the really global stuff here.
-				continue;
-			E_InitStaticHandler(type, typestring, false);
-		}
-
-		for (unsigned int i = 0; i < level.info->EventHandlers.Size(); i++)
-		{
-			FString typestring = level.info->EventHandlers[i];
-			PClass* type = PClass::FindClass(typestring);
-			E_InitStaticHandler(type, typestring, true);
-		}
+		PClass* type = E_GetHandlerClass(typeName);
+		// don't init the really global stuff here on startup initialization.
+		// don't init map-local global stuff here on level setup.
+		if (map == E_IsStaticType(type))
+			continue;
+		E_InitHandler(type);
 	}
-	else
+
+	if (!map) 
+		return;
+
+	// initialize event handlers from mapinfo
+	for (const FString& typeName : level.info->EventHandlers)
 	{
-		for (unsigned int i = 0; i < gameinfo.EventHandlers.Size(); i++)
-		{
-			FString typestring = gameinfo.EventHandlers[i];
-			PClass* type = PClass::FindClass(typestring);
-			if (!type || !E_IsStaticType(type)) // don't init map-local global stuff here.
-				continue;
-			E_InitStaticHandler(type, typestring, false);
-		}
+		PClass* type = E_GetHandlerClass(typeName);
+		if (E_IsStaticType(type))
+			I_Error("Fatal: invalid event handler class %s in MAPINFO!\nMap-specific event handlers cannot be static.\n", typeName.GetChars());
+		E_InitHandler(type);
 	}
 }
 
diff --git a/src/menu/menudef.cpp b/src/menu/menudef.cpp
index 67d9d0a9f..840c0fce2 100644
--- a/src/menu/menudef.cpp
+++ b/src/menu/menudef.cpp
@@ -1429,11 +1429,11 @@ static void InitMusicMenus()
 
 	if (menu != nullptr)
 	{
-		if (soundfonts.Size() > 0)
+		int adl_banks_count = adl_getBanksCount();
+		if (adl_banks_count > 0)
 		{
-			int adl_banks_count = adl_getBanksCount();
 			const char *const *adl_bank_names = adl_getBankNames();
-			for(int i=0; i < adl_banks_count; i++)
+			for (int i=0; i < adl_banks_count; i++)
 			{
 				auto it = CreateOptionMenuItemCommand(adl_bank_names[i], FStringf("adl_bank %d", i), true);
 				static_cast<DOptionMenuDescriptor*>(*menu)->mItems.Push(it);
diff --git a/src/p_map.cpp b/src/p_map.cpp
index 50397d852..e9ba84132 100644
--- a/src/p_map.cpp
+++ b/src/p_map.cpp
@@ -4888,8 +4888,8 @@ bool P_LineTrace(AActor *t1, DAngle angle, double distance,
 
 	ActorFlags aflags = (flags & TRF_ALLACTORS) ? ActorFlags::FromInt(0xFFFFFFFF) : MF_SHOOTABLE;
 	int lflags = 0;
-	if ( !(lflags & TRF_THRUBLOCK) ) lflags |= ML_BLOCKEVERYTHING;
-	if ( !(lflags & TRF_THRUHITSCAN) ) lflags |= ML_BLOCKHITSCAN;
+	if ( !(flags & TRF_THRUBLOCK) ) lflags |= ML_BLOCKEVERYTHING;
+	if ( !(flags & TRF_THRUHITSCAN) ) lflags |= ML_BLOCKHITSCAN;
 	int tflags = TRACE_ReportPortals;
 	if ( flags & TRF_NOSKY ) tflags |= TRACE_NoSky;
 
diff --git a/src/p_pspr.cpp b/src/p_pspr.cpp
index 45e92a8d0..c419f2228 100644
--- a/src/p_pspr.cpp
+++ b/src/p_pspr.cpp
@@ -153,10 +153,13 @@ DPSprite::DPSprite(player_t *owner, AActor *caller, int id)
 : x(.0), y(.0),
   oldx(.0), oldy(.0),
   firstTic(true),
+  Tics(0),
   Flags(0),
   Caller(caller),
   Owner(owner),
+  State(nullptr),
   Sprite(0),
+  Frame(0),
   ID(id),
   processPending(true)
 {
diff --git a/src/polyrenderer/scene/poly_playersprite.cpp b/src/polyrenderer/scene/poly_playersprite.cpp
index 747f17e9a..6bf47f6cb 100644
--- a/src/polyrenderer/scene/poly_playersprite.cpp
+++ b/src/polyrenderer/scene/poly_playersprite.cpp
@@ -356,7 +356,8 @@ void RenderPolyPlayerSprites::RenderSprite(PolyRenderThread *thread, DPSprite *p
 			invertcolormap = !invertcolormap;
 		}
 
-		bool fullbright = !foggy && pspr->GetState()->GetFullbright();
+		const FState* const psprState = pspr->GetState();
+		bool fullbright = !foggy && (psprState == nullptr ? false : psprState->GetFullbright());
 		bool fadeToBlack = (vis.RenderStyle.Flags & STYLEF_FadeToBlack) != 0;
 
 		vis.Light.SetColormap(0, spriteshade, basecolormap, fullbright, invertcolormap, fadeToBlack);
diff --git a/src/posix/cocoa/i_video.mm b/src/posix/cocoa/i_video.mm
index b14461434..e4bd70566 100644
--- a/src/posix/cocoa/i_video.mm
+++ b/src/posix/cocoa/i_video.mm
@@ -55,6 +55,7 @@
 #include "v_text.h"
 #include "v_video.h"
 #include "version.h"
+#include "videomodes.h"
 
 #include "gl/system/gl_system.h"
 #include "gl/data/gl_vertexbuffer.h"
@@ -346,80 +347,6 @@ extern id appCtrl;
 namespace
 {
 
-const struct
-{
-	uint16_t width;
-	uint16_t height;
-}
-VideoModes[] =
-{
-	{  320,  200 },
-	{  320,  240 },
-	{  400,  225 },	// 16:9
-	{  400,  300 },
-	{  480,  270 },	// 16:9
-	{  480,  360 },
-	{  512,  288 },	// 16:9
-	{  512,  384 },
-	{  640,  360 },	// 16:9
-	{  640,  400 },
-	{  640,  480 },
-	{  720,  480 },	// 16:10
-	{  720,  540 },
-	{  800,  450 },	// 16:9
-	{  800,  480 },
-	{  800,  500 },	// 16:10
-	{  800,  600 },
-	{  848,  480 },	// 16:9
-	{  960,  600 },	// 16:10
-	{  960,  720 },
-	{ 1024,  576 },	// 16:9
-	{ 1024,  600 },	// 17:10
-	{ 1024,  640 },	// 16:10
-	{ 1024,  768 },
-	{ 1088,  612 },	// 16:9
-	{ 1152,  648 },	// 16:9
-	{ 1152,  720 },	// 16:10
-	{ 1152,  864 },
-	{ 1280,  540 }, // 21:9
-	{ 1280,  720 },	// 16:9
-	{ 1280,  854 },
-	{ 1280,  800 },	// 16:10
-	{ 1280,  960 },
-	{ 1280, 1024 },	// 5:4
-	{ 1360,  768 },	// 16:9
-	{ 1366,  768 },
-	{ 1400,  787 },	// 16:9
-	{ 1400,  875 },	// 16:10
-	{ 1400, 1050 },
-	{ 1440,  900 },
-	{ 1440,  960 },
-	{ 1440, 1080 },
-	{ 1600,  900 },	// 16:9
-	{ 1600, 1000 },	// 16:10
-	{ 1600, 1200 },
-	{ 1680, 1050 },	// 16:10
-	{ 1920, 1080 },
-	{ 1920, 1200 },
-	{ 2048, 1152 }, // 16:9, iMac Retina 4K 21.5", HiDPI off
-	{ 2048, 1536 },
-	{ 2304, 1440 }, // 16:10, MacBook Retina 12"
-	{ 2560, 1080 }, // 21:9
-	{ 2560, 1440 },
-	{ 2560, 1600 },
-	{ 2560, 2048 },
-	{ 2880, 1800 }, // 16:10, MacBook Pro Retina 15"
-	{ 3200, 1800 },
-	{ 3440, 1440 }, // 21:9
-	{ 3840, 2160 },
-	{ 3840, 2400 },
-	{ 4096, 2160 },
-	{ 4096, 2304 }, // 16:9, iMac Retina 4K 21.5"
-	{ 5120, 2160 }, // 21:9
-	{ 5120, 2880 }  // 16:9, iMac Retina 5K 27"
-};
-
-
 extern cycle_t BlitCycles;
 cycle_t FlipCycles;
 
@@ -601,7 +528,7 @@ DFrameBuffer* CocoaVideo::CreateFrameBuffer(const int width, const int height, c
 	else
 	{
 		fb = CreateGLSWFrameBuffer(width, height, bgra, fullscreen);
-	}
+		}
 
 	fb->SetFlash(flashColor, flashAmount);
 
diff --git a/src/posix/sdl/sdlglvideo.cpp b/src/posix/sdl/sdlglvideo.cpp
index 2df9d88e9..462598500 100644
--- a/src/posix/sdl/sdlglvideo.cpp
+++ b/src/posix/sdl/sdlglvideo.cpp
@@ -45,6 +45,7 @@
 #include "version.h"
 #include "c_console.h"
 
+#include "videomodes.h"
 #include "sdlglvideo.h"
 #include "gl/system/gl_system.h"
 #include "r_defs.h"
@@ -62,11 +63,6 @@
 
 // TYPES -------------------------------------------------------------------
 
-struct MiniModeInfo
-{
-	uint16_t Width, Height;
-};
-
 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
 
 // PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
@@ -105,67 +101,6 @@ CUSTOM_CVAR(Bool, gl_es, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCA
 
 // PRIVATE DATA DEFINITIONS ------------------------------------------------
 
-// Dummy screen sizes to pass when windowed
-static MiniModeInfo WinModes[] =
-{
-	{ 320, 200 },
-	{ 320, 240 },
-	{ 400, 225 },	// 16:9
-	{ 400, 300 },
-	{ 480, 270 },	// 16:9
-	{ 480, 360 },
-	{ 512, 288 },	// 16:9
-	{ 512, 384 },
-	{ 640, 360 },	// 16:9
-	{ 640, 400 },
-	{ 640, 480 },
-	{ 720, 480 },	// 16:10
-	{ 720, 540 },
-	{ 800, 450 },	// 16:9
-	{ 800, 480 },
-	{ 800, 500 },	// 16:10
-	{ 800, 600 },
-	{ 848, 480 },	// 16:9
-	{ 960, 600 },	// 16:10
-	{ 960, 720 },
-	{ 1024, 576 },	// 16:9
-	{ 1024, 600 },	// 17:10
-	{ 1024, 640 },	// 16:10
-	{ 1024, 768 },
-	{ 1088, 612 },	// 16:9
-	{ 1152, 648 },	// 16:9
-	{ 1152, 720 },	// 16:10
-	{ 1152, 864 },
-	{ 1280, 720 },	// 16:9
-	{ 1280, 854 },
-	{ 1280, 800 },	// 16:10
-	{ 1280, 960 },
-	{ 1280, 1024 },	// 5:4
-	{ 1360, 768 },	// 16:9
-	{ 1366, 768 },
-	{ 1400, 787 },	// 16:9
-	{ 1400, 875 },	// 16:10
-	{ 1400, 1050 },
-	{ 1440, 900 },
-	{ 1440, 960 },
-	{ 1440, 1080 },
-	{ 1600, 900 },	// 16:9
-	{ 1600, 1000 },	// 16:10
-	{ 1600, 1200 },
-	{ 1920, 1080 },
-	{ 1920, 1200 },
-	{ 2048, 1536 },
-	{ 2560, 1440 },
-	{ 2560, 1600 },
-	{ 2560, 2048 },
-	{ 2880, 1800 },
-	{ 3200, 1800 },
-	{ 3840, 2160 },
-	{ 3840, 2400 },
-	{ 4096, 2160 },
-	{ 5120, 2880 }
-};
-
 // CODE --------------------------------------------------------------------
 
 SDLGLVideo::SDLGLVideo (int parm)
@@ -193,10 +128,10 @@ bool SDLGLVideo::NextMode (int *width, int *height, bool *letterbox)
 	if (IteratorBits != 8)
 		return false;
 
-	if ((unsigned)IteratorMode < sizeof(WinModes)/sizeof(WinModes[0]))
+	if ((unsigned)IteratorMode < sizeof(VideoModes)/sizeof(VideoModes[0]))
 	{
-		*width = WinModes[IteratorMode].Width;
-		*height = WinModes[IteratorMode].Height;
+		*width = VideoModes[IteratorMode].width;
+		*height = VideoModes[IteratorMode].height;
 		++IteratorMode;
 		return true;
 	}
diff --git a/src/posix/videomodes.h b/src/posix/videomodes.h
new file mode 100644
index 000000000..b9df20801
--- /dev/null
+++ b/src/posix/videomodes.h
@@ -0,0 +1,105 @@
+/*
+ ** videomodes.h
+ **
+ **---------------------------------------------------------------------------
+ ** Copyright 2018 Alexey Lysiuk
+ ** All rights reserved.
+ **
+ ** Redistribution and use in source and binary forms, with or without
+ ** modification, are permitted provided that the following conditions
+ ** are met:
+ **
+ ** 1. Redistributions of source code must retain the above copyright
+ **    notice, this list of conditions and the following disclaimer.
+ ** 2. Redistributions in binary form must reproduce the above copyright
+ **    notice, this list of conditions and the following disclaimer in the
+ **    documentation and/or other materials provided with the distribution.
+ ** 3. The name of the author may not be used to endorse or promote products
+ **    derived from this software without specific prior written permission.
+ **
+ ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **---------------------------------------------------------------------------
+ **
+ */
+
+static const struct
+{
+	uint16_t width;
+	uint16_t height;
+}
+VideoModes[] =
+{
+	{  320,  200 },
+	{  320,  240 },
+	{  400,  225 },	// 16:9
+	{  400,  300 },
+	{  480,  270 },	// 16:9
+	{  480,  360 },
+	{  512,  288 },	// 16:9
+	{  512,  384 },
+	{  640,  360 },	// 16:9
+	{  640,  400 },
+	{  640,  480 },
+	{  720,  480 },	// 16:10
+	{  720,  540 },
+	{  800,  450 },	// 16:9
+	{  800,  480 },
+	{  800,  500 },	// 16:10
+	{  800,  600 },
+	{  848,  480 },	// 16:9
+	{  960,  600 },	// 16:10
+	{  960,  720 },
+	{ 1024,  576 },	// 16:9
+	{ 1024,  600 },	// 17:10
+	{ 1024,  640 },	// 16:10
+	{ 1024,  768 },
+	{ 1088,  612 },	// 16:9
+	{ 1152,  648 },	// 16:9
+	{ 1152,  720 },	// 16:10
+	{ 1152,  864 },
+	{ 1280,  540 }, // 21:9
+	{ 1280,  720 },	// 16:9
+	{ 1280,  854 },
+	{ 1280,  800 },	// 16:10
+	{ 1280,  960 },
+	{ 1280, 1024 },	// 5:4
+	{ 1360,  768 },	// 16:9
+	{ 1366,  768 },
+	{ 1400,  787 },	// 16:9
+	{ 1400,  875 },	// 16:10
+	{ 1400, 1050 },
+	{ 1440,  900 },
+	{ 1440,  960 },
+	{ 1440, 1080 },
+	{ 1600,  900 },	// 16:9
+	{ 1600, 1000 },	// 16:10
+	{ 1600, 1200 },
+	{ 1680, 1050 },	// 16:10
+	{ 1920, 1080 },
+	{ 1920, 1200 },
+	{ 2048, 1152 }, // 16:9, iMac Retina 4K 21.5", HiDPI off
+	{ 2048, 1536 },
+	{ 2304, 1440 }, // 16:10, MacBook Retina 12"
+	{ 2560, 1080 }, // 21:9
+	{ 2560, 1440 },
+	{ 2560, 1600 },
+	{ 2560, 2048 },
+	{ 2880, 1800 }, // 16:10, MacBook Pro Retina 15"
+	{ 3200, 1800 },
+	{ 3440, 1440 }, // 21:9
+	{ 3840, 2160 },
+	{ 3840, 2400 },
+	{ 4096, 2160 },
+	{ 4096, 2304 }, // 16:9, iMac Retina 4K 21.5"
+	{ 5120, 2160 }, // 21:9
+	{ 5120, 2880 }  // 16:9, iMac Retina 5K 27"
+};
diff --git a/src/s_sound.cpp b/src/s_sound.cpp
index 74be46c20..a41663c3a 100644
--- a/src/s_sound.cpp
+++ b/src/s_sound.cpp
@@ -817,14 +817,17 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector,
 //
 //==========================================================================
 
-inline bool Validate(const float value)
+inline bool Validate(const float value, const float limit)
 {
-	return value >= -32768.f && value <= 32768.f;
+	return value >= -limit && value <= limit;
 }
 
-static bool Validate(const FVector3 &value, const char *const name, const AActor *const actor)
+static bool Validate(const FVector3 &value, const float limit, const char *const name, const AActor *const actor)
 {
-	const bool valid = Validate(value.X) && Validate(value.Y) && Validate(value.Z);
+	const bool valid = 
+		   Validate(value.X, limit)
+		&& Validate(value.Y, limit)
+		&& Validate(value.Z, limit);
 
 	if (!valid)
 	{
@@ -845,8 +848,13 @@ static bool Validate(const FVector3 &value, const char *const name, const AActor
 
 static bool ValidatePosVel(const AActor *actor, const FVector3 &pos, const FVector3 &vel)
 {
-	const bool valid = Validate(pos, "position", actor);
-	return Validate(vel, "velocity", actor) && valid;
+	// The actual limit for map coordinates
+	static const float POSITION_LIMIT = 32768.f;
+	const bool valid = Validate(pos, POSITION_LIMIT, "position", actor);
+
+	// The maximum velocity is enough to travel through entire map in one tic
+	static const float VELOCITY_LIMIT = 2 * POSITION_LIMIT * TICRATE;
+	return Validate(vel, VELOCITY_LIMIT, "velocity", actor) && valid;
 }
 
 static bool ValidatePosVel(const FSoundChan *const chan, const FVector3 &pos, const FVector3 &vel)
diff --git a/src/sound/adlmidi/adldata.cpp b/src/sound/adlmidi/adldata.cpp
index f17d0c839..1556f4d9c 100644
--- a/src/sound/adlmidi/adldata.cpp
+++ b/src/sound/adlmidi/adldata.cpp
@@ -4,7 +4,7 @@
  * FROM A NUMBER OF SOURCES, MOSTLY PC GAMES.
  * PREPROCESSED, CONVERTED, AND POSTPROCESSED OFF-SCREEN.
  */
-const adldata adl[4425] =
+const adldata adl[4423] =
 { //    ,---------+-------- Wave select settings
   //    | ,-------ч-+------ Sustain/release rates
   //    | | ,-----ч-ч-+---- Attack/decay rates
@@ -4116,7 +4116,7 @@ const adldata adl[4425] =
     { 0x332F985,0x0A5D684, 0x05,0x40, 0xE, +0 },
     { 0x0FFF00B,0x2FF220C, 0x00,0x00, 0xE, +0 },
     { 0x223A133,0x4F4F131, 0xD6,0x09, 0x6, +0 },
-    { 0x223B132,0x0F4F131, 0xD3,0x0A, 0x6, +0 },
+    { 0x023B131,0x0F4F131, 0xD3,0x0A, 0x6, +0 },
     { 0x433F133,0x0F4F131, 0xD6,0x09, 0x8, +0 },
     { 0x2F3F132,0x4F6F131, 0xD3,0x0A, 0x6, +0 },
     { 0x2A4A112,0x4B5F211, 0xD2,0x05, 0x4, +0 },
@@ -4135,10 +4135,10 @@ const adldata adl[4425] =
     { 0x587F617,0x0E4F231, 0x54,0x08, 0x9, +0 },
     { 0x0A5F33F,0x0F2C312, 0xA1,0x06, 0xC, -12 },
     { 0x0A5F43F,0x0F2F392, 0xD5,0x07, 0x0, -12 },
-    { 0x461A417,0x0017C11, 0xAA,0x08, 0x7, +0 },
-    { 0x061A416,0x0018911, 0xA7,0x07, 0x7, +0 },
-    { 0x0F6F2B2,0x0F6F281, 0xE5,0x00, 0xF, +0 },
-    { 0x0F6F2A4,0x007F08F, 0x40,0x00, 0x1, +0 },
+    { 0x462A417,0x0027A11, 0x9C,0x08, 0x9, +0 },
+    { 0x062A416,0x0028811, 0x99,0x07, 0x9, +0 },
+    { 0x0F6F2B2,0x0F6F281, 0xE8,0x05, 0xF, +0 },
+    { 0x0F6F2A4,0x007F08F, 0x45,0x05, 0x1, +0 },
     { 0x0F6F618,0x0F7E500, 0x63,0x80, 0x6, +12 },
     { 0x5A6F40E,0x007D804, 0x5B,0x80, 0x0, +0 },
     { 0x2F6F71A,0x0F5F413, 0x1F,0x03, 0x4, -19 },
@@ -4162,8 +4162,8 @@ const adldata adl[4425] =
     { 0x105FF2C,0x01A6222, 0x9D,0x12, 0x8, +0 },
     { 0x107F021,0x2055232, 0x92,0x07, 0x8, +0 },
     { 0x107F021,0x2055232, 0x92,0x07, 0x0, +0 },
-    { 0x274A613,0x4B8F401, 0xDD,0x05, 0x6, +0 },
-    { 0x2249134,0x2B8D301, 0x5E,0x05, 0xA, -12 },
+    { 0x574A613,0x4B8F401, 0x9D,0x0D, 0x6, +0 },
+    { 0x2249134,0x2B8D301, 0x61,0x05, 0xA, -12 },
     { 0x5E5F133,0x1E4F211, 0x99,0x07, 0x6, +0 },
     { 0x1E5F133,0x5E4F211, 0x9E,0x0B, 0x0, +0 },
     { 0x21FF021,0x088F211, 0xA5,0x80, 0xA, +12 },
@@ -4178,8 +4178,8 @@ const adldata adl[4425] =
     { 0x0F78140,0x3F7F040, 0x40,0x05, 0xC, +14 },
     { 0x6F78AE8,0x649B1F4, 0x03,0x0A, 0xA, +0 },
     { 0x6F78AE8,0x649B1F4, 0x43,0x4B, 0xA, +0 },
-    { 0x0209221,0x0E6C131, 0x97,0x05, 0x0, +0 },
-    { 0x0608521,0x0E6A131, 0xD4,0x05, 0x4, +0 },
+    { 0x0609533,0x4E5C131, 0x63,0x05, 0x0, +0 },
+    { 0x0608521,0x0E4A131, 0xD4,0x05, 0x4, +0 },
     { 0x0F9F030,0x0F8F131, 0x9D,0x05, 0xA, +12 },
     { 0x7F0F017,0x7F9B700, 0x00,0x0F, 0xA, +12 },
     { 0x026AA21,0x0D7F132, 0xCF,0x84, 0xA, +0 },
@@ -4191,7 +4191,8 @@ const adldata adl[4425] =
     { 0x2E69515,0x1B6B211, 0x17,0x08, 0x0, +0 },
     { 0x077FA21,0x06AC332, 0x07,0x0D, 0x0, +0 },
     { 0x0F5F430,0x0F6F330, 0x0E,0x00, 0xA, +12 },
-    { 0x1468331,0x017D232, 0x15,0x00, 0xA, +0 },
+    { 0x139A331,0x0F8F133, 0x93,0x08, 0xC, +0 },
+    { 0x139A331,0x0F8F133, 0x93,0x08, 0xA, +0 },
     { 0x2257020,0x4266161, 0x95,0x05, 0xA, +0 },
     { 0x1257021,0x0266141, 0x99,0x07, 0x8, +0 },
     { 0x2426070,0x2154130, 0x4F,0x00, 0xA, +0 },
@@ -4200,12 +4201,12 @@ const adldata adl[4425] =
     { 0x521F571,0x4166022, 0x90,0x09, 0x6, +0 },
     { 0x52151F0,0x4156021, 0x97,0x0D, 0x4, +12 },
     { 0x223F8F2,0x4055421, 0x99,0x8A, 0xC, +0 },
-    { 0x0A05211,0x0E4C411, 0x9F,0x03, 0xA, +0 },
-    { 0x1C79612,0x0E45411, 0xD9,0x03, 0x4, +0 },
+    { 0x4A35211,0x0E4C411, 0x9C,0x08, 0x6, +0 },
+    { 0x2C79613,0x4E45411, 0xD7,0x08, 0xA, +0 },
     { 0x023E133,0x0F2F131, 0xA2,0x09, 0xE, +0 },
     { 0x023F132,0x0F2F131, 0x24,0x0A, 0xE, +0 },
-    { 0x4C3C413,0x0B4D214, 0x9B,0x48, 0xA, -24 },
-    { 0x5BAF900,0x0B4F211, 0x87,0x48, 0x6, +0 },
+    { 0x5C3C404,0x1B4B519, 0xA1,0x00, 0xC, -31 },
+    { 0x17A9913,0x0B4F213, 0x0F,0x00, 0x8, -19 },
     { 0x223F832,0x4055421, 0x99,0x8A, 0xC, +0 },
     { 0x433CB32,0x5057561, 0x9B,0x8A, 0xA, +0 },
     { 0x1029033,0x4044561, 0x5B,0x85, 0x4, +0 },
@@ -4225,7 +4226,7 @@ const adldata adl[4425] =
     { 0x0235271,0x0198161, 0x1E,0x08, 0xE, +0 },
     { 0x0235361,0x0196161, 0x1D,0x03, 0xE, +0 },
     { 0x0155331,0x0378261, 0x94,0x00, 0xA, +0 },
-    { 0x118537A,0x5177432, 0x21,0x00, 0x4, -12 },
+    { 0x118543A,0x5177472, 0x1E,0x00, 0x4, -12 },
     { 0x0364121,0x02B7221, 0x21,0x08, 0xC, +0 },
     { 0x026F021,0x0056121, 0x26,0x03, 0xC, +0 },
     { 0x0578321,0x117C021, 0x19,0x03, 0xC, +0 },
@@ -4233,21 +4234,22 @@ const adldata adl[4425] =
     { 0x036F121,0x337F121, 0x92,0x08, 0xE, +0 },
     { 0x0368121,0x037F121, 0x92,0x08, 0xE, +0 },
     { 0x0A66121,0x0976121, 0x9B,0x08, 0xE, +0 },
-    { 0x0F37011,0x1F65052, 0x51,0x04, 0xA, +0 },
-    { 0x1067021,0x1165231, 0x8A,0x00, 0x6, +0 },
+    { 0x5237731,0x1F65012, 0x4B,0x00, 0xA, +0 },
+    { 0x0137732,0x0F65011, 0xC7,0x0A, 0xA, +0 },
+    { 0x1067021,0x1165231, 0x46,0x00, 0x6, +0 },
     { 0x00B9820,0x10B5330, 0x8E,0x00, 0xA, +12 },
     { 0x10B8020,0x11B6330, 0x87,0x00, 0x8, +12 },
-    { 0x0235031,0x0076C64, 0x58,0x08, 0xA, +0 },
-    { 0x055D531,0x0076C72, 0x17,0x0D, 0x6, +0 },
-    { 0x2077830,0x2076331, 0x94,0x00, 0xA, +0 },
+    { 0x1235031,0x0077C24, 0xC0,0x08, 0x2, +0 },
+    { 0x045D933,0x4076C35, 0xD0,0x26, 0x4, +0 },
+    { 0x2077830,0x2076331, 0x9F,0x00, 0xA, +0 },
     { 0x0199031,0x01B6134, 0x95,0x80, 0xA, +0 },
     { 0x0177532,0x0174531, 0x93,0x03, 0xC, +0 },
     { 0x0277530,0x0174536, 0x14,0x9C, 0xE, +12 },
     { 0x08D6EF1,0x02A3571, 0xC0,0x00, 0xE, +0 },
     { 0x08860A1,0x01A6561, 0x5C,0x00, 0x8, +0 },
     { 0x2176522,0x0277421, 0x5A,0x00, 0x6, +0 },
-    { 0x1274472,0x01745B1, 0x8D,0x05, 0x4, +0 },
-    { 0x2F0F051,0x09A7801, 0x03,0x12, 0xA, +0 },
+    { 0x1267532,0x0166531, 0x8D,0x05, 0x4, +0 },
+    { 0x2F0F011,0x0987801, 0x03,0x17, 0xA, +0 },
     { 0x00457F2,0x0375761, 0xA8,0x00, 0xE, +0 },
     { 0x2545C73,0x0776821, 0x00,0x0D, 0xE, +0 },
     { 0x5543737,0x25D67A1, 0x28,0x00, 0x8, +0 },
@@ -4260,23 +4262,23 @@ const adldata adl[4425] =
     { 0x3AB8120,0x308F130, 0x9E,0x06, 0x0, +0 },
     { 0x13357F1,0x00767E1, 0x21,0x00, 0xA, +0 },
     { 0x43357F2,0x00767E1, 0x28,0x00, 0x0, +0 },
-    { 0x2444830,0x43D67A1, 0x22,0x00, 0x8, +0 },
-    { 0x534B821,0x13D87A1, 0x1F,0x00, 0xA, +0 },
+    { 0x2444830,0x21D67A1, 0x22,0x00, 0x8, +0 },
+    { 0x534B821,0x02D87A1, 0x1F,0x00, 0xA, +0 },
     { 0x32B7420,0x12BF134, 0x46,0x00, 0x8, +0 },
     { 0x5029072,0x0069061, 0x96,0x0C, 0x8, +0 },
     { 0x1019031,0x0069061, 0x1A,0x0C, 0x6, +0 },
-    { 0x245C224,0x2550133, 0x83,0x80, 0x9, -36 },
-    { 0x2459224,0x2556133, 0x83,0x80, 0x9, -36 },
-    { 0x132ED10,0x3E7D010, 0x87,0x08, 0x6, +12 },
-    { 0x132ED30,0x3E7D010, 0x87,0x0D, 0x6, +12 },
-    { 0x2946374,0x005A0A1, 0xA5,0x05, 0x2, +0 },
-    { 0x2055F02,0x004FFE1, 0xA8,0x05, 0x0, +0 },
-    { 0x0031131,0x0054361, 0xD4,0x00, 0x4, +0 },
-    { 0x20311B0,0x00543E1, 0xD9,0x00, 0x4, +0 },
+    { 0x245C224,0x2550133, 0x81,0x80, 0xB, -36 },
+    { 0x2459224,0x2556133, 0x81,0x80, 0xB, -36 },
+    { 0x132ED10,0x3E7D010, 0x87,0x0D, 0x6, +12 },
+    { 0x132ED30,0x3E7D010, 0x87,0x12, 0x6, +12 },
+    { 0x033513A,0x013C121, 0xA4,0x06, 0x2, +0 },
+    { 0x273F325,0x0228231, 0x20,0x06, 0x4, +0 },
+    { 0x0031131,0x0054361, 0xD4,0x08, 0x4, +0 },
+    { 0x20311B0,0x00543E1, 0xD9,0x08, 0x4, +0 },
     { 0x245A121,0x126A121, 0x98,0x05, 0xC, +0 },
     { 0x255A421,0x126A121, 0x98,0x05, 0xC, +0 },
-    { 0x20470E0,0x1148161, 0x59,0x03, 0x2, +0 },
-    { 0x10460E1,0x2148161, 0x5F,0x83, 0x6, +0 },
+    { 0x50470E1,0x1148161, 0x59,0x03, 0x2, +0 },
+    { 0x10460E2,0x4148161, 0x5F,0x83, 0x6, +0 },
     { 0x0336186,0x05452E1, 0xA7,0x00, 0x6, +0 },
     { 0x13351A6,0x05452E1, 0xA7,0x00, 0x0, +0 },
     { 0x2529084,0x1534341, 0x9D,0x80, 0xC, +0 },
@@ -4290,8 +4292,8 @@ const adldata adl[4425] =
     { 0x2322122,0x0133221, 0x8C,0x92, 0x6, +0 },
     { 0x4033121,0x0132122, 0x93,0x48, 0x4, +7 },
     { 0x074F624,0x0249303, 0xC0,0x0D, 0x0, +0 },
-    { 0x3D2C092,0x1D2D131, 0x8E,0x03, 0x0, +0 },
-    { 0x0D2D091,0x1D23132, 0x8E,0x03, 0x0, +0 },
+    { 0x3D2C092,0x1D2D131, 0x8E,0x09, 0x0, +0 },
+    { 0x0D2D091,0x1D23132, 0x8E,0x09, 0x0, +0 },
     { 0x5F29054,0x0F2C241, 0x99,0x06, 0xE, +0 },
     { 0x1F19011,0x0F2C241, 0x1A,0x06, 0x6, +0 },
     { 0x05233E1,0x0131371, 0x1A,0x88, 0x7, +0 },
@@ -4306,7 +4308,7 @@ const adldata adl[4425] =
     { 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 },
     { 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 },
     { 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 },
-    { 0x332F320,0x6E49423, 0x0E,0x08, 0x8, +0 },
+    { 0x5E2F321,0x6E4F523, 0x1B,0x08, 0x8, +0 },
     { 0x455F71C,0x0D68501, 0xA3,0x08, 0x6, +0 },
     { 0x055F718,0x0D6E501, 0x23,0x08, 0x0, +0 },
     { 0x1397931,0x2099B22, 0x80,0x00, 0x6, +0 },
@@ -4326,7 +4328,7 @@ const adldata adl[4425] =
     { 0x250F610,0x0E7F510, 0x00,0xC8, 0x6, +0 },
     { 0x2114109,0x51D2101, 0x05,0x80, 0xA, +0 },
     { 0x2114108,0x31D2101, 0x05,0x80, 0xA, +12 },
-    { 0x4543311,0x357451A, 0x19,0x03, 0xE, -14 },
+    { 0x0534313,0x7574A1F, 0x20,0x03, 0xE, -14 },
     { 0x00437D2,0x0343471, 0xA1,0x07, 0xC, +0 },
     { 0x0F0F00C,0x0F66700, 0x00,0xCD, 0xE, +0 },
     { 0x200C327,0x6021300, 0x80,0x12, 0xE, -23 },
@@ -4355,29 +4357,22 @@ const adldata adl[4425] =
     { 0x2F7F602,0x0F8F802, 0x00,0x88, 0xE, +12 },
     { 0x05476C1,0x30892C5, 0x80,0x08, 0x0, +0 },
     { 0x05477C1,0x30892C5, 0x00,0x08, 0xA, -2 },
-    { 0x007C604,0x007C604, 0x08,0x08, 0x1, +0 },
-    { 0x201F302,0x057AB09, 0x03,0x07, 0xC, +12 },
+    { 0x005C604,0x005C604, 0x08,0x00, 0x1, +0 },
+    { 0x509F902,0x057AB07, 0x03,0x07, 0xC, +12 },
     { 0x254F307,0x307F905, 0x04,0x08, 0x6, -5 },
     { 0x254F307,0x207F905, 0x04,0x08, 0x8, +0 },
-    { 0x006C604,0x007C604, 0x08,0x08, 0x1, +0 },
-    { 0x201F312,0x057AB09, 0x03,0x07, 0xC, +12 },
+    { 0x509F912,0x057AB07, 0x03,0x07, 0xC, +12 },
     { 0x254D307,0x3288905, 0x04,0x03, 0xA, -5 },
-    { 0x0015500,0x007C716, 0x0C,0x00, 0x0, +0 },
-    { 0x201F312,0x057AB09, 0x00,0x07, 0xC, +12 },
-    { 0x0015500,0x007C719, 0x0C,0x00, 0x0, +0 },
-    { 0x001F312,0x047BB05, 0x03,0x07, 0xC, +12 },
-    { 0x0015500,0x007C71B, 0x0C,0x00, 0x0, +0 },
-    { 0x201F312,0x047BB09, 0x03,0x07, 0xC, +12 },
-    { 0x0015500,0x007C71F, 0x0C,0x00, 0x0, +0 },
-    { 0x210F509,0x305FE03, 0x8A,0x85, 0xE, +12 },
-    { 0x200F508,0x305FE03, 0xC7,0x85, 0xC, +12 },
-    { 0x2E1F119,0x3F3F11B, 0x04,0x0D, 0x8, +0 },
+    { 0x509F902,0x057AB07, 0x03,0x07, 0x0, +12 },
+    { 0x210F509,0x605FE05, 0x8A,0x8A, 0xE, +12 },
+    { 0x400F509,0x605FE05, 0x07,0x8A, 0xA, +12 },
+    { 0x2E1F11E,0x3F3F318, 0x04,0x00, 0x8, +0 },
     { 0x2777603,0x3679601, 0x87,0x08, 0x6, +12 },
     { 0x277C643,0x3679601, 0x87,0x08, 0xE, +12 },
     { 0x366F905,0x099F701, 0x00,0x00, 0xC, +12 },
     { 0x431A000,0x085B41A, 0x81,0x05, 0xA, +12 },
     { 0x459F640,0x185B418, 0x00,0x20, 0xB, +12 },
-    { 0x212FD04,0x305FD03, 0x01,0x00, 0x8, +12 },
+    { 0x212FD08,0x305FD03, 0x01,0x03, 0x8, +12 },
     { 0x2A8F9E3,0x0779643, 0x1E,0x08, 0x2, +6 },
     { 0x0A5F7E8,0x0D89949, 0xDE,0x00, 0x0, +0 },
     { 0x2A8F9E3,0x0779643, 0x1E,0x00, 0xE, +12 },
@@ -4394,8 +4389,11 @@ const adldata adl[4425] =
     { 0x367FE05,0x678F701, 0x09,0x08, 0x8, +12 },
     { 0x367FD10,0x078F901, 0x00,0x0D, 0x8, +11 },
     { 0x098600F,0x3FC8590, 0x08,0xC0, 0xE, +12 },
-    { 0x009F020,0x37DA588, 0x07,0x00, 0xA, +12 },
-    { 0x00FC020,0x32DA5A8, 0x07,0x00, 0xA, +12 },
+    { 0x009F020,0x27DA788, 0x25,0x00, 0x0, +12 },
+    { 0x00FC020,0x22DA388, 0x25,0x00, 0xA, +12 },
+    { 0x0F00000,0x0F00000, 0x3F,0x3F, 0xC, +0 },
+    { 0x000F020,0x40A8A00, 0x0A,0x00, 0xE, +0 },
+    { 0x70F5F20,0x70F4F00, 0x00,0x00, 0x2, -12 },
     { 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 },
     { 0x2D1F213,0x098F614, 0x9D,0x00, 0x0, +0 },
     { 0x2D1F213,0x098F614, 0x9D,0x21, 0x0, -2 },
@@ -4442,7 +4440,7 @@ const adldata adl[4425] =
     { 0x04CA700,0x04FC600, 0x00,0x2B, 0x0, -12 },
     { 0x0B5F704,0x002010C, 0x00,0x00, 0x8, +21 },
 };
-const struct adlinsdata adlins[4547] =
+const struct adlinsdata adlins[4549] =
 {
     {   0,   0,  0, 0,   1660,  1660,0.000000 },
     {   1,   1,  0, 0,   1746,  1746,0.000000 },
@@ -8783,7 +8781,7 @@ const struct adlinsdata adlins[4547] =
     {3547,3547,109, 0,   1780,  1780,0.000000 },
     {4097,4097, 79, 0,    126,   126,0.000000 },
     {4098,4098,  0, 0,   3413,  3413,0.000000 },
-    {4099,4100,  0, 1,   2040,  2040,0.031250 },
+    {4099,4100,  0, 1,   1613,  1613,0.031250 },
     {4101,4102,  0, 1,   2146,  2146,0.031250 },
     {4103,4104,  0, 1,   1646,  1646,0.046875 },
     {4105,4106,  0, 1,   1900,  1900,0.156250 },
@@ -8793,7 +8791,7 @@ const struct adlinsdata adlins[4547] =
     {4113,4114,  0, 1,   1740,  1740,0.000000 },
     {4115,4116,  0, 1,    993,   993,0.000025 },
     {4117,4118,  0, 1,    886,   886,0.000000 },
-    {4119,4120,  0, 1,   1900,  1900,0.046875 },
+    {4119,4120,  0, 1,   1153,  1153,0.046875 },
     {4121,4122,  0, 1,   1420,  1420,0.000000 },
     {4123,4124,  0, 1,    193,   193,0.000000 },
     {4125,4126,  0, 1,    406,   406,0.000000 },
@@ -8807,7 +8805,7 @@ const struct adlinsdata adlins[4547] =
     {4140,4141,  0, 1,  40000,    46,0.140625 },
     {4142,4143,  0, 1,  40000,     6,0.000000 },
     {4144,4145,  0, 1,  40000,   153,0.109375 },
-    {4146,4147,  0, 1,    600,   600,0.000000 },
+    {4146,4147,  0, 1,    920,   920,0.000000 },
     {4148,4149,  0, 1,    653,   653,0.000025 },
     {4150,4151,  0, 1,    633,   633,0.000000 },
     {4152,4153,  0, 1,    893,   893,0.046875 },
@@ -8815,182 +8813,184 @@ const struct adlinsdata adlins[4547] =
     {4156,4157,  0, 1,  40000,    60,-1.906250 },
     {4158,4159,  0, 1,  40000,    60,-1.906250 },
     {4160,4161,  0, 1,   2033,  2033,0.234375 },
-    {4162,4163,  0, 1,   1600,  1600,0.031250 },
+    {4162,4163,  0, 1,   1900,  1900,0.031250 },
     {4164,4165,  0, 1,   1453,  1453,0.000000 },
     {4166,4167,  0, 1,   2186,  2186,0.000000 },
     {4168,4169,  0, 1,   1933,  1933,0.046875 },
     {4170,4171,  0, 1,    633,   633,0.000000 },
     {4172,4173,  0, 1,    486,   486,0.000000 },
     {4174,4174,  0, 0,    313,   313,0.000000 },
-    {4175,4175,  0, 1,  40000,    33,0.156250 },
-    {4176,4177,  0, 1,   2040,    13,0.000000 },
-    {4178,4178,  0, 0,  40000,    66,0.000000 },
-    {4179,4180,  0, 1,  40000,    60,0.000025 },
-    {4181,4181,  0, 0,  40000,   133,0.000000 },
-    {4182,4183,  0, 1,  40000,   173,0.078125 },
-    {4184,4185,  0, 1,    320,   320,0.156250 },
-    {4186,4187,  0, 1,   1813,  1813,0.031250 },
-    {4188,4189,  0, 1,   1740,  1740,0.031250 },
-    {4190,4191,  0, 1,  40000,   213,0.062500 },
-    {4192,4193,  0, 1,  40000,   500,-0.062500 },
-    {4194,4194,  0, 1,  40000,   326,0.109375 },
-    {4195,4195,  0, 1,  40000,   406,0.109375 },
-    {4196,4197,  0, 1,  40000,   280,0.140625 },
-    {4198,4199,  0, 1,  40000,    53,0.140625 },
-    {4200,4201,  0, 1,  40000,   286,0.156250 },
-    {4202,4203,  0, 1,    206,   206,0.125000 },
-    {4204,4205,  0, 1,  40000,    26,0.000000 },
-    {4206,4207,  0, 1,  40000,    20,0.031250 },
-    {4208,4208,  0, 0,  40000,     6,0.000000 },
-    {4209,4209,  0, 0,  40000,    20,0.000000 },
-    {4210,4211,  0, 1,  40000,   160,0.031250 },
-    {4212,4213,  0, 1,  40000,    73,0.062500 },
-    {4214,4215,  0, 1,   2526,  2526,0.093750 },
-    {4216,4216,  0, 1,   5153,  5153,0.125000 },
-    {4217,4217,  0, 0,  40000,    66,0.000000 },
-    {4218,4218,  0, 0,  40000,    40,0.000000 },
-    {4219,4219,  0, 0,  40000,     0,0.000000 },
-    {4220,4220,  0, 0,  40000,     0,0.000000 },
-    {4221,4222,  0, 1,  40000,    60,0.000000 },
-    {4223,4223,  0, 0,  40000,    33,0.000000 },
-    {4224,4224,  0, 0,  40000,     6,0.000000 },
-    {4225,4226,  0, 1,  40000,    40,0.000000 },
-    {4227,4227,  0, 0,  40000,     0,0.000000 },
-    {4228,4228,  0, 0,  40000,     6,0.000000 },
-    {4229,4229,  0, 0,  40000,    33,0.000000 },
-    {4230,4231,  0, 1,  40000,    33,0.031250 },
-    {4232,4233,  0, 1,  40000,    20,0.046875 },
-    {4234,4235,  0, 1,    420,   420,0.031250 },
-    {4236,4236,  0, 0,  40000,   106,0.000000 },
-    {4237,4237,  0, 0,  40000,     6,0.000000 },
-    {4238,4239,  0, 1,  40000,     6,0.125000 },
-    {4240,4241,  0, 1,  40000,    13,0.109375 },
-    {4242,4243,  0, 1,  40000,    53,0.109375 },
-    {4244,4245,  0, 1,    120,     0,-0.031250 },
-    {4246,4246,  0, 0,  40000,     6,0.000000 },
-    {4247,4248,  0, 1,  40000,   133,0.156250 },
-    {4249,4250,  0, 1,   3886,  3886,0.125000 },
-    {4251,4252,  0, 1,  40000,    26,0.031250 },
-    {4253,4254,  0, 1,  40000,   320,0.078125 },
-    {4255,4256,  0, 1,    846,    66,0.109375 },
-    {4257,4258,  0, 1,   1293,    80,0.078125 },
-    {4259,4260,  0, 1,  40000,   193,0.156250 },
-    {4261,4262,  0, 1,   2040,  2040,0.109375 },
-    {4263,4264,  0, 1,   1360,  1360,0.062500 },
-    {4265,4266,  0, 1,  40000,   433,0.093750 },
-    {4267,4268,  0, 1,  40000,   533,0.109375 },
-    {4269,4270,  0, 1,    826,   826,0.093750 },
-    {4271,4272,  0, 1,  40000,   926,0.125000 },
-    {4273,4273,  0, 1,    886,   886,0.109375 },
-    {4274,4275,  0, 1,   2186,  2186,-0.046875 },
-    {4276,4277,  0, 1,   1486,  1486,0.125000 },
-    {4278,4279,  0, 1,  40000,   393,-0.078125 },
-    {4280,4281,  0, 1,  40000,  1166,0.140625 },
-    {4282,4283,  0, 1,    360,   360,0.078125 },
-    {4284,4285,  0, 1,   1693,  1693,0.031250 },
-    {4286,4287,  0, 1,    760,   760,0.000000 },
-    {4288,4289,  0, 1,    126,   126,0.031250 },
-    {4290,4290,  0, 0,    633,   633,0.000000 },
-    {4291,4292,  0, 1,    280,   280,0.000000 },
-    {4293,4294,  0, 1,  40000,    26,0.062500 },
-    {4295,4295,  0, 0,  40000,    66,0.000000 },
-    {4296,4296,  0, 0,  40000,    53,0.000000 },
-    {4297,4297,  0, 0,   1940,  1940,0.000000 },
-    {4298,4298,  0, 0,     86,    86,0.000000 },
-    {4299,4300,  0, 1,    280,   280,0.031250 },
-    {4301,4301,  0, 0,     40,    40,0.000000 },
-    {4302,4303,  0, 1,     53,    53,0.000000 },
-    {4304,4305,  0, 1,    140,   140,0.000000 },
-    {4306,4307,  0, 1,     26,    26,0.000000 },
-    {4308,4309,  0, 1,   2153,  2153,0.109375 },
-    {4310,4310,  0, 0,    600,   600,0.000000 },
-    {4311,4312,  0, 1,    993,    26,0.000000 },
-    {4313,4314,  0, 1,   5613,  5613,0.000000 },
-    {4315,4315,  0, 0,    220,   220,0.000000 },
-    {4316,4317,  0, 1,  10306,   526,0.000000 },
-    {4318,4319,  0, 1,   1486,    13,0.000000 },
-    {4320,4321,  0, 1,  40000,   660,0.000000 },
-    {4322,4322,  0, 0,    120,   120,0.000000 },
-    {4323,4323, 34, 0,     40,    40,0.000000 },
-    {4324,4324, 28, 0,     73,    73,0.000000 },
-    {4325,4326, 39, 1,    233,   233,0.000000 },
-    {4325,4326, 33, 1,    193,   193,0.000000 },
-    {4327,4328, 63, 1,     33,    33,0.000000 },
-    {4329,4329, 15, 0,     13,    13,0.000000 },
-    {4330,4330, 36, 0,     13,    13,0.000000 },
-    {4330,4331, 36, 1,    133,   133,0.406250 },
-    {4332,4333, 25, 1,     13,    13,0.000000 },
-    {4334,4333, 25, 1,     33,    33,0.000000 },
-    {4335,4336, 61, 1,     40,    40,0.000000 },
-    {4337,4338, 37, 1,     53,    53,0.000000 },
-    {4339,4340, 15, 1,     80,    80,0.000000 },
-    {4341,4342, 48, 1,     73,    73,-1.906250 },
-    {4343,4344, 19, 1,    120,   120,0.000000 },
-    {4345,4345, 48, 0,     53,    53,0.000000 },
-    {4346,4347, 15, 1,     33,    33,0.000000 },
-    {4348,4349, 12, 1,     33,    33,0.000000 },
-    {4350,4351, 12, 1,     33,    33,0.000000 },
-    {4352,4351, 10, 1,     40,    40,0.000000 },
-    {4353,4354, 60, 1,    286,   286,0.062500 },
-    {4355,4355, 62, 0,   1726,  1726,0.000000 },
-    {4356,4357, 80, 1,    106,   106,0.125000 },
-    {4358,4358, 58, 0,     73,    73,0.000000 },
-    {4359,4360, 31, 1,    313,   313,0.000000 },
-    {4361,4361, 61, 0,    206,   206,0.000000 },
-    {4362,4363, 41, 1,    100,   100,0.000000 },
-    {4364,4365, 35, 1,    160,   160,0.000000 },
-    {4366,4367, 29, 1,     40,    40,0.000000 },
-    {4368,4369, 41, 1,    166,   166,0.000000 },
-    {4368,4369, 37, 1,    160,   160,0.000000 },
-    {4370,4371, 54, 1,     80,    80,0.000000 },
-    {4370,4372, 48, 1,     80,    80,0.000000 },
-    {4373,4374, 77, 1,     53,    53,0.000000 },
-    {4375,4376, 72, 1,     46,    46,0.000000 },
-    {4377,4377, 40, 0,    140,   140,0.000000 },
-    {4378,4378, 45, 0,    313,   313,0.000000 },
-    {4379,4379, 42, 0,  40000,     0,0.000000 },
-    {4380,4380, 73, 0,     60,    60,0.000000 },
-    {4381,4382, 68, 1,     40,    40,0.000000 },
-    {4383,4384, 18, 1,     60,    60,0.000000 },
-    {4385,4386, 18, 1,    106,   106,0.000000 },
-    {4387,4387, 90, 0,     80,    80,0.000000 },
-    {4388,4388, 90, 0,    306,   306,0.000000 },
-    {4389,4390, 64, 1,    233,   233,0.031250 },
-    {4391,4392, 80, 1,    140,   140,0.031250 },
-    {4393,4394, 64, 1,    606,   606,0.000000 },
-    {4395,4395, 67, 0,     20,    20,0.000000 },
-    {4396,4397, 50, 1,     53,    53,0.000000 },
-    {4398,4398, 36, 0,     66,    66,0.000000 },
-    {4399,4399,  0, 0,  40000,    20,0.000000 },
-    {4400,4400,  0, 0,  40000,     0,0.000000 },
-    {4401,4401,  0, 0,    360,   360,0.000000 },
-    {4402,4402,  0, 0,    586,   586,0.000000 },
+    {4175,4176,  0, 1,   2533,  2533,0.078125 },
+    {4177,4178,  0, 1,   2040,    13,0.000000 },
+    {4179,4179,  0, 0,  40000,    66,0.000000 },
+    {4180,4181,  0, 1,  40000,    60,0.000025 },
+    {4182,4182,  0, 0,  40000,   133,0.000000 },
+    {4183,4184,  0, 1,  40000,   173,0.078125 },
+    {4185,4186,  0, 1,    333,   333,0.109375 },
+    {4187,4188,  0, 1,   1813,  1813,0.031250 },
+    {4189,4190,  0, 1,   1473,  1473,0.031250 },
+    {4191,4192,  0, 1,  40000,   213,0.062500 },
+    {4193,4194,  0, 1,  40000,   500,-0.062500 },
+    {4195,4195,  0, 1,  40000,   326,0.109375 },
+    {4196,4196,  0, 1,  40000,   406,0.109375 },
+    {4197,4198,  0, 1,  40000,   280,0.140625 },
+    {4199,4200,  0, 1,  40000,    53,0.140625 },
+    {4201,4202,  0, 1,  40000,   286,0.156250 },
+    {4203,4204,  0, 1,    206,   206,0.125000 },
+    {4205,4206,  0, 1,  40000,    26,0.000000 },
+    {4207,4208,  0, 1,  40000,    20,0.031250 },
+    {4209,4209,  0, 0,  40000,     6,0.000000 },
+    {4210,4210,  0, 0,  40000,    20,0.000000 },
+    {4211,4212,  0, 1,  40000,   160,0.031250 },
+    {4213,4214,  0, 1,  40000,    73,0.062500 },
+    {4215,4216,  0, 1,   2526,  2526,0.093750 },
+    {4217,4217,  0, 1,   5153,  5153,0.125000 },
+    {4218,4219,  0, 1,  40000,    73,0.000000 },
+    {4220,4220,  0, 0,  40000,    60,0.000000 },
+    {4221,4221,  0, 0,  40000,     0,0.000000 },
+    {4222,4222,  0, 0,  40000,     0,0.000000 },
+    {4223,4224,  0, 1,  40000,    73,0.000000 },
+    {4225,4225,  0, 0,  40000,    33,0.000000 },
+    {4226,4226,  0, 0,  40000,     6,0.000000 },
+    {4227,4228,  0, 1,  40000,    40,0.000000 },
+    {4229,4229,  0, 0,  40000,     0,0.000000 },
+    {4230,4230,  0, 0,  40000,     6,0.000000 },
+    {4231,4231,  0, 0,  40000,    33,0.000000 },
+    {4232,4233,  0, 1,  40000,    53,0.031250 },
+    {4234,4235,  0, 1,  40000,    20,0.046875 },
+    {4236,4237,  0, 1,    420,   420,0.031250 },
+    {4238,4238,  0, 0,  40000,   106,0.000000 },
+    {4239,4239,  0, 0,  40000,     6,0.000000 },
+    {4240,4241,  0, 1,  40000,     6,0.125000 },
+    {4242,4243,  0, 1,  40000,    13,0.109375 },
+    {4244,4245,  0, 1,  40000,    53,0.109375 },
+    {4246,4247,  0, 1,    226,     6,-0.031250 },
+    {4248,4248,  0, 0,  40000,     6,0.000000 },
+    {4249,4250,  0, 1,  40000,   133,0.156250 },
+    {4251,4252,  0, 1,   4186,    13,0.125000 },
+    {4253,4254,  0, 1,  40000,    26,0.031250 },
+    {4255,4256,  0, 1,  40000,   660,0.078125 },
+    {4257,4258,  0, 1,    846,    66,0.109375 },
+    {4259,4260,  0, 1,   1293,    80,0.078125 },
+    {4261,4262,  0, 1,  40000,   300,0.140625 },
+    {4263,4264,  0, 1,   2040,  2040,0.109375 },
+    {4265,4266,  0, 1,   1360,  1360,0.062500 },
+    {4267,4268,  0, 1,  40000,   433,0.093750 },
+    {4269,4270,  0, 1,  40000,   533,0.109375 },
+    {4271,4272,  0, 1,    826,   826,0.093750 },
+    {4273,4274,  0, 1,  40000,   926,0.125000 },
+    {4275,4275,  0, 1,    886,   886,0.109375 },
+    {4276,4277,  0, 1,   2186,  2186,-0.046875 },
+    {4278,4279,  0, 1,   1486,  1486,0.125000 },
+    {4280,4281,  0, 1,  40000,   393,-0.078125 },
+    {4282,4283,  0, 1,  40000,  1166,0.140625 },
+    {4284,4285,  0, 1,    360,   360,0.078125 },
+    {4286,4287,  0, 1,   1693,  1693,0.031250 },
+    {4288,4289,  0, 1,    760,   760,0.000000 },
+    {4290,4291,  0, 1,    126,   126,0.031250 },
+    {4292,4292,  0, 0,    300,   300,0.000000 },
+    {4293,4294,  0, 1,    280,   280,0.000000 },
+    {4295,4296,  0, 1,  40000,    26,0.062500 },
+    {4297,4297,  0, 0,  40000,    66,0.000000 },
+    {4298,4298,  0, 0,  40000,    53,0.000000 },
+    {4299,4299,  0, 0,   1940,  1940,0.000000 },
+    {4300,4300,  0, 0,     86,    86,0.000000 },
+    {4301,4302,  0, 1,    280,   280,0.031250 },
+    {4303,4303,  0, 0,     40,    40,0.000000 },
+    {4304,4305,  0, 1,     53,    53,0.000000 },
+    {4306,4307,  0, 1,    140,   140,0.000000 },
+    {4308,4309,  0, 1,     26,    26,0.000000 },
+    {4310,4311,  0, 1,   2153,  2153,0.109375 },
+    {4312,4312,  0, 0,    293,   293,0.000000 },
+    {4313,4314,  0, 1,    993,    26,0.000000 },
+    {4315,4316,  0, 1,   5613,  5613,0.000000 },
+    {4317,4317,  0, 0,    220,   220,0.000000 },
+    {4318,4319,  0, 1,  10306,   526,0.000000 },
+    {4320,4321,  0, 1,   1486,    13,0.000000 },
+    {4322,4323,  0, 1,  40000,   660,0.000000 },
+    {4324,4324,  0, 0,    120,   120,0.000000 },
+    {4325,4325, 34, 0,     40,    40,0.000000 },
+    {4326,4326, 28, 0,     73,    73,0.000000 },
+    {4327,4328, 39, 1,    233,   233,0.000000 },
+    {4327,4328, 33, 1,    193,   193,0.000000 },
+    {4329,4330, 63, 1,     33,    33,0.000000 },
+    {4331,4331, 15, 0,     13,    13,0.000000 },
+    {4332,4332, 36, 0,     13,    13,0.000000 },
+    {4332,4333, 36, 1,    133,   133,0.406250 },
+    {4334,4335, 25, 1,     13,    13,0.000000 },
+    {4336,4335, 25, 1,     33,    33,0.000000 },
+    {4337,4338, 61, 1,     40,    40,0.000000 },
+    {4339,4340, 37, 1,     53,    53,0.000000 },
+    {4341,4342, 15, 1,    320,   320,0.000000 },
+    {4343,4344, 48, 1,     73,    73,-1.906250 },
+    {4341,4345, 19, 1,    320,   320,0.000000 },
+    {4346,4346, 48, 0,     53,    53,0.000000 },
+    {4341,4342, 22, 1,    353,   353,0.000000 },
+    {4341,4342, 24, 1,    360,   360,0.000000 },
+    {4341,4347, 27, 1,    393,   393,0.000000 },
+    {4341,4342, 31, 1,    380,   380,0.000000 },
+    {4348,4349, 60, 1,    246,   246,0.031250 },
+    {4350,4350, 70, 0,    340,   340,0.000000 },
+    {4351,4352, 80, 1,    106,   106,0.125000 },
+    {4353,4353, 58, 0,     73,    73,0.000000 },
+    {4354,4355, 31, 1,    313,   313,0.000000 },
+    {4356,4356, 61, 0,    253,   253,0.000000 },
+    {4357,4358, 41, 1,    100,   100,0.000000 },
+    {4359,4360, 35, 1,    160,   160,0.000000 },
+    {4361,4362, 29, 1,     40,    40,0.000000 },
+    {4363,4364, 41, 1,    166,   166,0.000000 },
+    {4363,4364, 37, 1,    160,   160,0.000000 },
+    {4365,4366, 54, 1,     80,    80,0.000000 },
+    {4365,4367, 48, 1,     80,    80,0.000000 },
+    {4368,4369, 77, 1,     53,    53,0.000000 },
+    {4370,4371, 72, 1,     46,    46,0.000000 },
+    {4372,4372, 40, 0,    140,   140,0.000000 },
+    {4373,4373, 38, 0,     73,    73,0.000000 },
+    {4374,4374, 36, 0,    533,   533,0.000000 },
+    {4375,4376, 60, 1,     26,    26,0.000000 },
+    {4376,4377, 60, 1,     26,    26,0.000000 },
+    {4378,4378, 73, 0,     60,    60,0.000000 },
+    {4379,4380, 68, 1,     40,    40,0.000000 },
+    {4381,4382, 18, 1,     60,    60,0.000000 },
+    {4383,4384, 18, 1,    106,   106,0.000000 },
+    {4385,4385, 90, 0,     80,    80,0.000000 },
+    {4386,4386, 90, 0,    306,   306,0.000000 },
+    {4387,4388, 64, 1,    233,   233,0.031250 },
+    {4389,4390, 80, 1,    140,   140,0.031250 },
+    {4391,4392, 64, 1,    606,   606,0.000000 },
+    {4393,4393, 67, 0,     20,    20,0.000000 },
+    {4394,4395, 50, 1,     53,    53,0.000000 },
+    {4396,4396, 36, 0,     66,    66,0.000000 },
+    {4397,4397,  0, 0,  40000,    20,0.000000 },
+    {4398,4398,  0, 0,  40000,     0,0.000000 },
+    {4399,4399,  0, 0,    360,   360,0.000000 },
+    {4400,4400,  0, 0,    586,   586,0.000000 },
+    {4401,4401,  0, 0,  40000,     0,0.000000 },
+    {4402,4402,  0, 0,  40000,     0,0.000000 },
     {4403,4403,  0, 0,  40000,     0,0.000000 },
-    {4404,4404,  0, 0,  40000,     0,0.000000 },
+    {4404,4404,  0, 0,  40000,     6,0.000000 },
     {4405,4405,  0, 0,  40000,     0,0.000000 },
-    {4406,4406,  0, 0,  40000,     6,0.000000 },
-    {4407,4407,  0, 0,  40000,     0,0.000000 },
-    {4408,4408,  0, 0,    146,   146,0.000000 },
-    {4408,4408, 73, 0,    886,   886,0.000000 },
-    {4409,4409,  0, 0,     40,     0,0.000000 },
-    {4410,4410,  0, 0,    486,     0,0.000000 },
-    {4411,4411,  0, 0,   1226,  1226,0.000000 },
-    {4412,4412,  0, 0,   1480,  1480,0.000000 },
-    {4413,4413,  0, 0,     46,    46,0.000000 },
-    {4414,4414,  0, 0,    126,   126,0.000000 },
-    {4414,4414, 12, 0,    106,   106,0.000000 },
-    {4415,4415,  0, 0,    160,   160,0.000000 },
-    {4415,4415,  1, 0,    153,   153,0.000000 },
-    {4416,4416,  0, 0,     20,    20,0.000000 },
-    {4416,4416, 23, 0,     26,    26,0.000000 },
-    {4417,4417,  0, 0,    140,   140,0.000000 },
-    {4418,4418,  0, 0,    486,   486,0.000000 },
-    {4419,4419,  0, 0,  40000,    13,0.000000 },
-    {4420,4420,  0, 0,  40000,     0,0.000000 },
-    {4421,4421,  0, 0,   1226,  1226,0.000000 },
-    {4422,4422,  0, 0,    766,   766,0.000000 },
-    {4423,4423,  0, 0,     93,    93,0.000000 },
-    {4424,4424,  0, 2,  40000,     0,0.000000 },
+    {4406,4406,  0, 0,    146,   146,0.000000 },
+    {4406,4406, 73, 0,    886,   886,0.000000 },
+    {4407,4407,  0, 0,     40,     0,0.000000 },
+    {4408,4408,  0, 0,    486,     0,0.000000 },
+    {4409,4409,  0, 0,   1226,  1226,0.000000 },
+    {4410,4410,  0, 0,   1480,  1480,0.000000 },
+    {4411,4411,  0, 0,     46,    46,0.000000 },
+    {4412,4412,  0, 0,    126,   126,0.000000 },
+    {4412,4412, 12, 0,    106,   106,0.000000 },
+    {4413,4413,  0, 0,    160,   160,0.000000 },
+    {4413,4413,  1, 0,    153,   153,0.000000 },
+    {4414,4414,  0, 0,     20,    20,0.000000 },
+    {4414,4414, 23, 0,     26,    26,0.000000 },
+    {4415,4415,  0, 0,    140,   140,0.000000 },
+    {4416,4416,  0, 0,    486,   486,0.000000 },
+    {4417,4417,  0, 0,  40000,    13,0.000000 },
+    {4418,4418,  0, 0,  40000,     0,0.000000 },
+    {4419,4419,  0, 0,   1226,  1226,0.000000 },
+    {4420,4420,  0, 0,    766,   766,0.000000 },
+    {4421,4421,  0, 0,     93,    93,0.000000 },
+    {4422,4422,  0, 2,  40000,     0,0.000000 },
 };
 
 
@@ -9002,7 +9002,7 @@ int  maxAdlBanks()
 
 const char* const banknames[74] =
 {
-    "AIL (Star Control 3, Albion, Empire 2, many others)",
+    "AIL (Star Control 3, Albion, Empire 2, etc.)",
     "Bisqwit (selection of 4op and 2op)",
     "HMI (Descent, Asterix)",
     "HMI (Descent:: Int)",
@@ -9016,47 +9016,47 @@ const char* const banknames[74] =
     "HMI (Aces of the Deep)",
     "HMI (Earthsiege)",
     "HMI (Anvil of Dawn)",
-    "DMX (Doom)",
+    "DMX (Doom 2)",
     "DMX (Hexen, Heretic)",
-    "DMX (MUS Play)",
-    "AIL (Discworld, Grandest Fleet)",
+    "DMX (DOOM, MUS Play)",
+    "AIL (Discworld, Grandest Fleet, etc.)",
     "AIL (Warcraft 2)",
     "AIL (Syndicate)",
-    "AIL (Guilty, Orion Conspiracy)",
+    "AIL (Guilty, Orion Conspiracy, TNSFC ::4op)",
     "AIL (Magic Carpet 2)",
     "AIL (Nemesis)",
     "AIL (Jagged Alliance)",
-    "AIL (When Two Worlds War)",
-    "AIL (Bards Tale Construction)",
+    "AIL (When Two Worlds War :MISS-INS:)",
+    "AIL (Bards Tale Construction :MISS-INS:)",
     "AIL (Return to Zork)",
     "AIL (Theme Hospital)",
     "AIL (National Hockey League PA)",
     "AIL (Inherit The Earth)",
     "AIL (Inherit The Earth, file two)",
-    "AIL (Little Big Adventure)",
+    "AIL (Little Big Adventure :: 4op)",
     "AIL (Wreckin Crew)",
     "AIL (Death Gate)",
     "AIL (FIFA International Soccer)",
     "AIL (Starship Invasion)",
-    "AIL (Super Street Fighter 2)",
-    "AIL (Lords of the Realm)",
-    "AIL (SimFarm, SimHealth)",
+    "AIL (Super Street Fighter 2 :4op:)",
+    "AIL (Lords of the Realm :MISS-INS:)",
+    "AIL (SimFarm, SimHealth :: 4op)",
     "AIL (SimFarm, Settlers, Serf City)",
-    "AIL (Caesar 2, MISSING INSTRUMENTS)",
+    "AIL (Caesar 2, :p4op::MISS-INS:)",
     "AIL (Syndicate Wars)",
     "AIL (Bubble Bobble Feat. Rainbow Islands, Z)",
     "AIL (Warcraft)",
-    "AIL (Terra Nova Strike Force Centuri)",
-    "AIL (System Shock)",
+    "AIL (Terra Nova Strike Force Centuri :p4op:)",
+    "AIL (System Shock :p4op:)",
     "AIL (Advanced Civilization)",
-    "AIL (Battle Chess 4000, melodic only)",
-    "AIL (Ultimate Soccer Manager)",
-    "AIL (Air Bucks, Blue And The Gray)",
+    "AIL (Battle Chess 4000 :p4op:)",
+    "AIL (Ultimate Soccer Manager :p4op:)",
+    "AIL (Air Bucks, Blue And The Gray, etc)",
     "AIL (Ultima Underworld 2)",
     "AIL (Kasparov's Gambit)",
-    "AIL (High Seas Trader)",
-    "AIL (Master of Magic, std percussion)",
-    "AIL (Master of Magic, orchestral percussion)",
+    "AIL (High Seas Trader :MISS-INS:)",
+    "AIL (Master of Magic, :4op: std percussion)",
+    "AIL (Master of Magic, :4op: orchestral percussion)",
     "SB (Action Soccer)",
     "SB (3d Cyberpuck :: melodic only)",
     "SB (Simon the Sorcerer :: melodic only)",
@@ -10388,14 +10388,14 @@ const unsigned short banks[74][256] =
  806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,4467,4468,4469,4470,4471,
 4472,4473,4474,4475,4476,4477,4217,4478,4218,4479,4480,4481,4482,4483,4221,4484,
 4485,4222,4486,4487,4224,4488,4489,4226,4490,4227,4491,4492,4493,4494,4495,4496,
-4497,4498,4499,4500,4501, 320,4502,4503,4504,4231,4232,4505,4506,1374,4507,4508,
-4509,4510,4511,4512,4513,4514,4515,4516, 806, 806, 806, 806, 806, 806, 806, 806,
+4497,4498,4499,4500,4501, 320,4502,4503,4504,4505,4506,4507,4508,1374,4509,4510,
+4511,4512,4513,4514,4515,4516,4517,4518, 806, 806, 806, 806, 806, 806, 806, 806,
  806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
  806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
     },
     {
-4517,4518,4519,4520,4518,4521,4522,4523,4524,4525,4526,4528,4529,4530,4531,4532,
-4533,4535,4537,4530,4539,4540,4541,4542,4543,4544,4545, 295,  28,  29,  30,  31,
+4519,4520,4521,4522,4520,4523,4524,4525,4526,4527,4528,4530,4531,4532,4533,4534,
+4535,4537,4539,4532,4541,4542,4543,4544,4545,4546,4547, 295,  28,  29,  30,  31,
   32,  33,  34,  35,  36,  37,  38,  33,  39,  40,  41,  42,  43,  44,  45,  46,
   47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,
   63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,
@@ -10404,8 +10404,8 @@ const unsigned short banks[74][256] =
  111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
  295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
  295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 127,4534, 128,4536, 130, 131, 132,4538, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144,4527, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 295, 295, 295, 127,4536, 128,4538, 130, 131, 132,4540, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144,4529, 146, 147, 148, 149, 150, 151, 152, 153, 154,
  155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
  295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
  295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -10415,7 +10415,7 @@ const unsigned short banks[74][256] =
 
 const AdlBankSetup adlbanksetup[74] =
 {
-    {0, 1, 1, 0, 0}, //Bank 0, AIL (Star Control 3, Albion, Empire 2, Sensible Soccer, Settlers 2, many others)
+    {0, 1, 1, 0, 0}, //Bank 0, AIL (Star Control 3, Albion, Empire 2, etc.)
     {0, 1, 1, 0, 0}, //Bank 1, Bisqwit (selection of 4op and 2op)
     {0, 0, 0, 0, 0}, //Bank 2, HMI (Descent, Asterix)
     {0, 0, 0, 0, 0}, //Bank 3, HMI (Descent:: Int)
@@ -10429,18 +10429,18 @@ const AdlBankSetup adlbanksetup[74] =
     {0, 0, 0, 0, 0}, //Bank 11, HMI (Aces of the Deep)
     {0, 0, 0, 0, 0}, //Bank 12, HMI (Earthsiege)
     {0, 0, 0, 0, 0}, //Bank 13, HMI (Anvil of Dawn)
-    {2, 0, 0, 0, 0}, //Bank 14, DMX (Doom           :: partially pseudo 4op)
-    {2, 0, 0, 0, 0}, //Bank 15, DMX (Hexen, Heretic :: partially pseudo 4op)
-    {2, 0, 0, 0, 0}, //Bank 16, DMX (MUS Play       :: partially pseudo 4op)
-    {0, 1, 1, 0, 0}, //Bank 17, AIL (Discworld, Grandest Fleet, Pocahontas, Slob Zone 3d, Ultima 4, Zorro)
+    {2, 0, 0, 0, 0}, //Bank 14, DMX (Doom 2)
+    {2, 0, 0, 0, 0}, //Bank 15, DMX (Hexen, Heretic)
+    {2, 0, 0, 0, 0}, //Bank 16, DMX (DOOM, MUS Play)
+    {0, 1, 1, 0, 0}, //Bank 17, AIL (Discworld, Grandest Fleet, etc.)
     {0, 1, 1, 0, 0}, //Bank 18, AIL (Warcraft 2)
     {0, 1, 1, 0, 0}, //Bank 19, AIL (Syndicate)
-    {0, 1, 1, 0, 0}, //Bank 20, AIL (Guilty, Orion Conspiracy, Terra Nova Strike Force Centauri :: 4op)
+    {0, 1, 1, 0, 0}, //Bank 20, AIL (Guilty, Orion Conspiracy, TNSFC ::4op)
     {0, 1, 1, 0, 0}, //Bank 21, AIL (Magic Carpet 2)
     {0, 1, 1, 0, 0}, //Bank 22, AIL (Nemesis)
     {0, 1, 1, 0, 0}, //Bank 23, AIL (Jagged Alliance)
-    {0, 1, 1, 0, 0}, //Bank 24, AIL (When Two Worlds War :: 4op, MISSING INSTRUMENTS)
-    {0, 1, 1, 0, 0}, //Bank 25, AIL (Bards Tale Construction :: MISSING INSTRUMENTS)
+    {0, 1, 1, 0, 0}, //Bank 24, AIL (When Two Worlds War :MISS-INS:)
+    {0, 1, 1, 0, 0}, //Bank 25, AIL (Bards Tale Construction :MISS-INS:)
     {0, 1, 1, 0, 0}, //Bank 26, AIL (Return to Zork)
     {0, 1, 1, 0, 0}, //Bank 27, AIL (Theme Hospital)
     {0, 1, 1, 0, 0}, //Bank 28, AIL (National Hockey League PA)
@@ -10451,25 +10451,25 @@ const AdlBankSetup adlbanksetup[74] =
     {0, 1, 1, 0, 0}, //Bank 33, AIL (Death Gate)
     {0, 1, 1, 0, 0}, //Bank 34, AIL (FIFA International Soccer)
     {0, 1, 1, 0, 0}, //Bank 35, AIL (Starship Invasion)
-    {0, 1, 1, 0, 0}, //Bank 36, AIL (Super Street Fighter 2 :: 4op)
-    {0, 1, 1, 0, 0}, //Bank 37, AIL (Lords of the Realm :: MISSING INSTRUMENTS)
+    {0, 1, 1, 0, 0}, //Bank 36, AIL (Super Street Fighter 2 :4op:)
+    {0, 1, 1, 0, 0}, //Bank 37, AIL (Lords of the Realm :MISS-INS:)
     {0, 1, 1, 0, 0}, //Bank 38, AIL (SimFarm, SimHealth :: 4op)
     {0, 1, 1, 0, 0}, //Bank 39, AIL (SimFarm, Settlers, Serf City)
-    {0, 1, 1, 0, 0}, //Bank 40, AIL (Caesar 2 :: partially 4op, MISSING INSTRUMENTS)
+    {0, 1, 1, 0, 0}, //Bank 40, AIL (Caesar 2, :p4op::MISS-INS:)
     {0, 1, 1, 0, 0}, //Bank 41, AIL (Syndicate Wars)
     {0, 1, 1, 0, 0}, //Bank 42, AIL (Bubble Bobble Feat. Rainbow Islands, Z)
     {0, 1, 1, 0, 0}, //Bank 43, AIL (Warcraft)
-    {0, 1, 1, 0, 0}, //Bank 44, AIL (Terra Nova Strike Force Centuri :: partially 4op)
-    {0, 1, 1, 0, 0}, //Bank 45, AIL (System Shock :: partially 4op)
+    {0, 1, 1, 0, 0}, //Bank 44, AIL (Terra Nova Strike Force Centuri :p4op:)
+    {0, 1, 1, 0, 0}, //Bank 45, AIL (System Shock :p4op:)
     {0, 1, 1, 0, 0}, //Bank 46, AIL (Advanced Civilization)
-    {0, 1, 1, 0, 0}, //Bank 47, AIL (Battle Chess 4000 :: partially 4op, melodic only)
-    {0, 1, 1, 0, 0}, //Bank 48, AIL (Ultimate Soccer Manager :: partially 4op)
-    {0, 1, 1, 0, 0}, //Bank 49, AIL (Air Bucks, Blue And The Gray, America Invades, Terminator 2029)
+    {0, 1, 1, 0, 0}, //Bank 47, AIL (Battle Chess 4000 :p4op:)
+    {0, 1, 1, 0, 0}, //Bank 48, AIL (Ultimate Soccer Manager :p4op:)
+    {0, 1, 1, 0, 0}, //Bank 49, AIL (Air Bucks, Blue And The Gray, etc)
     {0, 1, 1, 0, 0}, //Bank 50, AIL (Ultima Underworld 2)
     {0, 1, 1, 0, 0}, //Bank 51, AIL (Kasparov's Gambit)
-    {0, 1, 1, 0, 0}, //Bank 52, AIL (High Seas Trader :: MISSING INSTRUMENTS)
-    {0, 0, 0, 0, 0}, //Bank 53, AIL (Master of Magic, Master of Orion 2 :: 4op, std percussion)
-    {0, 0, 0, 0, 0}, //Bank 54, AIL (Master of Magic, Master of Orion 2 :: 4op, orchestral percussion)
+    {0, 1, 1, 0, 0}, //Bank 52, AIL (High Seas Trader :MISS-INS:)
+    {0, 0, 0, 0, 0}, //Bank 53, AIL (Master of Magic, :4op: std percussion)
+    {0, 0, 0, 0, 0}, //Bank 54, AIL (Master of Magic, :4op: orchestral percussion)
     {0, 0, 0, 0, 0}, //Bank 55, SB (Action Soccer)
     {0, 0, 0, 0, 0}, //Bank 56, SB (3d Cyberpuck :: melodic only)
     {0, 0, 0, 0, 0}, //Bank 57, SB (Simon the Sorcerer :: melodic only)
diff --git a/src/sound/adlmidi/adlmidi.cpp b/src/sound/adlmidi/adlmidi.cpp
index 586cb901e..db97447a2 100644
--- a/src/sound/adlmidi/adlmidi.cpp
+++ b/src/sound/adlmidi/adlmidi.cpp
@@ -108,7 +108,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
     if(static_cast<uint32_t>(bankno) >= NumBanks)
     {
         char errBuf[150];
-        std::snprintf(errBuf, 150, "Embedded bank number may only be 0..%u!\n", (NumBanks - 1));
+        snprintf(errBuf, 150, "Embedded bank number may only be 0..%u!\n", (NumBanks - 1));
         play->setErrorString(errBuf);
         return -1;
     }
@@ -139,7 +139,7 @@ ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4)
     if((unsigned int)ops4 > 6 * play->m_setup.NumCards)
     {
         char errBuff[250];
-        std::snprintf(errBuff, 250, "number of four-op channels may only be 0..%u when %u OPL3 cards are used.\n", (6 * (play->m_setup.NumCards)), play->m_setup.NumCards);
+        snprintf(errBuff, 250, "number of four-op channels may only be 0..%u when %u OPL3 cards are used.\n", (6 * (play->m_setup.NumCards)), play->m_setup.NumCards);
         play->setErrorString(errBuff);
         return -1;
     }
diff --git a/src/sound/adlmidi/adlmidi_load.cpp b/src/sound/adlmidi/adlmidi_load.cpp
index 03206bcd6..00a4ce3de 100644
--- a/src/sound/adlmidi/adlmidi_load.cpp
+++ b/src/sound/adlmidi/adlmidi_load.cpp
@@ -103,7 +103,8 @@ enum WOPL_InstrumentFlags
 {
     WOPL_Flags_NONE      = 0,
     WOPL_Flag_Enable4OP  = 0x01,
-    WOPL_Flag_Pseudo4OP  = 0x02
+    WOPL_Flag_Pseudo4OP  = 0x02,
+    WOPL_Flag_NoSound    = 0x04,
 };
 
 struct WOPL_Inst
@@ -151,6 +152,7 @@ static bool readInstrument(MIDIplay::fileReader &file, WOPL_Inst &ins, uint16_t
 
     uint8_t flags       = idata[39];
     ins.adlins.flags = (flags & WOPL_Flag_Enable4OP) && (flags & WOPL_Flag_Pseudo4OP) ? adlinsdata::Flag_Pseudo4op : 0;
+    ins.adlins.flags|= (flags & WOPL_Flag_NoSound) ? adlinsdata::Flag_NoSound : 0;
     ins.fourOps      = (flags & WOPL_Flag_Enable4OP) || (flags & WOPL_Flag_Pseudo4OP);
 
     ins.op[0].feedconn = (idata[40]);
diff --git a/src/sound/adlmidi/adlmidi_midiplay.cpp b/src/sound/adlmidi/adlmidi_midiplay.cpp
index 65e7af5ef..13e1008c0 100644
--- a/src/sound/adlmidi/adlmidi_midiplay.cpp
+++ b/src/sound/adlmidi/adlmidi_midiplay.cpp
@@ -319,7 +319,7 @@ bool MIDIplay::buildTrackData()
                 evtPos.delay = ReadVarLenEx(&trackPtr, end, ok);
             if(!ok)
             {
-                int len = std::sprintf(error, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk);
+                int len = snprintf(error, 150, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk);
                 if((len > 0) && (len < 150))
                     errorString += std::string(error, (size_t)len);
                 return false;
@@ -347,7 +347,7 @@ bool MIDIplay::buildTrackData()
             event = parseEvent(&trackPtr, end, status);
             if(!event.isValid)
             {
-                int len = std::sprintf(error, "buildTrackData: Fail to parse event in the track %d.\n", (int)tk);
+                int len = snprintf(error, 150, "buildTrackData: Fail to parse event in the track %d.\n", (int)tk);
                 if((len > 0) && (len < 150))
                     errorString += std::string(error, (size_t)len);
                 return false;
@@ -1031,7 +1031,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
             {
                 if(!caugh_missing_banks_melodic.count(bank))
                 {
-                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion bank %i (patch %i)", channel, bank, midiins);
+                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion MIDI bank %i (patch %i)", channel, bank, midiins);
                     caugh_missing_banks_melodic.insert(bank);
                 }
             }
@@ -1046,7 +1046,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
             {
                 if(!caugh_missing_banks_percussion.count(bank))
                 {
-                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic bank %i (patch %i)", channel, bank, midiins);
+                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic MIDI bank %i (patch %i)", channel, bank, midiins);
                     caugh_missing_banks_percussion.insert(bank);
                 }
             }
@@ -1060,29 +1060,48 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
         if(midiins == 48 || midiins == 50) vol /= 4; // HACK
         */
     //if(midiins == 56) vol = vol*6/10; // HACK
-
     //int meta = banks[opl.AdlBank][midiins];
-    const size_t        meta   = opl.GetAdlMetaNumber(midiins);
-    const adlinsdata    &ains  = opl.GetAdlMetaIns(meta);
+
+    size_t              meta   = opl.GetAdlMetaNumber(midiins);
+    const adlinsdata   *ains  = &opl.GetAdlMetaIns(meta);
     int16_t tone = note;
 
-    if(ains.tone)
+    if(!isPercussion && !isXgPercussion && (bank > 0)) // For non-zero banks
+    {
+        if(ains->flags & adlinsdata::Flag_NoSound)
+        {
+            if(hooks.onDebugMessage)
+            {
+                if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)))
+                {
+                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Caugh a blank instrument %i (offset %i) in the MIDI bank %u", channel, Ch[channel].patch, midiins, bank);
+                    caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
+                }
+            }
+            bank = 0;
+            midiins = Ch[channel].patch;
+            meta    = opl.GetAdlMetaNumber(midiins);
+            ains    = &opl.GetAdlMetaIns(meta);
+        }
+    }
+
+    if(ains->tone)
     {
         /*if(ains.tone < 20)
             tone += ains.tone;
         else*/
-        if(ains.tone < 128)
-            tone = ains.tone;
+        if(ains->tone < 128)
+            tone = ains->tone;
         else
-            tone -= ains.tone - 128;
+            tone -= ains->tone - 128;
     }
 
     //uint16_t i[2] = { ains.adlno1, ains.adlno2 };
-    bool pseudo_4op = ains.flags & adlinsdata::Flag_Pseudo4op;
+    bool pseudo_4op = ains->flags & adlinsdata::Flag_Pseudo4op;
     MIDIchannel::NoteInfo::Phys voices[2] =
     {
-        {ains.adlno1, false},
-        {ains.adlno2, pseudo_4op}
+        {ains->adlno1, false},
+        {ains->adlno2, pseudo_4op}
     };
 
     if((opl.AdlPercussionMode == 1) && PercussionMap[midiins & 0xFF])
@@ -1090,7 +1109,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
 
     if(hooks.onDebugMessage)
     {
-        if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains.flags & adlinsdata::Flag_NoSound))
+        if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains->flags & adlinsdata::Flag_NoSound))
         {
             hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing instrument %i", channel, midiins);
             caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
@@ -2624,12 +2643,12 @@ ADLMIDI_EXPORT void AdlInstrumentTester::NextAdl(int offset)
         if(ains.tone)
         {
             /*if(ains.tone < 20)
-                    std::sprintf(ToneIndication, "+%-2d", ains.tone);
+                    snprintf(ToneIndication, 8, "+%-2d", ains.tone);
                 else*/
             if(ains.tone < 128)
-                std::sprintf(ToneIndication, "=%-2d", ains.tone);
+                snprintf(ToneIndication, 8, "=%-2d", ains.tone);
             else
-                std::sprintf(ToneIndication, "-%-2d", ains.tone - 128);
+                snprintf(ToneIndication, 8, "-%-2d", ains.tone - 128);
         }
         std::printf("%s%s%s%u\t",
                     ToneIndication,
diff --git a/src/sound/opnmidi/opnmidi_load.cpp b/src/sound/opnmidi/opnmidi_load.cpp
index 8e87cabc8..15d0a5d35 100644
--- a/src/sound/opnmidi/opnmidi_load.cpp
+++ b/src/sound/opnmidi/opnmidi_load.cpp
@@ -280,10 +280,14 @@ bool OPNMIDIplay::LoadBank(OPNMIDIplay::fileReader &fr)
             size_t off = 37 + op * 7;
             std::memcpy(data.OPS[op].data, idata + off, 7);
         }
+
+        meta.flags = 0;
         if(version >= 2)
         {
             meta.ms_sound_kon   = toUint16BE(idata + 65);
             meta.ms_sound_koff  = toUint16BE(idata + 67);
+            if((meta.ms_sound_kon == 0) && (meta.ms_sound_koff == 0))
+                meta.flags |= opnInstMeta::Flag_NoSound;
         }
         else
         {
@@ -295,7 +299,6 @@ bool OPNMIDIplay::LoadBank(OPNMIDIplay::fileReader &fr)
         meta.opnno2 = uint16_t(opn.dynamic_instruments.size());
 
         /* Junk, delete later */
-        meta.flags = 0;
         meta.fine_tune      = 0.0;
         /* Junk, delete later */
 
diff --git a/src/sound/opnmidi/opnmidi_midiplay.cpp b/src/sound/opnmidi/opnmidi_midiplay.cpp
index 630df1c77..cd77429d8 100644
--- a/src/sound/opnmidi/opnmidi_midiplay.cpp
+++ b/src/sound/opnmidi/opnmidi_midiplay.cpp
@@ -280,7 +280,7 @@ bool OPNMIDIplay::buildTrackData()
                 evtPos.delay = ReadVarLenEx(&trackPtr, end, ok);
             if(!ok)
             {
-                int len = std::sprintf(error, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk);
+                int len = snprintf(error, 150, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk);
                 if((len > 0) && (len < 150))
                     errorString += std::string(error, (size_t)len);
                 return false;
@@ -308,7 +308,7 @@ bool OPNMIDIplay::buildTrackData()
             event = parseEvent(&trackPtr, end, status);
             if(!event.isValid)
             {
-                int len = std::sprintf(error, "buildTrackData: Fail to parse event in the track %d.\n", (int)tk);
+                int len = snprintf(error, 150, "buildTrackData: Fail to parse event in the track %d.\n", (int)tk);
                 if((len > 0) && (len < 150))
                     errorString += std::string(error, (size_t)len);
                 return false;
@@ -981,7 +981,7 @@ bool OPNMIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocit
             {
                 if(!caugh_missing_banks_melodic.count(bank))
                 {
-                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion bank %i (patch %i)", channel, bank, midiins);
+                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion MIDI bank %i (patch %i)", channel, bank, midiins);
                     caugh_missing_banks_melodic.insert(bank);
                 }
             }
@@ -996,7 +996,7 @@ bool OPNMIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocit
             {
                 if(!caugh_missing_banks_melodic.count(bank))
                 {
-                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic bank %i (patch %i)", channel, bank, midiins);
+                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic MIDI bank %i (patch %i)", channel, bank, midiins);
                     caugh_missing_banks_melodic.insert(bank);
                 }
             }
@@ -1011,28 +1011,47 @@ bool OPNMIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocit
         */
     //if(midiins == 56) vol = vol*6/10; // HACK
 
-    const size_t        meta    = opn.GetAdlMetaNumber(midiins);
-    const opnInstMeta  &ains    = opn.GetAdlMetaIns(meta);
+    size_t              meta    = opn.GetAdlMetaNumber(midiins);
+    const opnInstMeta  *ains    = &opn.GetAdlMetaIns(meta);
     int16_t tone = note;
 
-    if(ains.tone)
+    if(!isPercussion && !isXgPercussion && (bank > 0)) // For non-zero banks
+    {
+        if(ains->flags & opnInstMeta::Flag_NoSound)
+        {
+            if(hooks.onDebugMessage)
+            {
+                if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)))
+                {
+                    hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Caugh a blank instrument %i (offset %i) in the MIDI bank %u", channel, Ch[channel].patch, midiins, bank);
+                    caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
+                }
+            }
+            bank = 0;
+            midiins = Ch[channel].patch;
+            meta    = opn.GetAdlMetaNumber(midiins);
+            ains    = &opn.GetAdlMetaIns(meta);
+        }
+    }
+
+    if(ains->tone)
     {
         /*if(ains.tone < 20)
             tone += ains.tone;
         else*/
-        if(ains.tone < 128)
-            tone = ains.tone;
+        if(ains->tone < 128)
+            tone = ains->tone;
         else
-            tone -= ains.tone - 128;
+            tone -= ains->tone - 128;
     }
 
-    uint16_t i[2] = { ains.opnno1, ains.opnno2 };
+    uint16_t i[2] = { ains->opnno1, ains->opnno2 };
     //bool pseudo_4op = ains.flags & opnInstMeta::Flag_Pseudo8op;
     //if((opn.AdlPercussionMode == 1) && PercussionMap[midiins & 0xFF]) i[1] = i[0];
 
     if(hooks.onDebugMessage)
     {
-        if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains.flags & opnInstMeta::Flag_NoSound))
+        if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains->flags & opnInstMeta::Flag_NoSound))
         {
             hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing instrument %i", channel, midiins);
             caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
@@ -2548,12 +2567,12 @@ retry_arpeggio:
 //        if(ains.tone)
 //        {
 //            /*if(ains.tone < 20)
-//                    std::sprintf(ToneIndication, "+%-2d", ains.tone);
+//                    snprintf(ToneIndication, 8, "+%-2d", ains.tone);
 //                else*/
 //            if(ains.tone < 128)
-//                std::sprintf(ToneIndication, "=%-2d", ains.tone);
+//                snprintf(ToneIndication, 8, "=%-2d", ains.tone);
 //            else
-//                std::sprintf(ToneIndication, "-%-2d", ains.tone - 128);
+//                snprintf(ToneIndication, 8, "-%-2d", ains.tone - 128);
 //        }
 //        std::printf("%s%s%s%u\t",
 //                    ToneIndication,
diff --git a/src/swrenderer/things/r_playersprite.cpp b/src/swrenderer/things/r_playersprite.cpp
index 3fa68374d..7be96ab94 100644
--- a/src/swrenderer/things/r_playersprite.cpp
+++ b/src/swrenderer/things/r_playersprite.cpp
@@ -357,7 +357,8 @@ namespace swrenderer
 				invertcolormap = !invertcolormap;
 			}
 
-			bool fullbright = !foggy && pspr->GetState()->GetFullbright();
+			const FState* const psprState = pspr->GetState();
+			bool fullbright = !foggy && (psprState == nullptr ? false : psprState->GetFullbright());
 			bool fadeToBlack = (vis.RenderStyle.Flags & STYLEF_FadeToBlack) != 0;
 
 			vis.Light.SetColormap(0, spriteshade, basecolormap, fullbright, invertcolormap, fadeToBlack);
diff --git a/wadsrc/static/zscript/shared/fastprojectile.txt b/wadsrc/static/zscript/shared/fastprojectile.txt
index c861a3f8f..4ba05a7bf 100644
--- a/wadsrc/static/zscript/shared/fastprojectile.txt
+++ b/wadsrc/static/zscript/shared/fastprojectile.txt
@@ -66,13 +66,21 @@ class FastProjectile : Actor
 		int count = 8;
 		if (radius > 0)
 		{
-			while ( abs(Vel.X) >= radius * count || abs(Vel.Y) >= radius * count || abs(Vel.Z) >= height * count)
+			while (abs(Vel.X) >= radius * count || abs(Vel.Y) >= radius * count)
 			{
 				// we need to take smaller steps.
 				count += count;
 			}
 		}
 
+		if (height > 0)
+		{
+			while (abs(Vel.Z) >= height * count)
+			{
+				count += count;
+			}
+		}
+
 		// Handle movement
 		if (Vel != (0, 0, 0) || (pos.Z != floorz))
 		{
diff --git a/wadsrc/static/zscript/shared/randomspawner.txt b/wadsrc/static/zscript/shared/randomspawner.txt
index 9914670b4..24892aeec 100644
--- a/wadsrc/static/zscript/shared/randomspawner.txt
+++ b/wadsrc/static/zscript/shared/randomspawner.txt
@@ -44,16 +44,16 @@ class RandomSpawner : Actor
 		{
 			while (di != null)
 			{
-				if (di.Name != 'None')
+				bool shouldSkip = (di.Name == 'None') || (nomonsters && IsMonster(di));
+				
+				if (!shouldSkip)
 				{
-					if (!nomonsters || !IsMonster(di))
-					{
-						int amt = di.Amount;
-						if (amt < 0) amt = 1; // default value is -1, we need a positive value.
-						n += amt; // this is how we can weight the list.
-					}
-					di = di.Next;
+					int amt = di.Amount;
+					if (amt < 0) amt = 1; // default value is -1, we need a positive value.
+					n += amt; // this is how we can weight the list.
 				}
+
+				di = di.Next;
 			}
 			if (n == 0)
 			{ // Nothing left to spawn. They must have all been monsters, and monsters are disabled.