Index: soundlib/Dlsbank.cpp
===================================================================
--- soundlib/Dlsbank.cpp	(revision 23607)
+++ soundlib/Dlsbank.cpp	(working copy)
@@ -1293,6 +1293,7 @@
 
 				// Region Default Values
 				int32 regionAttn = 0;
+				int16 regionPan = 128;
 				// Load Generators
 				sf2info.instBags.Seek(ibagcnt * sizeof(SFInstBag));
 				SFInstBag bags[2];
@@ -1300,6 +1301,7 @@
 				sf2info.instGens.Seek(bags[0].wGenNdx * sizeof(SFInstGenList));
 				uint16 lastOp = SF2_GEN_SAMPLEID;
 				int32 loopStart = 0, loopEnd = 0;
+
 				if(!sf2info.instGens.ReadVector(instrGenerators, bags[1].wGenNdx - bags[0].wGenNdx))
 					break;
 				for(const auto &gen : instrGenerators)
@@ -1329,7 +1331,7 @@
 						{
 							int32 pan = static_cast<int16>(value);
 							pan = std::clamp(Util::muldivr(pan + 500, 256, 1000), 0, 256);
-							rgn.panning = static_cast<int16>(pan);
+							regionPan = static_cast<int16>(pan);
 							pDlsEnv->defaultPan = mpt::saturate_cast<uint8>(pan);
 						}
 						break;
@@ -1393,6 +1395,7 @@
 				int32 linearVol = DLS32BitRelativeGainToLinear(((instrAttenuation + regionAttn) * 65536) / 10) / 256;
 				Limit(linearVol, 16, 256);
 				rgn.usVolume = static_cast<uint16>(linearVol);
+				rgn.panning = regionPan;
 
 				if(lastOp != SF2_GEN_SAMPLEID && nRgn == 0)
 					globalZone = rgn;
@@ -1911,6 +1914,7 @@
 			sample.nGlobalVol = (uint8)(lVolume / 4);	// 0-64
 		}
 		sample.nPan = GetPanning(nIns, nRgn);
+		if(sample.nPan != 128) sample.uFlags |= CHN_PANNING;
 
 		sample.Convert(MOD_TYPE_IT, sndFile.GetType());
 		sample.PrecomputeLoops(sndFile, false);
