diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 2d7cccb..fde3ed4 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -80,6 +80,8 @@ using namespace Editing;
 using namespace ArdourCanvas;
 using Gtkmm2ext::Keyboard;
 
+#define MIDI_BP_ZERO ((Config->get_first_midi_bank_is_zero())?0:1)
+
 MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv,
                                 boost::shared_ptr<MidiRegion> r, double spu, Gdk::Color const & basic_color)
 	: RegionView (parent, tv, r, spu, basic_color)
@@ -112,6 +114,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &
 	_note_group->raise_to_top();
 	PublicEditor::DropDownKeys.connect (sigc::mem_fun (*this, &MidiRegionView::drop_down_keys));
 
+	Config->ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MidiRegionView::parameter_changed, this, _1), gui_context());
 	connect_to_diskstream ();
 }
 
@@ -148,6 +151,16 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &
 	connect_to_diskstream ();
 }
 
+void
+MidiRegionView::parameter_changed (std::string const & p)
+{
+	if (p == "diplay-first-midi-bank-as-zero") {
+		if (_enable_display) {
+			redisplay_model();
+		}
+	}
+}
+
 MidiRegionView::MidiRegionView (const MidiRegionView& other)
 	: sigc::trackable(other)
 	, RegionView (other)
@@ -269,6 +282,7 @@ MidiRegionView::init (Gdk::Color const & basic_color, bool wfd)
 	                                       ui_bind(&MidiRegionView::snap_changed, this),
 	                                       gui_context());
 
+	Config->ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MidiRegionView::parameter_changed, this, _1), gui_context());
 	connect_to_diskstream ();
 }
 
@@ -1158,6 +1172,7 @@ MidiRegionView::display_patch_changes ()
 		if (chn_mask & (1<<i)) {
 			display_patch_changes_on_channel (i);
 		}
+		/* TODO gray-out patch instad of not displaying it */
 	}
 }
 
@@ -1180,8 +1195,8 @@ MidiRegionView::display_patch_changes_on_channel (uint8_t channel)
 			add_canvas_patch_change (*i, patch->name());
 		} else {
 			char buf[16];
-			/* program and bank numbers are zero-based: convert to one-based */
-			snprintf (buf, 16, "%d\n%d", (*i)->program() + 1, (*i)->bank() + 1);
+			/* program and bank numbers are zero-based: convert to one-based: MIDI_BP_ZERO*/
+			snprintf (buf, 16, "%d %d", (*i)->program() + MIDI_BP_ZERO , (*i)->bank() + MIDI_BP_ZERO);
 			add_canvas_patch_change (*i, buf);
 		}
 	}
@@ -2956,7 +2971,7 @@ MidiRegionView::patch_entered (ArdourCanvas::CanvasPatchChange* ev)
 {
 	ostringstream s;
 	/* XXX should get patch name if we can */
-	s << _("Bank:") << (ev->patch()->bank() + 1) << '\n' << _("Program:") << ((int) ev->patch()->program() + 1);
+	s << _("Bank:") << (ev->patch()->bank() + MIDI_BP_ZERO) << '\n' << _("Program:") << ((int) ev->patch()->program()) + MIDI_BP_ZERO << '\n' << _("Channel:") << ((int) ev->patch()->channel() + 1);
 	show_verbose_cursor (s.str(), 10, 20);
 }
 
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 418cf21..7bdf18f 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -299,6 +299,8 @@ protected:
 
 	void reset_width_dependent_items (double pixel_width);
 
+  void parameter_changed (std::string const & p);
+
 private:
 
 	friend class EditNoteDialog;
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index 72ef75f..09c3c2e 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -1419,6 +1419,14 @@ RCOptionEditor::RCOptionEditor ()
 		     -1, 65536, 1, 10
 		     ));
 
+	add_option (_("MIDI control"),
+		    new BoolOption (
+			    "diplay-first-midi-bank-as-zero",
+			    _("Display first MIDI Bank/Program as 0"),
+			    sigc::mem_fun (*_rc_config, &RCConfiguration::get_first_midi_bank_is_zero),
+			    sigc::mem_fun (*_rc_config, &RCConfiguration::set_first_midi_bank_is_zero)
+			    ));
+
 	/* CONTROL SURFACES */
 
 	add_option (_("Control surfaces"), new ControlSurfacesOptions (*this));
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index 6fb6759..5693bac 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -44,6 +44,7 @@ CONFIG_VARIABLE (int32_t, mmc_receive_device_id, "mmc-receive-device-id", 0x7f)
 CONFIG_VARIABLE (int32_t, mmc_send_device_id, "mmc-send-device-id", 0)
 CONFIG_VARIABLE (int32_t, initial_program_change, "initial-program-change", -1)
 CONFIG_VARIABLE (int, mtc_qf_speed_tolerance, "mtc-qf-speed-tolerance", 5)
+CONFIG_VARIABLE (bool, first_midi_bank_is_zero, "diplay-first-midi-bank-as-zero", false)
 
 /* control surfaces */
 
