diff --git a/fluidsynth/doc/fluidsynth-v11-devdoc.txt b/fluidsynth/doc/fluidsynth-v11-devdoc.txt
index 2084c60a..b934df66 100644
--- a/fluidsynth/doc/fluidsynth-v11-devdoc.txt
+++ b/fluidsynth/doc/fluidsynth-v11-devdoc.txt
@@ -481,7 +481,8 @@ The following table provides details on all the settings used by the synthesizer
gs: (default) CC0 becomes the bank number, CC32 is ignored.
xg: CC32 becomes the bank number, CC0 is ignored.
mma: bank is calculated as CC0*128+CC32.
-
+
+ Note: Drum channels are initialized to \c DRUM_INST_BANK (==128). Since 1.1.7 mma mode also allows the bank of drum channels to be changed the same way as for melodic channels.
diff --git a/fluidsynth/src/synth/fluid_chan.c b/fluidsynth/src/synth/fluid_chan.c
index c6eb7231..02e69710 100644
--- a/fluidsynth/src/synth/fluid_chan.c
+++ b/fluidsynth/src/synth/fluid_chan.c
@@ -264,7 +264,7 @@ fluid_channel_set_bank_msb(fluid_channel_t* chan, int bankmsb)
}
if (style == FLUID_BANK_STYLE_GM ||
- chan->channel_type == CHANNEL_TYPE_DRUM)
+ (chan->channel_type == CHANNEL_TYPE_DRUM && style != FLUID_BANK_STYLE_MMA))
return; /* ignored */
oldval = chan->sfont_bank_prog;
diff --git a/fluidsynth/src/synth/fluid_synth.c b/fluidsynth/src/synth/fluid_synth.c
index 4e2813ab..538b8006 100644
--- a/fluidsynth/src/synth/fluid_synth.c
+++ b/fluidsynth/src/synth/fluid_synth.c
@@ -1945,7 +1945,8 @@ fluid_synth_program_change(fluid_synth_t* synth, int chan, int prognum)
FLUID_API_ENTRY_CHAN(FLUID_FAILED);
channel = synth->channel[chan];
- if (channel->channel_type == CHANNEL_TYPE_DRUM)
+ if (channel->channel_type == CHANNEL_TYPE_DRUM &&
+ chan->synth->bank_select != FLUID_BANK_STYLE_MMA)
banknum = DRUM_INST_BANK;
else
fluid_channel_get_sfont_bank_prog(channel, NULL, &banknum, NULL);