diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 855f5679f4..41354563c6 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -664,6 +664,12 @@
+
+
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index ea3aa72060..c3e9b6e1f2 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -1727,6 +1727,18 @@ MixerStrip::build_route_ops_menu ()
i->signal_activate().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*_route, &Route::set_strict_io), !_route->strict_io())));
}
+ if (is_track()) {
+ items.push_back (SeparatorElem());
+
+ Gtk::Menu* dio_menu = new Menu;
+ MenuList& dio_items = dio_menu->items();
+ dio_items.push_back (MenuElem (_("Record Pre-Fader"), sigc::bind (sigc::mem_fun (*this, &RouteUI::set_disk_io_point), DiskIOPreFader)));
+ dio_items.push_back (MenuElem (_("Record Post-Fader"), sigc::bind (sigc::mem_fun (*this, &RouteUI::set_disk_io_point), DiskIOPostFader)));
+ dio_items.push_back (MenuElem (_("Custom Record+Playback Positions"), sigc::bind (sigc::mem_fun (*this, &RouteUI::set_disk_io_point), DiskIOCustom)));
+
+ items.push_back (MenuElem (_("Disk I/O..."), *dio_menu));
+ }
+
_plugin_insert_cnt = 0;
_route->foreach_processor (sigc::mem_fun (*this, &MixerStrip::help_count_plugins));
if (_plugin_insert_cnt > 0) {
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index ca1e448b58..e6d9b44cf4 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -113,6 +113,7 @@ RefPtr ProcessorBox::rename_action;
RefPtr ProcessorBox::delete_action;
RefPtr ProcessorBox::backspace_action;
RefPtr ProcessorBox::manage_pins_action;
+RefPtr ProcessorBox::disk_io_action;
RefPtr ProcessorBox::edit_action;
RefPtr ProcessorBox::edit_generic_action;
RefPtr ProcessorBox::processor_box_actions;
@@ -2105,7 +2106,6 @@ ProcessorBox::show_processor_menu (int arg)
/* Sensitise actions as approprioate */
-
const bool sensitive = !processor_display.selection().empty() && ! stub_processor_selected ();
paste_action->set_sensitive (!_p_selection.processors.empty());
@@ -2123,6 +2123,11 @@ ProcessorBox::show_processor_menu (int arg)
}
manage_pins_action->set_sensitive (pi != 0);
+ if (boost::dynamic_pointer_cast