[SCM] ardour/master: Imported Upstream version 4.2~dfsg

umlaeute at users.alioth.debian.org umlaeute at users.alioth.debian.org
Thu Sep 10 21:38:29 UTC 2015


The following commit has been merged in the master branch:
commit bbe6427afc73fe22604ed740436e36584af9e084
Author: IOhannes m zmölnig <zmoelnig at umlautQ.umlaeute.mur.at>
Date:   Thu Sep 10 21:29:45 2015 +0200

    Imported Upstream version 4.2~dfsg

diff --git a/cfgtool/wscript b/cfgtool/wscript
index e5166eb..04dda4f 100644
--- a/cfgtool/wscript
+++ b/cfgtool/wscript
@@ -14,7 +14,7 @@ def configure(conf):
 
 def build(bld):
     if bld.env['build_target'] == 'mingw':
-	    return;
+            return;
 
     obj = bld (features = 'cxx c cxxprogram')
     obj.source       = 'cfgtool.cc'
diff --git a/gtk2_ardour/about.cc b/gtk2_ardour/about.cc
index 41c5d84..3c8ff3e 100644
--- a/gtk2_ardour/about.cc
+++ b/gtk2_ardour/about.cc
@@ -183,6 +183,7 @@ static const char* authors[] = {
 	N_("Mike Täht"),
 	N_("Roy Vegard"),
 	N_("Thorsten Wilms"),
+	N_("Damien Zammit"),
 	N_("Grygorii Zharun"),
 	0
 };
diff --git a/gtk2_ardour/add_video_dialog.cc b/gtk2_ardour/add_video_dialog.cc
index 44f61ec..5fc53c7 100644
--- a/gtk2_ardour/add_video_dialog.cc
+++ b/gtk2_ardour/add_video_dialog.cc
@@ -288,6 +288,7 @@ static bool check_video_file_extension(std::string file)
 		".webm"    , ".WEBM"    ,
 		".wmv"     , ".WMV"     ,
 		".ts"      , ".TS"      ,
+		".mxf"     , ".MXF"     ,
 	};
 
 	for (size_t n = 0; n < sizeof(suffixes)/sizeof(suffixes[0]); ++n) {
@@ -321,8 +322,9 @@ AddVideoDialog::file_name (bool &local_file)
 		std::string video_server_url = video_get_server_url(Config);
 
 		/* check if video server is running locally */
-		if (video_get_docroot(Config).size() > 0
-				&& !video_server_url.compare(0, 16, "http://localhost"))
+		if (video_get_docroot(Config).size() > 0 &&
+			(0 == video_server_url.compare (0, 16, "http://127.0.0.1") || 0 == video_server_url.compare (0, 16, "http://localhost"))
+		   )
 		{
 			/* check if the file can be accessed */
 			int plen;
@@ -331,7 +333,7 @@ AddVideoDialog::file_name (bool &local_file)
 			char *ue = curl_easy_unescape(curl, uri.c_str(), uri.length(), &plen);
 #ifdef PLATFORM_WINDOWS
 			char *tmp;
-			while (tmp = strchr(ue, '/')) *tmp = '\\';
+			while ((tmp = strchr(ue, '/'))) *tmp = '\\';
 #endif
 			std::string path = video_get_docroot(Config) + ue;
 			if (!::access(path.c_str(), R_OK)) {
@@ -396,8 +398,7 @@ AddVideoDialog::file_selection_changed ()
 	if (chooser.get_filename().size() > 0) {
 		std::string path = chooser.get_filename();
 		bool ok =
-				check_video_file_extension(path)
-				&&  Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK)
+				Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK)
 				&& !Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_DIR);
 		set_action_ok(ok);
 		if (ok) {
@@ -416,8 +417,7 @@ AddVideoDialog::file_activated ()
 		std::string path = chooser.get_filename();
 		// TODO check docroot -> set import options
 		bool ok =
-				check_video_file_extension(path)
-				&&  Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK)
+				Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK)
 				&& !Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_DIR);
 		if (ok) {
 			Gtk::Dialog::response(RESPONSE_ACCEPT);
diff --git a/gtk2_ardour/ardev_common.sh.in b/gtk2_ardour/ardev_common.sh.in
index fc287e1..eca7791 100644
--- a/gtk2_ardour/ardev_common.sh.in
+++ b/gtk2_ardour/ardev_common.sh.in
@@ -34,7 +34,7 @@ export ARDOUR_DLL_PATH=$libs
 export GTK_PATH=~/.ardour3:$libs/clearlooks-newer
 export VAMP_PATH=$libs/vamp-plugins${VAMP_PATH:+:$VAMP_PATH}
 
-export LD_LIBRARY_PATH=$libs/qm-dsp:$libs/vamp-sdk:$libs/surfaces:$libs/surfaces/control_protocol:$libs/ardour:$libs/midi++2:$libs/pbd:$libs/rubberband:$libs/soundtouch:$libs/gtkmm2ext:$libs/gnomecanvas:$libs/libsndfile:$libs/appleutility:$libs/taglib:$libs/evoral:$libs/evoral/src/libsmf:$libs/audiographer:$libs/timecode:$libs/libltc:$libs/canvas:$libs/ardouralsautil${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
+export LD_LIBRARY_PATH=$libs/ptformat:$libs/qm-dsp:$libs/vamp-sdk:$libs/surfaces:$libs/surfaces/control_protocol:$libs/ardour:$libs/midi++2:$libs/pbd:$libs/rubberband:$libs/soundtouch:$libs/gtkmm2ext:$libs/gnomecanvas:$libs/libsndfile:$libs/appleutility:$libs/taglib:$libs/evoral:$libs/evoral/src/libsmf:$libs/audiographer:$libs/timecode:$libs/libltc:$libs/canvas:$libs/ardouralsautil${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
 
 # DYLD_LIBRARY_PATH is for darwin.
 export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 086d2b8..27c0306 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -22,6 +22,9 @@
       <menuitem action='AddTrackBus'/>	
       <separator/>
       <menuitem action='addExistingAudioFiles'/>
+#ifdef PTFORMAT
+      <menuitem action='addExistingPTFiles'/>
+#endif
       <!--menuitem action='importFromSession'/-->
 
       <menuitem action='OpenVideo'/>
diff --git a/gtk2_ardour/ardour_dropdown.cc b/gtk2_ardour/ardour_dropdown.cc
index 6ad1f7c..29efe34 100644
--- a/gtk2_ardour/ardour_dropdown.cc
+++ b/gtk2_ardour/ardour_dropdown.cc
@@ -135,7 +135,7 @@ ArdourDropdown::clear_items ()
 }
 
 void
-ArdourDropdown::AddMenuElem (Menu_Helpers::MenuElem e)
+ArdourDropdown::AddMenuElem (Menu_Helpers::Element e)
 {
 	using namespace Menu_Helpers;
 
diff --git a/gtk2_ardour/ardour_dropdown.h b/gtk2_ardour/ardour_dropdown.h
index c1cf119..7069768 100644
--- a/gtk2_ardour/ardour_dropdown.h
+++ b/gtk2_ardour/ardour_dropdown.h
@@ -40,7 +40,7 @@ class ArdourDropdown : public ArdourButton
 	bool on_scroll_event (GdkEventScroll*);
 
 	void clear_items ();
-	void AddMenuElem (Gtk::Menu_Helpers::MenuElem e);
+	void AddMenuElem (Gtk::Menu_Helpers::Element e);
 
   private:
 	Gtk::Menu      _menu;
diff --git a/gtk2_ardour/ardour_knob.cc b/gtk2_ardour/ardour_knob.cc
index 0397b85..17fbff2 100644
--- a/gtk2_ardour/ardour_knob.cc
+++ b/gtk2_ardour/ardour_knob.cc
@@ -563,7 +563,7 @@ ArdourKnob::add_elements (Element e)
 
 
 KnobPersistentTooltip::KnobPersistentTooltip (Gtk::Widget* w)
-	: PersistentTooltip (w, 3)
+	: PersistentTooltip (w, true, 3)
 	, _dragging (false)
 {
 }
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index e371d58..b8598fe 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -28,6 +28,8 @@
 #include <cerrno>
 #include <fstream>
 
+#include <stdarg.h>
+
 #ifndef PLATFORM_WINDOWS
 #include <sys/resource.h>
 #endif
@@ -55,6 +57,8 @@
 #include "pbd/file_utils.h"
 #include "pbd/localtime_r.h"
 #include "pbd/pthread_utils.h"
+#include "pbd/replace_all.h"
+#include "pbd/xml++.h"
 
 #include "gtkmm2ext/application.h"
 #include "gtkmm2ext/bindings.h"
@@ -181,6 +185,42 @@ ask_about_configuration_copy (string const & old_dir, string const & new_dir, in
 	return (msg.run() == Gtk::RESPONSE_YES);
 }
 
+static void
+libxml_generic_error_func (void* /* parsing_context*/,
+                   const char* msg,
+                   ...)
+{
+	va_list ap;
+	char buf[2048];
+
+	va_start (ap, msg);
+	vsnprintf (buf, sizeof (buf), msg, ap);
+	error << buf << endmsg;
+	va_end (ap);
+}
+
+static void
+libxml_structured_error_func (void* /* parsing_context*/,
+                              xmlErrorPtr err)
+{
+	string msg;
+
+	if (err->message)
+		msg = err->message;
+
+	replace_all (msg, "\n", "");
+
+	if (err->file && err->line) {
+		error << X_("XML error: ") << msg << " in " << err->file << " at line " << err->line;
+
+		if (err->int2) {
+			error << ':' << err->int2;
+		}
+	}
+	error << endmsg;
+}
+
+
 ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfiguration* uic)
 
 	: Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp)
@@ -197,6 +237,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi
 	, nsm (0)
 	, _was_dirty (false)
 	, _mixer_on_top (false)
+	, _initial_verbose_plugin_scan (false)
 	, first_time_engine_run (true)
 	, roll_controllable (new TransportControllable ("transport roll", *this, TransportControllable::Roll))
 	, stop_controllable (new TransportControllable ("transport stop", *this, TransportControllable::Stop))
@@ -214,6 +255,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi
 	, error_alert_button ( ArdourButton::just_led_default_elements )
 	, editor_meter(0)
 	, editor_meter_peak_display()
+	, session_selector_window (0)
 	, open_session_selector (0)
 	, _numpad_locate_happening (false)
 	, _session_is_new (false)
@@ -258,6 +300,11 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi
 		theArdourUI = this;
 	}
 
+	/* stop libxml from spewing to stdout/stderr */
+
+	xmlSetGenericErrorFunc (this, libxml_generic_error_func);
+	xmlSetStructuredErrorFunc (this, libxml_structured_error_func);
+	
 	ui_config->ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
 	boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
 	ui_config->map_parameters (pc);
@@ -754,6 +801,8 @@ ARDOUR_UI::check_announcements ()
 
 #ifdef __APPLE__
 	_annc_filename = PROGRAM_NAME "_announcements_osx_";
+#elif defined PLATFORM_WINDOWS
+	_annc_filename = PROGRAM_NAME "_announcements_windows_";
 #else
 	_annc_filename = PROGRAM_NAME "_announcements_linux_";
 #endif
@@ -875,10 +924,12 @@ ARDOUR_UI::starting ()
 	} else  {
 		
 		if (brand_new_user) {
+			_initial_verbose_plugin_scan = true;
 			ArdourStartup s;
 			s.present ();
 			main().run();
 			s.hide ();
+			_initial_verbose_plugin_scan = false;
 			switch (s.response ()) {
 			case Gtk::RESPONSE_OK:
 				break;
@@ -3169,6 +3220,9 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
 		msg.set_position (Gtk::WIN_POS_CENTER);
 		pop_back_splash (msg);
 		msg.present ();
+
+		dump_errors (cerr);
+		
 		(void) msg.run ();
 		msg.hide ();
 
@@ -3854,7 +3908,7 @@ ARDOUR_UI::start_video_server (Gtk::Window* float_window, bool popup_msg)
 			Config->set_video_advanced_setup(false);
 		} else {
 			std::ostringstream osstream;
-			osstream << "http://localhost:" << video_server_dialog->get_listenport() << "/";
+			osstream << "http://127.0.0.1:" << video_server_dialog->get_listenport() << "/";
 			Config->set_video_server_url(osstream.str());
 			Config->set_video_server_docroot(icsd_docroot);
 			Config->set_video_advanced_setup(true);
@@ -4171,6 +4225,7 @@ quickly enough to keep up with recording.\n"), PROGRAM_NAME));
 static MessageDialog *scan_dlg = NULL;
 static ProgressBar   *scan_pbar = NULL;
 static HBox          *scan_tbox = NULL;
+static Gtk::Button   *scan_timeout_button;
 
 void
 ARDOUR_UI::cancel_plugin_scan ()
@@ -4182,7 +4237,7 @@ void
 ARDOUR_UI::cancel_plugin_timeout ()
 {
 	PluginManager::instance().cancel_plugin_timeout();
-	scan_tbox->hide();
+	scan_timeout_button->set_sensitive (false);
 }
 
 void
@@ -4192,10 +4247,13 @@ ARDOUR_UI::plugin_scan_timeout (int timeout)
 		return;
 	}
 	if (timeout > 0) {
+		scan_pbar->set_sensitive (false);
+		scan_timeout_button->set_sensitive (true);
 		scan_pbar->set_fraction ((float) timeout / (float) Config->get_vst_scan_timeout());
 		scan_tbox->show();
 	} else {
-		scan_tbox->hide();
+		scan_pbar->set_sensitive (false);
+		scan_timeout_button->set_sensitive (false);
 	}
 	gui_idle_handler();
 }
@@ -4208,7 +4266,7 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca
 	}
 
 	const bool cancelled = PluginManager::instance().cancelled();
-	if (type != X_("closeme") && !ui_config->get_show_plugin_scan_window()) {
+	if (type != X_("closeme") && (!ui_config->get_show_plugin_scan_window()) && !_initial_verbose_plugin_scan) {
 		if (cancelled && scan_dlg->is_mapped()) {
 			scan_dlg->hide();
 			gui_idle_handler();
@@ -4220,7 +4278,6 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca
 	}
 
 	static Gtk::Button *cancel_button;
-	static Gtk::Button *timeout_button;
 	if (!scan_dlg) {
 		scan_dlg = new MessageDialog("", false, MESSAGE_INFO, BUTTONS_NONE); // TODO manage
 		VBox* vbox = scan_dlg->get_vbox();
@@ -4236,10 +4293,10 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca
 
 		scan_tbox = manage( new HBox() );
 
-		timeout_button = manage(new Gtk::Button(_("Stop Timeout")));
-		timeout_button->set_name ("EditorGTKButton");
-		timeout_button->signal_clicked().connect ( mem_fun (*this, &ARDOUR_UI::cancel_plugin_timeout) );
-		timeout_button->show();
+		scan_timeout_button = manage(new Gtk::Button(_("Stop Timeout")));
+		scan_timeout_button->set_name ("EditorGTKButton");
+		scan_timeout_button->signal_clicked().connect ( mem_fun (*this, &ARDOUR_UI::cancel_plugin_timeout) );
+		scan_timeout_button->show();
 
 		scan_pbar = manage(new ProgressBar());
 		scan_pbar->set_orientation(Gtk::PROGRESS_RIGHT_TO_LEFT);
@@ -4247,7 +4304,7 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca
 		scan_pbar->show();
 
 		scan_tbox->pack_start (*scan_pbar, PACK_EXPAND_WIDGET, 4);
-		scan_tbox->pack_start (*timeout_button, PACK_SHRINK, 4);
+		scan_tbox->pack_start (*scan_timeout_button, PACK_SHRINK, 4);
 
 		scan_dlg->get_vbox()->pack_start (*scan_tbox, PACK_SHRINK, 4);
 	}
@@ -4255,13 +4312,14 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca
 	assert(scan_dlg && scan_tbox && cancel_button);
 
 	if (type == X_("closeme")) {
+		scan_tbox->hide();
 		scan_dlg->hide();
 	} else {
 		scan_dlg->set_message(type + ": " + Glib::path_get_basename(plugin));
 		scan_dlg->show();
 	}
 	if (!can_cancel || !cancelled) {
-		scan_tbox->hide();
+		scan_timeout_button->set_sensitive(false);
 	}
 	cancel_button->set_sensitive(can_cancel && !cancelled);
 
@@ -4864,3 +4922,9 @@ ARDOUR_UI::audioengine_became_silent ()
 		break;
 	}
 }
+	
+void
+ARDOUR_UI::hide_application ()
+{
+    Application::instance ()-> hide ();
+}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 9a3e7e9..722a0bf 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -308,6 +308,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
 
         int disconnect_from_engine ();
         int reconnect_to_engine ();
+	void hide_application ();
 
   protected:
 	friend class PublicEditor;
@@ -335,6 +336,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
 	NSM_Client*          nsm;
 	bool                _was_dirty;
         bool                _mixer_on_top;
+        bool                _initial_verbose_plugin_scan;
         bool first_time_engine_run;
 
 	void goto_editor_window ();
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 0fbb33a..7d7ee7d 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -376,14 +376,28 @@ ARDOUR_UI::goto_mixer_window ()
 void
 ARDOUR_UI::toggle_mixer_window ()
 {
-	Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer"));
-	if (!act) {
-		return;
+	/* thse windows are created in ARDOUR_UI::setup_windows()
+	 * it should be impossible to get here with any of them being NULL
+	 */
+	assert (editor && mixer && meterbridge);
+
+	bool show = false;
+	bool obscuring = false;
+
+	if (mixer->not_visible ()) {
+		show = true;
+	}
+	else if (   (!editor->not_visible () && ARDOUR_UI_UTILS::windows_overlap (editor, mixer))
+	         || (!meterbridge->not_visible () && ARDOUR_UI_UTILS::windows_overlap (meterbridge, mixer))
+			) {
+		obscuring = true;
 	}
 
-	Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+	if (obscuring && (editor->property_has_toplevel_focus() || meterbridge->property_has_toplevel_focus())) {
+		show = true;
+	}
 
-	if (tact->get_active()) {
+	if (show) {
 		goto_mixer_window ();
 	} else {
 		mixer->hide ();
@@ -393,15 +407,28 @@ ARDOUR_UI::toggle_mixer_window ()
 void
 ARDOUR_UI::toggle_meterbridge ()
 {
-	Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-meterbridge"));
-	if (!act) {
-		return;
+	assert (editor && mixer && meterbridge);
+
+	bool show = false;
+	bool obscuring = false;
+
+	if (meterbridge->not_visible ()) {
+		show = true;
+	}
+	else if (   (!editor->not_visible() && ARDOUR_UI_UTILS::windows_overlap (editor, meterbridge))
+	         || (!mixer->not_visible () && ARDOUR_UI_UTILS::windows_overlap (meterbridge, mixer))
+			) {
+		obscuring = true;
 	}
 
-	Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+	if (obscuring && (editor->property_has_toplevel_focus() || mixer->property_has_toplevel_focus())) {
+		show = true;
+	}
 
-	if (tact->get_active()) {
+	if (show) {
 		meterbridge->show_window ();
+		meterbridge->present ();
+		meterbridge->raise ();
 	} else {
 		meterbridge->hide_window (NULL);
 	}
@@ -411,79 +438,37 @@ void
 ARDOUR_UI::toggle_editor_mixer ()
 {
 	bool obscuring = false;
-	/* currently, if windows are on different
-	   screens then we do nothing; but in the
-	   future we may want to bring the window 
-	   to the front or something, so I'm leaving this 
-	   variable for future use
-	*/
-        bool same_screen = true; 
-	
-        if (editor && mixer) {
-
-		/* remeber: Screen != Monitor (Screen is a separately rendered
-		 * continuous geometry that make include 1 or more monitors.
-		 */
-		
-                if (editor->get_screen() != mixer->get_screen() && (mixer->get_screen() != 0) && (editor->get_screen() != 0)) {
-                        // different screens, so don't do anything
-                        same_screen = false;
-                } else {
-                        // they are on the same screen, see if they are obscuring each other
-
-                        gint ex, ey, ew, eh;
-                        gint mx, my, mw, mh;
-
-                        editor->get_position (ex, ey);
-                        editor->get_size (ew, eh);
-
-                        mixer->get_position (mx, my);
-                        mixer->get_size (mw, mh);
-
-                        GdkRectangle e;
-                        GdkRectangle m;
-                        GdkRectangle r;
-
-                        e.x = ex;
-                        e.y = ey;
-                        e.width = ew;
-                        e.height = eh;
-
-                        m.x = mx;
-                        m.y = my;
-                        m.width = mw;
-                        m.height = mh;
-
-        		if (gdk_rectangle_intersect (&e, &m, &r)) {
-                                obscuring = true;
-                        }
-                }
-        }
-
-        if (mixer && !mixer->not_visible() && mixer->property_has_toplevel_focus()) {
-                if (obscuring && same_screen) {
-                        goto_editor_window();
-                }
-        } else if (editor && !editor->not_visible() && editor->property_has_toplevel_focus()) {
-                if (obscuring && same_screen) {
-                        goto_mixer_window();
-                }
-        } else if (mixer && mixer->not_visible()) {
-                if (obscuring && same_screen) {
-                        goto_mixer_window ();
-                }
-        } else if (editor && editor->not_visible()) {
-                if (obscuring && same_screen) {
-                        goto_editor_window ();
-                }
-        } else if (obscuring && same_screen) {
-                //it's unclear what to do here, so just do the opposite of what we did last time  (old behavior)
-                if (_mixer_on_top) {
+
+	if (editor && mixer) {
+		if (ARDOUR_UI_UTILS::windows_overlap (editor, mixer)) {
+			obscuring = true;
+		}
+	}
+
+	if (mixer && !mixer->not_visible() && mixer->property_has_toplevel_focus()) {
+		if (obscuring) {
+			goto_editor_window();
+		}
+	} else if (editor && !editor->not_visible() && editor->property_has_toplevel_focus()) {
+		if (obscuring) {
+			goto_mixer_window();
+		}
+	} else if (mixer && mixer->not_visible()) {
+		if (obscuring) {
+			goto_mixer_window ();
+		}
+	} else if (editor && editor->not_visible()) {
+		if (obscuring) {
+			goto_editor_window ();
+		}
+	} else if (obscuring) {
+		//it's unclear what to do here, so just do the opposite of what we did last time  (old behavior)
+		if (_mixer_on_top) {
 			goto_editor_window ();
 		} else {
 			goto_mixer_window ();
 		}
-        }
+	}
 }
 
 void
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 3f0bb44..4455e72 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -190,6 +190,7 @@ ARDOUR_UI::install_actions ()
 
 	common_actions = ActionGroup::create (X_("Common"));
 	ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (hide_return (sigc::mem_fun(*this, &ARDOUR_UI::finish))));
+	ActionManager::register_action (common_actions, X_("Hide"), _("Hide"), sigc::mem_fun (*this, &ARDOUR_UI::hide_application));
 
 	/* windows visibility actions */
 
@@ -201,9 +202,9 @@ ARDOUR_UI::install_actions ()
 if (Profile->get_mixbus())
 	ActionManager::register_action (common_actions, X_("show-ui-prefs"), _("Show more UI preferences"), sigc::mem_fun (*this, &ARDOUR_UI::show_ui_prefs));
 
-	ActionManager::register_toggle_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window));
+	ActionManager::register_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window));
 	ActionManager::register_action (common_actions, X_("toggle-editor-mixer"), _("Toggle Editor+Mixer"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer));
-	ActionManager::register_toggle_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge));
+	ActionManager::register_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge));
 
 	ActionManager::register_action (common_actions, X_("reattach-all-tearoffs"), _("Reattach All Tearoffs"), sigc::mem_fun (*this, &ARDOUR_UI::reattach_all_tearoffs));
 
@@ -220,7 +221,7 @@ if (Profile->get_mixbus())
 	ActionManager::register_action (common_actions, X_("Forums"), _("User Forums"), mem_fun(*this, &ARDOUR_UI::launch_forums));
 	ActionManager::register_action (common_actions, X_("Howto_Report"), _("How to report a bug"), mem_fun(*this, &ARDOUR_UI::launch_howto_report));
 
-	act = ActionManager::register_action (common_actions, X_("Save"), _("Save"),  sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::save_state), string(""), false));
+	act = ActionManager::register_action (common_actions, X_("Save"), _("Save"),  sigc::hide_return (sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::save_state), string(""), false)));
 	ActionManager::session_sensitive_actions.push_back (act);
 	ActionManager::write_sensitive_actions.push_back (act);
 
diff --git a/gtk2_ardour/ardour_ui_mixer.cc b/gtk2_ardour/ardour_ui_mixer.cc
index a2669f9..56ecc05 100644
--- a/gtk2_ardour/ardour_ui_mixer.cc
+++ b/gtk2_ardour/ardour_ui_mixer.cc
@@ -46,7 +46,6 @@ ARDOUR_UI::create_mixer ()
 	}
 
 	mixer->signal_window_state_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), false));
-	mixer->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/toggle-mixer")));
 
 	return 0;
 }
@@ -65,7 +64,6 @@ ARDOUR_UI::create_meterbridge ()
 	}
 
 	meterbridge->signal_window_state_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), false));
-	meterbridge->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/toggle-meterbridge")));
 
 	return 0;
 }
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index a511ff7..4f963a2 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -92,7 +92,7 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxis
 	, trim_fade_in_drag_active(false)
 	, trim_fade_out_drag_active(false)
 {
-	Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
+	ARDOUR_UI::config()->ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed));
 }
 
 AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
@@ -113,7 +113,7 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxis
 	, trim_fade_in_drag_active(false)
 	, trim_fade_out_drag_active(false)
 {
-	Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
+	ARDOUR_UI::config()->ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed));
 }
 
 AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_ptr<AudioRegion> other_region)
@@ -134,7 +134,7 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt
 {
 	init (true);
 
-	Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
+	ARDOUR_UI::config()->ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed));
 }
 
 void
@@ -1261,7 +1261,7 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev, b
 		trackview.session()->add_command (new MementoCommand<AudioRegion>(*(audio_region().get()), &region_before, &region_after));
 	}
 
-	audio_region()->envelope()->add (fx, y, with_guard_points);
+	audio_region()->envelope()->editor_add (fx, y, with_guard_points);
 
 	XMLNode &after = audio_region()->envelope()->get_state();
 	trackview.session()->add_command (new MementoCommand<AutomationList>(*audio_region()->envelope().get(), &before, &after));
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 7951848..ed7bfc2 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -41,6 +41,7 @@
 #include "tape_region_view.h"
 #include "audio_time_axis.h"
 #include "region_selection.h"
+#include "region_gain_line.h"
 #include "selection.h"
 #include "public_editor.h"
 #include "ardour_ui.h"
@@ -471,3 +472,14 @@ AudioStreamView::color_handler ()
 		}
 	}
 }
+
+void
+AudioStreamView::set_selected_points (PointSelection& points)
+{
+	for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
+		AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+		if (arv && arv->get_gain_line ()) {
+			arv->get_gain_line ()->set_selected_points (points);
+		}
+	}
+}
diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h
index 8e9b095..443a390 100644
--- a/gtk2_ardour/audio_streamview.h
+++ b/gtk2_ardour/audio_streamview.h
@@ -26,6 +26,7 @@
 #include <boost/weak_ptr.hpp>
 
 #include "ardour/location.h"
+#include "point_selection.h"
 #include "editing.h"
 #include "streamview.h"
 
@@ -61,6 +62,7 @@ class AudioStreamView : public StreamView
 	std::pair<std::list<AudioRegionView*>, std::list<AudioRegionView*> > hide_xfades_with (boost::shared_ptr<ARDOUR::AudioRegion> ar);
 
 	RegionView* create_region_view (boost::shared_ptr<ARDOUR::Region>, bool, bool);
+	void set_selected_points (PointSelection&);
 
   private:
 	void setup_rec_box ();
diff --git a/gtk2_ardour/automation_controller.cc b/gtk2_ardour/automation_controller.cc
index f57f2a7..44c0315 100644
--- a/gtk2_ardour/automation_controller.cc
+++ b/gtk2_ardour/automation_controller.cc
@@ -204,7 +204,7 @@ AutomationController::toggled ()
 				_controllable->set_automation_state(Write);
 			}
 			if (_controllable->list()) {
-				_controllable->list()->set_in_write_pass(true, false, _controllable->session().audible_frame());
+				_controllable->list()->set_in_write_pass(true, true, _controllable->session().audible_frame());
 			}
 		}
 		const bool was_active = _controllable->get_value() >= 0.5;
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index 069a823..d0dc933 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -466,7 +466,6 @@ AutomationLine::string_to_fraction (string const & s) const
 void
 AutomationLine::start_drag_single (ControlPoint* cp, double x, float fraction)
 {
-	trackview.editor().begin_reversible_command (_("automation event move"));
 	trackview.editor().session()->add_command (
 		new MementoCommand<AutomationList> (memento_command_binder(), &get_state(), 0));
 
@@ -492,7 +491,6 @@ AutomationLine::start_drag_single (ControlPoint* cp, double x, float fraction)
 void
 AutomationLine::start_drag_line (uint32_t i1, uint32_t i2, float fraction)
 {
-	trackview.editor().begin_reversible_command (_("automation range move"));
 	trackview.editor().session()->add_command (
 		new MementoCommand<AutomationList> (memento_command_binder (), &get_state(), 0));
 
@@ -512,7 +510,6 @@ AutomationLine::start_drag_line (uint32_t i1, uint32_t i2, float fraction)
 void
 AutomationLine::start_drag_multiple (list<ControlPoint*> cp, float fraction, XMLNode* state)
 {
-	trackview.editor().begin_reversible_command (_("automation range move"));
 	trackview.editor().session()->add_command (
 		new MementoCommand<AutomationList> (memento_command_binder(), state, 0));
 
@@ -678,6 +675,7 @@ AutomationLine::drag_motion (double const x, float fraction, bool ignore_x, bool
 		for (vector<CCP>::iterator ccp = contiguous_points.begin(); ccp != contiguous_points.end(); ++ccp) {
 			(*ccp)->compute_x_bounds (trackview.editor());
 		}
+		_drag_had_movement = true;
 	}	
 
 	/* OK, now on to the stuff related to *this* motion event. First, for
@@ -738,7 +736,6 @@ AutomationLine::drag_motion (double const x, float fraction, bool ignore_x, bool
 	_drag_distance += dx;
 	_drag_x += dx;
 	_last_drag_fraction = fraction;
-	_drag_had_movement = true;
 	did_push = with_push;
 
 	return pair<double, float> (_drag_x + dx, _last_drag_fraction + dy);
@@ -951,7 +948,8 @@ AutomationLine::set_selected_points (PointSelection const & points)
 	set_colors ();
 }
 
-void AutomationLine::set_colors ()
+void
+AutomationLine::set_colors ()
 {
 	set_line_color (ARDOUR_UI::config()->color ("automation line"));
 	for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc
index 7e33094..b418d09 100644
--- a/gtk2_ardour/automation_region_view.cc
+++ b/gtk2_ardour/automation_region_view.cc
@@ -190,7 +190,7 @@ AutomationRegionView::add_automation_event (GdkEvent *, framepos_t when, double
 	view->editor().begin_reversible_command (_("add automation event"));
 	XMLNode& before = _line->the_list()->get_state();
 
-	_line->the_list()->add (when_d, y, with_guard_points, false);
+	_line->the_list()->editor_add (when_d, y, with_guard_points);
 
 	XMLNode& after = _line->the_list()->get_state();
 
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 01f2ebb..d5276e0 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -449,7 +449,7 @@ AutomationTimeAxisView::clear_clicked ()
 	} else if (_view) {
 		_view->clear ();
 	}
-
+	set_automation_state ((AutoState) ARDOUR::Off);
 	_editor.commit_reversible_command ();
 	_session->set_dirty ();
 }
@@ -644,10 +644,10 @@ AutomationTimeAxisView::add_automation_event (GdkEvent* event, framepos_t when,
 	_editor.begin_reversible_command (_("add automation event"));
 	XMLNode& before = list->get_state();
 
-	list->add (when, y, with_guard_points);
+	list->editor_add (when, y, with_guard_points);
 
 	XMLNode& after = list->get_state();
-	_session->add_command (new MementoCommand<ARDOUR::AutomationList> (*list, &before, &after));
+	_session->add_command (new MementoCommand<ARDOUR::AutomationList> (*list.get (), &before, &after));
 	_editor.commit_reversible_command ();
 	_session->set_dirty ();
 }
diff --git a/gtk2_ardour/debug.cc b/gtk2_ardour/debug.cc
index 7065e6a..811c246 100644
--- a/gtk2_ardour/debug.cc
+++ b/gtk2_ardour/debug.cc
@@ -29,3 +29,4 @@ PBD::DebugBits PBD::DEBUG::Drags = PBD::new_debug_bit ("drags");
 PBD::DebugBits PBD::DEBUG::CutNPaste = PBD::new_debug_bit ("cutnpaste");
 PBD::DebugBits PBD::DEBUG::Accelerators = PBD::new_debug_bit ("accelerators");
 PBD::DebugBits PBD::DEBUG::GUITiming = PBD::new_debug_bit ("guitiming");
+PBD::DebugBits PBD::DEBUG::EngineControl = PBD::new_debug_bit ("enginecontrol");
diff --git a/gtk2_ardour/debug.h b/gtk2_ardour/debug.h
index 660e674..8574350 100644
--- a/gtk2_ardour/debug.h
+++ b/gtk2_ardour/debug.h
@@ -30,6 +30,7 @@ namespace PBD {
                 extern DebugBits CutNPaste;
                 extern DebugBits Accelerators;
                 extern DebugBits GUITiming;
+                extern DebugBits EngineControl;
 	}
 }
 
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 534dd26..98be85e 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -115,6 +115,7 @@
 #include "note_base.h"
 #include "playlist_selector.h"
 #include "public_editor.h"
+#include "quantize_dialog.h"
 #include "region_layering_order_editor.h"
 #include "rgb_macros.h"
 #include "rhythm_ferret.h"
@@ -300,6 +301,8 @@ Editor::Editor ()
 	, _following_mixer_selection (false)
 	, _control_point_toggled_on_press (false)
 	, _stepping_axis_view (0)
+	, quantize_dialog (0)
+	, _main_menu_disabler (0)
 {
 	constructed = false;
 
@@ -412,7 +415,7 @@ Editor::Editor ()
 
 	timebar_height = std::max(12., ceil (15. * ARDOUR_UI::ui_scale));
 	TimeAxisView::setup_sizes ();
-	Marker::setup_sizes (timebar_height);
+	ArdourMarker::setup_sizes (timebar_height);
 
 	_scroll_callbacks = 0;
 
@@ -809,6 +812,7 @@ Editor::~Editor()
 	delete _track_canvas_viewport;
 	delete _drags;
 	delete nudge_clock;
+	delete quantize_dialog;
 }
 
 XMLNode*
@@ -5402,7 +5406,7 @@ Editor::sync_track_view_list_and_routes ()
 {
 	track_views = TrackViewList (_routes->views ());
 
-	_summary->set_dirty ();
+	_summary->set_background_dirty();
 	_group_tabs->set_dirty ();
 
 	return false; // do not call again (until needed)
@@ -5684,13 +5688,18 @@ Editor::super_rapid_screen_update ()
 
 		} else {
 
-			if (!_dragging_playhead && _follow_playhead && _session->requested_return_frame() < 0 && !pending_visual_change.being_handled) {
+			if (!_dragging_playhead && _session->requested_return_frame() < 0 && !pending_visual_change.being_handled) {
 				framepos_t const frame = playhead_cursor->current_frame ();
 				double target = ((double)frame - (double)current_page_samples()/3.0);
 				if (target <= 0.0) {
 					target = 0.0;
 				}
-				reset_x_origin (target);
+				// compare to EditorCursor::set_position()
+				double const old_pos = sample_to_pixel_unrounded (leftmost_frame);
+				double const new_pos = sample_to_pixel_unrounded (target);
+				if (rint (new_pos) != rint (old_pos)) {
+					reset_x_origin (pixel_to_sample (floor (new_pos)));
+				}
 			}
 
 		}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index d5645a1..c137bd7 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -111,7 +111,7 @@ class EditorSnapshots;
 class EditorSummary;
 class GroupedButtons;
 class GUIObjectState;
-class Marker;
+class ArdourMarker;
 class MidiRegionView;
 class MixerStrip;
 class MouseCursors;
@@ -119,6 +119,7 @@ class NoteBase;
 class PlaylistSelector;
 class PluginSelector;
 class ProgressReporter;
+class QuantizeDialog;
 class RhythmFerret;
 class RulerDialog;
 class Selection;
@@ -409,6 +410,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 
 	int get_regionview_count_from_region_list (boost::shared_ptr<ARDOUR::Region>);
 
+	void do_ptimport(std::string path, ARDOUR::SrcQuality quality);
+
 	void do_import (std::vector<std::string>              paths,
 	                Editing::ImportDisposition            disposition,
 	                Editing::ImportMode                   mode,
@@ -641,8 +644,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 	uint32_t location_cd_marker_color;
 
 	struct LocationMarkers {
-		Marker* start;
-		Marker* end;
+		ArdourMarker* start;
+		ArdourMarker* end;
 		bool    valid;
 
 		LocationMarkers () : start(0), end(0), valid (true) {}
@@ -663,9 +666,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 	};
 
 	LocationMarkers  *find_location_markers (ARDOUR::Location *) const;
-	ARDOUR::Location* find_location_from_marker (Marker *, bool& is_start) const;
-	Marker* find_marker_from_location_id (PBD::ID const &, bool) const;
-	Marker* entered_marker;
+	ARDOUR::Location* find_location_from_marker (ArdourMarker *, bool& is_start) const;
+	ArdourMarker* find_marker_from_location_id (PBD::ID const &, bool) const;
+	ArdourMarker* entered_marker;
 	bool _show_marker_lines;
 
 	typedef std::map<ARDOUR::Location*,LocationMarkers *> LocationMarkerMap;
@@ -673,7 +676,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 
 	void update_marker_labels ();
 	void update_marker_labels (ArdourCanvas::Container *);
-	void check_marker_label (Marker *);
+	void check_marker_label (ArdourMarker *);
 
 	/** A set of lists of Markers that are in each of the canvas groups
 	 *  for the marker sections at the top of the editor.  These lists
@@ -681,8 +684,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 	 *  a marker has moved we can decide whether we need to update the labels
 	 *  for all markers or for just a few.
 	 */
-	std::map<ArdourCanvas::Container *, std::list<Marker *> > _sorted_marker_lists;
-	void remove_sorted_marker (Marker *);
+	std::map<ArdourCanvas::Container *, std::list<ArdourMarker *> > _sorted_marker_lists;
+	void remove_sorted_marker (ArdourMarker *);
 
 	void hide_marker (ArdourCanvas::Item*, GdkEvent*);
 	void clear_marker_display ();
@@ -1316,6 +1319,18 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 
 	void insert_region_list_selection (float times);
 
+	/* PT import */
+	void external_pt_dialog ();
+	typedef struct ptflookup {
+		uint16_t index1;
+		uint16_t index2;
+		PBD::ID  id;
+
+		bool operator ==(const struct ptflookup& other) {
+			return (this->index1 == other.index1);
+		}
+	} ptflookup_t;
+
 	/* import & embed */
 
 	void add_external_audio_action (Editing::ImportMode);
@@ -1553,7 +1568,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 	bool canvas_region_view_name_event (GdkEvent* event,ArdourCanvas::Item*, RegionView*);
 	bool canvas_feature_line_event (GdkEvent* event, ArdourCanvas::Item*, RegionView*);
 	bool canvas_stream_view_event (GdkEvent* event,ArdourCanvas::Item*, RouteTimeAxisView*);
-	bool canvas_marker_event (GdkEvent* event,ArdourCanvas::Item*, Marker*);
+	bool canvas_marker_event (GdkEvent* event,ArdourCanvas::Item*, ArdourMarker*);
 	bool canvas_tempo_marker_event (GdkEvent* event,ArdourCanvas::Item*, TempoMarker*);
 	bool canvas_meter_marker_event (GdkEvent* event,ArdourCanvas::Item*, MeterMarker*);
 	bool canvas_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*);
@@ -1641,7 +1656,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 	void marker_menu_edit ();
 	void marker_menu_remove ();
 	void marker_menu_rename ();
-	void rename_marker (Marker *marker);
+	void rename_marker (ArdourMarker *marker);
 	void toggle_marker_menu_lock ();
 	void toggle_marker_menu_glue ();
 	void marker_menu_hide ();
@@ -1678,7 +1693,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 	Gtk::Menu* cd_marker_menu;
 	ArdourCanvas::Item* marker_menu_item;
 
-	typedef std::list<Marker*> Marks;
+	typedef std::list<ArdourMarker*> Marks;
 	Marks metric_marks;
 
 	void remove_metric_marks ();
@@ -2237,6 +2252,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 	void update_bring_in_message (Gtk::Label* label, uint32_t n, uint32_t total, std::string name);
 	void bring_all_sources_into_session ();
 
+	QuantizeDialog* quantize_dialog;
+	MainMenuDisabler* _main_menu_disabler;
+	
 	friend class Drag;
 	friend class RegionDrag;
 	friend class RegionMoveDrag;
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index 71ce594..6b64471 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -196,7 +196,7 @@ Editor::register_actions ()
 	reg_sens (editor_actions, "deselect-all", _("Deselect All"), sigc::mem_fun(*this, &Editor::deselect_all));
 	reg_sens (editor_actions, "invert-selection", _("Invert Selection"), sigc::mem_fun(*this, &Editor::invert_selection));
 
-	reg_sens (editor_actions, "select-loop-range", _("Set Range in Loop Range"), sigc::mem_fun(*this, &Editor::set_selection_from_loop));
+	reg_sens (editor_actions, "select-loop-range", _("Set Range to Loop Range"), sigc::mem_fun(*this, &Editor::set_selection_from_loop));
 	reg_sens (editor_actions, "select-punch-range", _("Set Range to Punch Range"), sigc::mem_fun(*this, &Editor::set_selection_from_punch));
 	reg_sens (editor_actions, "select-from-regions", _("Set Range to Selected Regions"), sigc::mem_fun(*this, &Editor::set_selection_from_region));
 
@@ -688,6 +688,9 @@ Editor::register_actions ()
 
 	ActionManager::register_action (rl_actions, X_("removeUnusedRegions"), _("Remove Unused"), sigc::mem_fun (*_regions, &EditorRegions::remove_unused_regions));
 
+	act = reg_sens (editor_actions, X_("addExistingPTFiles"), _("Import PT session"), sigc::mem_fun (*this, &Editor::external_pt_dialog));
+	ActionManager::write_sensitive_actions.push_back (act);
+
 	/* the next two are duplicate items with different names for use in two different contexts */
 
 	act = reg_sens (editor_actions, X_("addExistingAudioFiles"), _("Import"), sigc::mem_fun (*this, &Editor::external_audio_dialog));
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 6be0a78..406b255 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -303,6 +303,7 @@ Editor::do_import (vector<string>        paths,
 		} else {
 			ipw.show ();
 			ok = (import_sndfiles (paths, disposition, mode, quality, pos, 1, 1, track, false, instrument) == 0);
+			import_status.sources.clear();
 		}
 
 	} else {
@@ -348,6 +349,7 @@ Editor::do_import (vector<string>        paths,
 				}
 
 				ok = (import_sndfiles (to_import, disposition, mode, quality, pos, 1, -1, track, replace, instrument) == 0);
+				import_status.sources.clear();
 				break;
 
 			case Editing::ImportDistinctChannels:
@@ -356,6 +358,7 @@ Editor::do_import (vector<string>        paths,
 				to_import.push_back (*a);
 
 				ok = (import_sndfiles (to_import, disposition, mode, quality, pos, -1, -1, track, replace, instrument) == 0);
+				import_status.sources.clear();
 				break;
 
 			case Editing::ImportSerializeFiles:
@@ -364,6 +367,7 @@ Editor::do_import (vector<string>        paths,
 				to_import.push_back (*a);
 
 				ok = (import_sndfiles (to_import, disposition, mode, quality, pos, 1, 1, track, replace, instrument) == 0);
+				import_status.sources.clear();
 				break;
 
 			case Editing::ImportMergeFiles:
@@ -524,7 +528,6 @@ Editor::import_sndfiles (vector<string>            paths,
 		pos = import_status.pos;
 	}
 
-	import_status.sources.clear();
 	return result;
 }
 
@@ -734,7 +737,7 @@ Editor::add_sources (vector<string>            paths,
 				/* generate a per-channel region name so that things work as
 				 * intended
 				 */
-				
+
 				string path;
 
 				if (fs) {
@@ -742,7 +745,7 @@ Editor::add_sources (vector<string>            paths,
 				} else {
 					region_name = (*x)->name();
 				}
-				
+
 				if (sources.size() == 2) {
 					if (n == 0) {
 						region_name += "-L";
@@ -752,9 +755,9 @@ Editor::add_sources (vector<string>            paths,
 				} else if (sources.size() > 2) {
 					region_name += string_compose ("-%1", n+1);
 				}
-				
+
 				track_names.push_back (region_name);
-				
+
 			} else {
 				if (fs) {
 					region_name = region_name_from_path (fs->path(), false, false, sources.size(), n);
@@ -825,7 +828,7 @@ Editor::add_sources (vector<string>            paths,
 	 * the API simpler.
 	 */
 	assert (regions.size() == track_names.size());
-	
+
 	for (vector<boost::shared_ptr<Region> >::iterator r = regions.begin(); r != regions.end(); ++r, ++n) {
 		boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (*r);
 
@@ -857,7 +860,7 @@ Editor::add_sources (vector<string>            paths,
                                 pos = get_preferred_edit_position ();
                         }
                 }
-		
+
 		finish_bringing_in_material (*r, input_chan, output_chan, pos, mode, track, track_names[n], instrument);
 
 		rlen = (*r)->length();
@@ -873,7 +876,7 @@ Editor::add_sources (vector<string>            paths,
 	}
 
 	commit_reversible_command ();
-	
+
 	/* setup peak file building in another thread */
 
 	for (SourceList::iterator x = sources.begin(); x != sources.end(); ++x) {
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 6641792..f04c668 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -425,8 +425,8 @@ Editor::drop_paths_part_two (const vector<string>& paths, framepos_t frame, doub
 		/* drop onto canvas background: create new tracks */
 
 		frame = 0;
-
-		do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, frame);
+		InstrumentSelector is; // instantiation builds instrument-list and sets default.
+		do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, frame, is.selected_instrument());
 		
 		if (Profile->get_sae() || ARDOUR_UI::config()->get_only_copy_imported_files() || copy) {
 			do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, SrcBest, frame);
@@ -1188,6 +1188,19 @@ Editor::which_canvas_cursor(ItemType type) const
 {
 	Gdk::Cursor* cursor = which_mode_cursor ();
 
+	if (mouse_mode == MouseRange) {
+		switch (type) {
+		case StartSelectionTrimItem:
+			cursor = _cursors->left_side_trim;
+			break;
+		case EndSelectionTrimItem:
+			cursor = _cursors->right_side_trim;
+			break;
+		default:
+			break;
+		}
+	}
+	
 	if ((mouse_mode == MouseObject || get_smart_mode ()) ||
 	    mouse_mode == MouseContent) {
 
@@ -1223,7 +1236,7 @@ Editor::which_canvas_cursor(ItemType type) const
 			cursor = _cursors->fader;
 			break;
 		case GainLineItem:
-			cursor = which_track_cursor ();
+			cursor = _cursors->cross_hair;
 			break;
 		case AutomationLineItem:
 			cursor = _cursors->cross_hair;
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index 8af5389..adb896a 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -695,6 +695,11 @@ Editor::canvas_line_event (GdkEvent *event, ArdourCanvas::Item* item, Automation
 		type = AutomationLineItem;
 	}
 
+	clicked_control_point = 0;
+	clicked_axisview = &al->trackview;
+	clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+	clicked_regionview = 0;
+
 	return typed_event (item, event, type);
 }
 
@@ -976,7 +981,7 @@ Editor::canvas_feature_line_event (GdkEvent *event, ArdourCanvas::Item* item, Re
 }
 
 bool
-Editor::canvas_marker_event (GdkEvent *event, ArdourCanvas::Item* item, Marker* /*marker*/)
+Editor::canvas_marker_event (GdkEvent *event, ArdourCanvas::Item* item, ArdourMarker* /*marker*/)
 {
 	return typed_event (item, event, MarkerItem);
 }
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index b079972..9162828 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -96,8 +96,6 @@ DragManager::abort ()
 {
 	_ending = true;
 
-	cerr << "Aborting drag\n";
-
 	for (list<Drag*>::const_iterator i = _drags.begin(); i != _drags.end(); ++i) {
 		(*i)->abort ();
 		delete *i;
@@ -619,6 +617,11 @@ RegionMotionDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
 		assert(_last_pointer_time_axis_view >= 0);
 		_last_pointer_layer = tv.first->layer_display() == Overlaid ? 0 : tv.second;
 	}
+
+	if (_brushing) {
+		/* cross track dragging seems broken here. disabled for now. */
+		_y_constrained = true;
+	}
 }
 
 double
@@ -1223,13 +1226,13 @@ void
 RegionMoveDrag::motion (GdkEvent* event, bool first_move)
 {
 	if (_copy && first_move) {
-
-		if (_x_constrained) {
+		if (_x_constrained && !_brushing) {
 			_editor->begin_reversible_command (Operations::fixed_time_region_copy);
-		} else {
+		} else if (!_brushing) {
 			_editor->begin_reversible_command (Operations::region_copy);
+		} else if (_brushing) {
+			_editor->begin_reversible_command (Operations::drag_region_brush);
 		}
-
 		/* duplicate the regionview(s) and region(s) */
 
 		list<DraggingView> new_regionviews;
@@ -1287,14 +1290,14 @@ RegionMoveDrag::motion (GdkEvent* event, bool first_move)
 		}
 
 	} else if (!_copy && first_move) {
-
-		if (_x_constrained) {
+		if (_x_constrained && !_brushing) {
 			_editor->begin_reversible_command (_("fixed time region drag"));
-		} else {
+		} else if (!_brushing) {
 			_editor->begin_reversible_command (Operations::region_drag);
+		} else if (_brushing) {
+			_editor->begin_reversible_command (Operations::drag_region_brush);
 		}
 	}
-
 	RegionMotionDrag::motion (event, first_move);
 }
 
@@ -1502,12 +1505,6 @@ RegionMoveDrag::finished_no_copy (
 	set<RouteTimeAxisView*> views_to_update;
 	RouteTimeAxisView* new_time_axis_view = 0;
 
-	if (_brushing) {
-		/* all changes were made during motion event handlers */
-		_editor->commit_reversible_command ();
-		return;
-	}
-
 	typedef map<boost::shared_ptr<Playlist>, RouteTimeAxisView*> PlaylistMapping;
 	PlaylistMapping playlist_mapping;
 
@@ -1621,7 +1618,6 @@ RegionMoveDrag::finished_no_copy (
 			}
 
 			rv->region()->set_position (where);
-
 			_editor->session()->add_command (new StatefulDiffCommand (rv->region()));
 		}
 
@@ -1670,7 +1666,7 @@ RegionMoveDrag::finished_no_copy (
 
 	/* write commands for the accumulated diffs for all our modified playlists */
 	add_stateful_diff_commands_for_playlists (modified_playlists);
-
+	/* applies to _brushing */
 	_editor->commit_reversible_command ();
 
 	/* We have futzed with the layering of canvas items on our streamviews.
@@ -2336,6 +2332,8 @@ RegionCreateDrag::aborted (bool)
 NoteResizeDrag::NoteResizeDrag (Editor* e, ArdourCanvas::Item* i)
 	: Drag (e, i)
 	, region (0)
+	, relative (false)
+	, at_front (true)
 	, _snap_delta (0)
 {
 	DEBUG_TRACE (DEBUG::Drags, "New NoteResizeDrag\n");
@@ -2372,37 +2370,36 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/)
 	} else {
 		relative = true;
 	}
-
 	MidiRegionSelection& ms (_editor->get_selection().midi_regions);
-
 	if (ms.size() > 1) {
 		/* has to be relative, may make no sense otherwise */
 		relative = true;
 	}
-
 	/* select this note; if it is already selected, preserve the existing selection,
 	   otherwise make this note the only one selected.
 	*/
 	region->note_selected (cnote, cnote->selected ());
-
-	_editor->begin_reversible_command (_("resize notes"));
-
-	for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ) {
-		MidiRegionSelection::iterator next;
-		next = r;
-		++next;
-		MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r);
-		if (mrv) {
-			mrv->begin_resizing (at_front);
-		}
-		r = next;
-	}
 }
 
 void
-NoteResizeDrag::motion (GdkEvent* event, bool /*first_move*/)
+NoteResizeDrag::motion (GdkEvent* event, bool first_move)
 {
 	MidiRegionSelection& ms (_editor->get_selection().midi_regions);
+	if (first_move) {
+		_editor->begin_reversible_command (_("resize notes"));
+
+		for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ) {
+			MidiRegionSelection::iterator next;
+			next = r;
+			++next;
+			MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r);
+			if (mrv) {
+				mrv->begin_resizing (at_front);
+			}
+			r = next;
+		}
+	}
+
 	for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) {
 		NoteBase* nb = reinterpret_cast<NoteBase*> (_item->get_data ("notebase"));
 		assert (nb);
@@ -2436,8 +2433,12 @@ NoteResizeDrag::motion (GdkEvent* event, bool /*first_move*/)
 }
 
 void
-NoteResizeDrag::finished (GdkEvent* event, bool /*movement_occurred*/)
+NoteResizeDrag::finished (GdkEvent* event, bool movement_occurred)
 {
+	if (!movement_occurred) {
+		return;
+	}
+
 	MidiRegionSelection& ms (_editor->get_selection().midi_regions);
 	for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) {
 		NoteBase* nb = reinterpret_cast<NoteBase*> (_item->get_data ("notebase"));
@@ -2460,9 +2461,11 @@ NoteResizeDrag::finished (GdkEvent* event, bool /*movement_occurred*/)
 					}
 				}
 			}
+
 			if (apply_snap_delta) {
 				sd = _snap_delta;
 			}
+
 			mrv->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative, sd, snap);
 		}
 	}
@@ -3481,7 +3484,7 @@ FadeInDrag::finished (GdkEvent* event, bool movement_occurred)
 		fade_length = pos - region->position();
 	}
 
-	_editor->begin_reversible_command (_("change fade in length"));
+	bool in_command = false;
 
 	for (list<DraggingView>::iterator i = _views.begin(); i != _views.end(); ++i) {
 
@@ -3497,11 +3500,17 @@ FadeInDrag::finished (GdkEvent* event, bool movement_occurred)
 		tmp->audio_region()->set_fade_in_length (fade_length);
 		tmp->audio_region()->set_fade_in_active (true);
 
+		if (!in_command) {
+			_editor->begin_reversible_command (_("change fade in length"));
+			in_command = true;
+		}
 		XMLNode &after = alist->get_state();
 		_editor->session()->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
 	}
 
-	_editor->commit_reversible_command ();
+	if (in_command) {
+		_editor->commit_reversible_command ();
+	}
 }
 
 void
@@ -3600,7 +3609,7 @@ FadeOutDrag::finished (GdkEvent* event, bool movement_occurred)
 		fade_length = region->last_frame() - pos;
 	}
 
-	_editor->begin_reversible_command (_("change fade out length"));
+	bool in_command = false;
 
 	for (list<DraggingView>::iterator i = _views.begin(); i != _views.end(); ++i) {
 
@@ -3616,11 +3625,17 @@ FadeOutDrag::finished (GdkEvent* event, bool movement_occurred)
 		tmp->audio_region()->set_fade_out_length (fade_length);
 		tmp->audio_region()->set_fade_out_active (true);
 
+		if (!in_command) {
+			_editor->begin_reversible_command (_("change fade out length"));
+			in_command = false;
+		}
 		XMLNode &after = alist->get_state();
 		_editor->session()->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
 	}
 
-	_editor->commit_reversible_command ();
+	if (in_command) {
+		_editor->commit_reversible_command ();
+	}
 }
 
 void
@@ -3642,7 +3657,7 @@ MarkerDrag::MarkerDrag (Editor* e, ArdourCanvas::Item* i)
 {
 	DEBUG_TRACE (DEBUG::Drags, "New MarkerDrag\n");
 
-	_marker = reinterpret_cast<Marker*> (_item->get_data ("marker"));
+	_marker = reinterpret_cast<ArdourMarker*> (_item->get_data ("marker"));
 	assert (_marker);
 
 	_points.push_back (ArdourCanvas::Duple (0, 0));
@@ -3656,7 +3671,7 @@ MarkerDrag::~MarkerDrag ()
 	}
 }
 
-MarkerDrag::CopiedLocationMarkerInfo::CopiedLocationMarkerInfo (Location* l, Marker* m)
+MarkerDrag::CopiedLocationMarkerInfo::CopiedLocationMarkerInfo (Location* l, ArdourMarker* m)
 {
 	location = new Location (*l);
 	markers.push_back (m);
@@ -3698,7 +3713,7 @@ MarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
 	case Selection::Extend:
 	{
 		Locations::LocationList ll;
-		list<Marker*> to_add;
+		list<ArdourMarker*> to_add;
 		framepos_t s, e;
 		_editor->selection->markers.range (s, e);
 		s = min (_marker->position(), s);
@@ -3813,17 +3828,17 @@ MarkerDrag::motion (GdkEvent* event, bool)
 
 
 				switch (_marker->type()) {
-				case Marker::SessionStart:
-				case Marker::RangeStart:
-				case Marker::LoopStart:
-				case Marker::PunchIn:
+				case ArdourMarker::SessionStart:
+				case ArdourMarker::RangeStart:
+				case ArdourMarker::LoopStart:
+				case ArdourMarker::PunchIn:
 					f_delta = newframe - copy_location->start();
 					break;
 
-				case Marker::SessionEnd:
-				case Marker::RangeEnd:
-				case Marker::LoopEnd:
-				case Marker::PunchOut:
+				case ArdourMarker::SessionEnd:
+				case ArdourMarker::RangeEnd:
+				case ArdourMarker::LoopEnd:
+				case ArdourMarker::PunchOut:
 					f_delta = newframe - copy_location->end();
 					break;
 				default:
@@ -3954,8 +3969,8 @@ MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
 
 	_editor->_dragging_edit_point = false;
 
-	_editor->begin_reversible_command ( _("move marker") );
 	XMLNode &before = _editor->session()->locations()->get_state();
+	bool in_command = false;
 
 	MarkerSelection::iterator i;
 	CopiedLocationInfo::iterator x;
@@ -3970,9 +3985,12 @@ MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
 		if (location) {
 
 			if (location->locked()) {
-				return;
+				continue;
+			}
+			if (!in_command) {
+				_editor->begin_reversible_command ( _("move marker") );
+				in_command = true;
 			}
-
 			if (location->is_mark()) {
 				location->set_start (((*x).location)->start());
 			} else {
@@ -3981,9 +3999,11 @@ MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
 		}
 	}
 
-	XMLNode &after = _editor->session()->locations()->get_state();
-	_editor->session()->add_command(new MementoCommand<Locations>(*(_editor->session()->locations()), &before, &after));
-	_editor->commit_reversible_command ();
+	if (in_command) {
+		XMLNode &after = _editor->session()->locations()->get_state();
+		_editor->session()->add_command(new MementoCommand<Locations>(*(_editor->session()->locations()), &before, &after));
+		_editor->commit_reversible_command ();
+	}
 }
 
 void
@@ -3998,7 +4018,7 @@ MarkerDrag::aborted (bool movement_occured)
 		/* move all markers to their original location */
 
 
-		for (vector<Marker*>::iterator m = x->markers.begin(); m != x->markers.end(); ++m) {
+		for (vector<ArdourMarker*>::iterator m = x->markers.begin(); m != x->markers.end(); ++m) {
 
 			bool is_start;
 			Location * location = _editor->find_location_from_marker (*m, is_start);
@@ -4046,9 +4066,6 @@ ControlPointDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
 	setup_snap_delta (pos);
 
 	float const fraction = 1 - (_point->get_y() / _point->line().height());
-
-	_point->line().start_drag_single (_point, _fixed_grab_x, fraction);
-
 	show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction));
 
 	_pushing = Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::push_points_modifier ());
@@ -4059,7 +4076,7 @@ ControlPointDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
 }
 
 void
-ControlPointDrag::motion (GdkEvent* event, bool)
+ControlPointDrag::motion (GdkEvent* event, bool first_motion)
 {
 	double dx = _drags->current_pointer_x() - last_pointer_x();
 	double dy = current_pointer_y() - last_pointer_y();
@@ -4078,11 +4095,6 @@ ControlPointDrag::motion (GdkEvent* event, bool)
 	// positive side of zero
 	double const zero_gain_y = (1.0 - _zero_gain_fraction) * _point->line().height() - .01;
 
-	// make sure we hit zero when passing through
-	if ((cy < zero_gain_y && (cy - dy) > zero_gain_y) || (cy > zero_gain_y && (cy - dy) < zero_gain_y)) {
-		cy = zero_gain_y;
-	}
-
 	if (_x_constrained) {
 		cx = _fixed_grab_x;
 	}
@@ -4093,6 +4105,11 @@ ControlPointDrag::motion (GdkEvent* event, bool)
 	_cumulative_x_drag = cx - _fixed_grab_x;
 	_cumulative_y_drag = cy - _fixed_grab_y;
 
+	// make sure we hit zero when passing through
+	if ((cy < zero_gain_y && (cy - dy) > zero_gain_y) || (cy > zero_gain_y && (cy - dy) < zero_gain_y)) {
+		cy = zero_gain_y;
+	}
+
 	cx = max (0.0, cx);
 	cy = max (0.0, cy);
 	cy = min ((double) _point->line().height(), cy);
@@ -4108,6 +4125,11 @@ ControlPointDrag::motion (GdkEvent* event, bool)
 
 	float const fraction = 1.0 - (cy / _point->line().height());
 
+	if (first_motion) {
+		_editor->begin_reversible_command (_("automation event move"));
+		_point->line().start_drag_single (_point, _fixed_grab_x, fraction);
+	}
+
 	_point->line().drag_motion (_editor->sample_to_pixel_unrounded (cx_frames), fraction, false, _pushing, _final_index);
 
 	show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction));
@@ -4125,10 +4147,9 @@ ControlPointDrag::finished (GdkEvent* event, bool movement_occurred)
 
 	} else {
 		motion (event, false);
+		_point->line().end_drag (_pushing, _final_index);
+		_editor->commit_reversible_command ();
 	}
-
-	_point->line().end_drag (_pushing, _final_index);
-	_editor->commit_reversible_command ();
 }
 
 void
@@ -4153,6 +4174,8 @@ LineDrag::LineDrag (Editor* e, ArdourCanvas::Item* i)
 	: Drag (e, i)
 	, _line (0)
 	, _cumulative_y_drag (0)
+	, _before (0)
+	, _after (0)
 {
 	DEBUG_TRACE (DEBUG::Drags, "New LineDrag\n");
 }
@@ -4176,10 +4199,7 @@ LineDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
 
 	framecnt_t const frame_within_region = (framecnt_t) floor (cx * _editor->samples_per_pixel);
 
-	uint32_t before;
-	uint32_t after;
-
-	if (!_line->control_points_adjacent (frame_within_region, before, after)) {
+	if (!_line->control_points_adjacent (frame_within_region, _before, _after)) {
 		/* no adjacent points */
 		return;
 	}
@@ -4193,13 +4213,11 @@ LineDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
 
 	double fraction = 1.0 - (cy / _line->height());
 
-	_line->start_drag_line (before, after, fraction);
-
 	show_verbose_cursor_text (_line->get_verbose_cursor_string (fraction));
 }
 
 void
-LineDrag::motion (GdkEvent* event, bool)
+LineDrag::motion (GdkEvent* event, bool first_move)
 {
 	double dy = current_pointer_y() - last_pointer_y();
 
@@ -4217,6 +4235,11 @@ LineDrag::motion (GdkEvent* event, bool)
 	double const fraction = 1.0 - (cy / _line->height());
 	uint32_t ignored;
 
+	if (first_move) {
+		_editor->begin_reversible_command (_("automation range move"));
+		_line->start_drag_line (_before, _after, fraction);
+	}
+
 	/* we are ignoring x position for this drag, so we can just pass in anything */
 	_line->drag_motion (0, fraction, true, false, ignored);
 
@@ -4229,20 +4252,17 @@ LineDrag::finished (GdkEvent* event, bool movement_occured)
 	if (movement_occured) {
 		motion (event, false);
 		_line->end_drag (false, 0);
+		_editor->commit_reversible_command ();
 	} else {
 		/* add a new control point on the line */
 
 		AutomationTimeAxisView* atv;
 
-		_line->end_drag (false, 0);
-
 		if ((atv = dynamic_cast<AutomationTimeAxisView*>(_editor->clicked_axisview)) != 0) {
 			framepos_t where = _editor->window_event_sample (event, 0, 0);
 			atv->add_automation_event (event, where, event->button.y, false);
 		}
 	}
-
-	_editor->commit_reversible_command ();
 }
 
 void
@@ -4820,7 +4840,6 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
 
 	case SelectionStartTrim:
 
-		start = _editor->selection->time[_editor->clicked_selection].start;
 		end = _editor->selection->time[_editor->clicked_selection].end;
 
 		if (pending_position > end) {
@@ -4833,7 +4852,6 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
 	case SelectionEndTrim:
 
 		start = _editor->selection->time[_editor->clicked_selection].start;
-		end = _editor->selection->time[_editor->clicked_selection].end;
 
 		if (pending_position < start) {
 			end = start;
@@ -4895,7 +4913,7 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
 
 		/* XXX what if its a music time selection? */
 		if (s) {
-			if ( s->get_play_range() && s->transport_rolling() ) {
+			if (s->get_play_range() && s->transport_rolling()) {
 				s->request_play_range (&_editor->selection->time, true);
 			} else {
 				if (ARDOUR_UI::config()->get_follow_edits() && !s->transport_rolling()) {
@@ -4905,8 +4923,14 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred)
 						s->request_locate (_editor->get_selection().time.start());
 				}
 			}
-		}
 
+			if (_editor->get_selection().time.length() != 0) {
+				s->set_range_selection (_editor->get_selection().time.start(), _editor->get_selection().time.end_frame());
+			} else {
+				s->clear_range_selection ();
+			}
+		}
+		
 	} else {
 		/* just a click, no pointer movement.
 		 */
@@ -5521,8 +5545,8 @@ AutomationRangeDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
 				double const p = j->line->time_converter().from (i->start - j->line->time_converter().origin_b ());
 				double const q = j->line->time_converter().from (a - j->line->time_converter().origin_b ());
 
-				the_list->editor_add (p, value (the_list, p));
-				the_list->editor_add (q, value (the_list, q));
+				the_list->editor_add (p, value (the_list, p), false);
+				the_list->editor_add (q, value (the_list, q), false);
 			}
 
 			/* same thing for the end */
@@ -5547,8 +5571,8 @@ AutomationRangeDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
 				double const p = j->line->time_converter().from (b - j->line->time_converter().origin_b ());
 				double const q = j->line->time_converter().from (i->end - j->line->time_converter().origin_b ());
 
-				the_list->editor_add (p, value (the_list, p));
-				the_list->editor_add (q, value (the_list, q));
+				the_list->editor_add (p, value (the_list, p), false);
+				the_list->editor_add (q, value (the_list, q), false);
 			}
 		}
 
@@ -5585,19 +5609,22 @@ AutomationRangeDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
 	if (_nothing_to_drag) {
 		return;
 	}
-
-	for (list<Line>::iterator i = _lines.begin(); i != _lines.end(); ++i) {
-		i->line->start_drag_multiple (i->points, y_fraction (i->line, current_pointer_y()), i->state);
-	}
 }
 
 void
-AutomationRangeDrag::motion (GdkEvent*, bool /*first_move*/)
+AutomationRangeDrag::motion (GdkEvent*, bool first_move)
 {
 	if (_nothing_to_drag) {
 		return;
 	}
 
+	if (first_move) {
+		_editor->begin_reversible_command (_("automation range move"));
+		for (list<Line>::iterator i = _lines.begin(); i != _lines.end(); ++i) {
+			i->line->start_drag_multiple (i->points, y_fraction (i->line, current_pointer_y()), i->state);
+		}
+	}
+
 	for (list<Line>::iterator l = _lines.begin(); l != _lines.end(); ++l) {
 		float const f = y_fraction (l->line, current_pointer_y());
 		/* we are ignoring x position for this drag, so we can just pass in anything */
@@ -5608,9 +5635,9 @@ AutomationRangeDrag::motion (GdkEvent*, bool /*first_move*/)
 }
 
 void
-AutomationRangeDrag::finished (GdkEvent* event, bool)
+AutomationRangeDrag::finished (GdkEvent* event, bool motion_occurred)
 {
-	if (_nothing_to_drag) {
+	if (_nothing_to_drag || !motion_occurred) {
 		return;
 	}
 
diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h
index 6fcd927..b9310c7 100644
--- a/gtk2_ardour/editor_drag.h
+++ b/gtk2_ardour/editor_drag.h
@@ -27,14 +27,23 @@
 
 #include "ardour/types.h"
 
+#include "canvas/types.h"
+
 #include "cursor_context.h"
 #include "editor_items.h"
 #include "mouse_cursors.h"
+#include "editing.h"
 
 namespace ARDOUR {
 	class Location;
 }
 
+namespace ArdourCanvas {
+	class Item;
+	class Line;
+	class Rectangle;
+}
+
 namespace PBD {
 	class StatefulDiffCommand;
 }
@@ -46,6 +55,18 @@ class TimeAxisView;
 class MidiTimeAxisView;
 class Drag;
 class NoteBase;
+class RegionView;
+class TimeAxisView;
+class RouteTimeAxisView;
+class RegionSelection;
+class MidiRegionView;
+class MeterMarker;
+class ArdourMarker;
+class TempoMarker;
+class ControlPoint;
+class AudioRegionView;
+class AutomationLine;
+class AutomationTimeAxisView;
 
 /** Class to manage current drags */
 class DragManager
@@ -456,13 +477,13 @@ protected:
 private:
 	TimeAxisView *prev_tav;		// where regions were most recently dragged from
 	TimeAxisView *orig_tav;		// where drag started
-	framecnt_t prev_amount;
-	framepos_t prev_position;
-	framecnt_t selection_length;
+	ARDOUR::framecnt_t prev_amount;
+	ARDOUR::framepos_t prev_position;
+	ARDOUR::framecnt_t selection_length;
 	bool allow_moves_across_tracks; // only if all selected regions are on one track
 	ARDOUR::RegionList *exclude;
-	void add_all_after_to_views (TimeAxisView *tav, framepos_t where, const RegionSelection &exclude, bool drag_in_progress);
-	void remove_unselected_from_views (framecnt_t amount, bool move_regions);
+	void add_all_after_to_views (TimeAxisView *tav, ARDOUR::framepos_t where, const RegionSelection &exclude, bool drag_in_progress);
+	void remove_unselected_from_views (ARDOUR::framecnt_t amount, bool move_regions);
 
 };
 
@@ -559,7 +580,7 @@ public:
 
 private:
 	double y_to_region (double) const;
-	framecnt_t grid_frames (framepos_t) const;
+	ARDOUR::framecnt_t grid_frames (framepos_t) const;
 	
 	MidiRegionView* _region_view;
 	ArdourCanvas::Rectangle* _drag_rect;
@@ -800,13 +821,13 @@ public:
 private:
 	void update_item (ARDOUR::Location *);
 
-	Marker* _marker; ///< marker being dragged
+	ArdourMarker* _marker; ///< marker being dragged
 
         struct CopiedLocationMarkerInfo {
 	    ARDOUR::Location* location;
-	    std::vector<Marker*> markers;
+	    std::vector<ArdourMarker*> markers;
 	    bool    move_both;
-	    CopiedLocationMarkerInfo (ARDOUR::Location* l, Marker* m);
+	    CopiedLocationMarkerInfo (ARDOUR::Location* l, ArdourMarker* m);
 	};
 
         typedef std::list<CopiedLocationMarkerInfo> CopiedLocationInfo;
@@ -856,6 +877,8 @@ private:
 	double _fixed_grab_x;
 	double _fixed_grab_y;
 	double _cumulative_y_drag;
+	uint32_t _before;
+	uint32_t _after;
 };
 
 /** Transient feature line drags*/
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index f92cf07..c2abbca 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -86,9 +86,9 @@ Editor::export_selection ()
 void
 Editor::export_range ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index 392b3bb..a034232 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -106,10 +106,10 @@ Editor::add_new_location_internal (Location* location)
 	if (location->is_mark()) {
 
 		if (location->is_cd_marker() && ruler_cd_marker_action->get_active()) {
-			lam->start = new Marker (*this, *cd_marker_group, color, location->name(), Marker::Mark, location->start());
+			lam->start = new ArdourMarker (*this, *cd_marker_group, color, location->name(), ArdourMarker::Mark, location->start());
 			group = cd_marker_group;
 		} else {
-			lam->start = new Marker (*this, *marker_group, color, location->name(), Marker::Mark, location->start());
+			lam->start = new ArdourMarker (*this, *marker_group, color, location->name(), ArdourMarker::Mark, location->start());
 			group = marker_group;
 		}
 
@@ -118,41 +118,41 @@ Editor::add_new_location_internal (Location* location)
 	} else if (location->is_auto_loop()) {
 
 		// transport marker
-		lam->start = new Marker (*this, *transport_marker_group, color,
-					 location->name(), Marker::LoopStart, location->start());
-		lam->end   = new Marker (*this, *transport_marker_group, color,
-					 location->name(), Marker::LoopEnd, location->end());
+		lam->start = new ArdourMarker (*this, *transport_marker_group, color,
+					 location->name(), ArdourMarker::LoopStart, location->start());
+		lam->end   = new ArdourMarker (*this, *transport_marker_group, color,
+					 location->name(), ArdourMarker::LoopEnd, location->end());
 		group = transport_marker_group;
 
 	} else if (location->is_auto_punch()) {
 
 		// transport marker
-		lam->start = new Marker (*this, *transport_marker_group, color,
-					 location->name(), Marker::PunchIn, location->start());
-		lam->end   = new Marker (*this, *transport_marker_group, color,
-					 location->name(), Marker::PunchOut, location->end());
+		lam->start = new ArdourMarker (*this, *transport_marker_group, color,
+					 location->name(), ArdourMarker::PunchIn, location->start());
+		lam->end   = new ArdourMarker (*this, *transport_marker_group, color,
+					 location->name(), ArdourMarker::PunchOut, location->end());
 		group = transport_marker_group;
 
 	} else if (location->is_session_range()) {
 
 		// session range
-		lam->start = new Marker (*this, *marker_group, color, _("start"), Marker::SessionStart, location->start());
-		lam->end = new Marker (*this, *marker_group, color, _("end"), Marker::SessionEnd, location->end());
+		lam->start = new ArdourMarker (*this, *marker_group, color, _("start"), ArdourMarker::SessionStart, location->start());
+		lam->end = new ArdourMarker (*this, *marker_group, color, _("end"), ArdourMarker::SessionEnd, location->end());
 		group = marker_group;
 
 	} else {
 		// range marker
 		if (location->is_cd_marker() && ruler_cd_marker_action->get_active()) {
-			lam->start = new Marker (*this, *cd_marker_group, color,
-						 location->name(), Marker::RangeStart, location->start());
-			lam->end   = new Marker (*this, *cd_marker_group, color,
-						 location->name(), Marker::RangeEnd, location->end());
+			lam->start = new ArdourMarker (*this, *cd_marker_group, color,
+						 location->name(), ArdourMarker::RangeStart, location->start());
+			lam->end   = new ArdourMarker (*this, *cd_marker_group, color,
+						 location->name(), ArdourMarker::RangeEnd, location->end());
 			group = cd_marker_group;
 		} else {
-			lam->start = new Marker (*this, *range_marker_group, color,
-						 location->name(), Marker::RangeStart, location->start());
-			lam->end   = new Marker (*this, *range_marker_group, color,
-						 location->name(), Marker::RangeEnd, location->end());
+			lam->start = new ArdourMarker (*this, *range_marker_group, color,
+						 location->name(), ArdourMarker::RangeStart, location->start());
+			lam->end   = new ArdourMarker (*this, *range_marker_group, color,
+						 location->name(), ArdourMarker::RangeEnd, location->end());
 			group = range_marker_group;
 		}
 	}
@@ -224,15 +224,15 @@ Editor::location_changed (Location *location)
  *  lengthened)
  */
 void
-Editor::check_marker_label (Marker* m)
+Editor::check_marker_label (ArdourMarker* m)
 {
 	/* Get a time-ordered list of markers from the last time anything changed */
-	std::list<Marker*>& sorted = _sorted_marker_lists[m->get_parent()];
+	std::list<ArdourMarker*>& sorted = _sorted_marker_lists[m->get_parent()];
 
-	list<Marker*>::iterator i = find (sorted.begin(), sorted.end(), m);
+	list<ArdourMarker*>::iterator i = find (sorted.begin(), sorted.end(), m);
 
-	list<Marker*>::iterator prev = sorted.end ();
-	list<Marker*>::iterator next = i;
+	list<ArdourMarker*>::iterator prev = sorted.end ();
+	list<ArdourMarker*>::iterator next = i;
 	++next;
 
 	/* Look to see if the previous marker is still behind `m' in time */
@@ -299,7 +299,7 @@ Editor::check_marker_label (Marker* m)
 }
 
 struct MarkerComparator {
-	bool operator() (Marker const * a, Marker const * b) {
+	bool operator() (ArdourMarker const * a, ArdourMarker const * b) {
 		return a->position() < b->position();
 	}
 };
@@ -308,7 +308,7 @@ struct MarkerComparator {
 void
 Editor::update_marker_labels ()
 {
-	for (std::map<ArdourCanvas::Container *, std::list<Marker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
+	for (std::map<ArdourCanvas::Container *, std::list<ArdourMarker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
 		update_marker_labels (i->first);
 	}
 }
@@ -317,7 +317,7 @@ Editor::update_marker_labels ()
 void
 Editor::update_marker_labels (ArdourCanvas::Container* group)
 {
-	list<Marker*>& sorted = _sorted_marker_lists[group];
+	list<ArdourMarker*>& sorted = _sorted_marker_lists[group];
 
 	if (sorted.empty()) {
 		return;
@@ -327,10 +327,10 @@ Editor::update_marker_labels (ArdourCanvas::Container* group)
 
 	sorted.sort (MarkerComparator ());
 
-	list<Marker*>::iterator i = sorted.begin ();
+	list<ArdourMarker*>::iterator i = sorted.begin ();
 
-	list<Marker*>::iterator prev = sorted.end ();
-	list<Marker*>::iterator next = i;
+	list<ArdourMarker*>::iterator prev = sorted.end ();
+	list<ArdourMarker*>::iterator next = i;
 
 	if (next != sorted.end()) {
 		++next;
@@ -467,7 +467,7 @@ Editor::find_location_markers (Location *location) const
 }
 
 Location *
-Editor::find_location_from_marker (Marker *marker, bool& is_start) const
+Editor::find_location_from_marker (ArdourMarker *marker, bool& is_start) const
 {
 	LocationMarkerMap::const_iterator i;
 
@@ -580,11 +580,11 @@ Editor::LocationMarkers::set_name (const string& str)
 {
 	/* XXX: hack: don't change names of session start/end markers */
 
-	if (start->type() != Marker::SessionStart) {
+	if (start->type() != ArdourMarker::SessionStart) {
 		start->set_name (str);
 	}
 
-	if (end && end->type() != Marker::SessionEnd) {
+	if (end && end->type() != ArdourMarker::SessionEnd) {
 		end->set_name (str);
 	}
 }
@@ -726,10 +726,10 @@ Editor::mouse_add_new_range (framepos_t where)
 void
 Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent*)
 {
-	Marker* marker;
+	ArdourMarker* marker;
 	bool is_start;
 
-	if ((marker = static_cast<Marker*> (item.get_data ("marker"))) == 0) {
+	if ((marker = static_cast<ArdourMarker*> (item.get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -815,8 +815,8 @@ Editor::tempo_or_meter_marker_context_menu (GdkEventButton* ev, ArdourCanvas::It
 void
 Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item)
 {
-	Marker * marker;
-	if ((marker = reinterpret_cast<Marker *> (item->get_data("marker"))) == 0) {
+	ArdourMarker * marker;
+	if ((marker = reinterpret_cast<ArdourMarker *> (item->get_data("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -999,9 +999,9 @@ Editor::build_new_transport_marker_menu ()
 void
 Editor::marker_menu_hide ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1017,9 +1017,9 @@ Editor::marker_menu_hide ()
 void
 Editor::marker_menu_select_using_range ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1035,9 +1035,9 @@ Editor::marker_menu_select_using_range ()
 void
 Editor::marker_menu_select_all_selectables_using_range ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1054,9 +1054,9 @@ Editor::marker_menu_select_all_selectables_using_range ()
 void
 Editor::marker_menu_separate_regions_using_location ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1073,9 +1073,9 @@ Editor::marker_menu_separate_regions_using_location ()
 void
 Editor::marker_menu_play_from ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1103,9 +1103,9 @@ Editor::marker_menu_play_from ()
 void
 Editor::marker_menu_set_playhead ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1131,12 +1131,12 @@ Editor::marker_menu_set_playhead ()
 void
 Editor::marker_menu_range_to_next ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 	if (!_session) {
 		return;
 	}
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1164,9 +1164,9 @@ Editor::marker_menu_range_to_next ()
 void
 Editor::marker_menu_set_from_playhead ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1192,9 +1192,9 @@ Editor::marker_menu_set_from_playhead ()
 void
 Editor::marker_menu_set_from_selection (bool /*force_regions*/)
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1223,9 +1223,9 @@ Editor::marker_menu_set_from_selection (bool /*force_regions*/)
 void
 Editor::marker_menu_play_range ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1248,9 +1248,9 @@ Editor::marker_menu_play_range ()
 void
 Editor::marker_menu_loop_range ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1274,7 +1274,7 @@ Editor::marker_menu_loop_range ()
 void
 Editor::marker_menu_zoom_to_range ()
 {
-	Marker* marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"));
+	ArdourMarker* marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"));
 	assert (marker);
 
 	bool is_start;
@@ -1300,7 +1300,7 @@ Editor::marker_menu_zoom_to_range ()
 void
 Editor::dynamic_cast_marker_object (void* p, MeterMarker** m, TempoMarker** t) const
 {
-	Marker* marker = reinterpret_cast<Marker*> (p);
+	ArdourMarker* marker = reinterpret_cast<ArdourMarker*> (p);
 	if (!marker) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
@@ -1343,9 +1343,9 @@ Editor::marker_menu_remove ()
 void
 Editor::toggle_marker_menu_lock ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1369,9 +1369,9 @@ Editor::toggle_marker_menu_lock ()
 void
 Editor::marker_menu_rename ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1381,7 +1381,7 @@ Editor::marker_menu_rename ()
 }
 
 void
-Editor::rename_marker(Marker *marker)
+Editor::rename_marker(ArdourMarker *marker)
 {
 	Location* loc;
 	bool is_start;
@@ -1563,9 +1563,9 @@ Editor::goto_nth_marker (int n)
 void
 Editor::toggle_marker_menu_glue ()
 {
-	Marker* marker;
+	ArdourMarker* marker;
 
-	if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (marker_menu_item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -1598,14 +1598,14 @@ Editor::toggle_marker_lines ()
 }
 
 void
-Editor::remove_sorted_marker (Marker* m)
+Editor::remove_sorted_marker (ArdourMarker* m)
 {
-	for (std::map<ArdourCanvas::Container *, std::list<Marker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
+	for (std::map<ArdourCanvas::Container *, std::list<ArdourMarker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
 		i->second.remove (m);
 	}
 }
 
-Marker *
+ArdourMarker *
 Editor::find_marker_from_location_id (PBD::ID const & id, bool is_start) const
 {
 	for (LocationMarkerMap::const_iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 5c10678..0d9ad69 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -446,7 +446,8 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
 	if (((mouse_mode != MouseObject) &&
 	     (mouse_mode != MouseAudition || item_type != RegionItem) &&
 	     (mouse_mode != MouseTimeFX || item_type != RegionItem) &&
-	     (mouse_mode != MouseDraw)) ||
+	     (mouse_mode != MouseDraw) &&
+	     (mouse_mode != MouseContent || item_type == RegionItem)) ||
 	    ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
 		return;
 	}
@@ -512,7 +513,8 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
 		break;
 
 	case ControlPointItem:
-		set_selected_track_as_side_effect (op);
+		/* for object/track exclusivity, we don't call set_selected_track_as_side_effect (op); */
+
 		if (eff_mouse_mode != MouseRange) {
 			_mouse_changed_selection |= set_selected_control_point_from_click (press, op);
 		}
@@ -761,11 +763,21 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 			}
 			return true;
 
+		case GainLineItem:
+			_drags->set (new LineDrag (this, item), event);
+			return true;
+			break;
+
 		case ControlPointItem:
 			_drags->set (new ControlPointDrag (this, item), event);
 			return true;
 			break;
 
+		case AutomationLineItem:
+			_drags->set (new LineDrag (this, item), event);
+			return true;
+			break;
+
 		case StreamItem:
 			//in the past, we created a new midi region here, but perhaps that is best left to the Draw mode
 			break;
@@ -1216,10 +1228,10 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 			break;
 
 		case TempoMarkerItem: {
-			Marker* marker;
+			ArdourMarker* marker;
 			TempoMarker* tempo_marker;
 			
-			if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
+			if ((marker = reinterpret_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
 				fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
 				abort(); /*NOTREACHED*/
 			}
@@ -1234,10 +1246,10 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 		}
 
 		case MeterMarkerItem: {
-			Marker* marker;
+			ArdourMarker* marker;
 			MeterMarker* meter_marker;
 			
-			if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
+			if ((marker = reinterpret_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
 				fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
 				abort(); /*NOTREACHED*/
 			}
@@ -1564,7 +1576,7 @@ bool
 Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
 {
 	ControlPoint* cp;
-	Marker * marker;
+	ArdourMarker * marker;
 	double fraction;
         bool ret = true;
 
@@ -1617,7 +1629,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
 		break;
 
 	case MarkerItem:
-		if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) {
+		if ((marker = static_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
 			break;
 		}
 		entered_marker = marker;
@@ -1698,7 +1710,7 @@ bool
 Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
 {
 	AutomationLine* al;
-	Marker *marker;
+	ArdourMarker *marker;
 	Location *loc;
 	bool is_start;
 	bool ret = true;
@@ -1724,7 +1736,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
 		break;
 
 	case MarkerItem:
-		if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) {
+		if ((marker = static_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
 			break;
 		}
 		entered_marker = 0;
@@ -2121,10 +2133,10 @@ Editor::point_trim (GdkEvent* event, framepos_t new_bound)
 void
 Editor::hide_marker (ArdourCanvas::Item* item, GdkEvent* /*event*/)
 {
-	Marker* marker;
+	ArdourMarker* marker;
 	bool is_start;
 
-	if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) {
+	if ((marker = static_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -2200,7 +2212,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, framepos_t pos)
 
 	// playlist is frozen, so we have to update manually XXX this is disgusting
 
-	playlist->RegionAdded (new_region); /* EMIT SIGNAL */
+	//playlist->RegionAdded (new_region); /* EMIT SIGNAL */
 }
 
 gint
@@ -2262,8 +2274,6 @@ Editor::add_region_brush_drag (ArdourCanvas::Item* item, GdkEvent*, RegionView*
 	}
 
 	_drags->add (new RegionMoveDrag (this, item, region_view, selection->regions.by_layer(), true, false));
-
-	begin_reversible_command (Operations::drag_region_brush);
 }
 
 /** Start a grab where a time range is selected, track(s) are selected, and the
@@ -2303,7 +2313,6 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event)
 	/* A selection grab currently creates two undo/redo operations, one for
 	   creating the new region and another for moving it.
 	*/
-
 	begin_reversible_command (Operations::selection_grab);
 
 	boost::shared_ptr<Playlist> playlist = clicked_axisview->playlist();
@@ -2316,6 +2325,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event)
 
 	if (latest_regionviews.empty()) {
 		/* something went wrong */
+		abort_reversible_command ();
 		return;
 	}
 
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 2c44508..6b1960e 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -336,9 +336,9 @@ Editor::move_range_selection_start_or_end_to_region_boundary (bool move_end, boo
 		return;
 	}
 
-	begin_reversible_command (_("alter selection"));
+	begin_reversible_selection_op (_("alter selection"));
 	selection->set_preserving_all_ranges (start, end);
-	commit_reversible_command ();
+	commit_reversible_selection_op ();
 }
 
 bool
@@ -400,8 +400,7 @@ Editor::nudge_forward (bool next, bool force_playhead)
 	} else if (!force_playhead && !selection->markers.empty()) {
 
 		bool is_start;
-
-		begin_reversible_command (_("nudge location forward"));
+		bool in_command = false;
 
 		for (MarkerSelection::iterator i = selection->markers.begin(); i != selection->markers.end(); ++i) {
 
@@ -432,13 +431,18 @@ Editor::nudge_forward (bool next, bool force_playhead)
 						loc->set_end (max_framepos);
 					}
 				}
+				if (!in_command) {
+					begin_reversible_command (_("nudge location forward"));
+					in_command = true;
+				}
 				XMLNode& after (loc->get_state());
 				_session->add_command (new MementoCommand<Location>(*loc, &before, &after));
 			}
 		}
 
-		commit_reversible_command ();
-
+		if (in_command) {
+			commit_reversible_command ();
+		}
 	} else {
 		distance = get_nudge_distance (playhead_cursor->current_frame (), next_distance);
 		_session->request_locate (playhead_cursor->current_frame () + distance);
@@ -485,8 +489,7 @@ Editor::nudge_backward (bool next, bool force_playhead)
 	} else if (!force_playhead && !selection->markers.empty()) {
 
 		bool is_start;
-
-		begin_reversible_command (_("nudge location forward"));
+		bool in_command = false;
 
 		for (MarkerSelection::iterator i = selection->markers.begin(); i != selection->markers.end(); ++i) {
 
@@ -519,13 +522,17 @@ Editor::nudge_backward (bool next, bool force_playhead)
 						loc->set_end (loc->length());
 					}
 				}
-
+				if (!in_command) {
+					begin_reversible_command (_("nudge location forward"));
+					in_command = true;
+				}
 				XMLNode& after (loc->get_state());
 				_session->add_command (new MementoCommand<Location>(*loc, &before, &after));
 			}
 		}
-
-		commit_reversible_command ();
+		if (in_command) {
+			commit_reversible_command ();
+		}
 
 	} else {
 
@@ -615,7 +622,8 @@ Editor::sequence_regions ()
 
 	if (!rs.empty()) {
 
-		begin_reversible_command (_("sequence regions"));
+		bool in_command = false;
+
 		for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
 			boost::shared_ptr<Region> r ((*i)->region());
 
@@ -635,13 +643,20 @@ Editor::sequence_regions ()
 				r->set_position(r_end_prev);
 			}
 
+			if (!in_command) {
+				begin_reversible_command (_("sequence regions"));
+				in_command = true;
+			}
 			_session->add_command (new StatefulDiffCommand (r));
 
 			r_end=r->position() + r->length();
 
 			iCount++;
 		}
-		commit_reversible_command ();
+
+		if (in_command) {
+			commit_reversible_command ();
+		}
 	} 
 } 
 
@@ -2172,10 +2187,7 @@ void
 Editor::remove_location_at_playhead_cursor ()
 {
 	if (_session) {
-
 		//set up for undo
-		begin_reversible_command (_("remove marker"));
-		
 		XMLNode &before = _session->locations()->get_state();
 		bool removed = false;
 
@@ -2191,9 +2203,9 @@ Editor::remove_location_at_playhead_cursor ()
 		
 		//store undo
 		if (removed) {
+			begin_reversible_command (_("remove marker"));
 			XMLNode &after = _session->locations()->get_state();
 			_session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
-			
 			commit_reversible_command ();
 		}
 	}
@@ -2208,8 +2220,7 @@ Editor::add_locations_from_region ()
 	if (rs.empty()) {
 		return;
 	}
-
-	begin_reversible_command (selection->regions.size () > 1 ? _("add markers") : _("add marker"));
+	bool commit = false;
 	
 	XMLNode &before = _session->locations()->get_state();
 
@@ -2220,12 +2231,15 @@ Editor::add_locations_from_region ()
 		Location *location = new Location (*_session, region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
 
 		_session->locations()->add (location, true);
+		commit = true;
 	}
 
-	XMLNode &after = _session->locations()->get_state();
-	_session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
-	
-	commit_reversible_command ();
+	if (commit) {
+		begin_reversible_command (selection->regions.size () > 1 ? _("add markers") : _("add marker"));
+		XMLNode &after = _session->locations()->get_state();
+		_session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
+		commit_reversible_command ();
+	}
 }
 
 /** Add a single range marker around all selected regions */
@@ -2238,8 +2252,6 @@ Editor::add_location_from_region ()
 		return;
 	}
 
-	begin_reversible_command (_("add marker"));
-	
 	XMLNode &before = _session->locations()->get_state();
 
 	string markername;
@@ -2260,9 +2272,9 @@ Editor::add_location_from_region ()
 	Location *location = new Location (*_session, selection->regions.start(), selection->regions.end_frame(), markername, Location::IsRangeMarker);
 	_session->locations()->add (location, true);
 
+	begin_reversible_command (_("add marker"));
 	XMLNode &after = _session->locations()->get_state();
 	_session->add_command (new MementoCommand<Locations>(*(_session->locations()), &before, &after));
-	
 	commit_reversible_command ();
 }
 
@@ -3264,8 +3276,7 @@ Editor::crop_region_to (framepos_t start, framepos_t end)
 	framepos_t the_start;
 	framepos_t the_end;
 	framepos_t cnt;
-
-	begin_reversible_command (_("trim to selection"));
+	bool in_command = false;
 
 	for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
 
@@ -3290,12 +3301,18 @@ Editor::crop_region_to (framepos_t start, framepos_t end)
 		the_end = min (end, the_end);
 		cnt = the_end - the_start + 1;
 
+		if(!in_command) {
+			begin_reversible_command (_("trim to selection"));
+			in_command = true;
+		}
 		region->clear_changes ();
 		region->trim_to (the_start, cnt);
 		_session->add_command (new StatefulDiffCommand (region));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -3308,8 +3325,8 @@ Editor::region_fill_track ()
 	}
 
 	framepos_t const end = _session->current_end_frame ();
-
-	begin_reversible_command (Operations::region_fill);
+	RegionSelection foo;
+	bool in_command = false;
 
 	for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
 
@@ -3318,21 +3335,39 @@ Editor::region_fill_track ()
 		boost::shared_ptr<Playlist> pl = region->playlist();
 
 		if (end <= region->last_frame()) {
-			return;
+			continue;
 		}
 
 		double times = (double) (end - region->last_frame()) / (double) region->length();
 
 		if (times == 0) {
-			return;
+			continue;
+		}
+
+		if (!in_command) {
+			begin_reversible_command (Operations::region_fill);
+			in_command = true;
 		}
+		TimeAxisView& tv = (*i)->get_time_axis_view();
+		RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (&tv);
+		latest_regionviews.clear ();
+		sigc::connection c = rtv->view()->RegionViewAdded.connect (sigc::mem_fun(*this, &Editor::collect_new_region_view));
 
 		pl->clear_changes ();
 		pl->add_region (RegionFactory::create (region, true), region->last_frame(), times);
 		_session->add_command (new StatefulDiffCommand (pl));
+
+		c.disconnect ();
+
+		foo.insert (foo.end(), latest_regionviews.begin(), latest_regionviews.end());
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		if (!foo.empty()) {
+			selection->set (foo);
+		}
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -3362,10 +3397,10 @@ Editor::region_fill_selection ()
 
 	framepos_t selection_length = end - start;
 	float times = (float)selection_length / region->length();
-
-	begin_reversible_command (Operations::fill_selection);
+	bool in_command = false;
 
 	TrackViewList ts = selection->tracks.filter_to_unique_playlists ();
+	RegionSelection foo;
 
 	for (TrackViewList::iterator i = ts.begin(); i != ts.end(); ++i) {
 
@@ -3373,12 +3408,27 @@ Editor::region_fill_selection ()
 			continue;
 		}
 
+		if (!in_command) {
+			begin_reversible_command (Operations::fill_selection);
+			in_command = true;
+		}
+		RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
+		latest_regionviews.clear ();
+		sigc::connection c = rtv->view()->RegionViewAdded.connect (sigc::mem_fun(*this, &Editor::collect_new_region_view));
+
 		playlist->clear_changes ();
 		playlist->add_region (RegionFactory::create (region, true), start, times);
 		_session->add_command (new StatefulDiffCommand (playlist));
+		c.disconnect ();
+		foo.insert (foo.end(), latest_regionviews.begin(), latest_regionviews.end());
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		if (!foo.empty()) {
+			selection->set (foo);
+		}
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -3676,8 +3726,7 @@ void
 Editor::trim_region_to_location (const Location& loc, const char* str)
 {
 	RegionSelection rs = get_regions_from_selection_and_entered ();
-
-	begin_reversible_command (str);
+	bool in_command = false;
 
 	for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
 		RegionView* rv = (*x);
@@ -3708,10 +3757,17 @@ Editor::trim_region_to_location (const Location& loc, const char* str)
 
 		rv->region()->clear_changes ();
 		rv->region()->trim_to (start, (end - start));
+
+		if (!in_command) {
+			begin_reversible_command (str);
+			in_command = true;
+		}
 		_session->add_command(new StatefulDiffCommand (rv->region()));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -3730,8 +3786,7 @@ void
 Editor::trim_to_region(bool forward)
 {
 	RegionSelection rs = get_regions_from_selection_and_entered ();
-
-	begin_reversible_command (_("trim to region"));
+	bool in_command = false;
 
 	boost::shared_ptr<Region> next_region;
 
@@ -3746,7 +3801,7 @@ Editor::trim_to_region(bool forward)
 		AudioTimeAxisView* atav = dynamic_cast<AudioTimeAxisView*> (&arv->get_time_axis_view());
 
 		if (!atav) {
-			return;
+			continue;
 		}
 
 		float speed = 1.0;
@@ -3785,10 +3840,16 @@ Editor::trim_to_region(bool forward)
 		    arv->region_changed (ARDOUR::bounds_change);
 		}
 
+		if (!in_command) {
+			begin_reversible_command (_("trim to region"));
+			in_command = true;
+		}
 		_session->add_command(new StatefulDiffCommand (region));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -3913,8 +3974,7 @@ Editor::bounce_range_selection (bool replace, bool enable_processing)
 	framepos_t start = selection->time[clicked_selection].start;
 	framepos_t end = selection->time[clicked_selection].end;
 	framepos_t cnt = end - start + 1;
-
-	begin_reversible_command (_("bounce range"));
+	bool in_command = false;
 
 	for (TrackViewList::iterator i = views.begin(); i != views.end(); ++i) {
 
@@ -3927,7 +3987,7 @@ Editor::bounce_range_selection (bool replace, bool enable_processing)
 		boost::shared_ptr<Playlist> playlist;
 
 		if ((playlist = rtv->playlist()) == 0) {
-			return;
+			continue;
 		}
 
 		InterThreadInfo itt;
@@ -3954,6 +4014,10 @@ Editor::bounce_range_selection (bool replace, bool enable_processing)
 			playlist->add_region (r, start);
 		}
 
+		if (!in_command) {
+			begin_reversible_command (_("bounce range"));
+			in_command = true;
+		}
 		vector<Command*> cmds;
 		playlist->rdiff (cmds);
 		_session->add_commands (cmds);
@@ -3961,7 +4025,9 @@ Editor::bounce_range_selection (bool replace, bool enable_processing)
 		_session->add_command (new StatefulDiffCommand (playlist));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 /** Delete selected regions, automation points or a time range */
@@ -4315,8 +4381,6 @@ Editor::remove_selected_regions ()
 		return;
 	}
 
-	begin_reversible_command (_("remove region"));
-
 	list<boost::shared_ptr<Region> > regions_to_remove;
 
 	for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
@@ -4360,6 +4424,7 @@ Editor::remove_selected_regions ()
 	}
 
 	vector<boost::shared_ptr<Playlist> >::iterator pl;
+	bool in_command = false;
 
 	for (pl = playlists.begin(); pl != playlists.end(); ++pl) {
 		(*pl)->thaw ();
@@ -4367,6 +4432,11 @@ Editor::remove_selected_regions ()
 		/* We might have removed regions, which alters other regions' layering_index,
 		   so we need to do a recursive diff here.
 		*/
+
+		if (!in_command) {
+			begin_reversible_command (_("remove region"));
+			in_command = true;
+		}
 		vector<Command*> cmds;
 		(*pl)->rdiff (cmds);
 		_session->add_commands (cmds);
@@ -4374,7 +4444,9 @@ Editor::remove_selected_regions ()
 		_session->add_command(new StatefulDiffCommand (*pl));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 /** Cut, copy or clear selected regions.
@@ -4710,6 +4782,10 @@ Editor::paste_internal (framepos_t position, float times)
 void
 Editor::duplicate_some_regions (RegionSelection& regions, float times)
 {
+	if (regions.empty ()) {
+		return;
+	}
+
 	boost::shared_ptr<Playlist> playlist;
 	RegionSelection sel = regions; // clear (below) may  clear the argument list if its the current region selection
 	RegionSelection foo;
@@ -4764,11 +4840,10 @@ Editor::duplicate_selection (float times)
 		return;
 	}
 
-	begin_reversible_command (_("duplicate selection"));
-
 	ri = new_regions.begin();
 
 	TrackViewList ts = selection->tracks.filter_to_unique_playlists ();
+	bool in_command = false;
 
 	for (TrackViewList::iterator i = ts.begin(); i != ts.end(); ++i) {
 		if ((playlist = (*i)->playlist()) == 0) {
@@ -4782,6 +4857,11 @@ Editor::duplicate_selection (float times)
 			end = selection->time.end_frame();
 		}
 		playlist->duplicate (*ri, end, times);
+
+		if (!in_command) {
+			begin_reversible_command (_("duplicate selection"));
+			in_command = true;
+		}
 		_session->add_command (new StatefulDiffCommand (playlist));
 
 		++ri;
@@ -4790,7 +4870,9 @@ Editor::duplicate_selection (float times)
 		}
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 /** Reset all selected points to the relevant default value */
@@ -4848,9 +4930,8 @@ Editor::nudge_track (bool use_edit, bool forwards)
 		return;
 	}
 
-	begin_reversible_command (_("nudge track"));
-
 	TrackViewList ts = selection->tracks.filter_to_unique_playlists ();
+	bool in_command = false;
 
 	for (TrackViewList::iterator i = ts.begin(); i != ts.end(); ++i) {
 
@@ -4863,6 +4944,10 @@ Editor::nudge_track (bool use_edit, bool forwards)
 
 		playlist->nudge_after (start, distance, forwards);
 
+		if (!in_command) {
+			begin_reversible_command (_("nudge track"));
+			in_command = true;
+		}
 		vector<Command*> cmds;
 
 		playlist->rdiff (cmds);
@@ -4871,7 +4956,9 @@ Editor::nudge_track (bool use_edit, bool forwards)
 		_session->add_command (new StatefulDiffCommand (playlist));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -4951,9 +5038,8 @@ Editor::normalize_region ()
 		}
 	}
 
-	begin_reversible_command (_("normalize"));
-
 	list<double>::const_iterator a = max_amps.begin ();
+	bool in_command = false;
 
 	for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) {
 		AudioRegionView* const arv = dynamic_cast<AudioRegionView*> (*r);
@@ -4966,12 +5052,19 @@ Editor::normalize_region ()
 		double const amp = dialog.normalize_individually() ? *a : max_amp;
 
 		arv->audio_region()->normalize (amp, dialog.target ());
+
+		if (!in_command) {
+			begin_reversible_command (_("normalize"));
+			in_command = true;
+		}
 		_session->add_command (new StatefulDiffCommand (arv->region()));
 
 		++a;
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 
@@ -4988,7 +5081,7 @@ Editor::reset_region_scale_amplitude ()
 		return;
 	}
 
-	begin_reversible_command ("reset gain");
+	bool in_command = false;
 
 	for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) {
 		AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r);
@@ -4996,10 +5089,17 @@ Editor::reset_region_scale_amplitude ()
 			continue;
 		arv->region()->clear_changes ();
 		arv->audio_region()->set_scale_amplitude (1.0f);
+
+		if(!in_command) {
+				begin_reversible_command ("reset gain");
+				in_command = true;
+		}
 		_session->add_command (new StatefulDiffCommand (arv->region()));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5011,7 +5111,7 @@ Editor::adjust_region_gain (bool up)
 		return;
 	}
 
-	begin_reversible_command ("adjust region gain");
+	bool in_command = false;
 
 	for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) {
 		AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r);
@@ -5030,10 +5130,17 @@ Editor::adjust_region_gain (bool up)
 		}
 
 		arv->audio_region()->set_scale_amplitude (dB_to_coefficient (dB));
+
+		if (!in_command) {
+				begin_reversible_command ("adjust region gain");
+				in_command = true;
+		}
 		_session->add_command (new StatefulDiffCommand (arv->region()));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 
@@ -5105,7 +5212,7 @@ Editor::apply_midi_note_edit_op (MidiOperator& op, const RegionSelection& rs)
 		return;
 	}
 
-	begin_reversible_command (op.name ());
+	bool in_command = false;
 
 	for (RegionSelection::const_iterator r = rs.begin(); r != rs.end(); ) {
 		RegionSelection::const_iterator tmp = r;
@@ -5116,6 +5223,10 @@ Editor::apply_midi_note_edit_op (MidiOperator& op, const RegionSelection& rs)
 		if (mrv) {
 			Command* cmd = apply_midi_note_edit_op_to_region (op, *mrv);
 			if (cmd) {
+				if (!in_command) {
+					begin_reversible_command (op.name ());
+					in_command = true;
+				}
 				(*cmd)();
 				_session->add_command (cmd);
 			}
@@ -5124,7 +5235,9 @@ Editor::apply_midi_note_edit_op (MidiOperator& op, const RegionSelection& rs)
 		r = tmp;
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5136,9 +5249,9 @@ Editor::fork_region ()
 		return;
 	}
 
-	begin_reversible_command (_("Fork Region(s)"));
-
 	CursorContext::Handle cursor_ctx = CursorContext::create(*this, _cursors->wait);
+	bool in_command = false;
+
 	gdk_flush ();
 
 	for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) {
@@ -5152,7 +5265,11 @@ Editor::fork_region ()
 				boost::shared_ptr<Playlist> playlist = mrv->region()->playlist();
 				boost::shared_ptr<MidiSource> new_source = _session->create_midi_source_by_stealing_name (mrv->midi_view()->track());
 				boost::shared_ptr<MidiRegion> newregion = mrv->midi_region()->clone (new_source);
-				
+
+				if (!in_command) {
+					begin_reversible_command (_("Fork Region(s)"));
+					in_command = true;
+				}
 				playlist->clear_changes ();
 				playlist->replace_region (mrv->region(), newregion, mrv->region()->position());
 				_session->add_command(new StatefulDiffCommand (playlist));
@@ -5164,7 +5281,9 @@ Editor::fork_region ()
 		r = tmp;
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5182,16 +5301,22 @@ Editor::quantize_regions (const RegionSelection& rs)
 		return;
 	}
 
-	QuantizeDialog* qd = new QuantizeDialog (*this);
+	if (!quantize_dialog) {
+		quantize_dialog = new QuantizeDialog (*this);
+	}
 
-	qd->present ();
-	const int r = qd->run ();
-	qd->hide ();
+	quantize_dialog->present ();
+	const int r = quantize_dialog->run ();
+	quantize_dialog->hide ();
 
 	if (r == Gtk::RESPONSE_OK) {
-		Quantize quant (qd->snap_start(), qd->snap_end(),
-				qd->start_grid_size(), qd->end_grid_size(),
-				qd->strength(), qd->swing(), qd->threshold());
+		Quantize quant (quantize_dialog->snap_start(),
+		                quantize_dialog->snap_end(),
+				quantize_dialog->start_grid_size(),
+		                quantize_dialog->end_grid_size(),
+				quantize_dialog->strength(),
+		                quantize_dialog->swing(),
+		                quantize_dialog->threshold());
 
 		apply_midi_note_edit_op (quant, rs);
 	}
@@ -5286,9 +5411,9 @@ Editor::apply_filter (Filter& filter, string command, ProgressReporter* progress
 		return;
 	}
 
-	begin_reversible_command (command);
-
 	CursorContext::Handle cursor_ctx = CursorContext::create(*this, _cursors->wait);
+	bool in_command = false;
+
 	gdk_flush ();
 
 	int n = 0;
@@ -5331,17 +5456,22 @@ Editor::apply_filter (Filter& filter, string command, ProgressReporter* progress
 					}
 
 				}
-
 				/* We might have removed regions, which alters other regions' layering_index,
 				   so we need to do a recursive diff here.
 				*/
+
+				if (!in_command) {
+					begin_reversible_command (command);
+					in_command = true;
+				}
 				vector<Command*> cmds;
 				playlist->rdiff (cmds);
 				_session->add_commands (cmds);
 				
 				_session->add_command(new StatefulDiffCommand (playlist));
+
 			} else {
-				return;
+				continue;
 			}
 
 			if (progress) {
@@ -5353,7 +5483,9 @@ Editor::apply_filter (Filter& filter, string command, ProgressReporter* progress
 		++n;
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5371,7 +5503,7 @@ Editor::reset_region_gain_envelopes ()
 		return;
 	}
 
-	begin_reversible_command (_("reset region gain"));
+	bool in_command = false;
 	
 	for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
 		AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
@@ -5380,11 +5512,18 @@ Editor::reset_region_gain_envelopes ()
 			XMLNode& before (alist->get_state());
 
 			arv->audio_region()->set_default_envelope ();
+
+			if (!in_command) {
+				begin_reversible_command (_("reset region gain"));
+				in_command = true;
+			}
 			_session->add_command (new MementoCommand<AutomationList>(*arv->audio_region()->envelope().get(), &before, &alist->get_state()));
 		}
 	}
-	
-	commit_reversible_command ();
+
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5424,18 +5563,25 @@ Editor::toggle_gain_envelope_active ()
 		return;
 	}
 
-	begin_reversible_command (_("region gain envelope active"));
-	
+	bool in_command = false;
+
 	for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
 		AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
 		if (arv) {
 			arv->region()->clear_changes ();
 			arv->audio_region()->set_envelope_active (!arv->audio_region()->envelope_active());
+
+			if (!in_command) {
+				begin_reversible_command (_("region gain envelope active"));
+				in_command = true;
+			}
 			_session->add_command (new StatefulDiffCommand (arv->region()));
 		}
 	}
-	
-	commit_reversible_command ();
+
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5665,13 +5811,13 @@ Editor::set_fade_length (bool in)
 		cmd = _("set fade out length");
 	}
 
-	begin_reversible_command (cmd);
+	bool in_command = false;
 
 	for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
 		AudioRegionView* tmp = dynamic_cast<AudioRegionView*> (*x);
 
 		if (!tmp) {
-			return;
+			continue;
 		}
 
 		boost::shared_ptr<AutomationList> alist;
@@ -5691,11 +5837,17 @@ Editor::set_fade_length (bool in)
 			tmp->audio_region()->set_fade_out_active (true);
 		}
 
+		if (!in_command) {
+			begin_reversible_command (cmd);
+			in_command = true;
+		}
 		XMLNode &after = alist->get_state();
 		_session->add_command(new MementoCommand<AutomationList>(*alist, &before, &after));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5706,14 +5858,13 @@ Editor::set_fade_in_shape (FadeShape shape)
 	if (rs.empty()) {
 		return;
 	}
-
-	begin_reversible_command (_("set fade in shape"));
+	bool in_command = false;
 
 	for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
 		AudioRegionView* tmp = dynamic_cast<AudioRegionView*> (*x);
 
 		if (!tmp) {
-			return;
+			continue;
 		}
 
 		boost::shared_ptr<AutomationList> alist = tmp->audio_region()->fade_in();
@@ -5721,12 +5872,17 @@ Editor::set_fade_in_shape (FadeShape shape)
 
 		tmp->audio_region()->set_fade_in_shape (shape);
 
+		if (!in_command) {
+			begin_reversible_command (_("set fade in shape"));
+			in_command = true;
+		}
 		XMLNode &after = alist->get_state();
 		_session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
 	}
 
-	commit_reversible_command ();
-
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5737,14 +5893,13 @@ Editor::set_fade_out_shape (FadeShape shape)
 	if (rs.empty()) {
 		return;
 	}
-
-	begin_reversible_command (_("set fade out shape"));
+	bool in_command = false;
 
 	for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
 		AudioRegionView* tmp = dynamic_cast<AudioRegionView*> (*x);
 
 		if (!tmp) {
-			return;
+			continue;
 		}
 
 		boost::shared_ptr<AutomationList> alist = tmp->audio_region()->fade_out();
@@ -5752,11 +5907,17 @@ Editor::set_fade_out_shape (FadeShape shape)
 
 		tmp->audio_region()->set_fade_out_shape (shape);
 
+		if(!in_command) {
+			begin_reversible_command (_("set fade out shape"));
+			in_command = true;
+		}
 		XMLNode &after = alist->get_state();
 		_session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &after));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5767,14 +5928,13 @@ Editor::set_fade_in_active (bool yn)
 	if (rs.empty()) {
 		return;
 	}
-
-	begin_reversible_command (_("set fade in active"));
+	bool in_command = false;
 
 	for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
 		AudioRegionView* tmp = dynamic_cast<AudioRegionView*> (*x);
 
 		if (!tmp) {
-			return;
+			continue;
 		}
 
 
@@ -5782,10 +5942,17 @@ Editor::set_fade_in_active (bool yn)
 
 		ar->clear_changes ();
 		ar->set_fade_in_active (yn);
+
+		if (!in_command) {
+			begin_reversible_command (_("set fade in active"));
+			in_command = true;
+		}
 		_session->add_command (new StatefulDiffCommand (ar));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5796,24 +5963,30 @@ Editor::set_fade_out_active (bool yn)
 	if (rs.empty()) {
 		return;
 	}
-
-	begin_reversible_command (_("set fade out active"));
+	bool in_command = false;
 
 	for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
 		AudioRegionView* tmp = dynamic_cast<AudioRegionView*> (*x);
 
 		if (!tmp) {
-			return;
+			continue;
 		}
 
 		boost::shared_ptr<AudioRegion> ar (tmp->audio_region());
 
 		ar->clear_changes ();
 		ar->set_fade_out_active (yn);
+
+		if (!in_command) {
+			begin_reversible_command (_("set fade out active"));
+			in_command = true;
+		}
 		_session->add_command(new StatefulDiffCommand (ar));
 	}
 
-	commit_reversible_command ();
+	if (in_command) {
+		commit_reversible_command ();
+	}
 }
 
 void
@@ -5849,11 +6022,14 @@ Editor::toggle_region_fades (int dir)
 	}
 
 	/* XXX should this undo-able? */
+	bool in_command = false;
 
 	for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
 		if ((ar = boost::dynamic_pointer_cast<AudioRegion>((*i)->region())) == 0) {
 			continue;
 		}
+		ar->clear_changes ();
+
 		if (dir == 1 || dir == 0) {
 			ar->set_fade_in_active (!yn);
 		}
@@ -5861,6 +6037,15 @@ Editor::toggle_region_fades (int dir)
 		if (dir == -1 || dir == 0) {
 			ar->set_fade_out_active (!yn);
 		}
+		if (!in_command) {
+			begin_reversible_command (_("toggle fade active"));
+			in_command = true;
+		}
+		_session->add_command(new StatefulDiffCommand (ar));
+	}
+
+	if (in_command) {
+		commit_reversible_command ();
 	}
 }
 
@@ -6958,13 +7143,11 @@ Editor::insert_time (
 	bool all_playlists, bool ignore_music_glue, bool markers_too, bool glued_markers_too, bool locked_markers_too, bool tempo_too
 	)
 {
-	bool commit = false;
 
 	if (Config->get_edit_mode() == Lock) {
 		return;
 	}
-
-	begin_reversible_command (_("insert time"));
+	bool in_command = false;
 
 	TrackViewList ts = selection->tracks.filter_to_unique_playlists ();
 
@@ -7004,19 +7187,25 @@ Editor::insert_time (
 
 			(*i)->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue);
 
+			if (!in_command) {
+				begin_reversible_command (_("insert time"));
+				in_command = true;
+			}
 			vector<Command*> cmds;
 			(*i)->rdiff (cmds);
 			_session->add_commands (cmds);
 
 			_session->add_command (new StatefulDiffCommand (*i));
-			commit = true;
 		}
 
 		/* automation */
 		RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*x);
 		if (rtav) {
+			if (!in_command) {
+				begin_reversible_command (_("insert time"));
+				in_command = true;
+			}
 			rtav->route ()->shift (pos, frames);
-			commit = true;
 		}
 	}
 
@@ -7052,16 +7241,27 @@ Editor::insert_time (
 		}
 
 		if (moved) {
+			if (!in_command) {
+				begin_reversible_command (_("insert time"));
+				in_command = true;
+			}
 			XMLNode& after (_session->locations()->get_state());
 			_session->add_command (new MementoCommand<Locations>(*_session->locations(), &before, &after));
 		}
 	}
 
 	if (tempo_too) {
+		if (!in_command) {
+			begin_reversible_command (_("insert time"));
+			in_command = true;
+		}
+		XMLNode& before (_session->tempo_map().get_state());
 		_session->tempo_map().insert_time (pos, frames);
+		XMLNode& after (_session->tempo_map().get_state());
+		_session->add_command (new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after));
 	}
 
-	if (commit) {
+	if (in_command) {
 		commit_reversible_command ();
 	}
 }
@@ -7104,14 +7304,11 @@ void
 Editor::remove_time (framepos_t pos, framecnt_t frames, InsertTimeOption opt, 
 		     bool ignore_music_glue, bool markers_too, bool glued_markers_too, bool locked_markers_too, bool tempo_too)
 {
-	bool commit = false;
-	
 	if (Config->get_edit_mode() == Lock) {
 		error << (_("Cannot insert or delete time when in Lock edit.")) << endmsg;
 		return;
 	}
-
-	begin_reversible_command (_("cut time"));
+	bool in_command = false;
 
 	for (TrackSelection::iterator x = selection->tracks.begin(); x != selection->tracks.end(); ++x) {
 		/* regions */
@@ -7127,17 +7324,23 @@ Editor::remove_time (framepos_t pos, framecnt_t frames, InsertTimeOption opt,
 			pl->cut (rl);
 			pl->shift (pos, -frames, true, ignore_music_glue);
 			
+			if (!in_command) {
+				begin_reversible_command (_("cut time"));
+				in_command = true;
+			}
 			XMLNode &after = pl->get_state();
 			
 			_session->add_command (new MementoCommand<Playlist> (*pl, &before, &after));
-			commit = true;
 		}
 			
 		/* automation */
 		RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*x);
 		if (rtav) {
+			if (!in_command) {
+				begin_reversible_command (_("cut time"));
+				in_command = true;
+			}
 			rtav->route ()->shift (pos, -frames);
-			commit = true;
 		}
 	}
 
@@ -7206,23 +7409,29 @@ Editor::remove_time (framepos_t pos, framecnt_t frames, InsertTimeOption opt,
 		}
 	
 		if (moved) {
+			if (!in_command) {
+				begin_reversible_command (_("cut time"));
+				in_command = true;
+			}
 			XMLNode& after (_session->locations()->get_state());
 			_session->add_command (new MementoCommand<Locations>(*_session->locations(), &before, &after));
-			commit = true;
 		}
 	}
 	
 	if (tempo_too) {
 		XMLNode& before (_session->tempo_map().get_state());
 
-		if (_session->tempo_map().cut_time (pos, frames) ) {
+		if (_session->tempo_map().remove_time (pos, frames) ) {
+			if (!in_command) {
+				begin_reversible_command (_("remove time"));
+				in_command = true;
+			}
 			XMLNode& after (_session->tempo_map().get_state());
 			_session->add_command (new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after));
-			commit = true;
 		}
 	}
 	
-	if (commit) {
+	if (in_command) {
 		commit_reversible_command ();
 	}
 }
@@ -7541,15 +7750,10 @@ Editor::lock ()
 		lock_dialog->get_vbox()->show_all ();
 		lock_dialog->set_size_request (200, 200);
 	}
+
+	delete _main_menu_disabler;
+	_main_menu_disabler = new MainMenuDisabler;
 	
-#ifdef __APPLE__
-	/* The global menu bar continues to be accessible to applications
-	   with modal dialogs, which means that we need to desensitize
-	   all items in the menu bar. Since those items are really just
-	   proxies for actions, that means disabling all actions.
-	*/
-	ActionManager::disable_all_actions ();
-#endif
 	lock_dialog->present ();
 }
 
@@ -7558,9 +7762,7 @@ Editor::unlock ()
 {
 	lock_dialog->hide ();
 	
-#ifdef __APPLE__
-	ActionManager::pop_action_state ();
-#endif	
+	delete _main_menu_disabler;
 
 	if (ARDOUR_UI::config()->get_lock_gui_after_seconds()) {
 		start_lock_event_timing ();
diff --git a/gtk2_ardour/editor_pt_import.cc b/gtk2_ardour/editor_pt_import.cc
new file mode 100644
index 0000000..15723c3
--- /dev/null
+++ b/gtk2_ardour/editor_pt_import.cc
@@ -0,0 +1,260 @@
+/*
+    Copyright (C) 2000-2006 Paul Davis
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <errno.h>
+#include <unistd.h>
+#include <algorithm>
+
+#include "pbd/pthread_utils.h"
+#include "pbd/basename.h"
+#include "pbd/shortpath.h"
+#include "pbd/stateful_diff_command.h"
+
+#include <gtkmm2ext/choice.h>
+
+#include "ardour/audio_track.h"
+#include "ardour/audiofilesource.h"
+#include "ardour/audioregion.h"
+#include "ardour/midi_region.h"
+#include "ardour/midi_track.h"
+#include "ardour/operations.h"
+#include "ardour/region_factory.h"
+#include "ardour/smf_source.h"
+#include "ardour/source_factory.h"
+#include "ardour/utils.h"
+#include "ardour/playlist.h"
+#include "ardour/session.h"
+#include "pbd/memento_command.h"
+
+#include "ptformat/ptfformat.h"
+
+#include "ardour_ui.h"
+#include "cursor_context.h"
+#include "editor.h"
+#include "sfdb_ui.h"
+#include "editing.h"
+#include "audio_time_axis.h"
+#include "midi_time_axis.h"
+#include "session_import_dialog.h"
+#include "gui_thread.h"
+#include "interthread_progress_window.h"
+#include "mouse_cursors.h"
+#include "editor_cursors.h"
+
+#include "i18n.h"
+
+using namespace std;
+using namespace ARDOUR;
+using namespace PBD;
+using namespace Gtk;
+using namespace Gtkmm2ext;
+using namespace Editing;
+using std::string;
+
+/* Functions supporting the incorporation of PT sessions into ardour */
+
+void
+Editor::external_pt_dialog ()
+{
+	std::string ptpath;
+
+	if (_session == 0) {
+		MessageDialog msg (_("You can't import a PT session until you have a session loaded."));
+		msg.run ();
+		return;
+	}
+
+	Gtk::FileChooserDialog dialog(_("Import PT Session"), FILE_CHOOSER_ACTION_OPEN);
+	dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+	dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
+
+	while (true) {
+		int result = dialog.run();
+
+		if (result == Gtk::RESPONSE_OK) {
+			ptpath = dialog.get_filename ();
+
+			if (!Glib::file_test (ptpath, Glib::FILE_TEST_IS_DIR|Glib::FILE_TEST_EXISTS)) {
+				Gtk::MessageDialog msg (string_compose (_("%1: this is only the directory/folder name, not the filename.\n"), ptpath));
+				msg.run ();
+				continue;
+			}
+		}
+
+		if (ptpath.length()) {
+			do_ptimport(ptpath, SrcBest);
+			break;
+		}
+
+		if (result == Gtk::RESPONSE_CANCEL) {
+			break;
+		}
+	}
+}
+
+void
+Editor::do_ptimport (std::string ptpath,
+                      SrcQuality  quality)
+{
+	vector<boost::shared_ptr<Region> > regions;
+	boost::shared_ptr<ARDOUR::Track> track;
+	ARDOUR::PluginInfoPtr instrument;
+	vector<string> to_import;
+	string fullpath;
+	bool ok = false;
+	PTFFormat ptf;
+	framepos_t pos = -1;
+
+	vector<ptflookup_t> ptfwavpair;
+	vector<ptflookup_t> ptfregpair;
+
+	if (ptf.load(ptpath, _session->frame_rate()) == -1) {
+		MessageDialog msg (_("Doesn't seem to be a valid PT session file"));
+		msg.run ();
+		return;
+	} else {
+		MessageDialog msg (string_compose (_("PT v%1 Session @ %2Hz\n\n%3 audio files\n%4 regions\n%5 active regions\n\nContinue..."), (int)ptf.version, ptf.sessionrate, ptf.audiofiles.size(), ptf.regions.size(), ptf.tracks.size()));
+		msg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+
+		int result = msg.run ();
+		if (result != Gtk::RESPONSE_OK) {
+			return;
+		}
+	}
+	current_interthread_info = &import_status;
+	import_status.current = 1;
+	import_status.total = ptf.audiofiles.size ();
+	import_status.all_done = false;
+
+	ImportProgressWindow ipw (&import_status, _("Import"), _("Cancel Import"));
+
+	SourceList just_one;
+	SourceList imported;
+
+	for (vector<PTFFormat::wav_t>::iterator a = ptf.audiofiles.begin(); a != ptf.audiofiles.end(); ++a) {
+		ptflookup_t p;
+
+		fullpath = Glib::build_filename (Glib::path_get_dirname(ptpath), "Audio Files");
+		fullpath = Glib::build_filename (fullpath, a->filename);
+		to_import.clear ();
+		to_import.push_back (fullpath);
+		ipw.show ();
+		ok = import_sndfiles (to_import, Editing::ImportDistinctFiles, Editing::ImportAsRegion, quality, pos, 1, -1, track, false, instrument);
+		if (!import_status.sources.empty()) {
+			p.index1 = a->index;
+			p.id = import_status.sources.back()->id();
+
+			ptfwavpair.push_back(p);
+			imported.push_back(import_status.sources.back());
+		}
+	}
+
+	for (vector<PTFFormat::region_t>::iterator a = ptf.regions.begin();
+			a != ptf.regions.end(); ++a) {
+		for (vector<ptflookup_t>::iterator p = ptfwavpair.begin();
+				p != ptfwavpair.end(); ++p) {
+			if (p->index1 == a->wave.index) {
+				for (SourceList::iterator x = imported.begin();
+						x != imported.end(); ++x) {
+					if ((*x)->id() == p->id) {
+						// Matched an uncreated ptf region to ardour region
+						ptflookup_t rp;
+						PropertyList plist;
+
+						plist.add (ARDOUR::Properties::start, a->sampleoffset);
+						plist.add (ARDOUR::Properties::position, 0);
+						plist.add (ARDOUR::Properties::length, a->length);
+						plist.add (ARDOUR::Properties::name, a->name);
+						plist.add (ARDOUR::Properties::layer, 0);
+						plist.add (ARDOUR::Properties::whole_file, false);
+						plist.add (ARDOUR::Properties::external, true);
+
+						just_one.clear();
+						just_one.push_back(*x);
+
+						boost::shared_ptr<Region> r = RegionFactory::create (just_one, plist);
+						regions.push_back(r);
+
+						rp.id = regions.back()->id();
+						rp.index1 = a->index;
+						ptfregpair.push_back(rp);
+					}
+				}
+			}
+		}
+	}
+
+	boost::shared_ptr<AudioTrack> existing_track;
+	uint16_t nth = 0;
+	vector<ptflookup_t> usedtracks;
+	ptflookup_t utr;
+
+	for (vector<PTFFormat::track_t>::iterator a = ptf.tracks.begin();
+			a != ptf.tracks.end(); ++a) {
+		for (vector<ptflookup_t>::iterator p = ptfregpair.begin();
+				p != ptfregpair.end(); ++p) {
+
+			if (p->index1 == a->reg.index)  {
+				// Matched a ptf active region to an ardour region
+				utr.index1 = a->index;
+				utr.index2 = nth;
+				utr.id = p->id;
+				boost::shared_ptr<Region> r = RegionFactory::region_by_id (p->id);
+				vector<ptflookup_t>::iterator lookuptr = usedtracks.begin();
+				vector<ptflookup_t>::iterator found;
+				if ((found = std::find(lookuptr, usedtracks.end(), utr)) != usedtracks.end()) {
+					DEBUG_TRACE (DEBUG::FileUtils, string_compose ("\twav(%1) reg(%2) ptf_tr(%3) ard_tr(%4)\n", a->reg.wave.filename.c_str(), a->reg.index, found->index1, found->index2));
+					existing_track =  get_nth_selected_audio_track(found->index2);
+					// Put on existing track
+					boost::shared_ptr<Playlist> playlist = existing_track->playlist();
+					boost::shared_ptr<Region> copy (RegionFactory::create (r, true));
+					playlist->clear_changes ();
+					playlist->add_region (copy, a->reg.startpos);
+					//_session->add_command (new StatefulDiffCommand (playlist));
+				} else {
+					// Put on a new track
+					DEBUG_TRACE (DEBUG::FileUtils, string_compose ("\twav(%1) reg(%2) new_tr(%3)\n", a->reg.wave.filename.c_str(), a->reg.index, nth));
+					list<boost::shared_ptr<AudioTrack> > at (_session->new_audio_track (1, 2, Normal, 0, 1));
+					if (at.empty()) {
+						return;
+					}
+					existing_track = at.back();
+					existing_track->set_name (a->name);
+					boost::shared_ptr<Playlist> playlist = existing_track->playlist();
+					boost::shared_ptr<Region> copy (RegionFactory::create (r, true));
+					playlist->clear_changes ();
+					playlist->add_region (copy, a->reg.startpos);
+					//_session->add_command (new StatefulDiffCommand (playlist));
+					nth++;
+				}
+				usedtracks.push_back(utr);
+			}
+		}
+	}
+
+	import_status.sources.clear();
+
+	if (ok) {
+		_session->save_state ("");
+	}
+	import_status.all_done = true;
+}
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index b071ed6..4479431 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -30,6 +30,7 @@
 
 #include "control_protocol/control_protocol.h"
 
+#include "editor_drag.h"
 #include "editor.h"
 #include "actions.h"
 #include "audio_time_axis.h"
@@ -325,19 +326,23 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation
 	if (!clicked_control_point) {
 		return false;
 	}
+	bool ret = false;
 
 	switch (op) {
 	case Selection::Set:
 		if (press) {
 			selection->set (clicked_control_point);
+			ret = true;
 		}
 		break;
 	case Selection::Add:
 		if (press) {
 			selection->add (clicked_control_point);
+			ret = true;
 		}
 		break;
 	case Selection::Toggle:
+
 		/* This is a bit of a hack; if we Primary-Click-Drag a control
 		   point (for push drag) we want the point we clicked on to be
 		   selected, otherwise we end up confusingly dragging an
@@ -352,9 +357,11 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation
 			*/
 			selection->toggle (clicked_control_point);
 			_control_point_toggled_on_press = true;
+			ret = true;
 		} else if (!press && !_control_point_toggled_on_press) {
 			/* This is the release, and the point wasn't toggled on the press, so do it now */
 			selection->toggle (clicked_control_point);
+			ret = true;
 		} else {
 			/* Reset our flag */
 			_control_point_toggled_on_press = false;
@@ -365,7 +372,7 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation
 		break;
 	}
 
-	return true;
+	return ret;
 }
 
 void
@@ -652,9 +659,12 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
 				if (press)
 					goto out;
 				else {
-					get_equivalent_regions(clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id);
-					selection->set(all_equivalent_regions);
-					commit = true;
+					if (selection->regions.size() > 1) {
+						/* collapse region selection down to just this one region (and its equivalents) */
+						get_equivalent_regions(clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id);
+						selection->set(all_equivalent_regions);
+						commit = true;
+					}
 				}
 			}
 			break;
@@ -1027,6 +1037,19 @@ Editor::time_selection_changed ()
 	} else {
 		ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, true);
 	}
+
+	/* propagate into backend, but only when there is no drag or we are at
+	 * the end of a drag, otherwise this is too expensive (could case a
+	 * locate per mouse motion event.
+	 */
+
+	if (_session && !_drags->active()) {
+		if (selection->time.length() != 0) {
+			_session->set_range_selection (selection->time.start(), selection->time.end_frame());
+		} else {
+			_session->clear_range_selection ();
+		}
+	}
 }
 
 /** Set all region actions to have a given sensitivity */
@@ -1337,6 +1360,17 @@ Editor::region_selection_changed ()
 	if (_session && !_session->transport_rolling() && !selection->regions.empty()) {
 		maybe_locate_with_edit_preroll (selection->regions.start());
 	}
+
+	/* propagate into backend */
+
+	if (_session) {
+		if (!selection->regions.empty()) {
+			_session->set_object_selection (selection->regions.start(), selection->regions.end_frame());
+		} else {
+			_session->clear_object_selection ();
+		}
+	}
+
 }
 
 void
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc
index 4c2b40f..dea576a 100644
--- a/gtk2_ardour/editor_tempodisplay.cc
+++ b/gtk2_ardour/editor_tempodisplay.cc
@@ -263,10 +263,10 @@ Editor::mouse_add_new_meter_event (framepos_t frame)
 void
 Editor::remove_tempo_marker (ArdourCanvas::Item* item)
 {
-	Marker* marker;
+	ArdourMarker* marker;
 	TempoMarker* tempo_marker;
 
-	if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
@@ -363,10 +363,10 @@ Editor::real_remove_tempo_marker (TempoSection *section)
 void
 Editor::remove_meter_marker (ArdourCanvas::Item* item)
 {
-	Marker* marker;
+	ArdourMarker* marker;
 	MeterMarker* meter_marker;
 
-	if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) {
+	if ((marker = reinterpret_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
 		fatal << _("programming error: meter marker canvas item has no marker object pointer!") << endmsg;
 		abort(); /*NOTREACHED*/
 	}
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc
index 2025ec7..5908e50 100644
--- a/gtk2_ardour/editor_timefx.cc
+++ b/gtk2_ardour/editor_timefx.cc
@@ -133,6 +133,8 @@ Editor::pitch_shift (RegionSelection& regions, float fraction)
 
 	if (ret == 0) {
 		commit_reversible_command ();
+	} else {
+		abort_reversible_command ();
 	}
 
 	return ret;
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc
index 78a082c..9b9b1bf 100644
--- a/gtk2_ardour/engine_dialog.cc
+++ b/gtk2_ardour/engine_dialog.cc
@@ -49,6 +49,7 @@
 #include "pbd/error.h"
 
 #include "opts.h"
+#include "debug.h"
 #include "ardour_ui.h"
 #include "engine_dialog.h"
 #include "gui_thread.h"
@@ -62,6 +63,8 @@ using namespace PBD;
 using namespace Glib;
 using namespace ARDOUR_UI_UTILS;
 
+#define DEBUG_ECONTROL(msg) DEBUG_TRACE (PBD::DEBUG::EngineControl, string_compose ("%1: %2\n", __LINE__, msg));
+
 static const unsigned int midi_tab = 2;
 static const unsigned int latency_tab = 1; /* zero-based, page zero is the main setup page */
 
@@ -83,6 +86,7 @@ EngineControl::EngineControl ()
 	, ports_spinner (ports_adjustment)
 	, control_app_button (_("Device Control Panel"))
 	, midi_devices_button (_("Midi Device Setup"))
+	, stop_engine_button (_("Stop (Reconfigure)"))
 	, lm_measure_label (_("Measure"))
 	, lm_use_button (_("Use results"))
 	, lm_back_button (_("Back to settings ... (ignore results)"))
@@ -95,6 +99,7 @@ EngineControl::EngineControl ()
 	, _desired_sample_rate (0)
 	, started_at_least_once (false)
 	, queue_device_changed (false)
+	, block_signals(0)
 {
 	using namespace Notebook_Helpers;
 	vector<string> backend_names;
@@ -119,7 +124,6 @@ EngineControl::EngineControl ()
 	}
 
 	set_popdown_strings (backend_combo, backend_names);
-	backend_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::backend_changed));
 
 	/* setup basic packing characteristics for the table used on the main
 	 * tab of the notebook
@@ -177,8 +181,6 @@ EngineControl::EngineControl ()
 	lm_table.attach (*misc_align, 1, 3, row, row+1, FILL, (AttachOptions) 0);
 	++row;
 
-	xopt = AttachOptions(0);
-
 	lm_measure_label.set_padding (10, 10);
 	lm_measure_button.add (lm_measure_label);
 	lm_measure_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::latency_button_clicked));
@@ -250,9 +252,6 @@ EngineControl::EngineControl ()
 	get_vbox()->set_border_width (12);
 	get_vbox()->pack_start (notebook);
 
-	get_action_area()->pack_start (engine_status);
-	engine_status.show();
-
 	/* need a special function to print "all available channels" when the
 	 * channel counts hit zero.
 	 */
@@ -265,9 +264,16 @@ EngineControl::EngineControl ()
 	midi_devices_button.set_name ("generic button");
 	midi_devices_button.set_can_focus(true);
 
-	control_app_button.signal_clicked().connect (mem_fun (*this, &EngineControl::control_app_button_clicked));
+	control_app_button.signal_clicked.connect (mem_fun (*this, &EngineControl::control_app_button_clicked));
+	control_app_button.set_name ("generic button");
+	control_app_button.set_can_focus(true);
 	manage_control_app_sensitivity ();
 
+	stop_engine_button.signal_clicked.connect (mem_fun (*this, &EngineControl::stop_engine_button_clicked));
+	stop_engine_button.set_sensitive (false);
+	stop_engine_button.set_name ("generic button");
+	stop_engine_button.set_can_focus(true);
+
 	cancel_button = add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_CANCEL);
 	apply_button = add_button (Gtk::Stock::APPLY, Gtk::RESPONSE_APPLY);
 	ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK);
@@ -282,46 +288,106 @@ EngineControl::EngineControl ()
 	ARDOUR::AudioEngine::instance()->DeviceListChanged.connect (devicelist_connection, MISSING_INVALIDATOR, boost::bind (&EngineControl::device_list_changed, this), gui_context());
 
 	if (audio_setup) {
-		set_state (*audio_setup);
-	}
-
-	if (backend_combo.get_active_text().empty()) {
-		PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-		backend_combo.set_active_text (backend_names.front());
+		if (!set_state (*audio_setup)) {
+			set_default_state ();
+		}
+	} else {
+		set_default_state ();
 	}
 
-	backend_changed ();
-
-	/* in case the setting the backend failed, e.g. stale config, from set_state(), try again */
-	if (0 == ARDOUR::AudioEngine::instance()->current_backend()) {
-		backend_combo.set_active_text (backend_names.back());
-		/* ignore: don't save state */
-		PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-		backend_changed ();
-	}
+	connect_changed_signals ();
 
+	notebook.signal_switch_page().connect (sigc::mem_fun (*this, &EngineControl::on_switch_page));
 
-	/* Connect to signals */
+	connect_disconnect_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::connect_disconnect_click));
+	connect_disconnect_button.set_no_show_all();
 
-	driver_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::driver_changed));
-	sample_rate_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::sample_rate_changed));
-	buffer_size_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::buffer_size_changed));
-	device_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::device_changed));
-	midi_option_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::midi_option_changed));
+}
 
-	input_device_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::input_device_changed));
-	output_device_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::output_device_changed));
+void
+EngineControl::connect_changed_signals ()
+{
+	backend_combo_connection = backend_combo.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::backend_changed));
+	driver_combo_connection = driver_combo.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::driver_changed));
+	sample_rate_combo_connection = sample_rate_combo.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::sample_rate_changed));
+	buffer_size_combo_connection = buffer_size_combo.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::buffer_size_changed));
+	device_combo_connection = device_combo.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::device_changed));
+	midi_option_combo_connection = midi_option_combo.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::midi_option_changed));
+
+	input_device_combo_connection = input_device_combo.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::input_device_changed));
+	output_device_combo_connection = output_device_combo.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::output_device_changed));
+
+	input_latency_connection = input_latency.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::parameter_changed));
+	output_latency_connection = output_latency.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::parameter_changed));
+	input_channels_connection = input_channels.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::parameter_changed));
+	output_channels_connection = output_channels.signal_changed ().connect (
+	    sigc::mem_fun (*this, &EngineControl::parameter_changed));
+}
 
-	input_latency.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
-	output_latency.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
-	input_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
-	output_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
+void
+EngineControl::block_changed_signals ()
+{
+	if (block_signals++ == 0) {
+		DEBUG_ECONTROL ("Blocking changed signals");
+		backend_combo_connection.block ();
+		driver_combo_connection.block ();
+		sample_rate_combo_connection.block ();
+		buffer_size_combo_connection.block ();
+		device_combo_connection.block ();
+		input_device_combo_connection.block ();
+		output_device_combo_connection.block ();
+		midi_option_combo_connection.block ();
+		input_latency_connection.block ();
+		output_latency_connection.block ();
+		input_channels_connection.block ();
+		output_channels_connection.block ();
+	}
+}
 
-	notebook.signal_switch_page().connect (sigc::mem_fun (*this, &EngineControl::on_switch_page));
+void
+EngineControl::unblock_changed_signals ()
+{
+	if (--block_signals == 0) {
+		DEBUG_ECONTROL ("Unblocking changed signals");
+		backend_combo_connection.unblock ();
+		driver_combo_connection.unblock ();
+		sample_rate_combo_connection.unblock ();
+		buffer_size_combo_connection.unblock ();
+		device_combo_connection.unblock ();
+		input_device_combo_connection.unblock ();
+		output_device_combo_connection.unblock ();
+		midi_option_combo_connection.unblock ();
+		input_latency_connection.unblock ();
+		output_latency_connection.unblock ();
+		input_channels_connection.unblock ();
+		output_channels_connection.unblock ();
+	}
+}
 
-	connect_disconnect_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::connect_disconnect_click));
-	connect_disconnect_button.set_no_show_all();
+EngineControl::SignalBlocker::SignalBlocker (EngineControl& engine_control,
+                                             const std::string& reason)
+    : ec (engine_control)
+    , m_reason (reason)
+{
+	DEBUG_ECONTROL (string_compose ("SignalBlocker: %1", m_reason));
+	ec.block_changed_signals ();
+}
 
+EngineControl::SignalBlocker::~SignalBlocker ()
+{
+	DEBUG_ECONTROL (string_compose ("~SignalBlocker: %1", m_reason));
+	ec.unblock_changed_signals ();
 }
 
 void
@@ -333,8 +399,6 @@ EngineControl::on_show ()
 		backend_changed ();
 	}
 	device_changed ();
-	input_device_changed ();
-	output_device_changed ();
 	ok_button->grab_focus();
 }
 
@@ -402,6 +466,11 @@ EngineControl::build_notebook ()
 	basic_packer.attach (*label, 0, 1, 0, 1, xopt, (AttachOptions) 0);
 	basic_packer.attach (backend_combo, 1, 2, 0, 1, xopt, (AttachOptions) 0);
 
+	basic_packer.attach (engine_status, 2, 3, 0, 1, xopt, (AttachOptions) 0);
+	engine_status.show();
+
+	basic_packer.attach (stop_engine_button, 3, 4, 0, 1, xopt, xopt);
+
 	lm_button_audio.signal_clicked.connect (sigc::mem_fun (*this, &EngineControl::calibrate_audio_latency));
 	lm_button_audio.set_name ("generic button");
 	lm_button_audio.set_can_focus(true);
@@ -538,7 +607,13 @@ EngineControl::build_full_control_notebook ()
 	label = manage (left_aligned_label (_("MIDI System:")));
 	basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
 	basic_packer.attach (midi_option_combo, 1, 2, row, row + 1, SHRINK, (AttachOptions) 0);
+#if ! defined __APPLE__  && ! defined PLATFORM_WINDOWS // => linux, YAY
+	/* Currently the only backend with dedicated Midi setup is ALSA.
+	 * lot of people complain that this is greyed out
+	 * "I can't use MIDI, the setup is greyed out"
+	 */
 	basic_packer.attach (midi_devices_button, 3, 4, row, row+1, xopt, xopt);
+#endif
 	row++;
 }
 
@@ -658,6 +733,105 @@ EngineControl::setup_midi_tab_for_backend ()
 }
 
 void
+EngineControl::update_sensitivity ()
+{
+	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+	if (!backend) {
+		ok_button->set_sensitive (false);
+		apply_button->set_sensitive (false);
+		stop_engine_button.set_sensitive (false);
+		return;
+	}
+
+	bool valid = true;
+	size_t devices_available = 0;
+
+	if (backend->use_separate_input_and_output_devices ()) {
+		devices_available += get_popdown_string_count (input_device_combo);
+		devices_available += get_popdown_string_count (output_device_combo);
+	} else {
+		devices_available += get_popdown_string_count (device_combo);
+	}
+
+	if (devices_available == 0) {
+		valid = false;
+		input_latency.set_sensitive (false);
+		output_latency.set_sensitive (false);
+		input_channels.set_sensitive (false);
+		output_channels.set_sensitive (false);
+	} else {
+		input_latency.set_sensitive (true);
+		output_latency.set_sensitive (true);
+		input_channels.set_sensitive (true);
+		output_channels.set_sensitive (true);
+	}
+
+	if (get_popdown_string_count (buffer_size_combo) > 0) {
+		if (!ARDOUR::AudioEngine::instance()->running()) {
+			buffer_size_combo.set_sensitive (valid);
+		} else if (backend->can_change_sample_rate_when_running()) {
+			buffer_size_combo.set_sensitive (valid || !_have_control);
+		} else {
+#if 1
+			/* TODO
+			 * Currently there is no way to manually stop the
+			 * engine in order to re-configure it.
+			 * This needs to remain sensitive for now.
+			 *
+			 * (it's also handy to implicily
+			 * re-start the engine)
+			 */
+			buffer_size_combo.set_sensitive (true);
+#else
+			buffer_size_combo.set_sensitive (false);
+#endif
+		}
+	} else {
+		buffer_size_combo.set_sensitive (false);
+		valid = false;
+	}
+
+	if (get_popdown_string_count (sample_rate_combo) > 0) {
+		if (!ARDOUR::AudioEngine::instance()->running()) {
+			sample_rate_combo.set_sensitive (true);
+		} else {
+			sample_rate_combo.set_sensitive (false);
+		}
+	} else {
+		sample_rate_combo.set_sensitive (false);
+		valid = false;
+	}
+
+	if (ARDOUR::AudioEngine::instance()->running() && _have_control) {
+		input_device_combo.set_sensitive (false);
+		output_device_combo.set_sensitive (false);
+		device_combo.set_sensitive (false);
+		driver_combo.set_sensitive (false);
+		stop_engine_button.set_sensitive (true);
+		stop_engine_button.show ();
+	} else {
+		input_device_combo.set_sensitive (true);
+		output_device_combo.set_sensitive (true);
+		device_combo.set_sensitive (true);
+		if (backend->requires_driver_selection() && get_popdown_string_count(driver_combo) > 0) {
+			driver_combo.set_sensitive (true);
+		} else {
+			driver_combo.set_sensitive (false);
+		}
+		stop_engine_button.set_sensitive (false);
+		stop_engine_button.hide ();
+	}
+
+	if (valid || !_have_control) {
+		ok_button->set_sensitive (true);
+		apply_button->set_sensitive (true);
+	} else {
+		ok_button->set_sensitive (false);
+		apply_button->set_sensitive (false);
+	}
+}
+
+void
 EngineControl::setup_midi_tab_for_jack ()
 {
 }
@@ -752,13 +926,9 @@ EngineControl::refresh_midi_display (std::string focus)
 }
 
 void
-EngineControl::update_sensitivity ()
-{
-}
-
-void
 EngineControl::backend_changed ()
 {
+	SignalBlocker blocker (*this, "backend_changed");
 	string backend_name = backend_combo.get_active_text();
 	boost::shared_ptr<ARDOUR::AudioBackend> backend;
 
@@ -768,6 +938,8 @@ EngineControl::backend_changed ()
 		return;
 	}
 
+	DEBUG_ECONTROL (string_compose ("Backend name: %1", backend_name));
+
 	_have_control = ARDOUR::AudioEngine::instance()->setup_required ();
 
 	build_notebook ();
@@ -775,38 +947,39 @@ EngineControl::backend_changed ()
 	_midi_devices.clear();
 
 	if (backend->requires_driver_selection()) {
-		vector<string> drivers = backend->enumerate_drivers();
-		driver_combo.set_sensitive (true);
-
-		if (!drivers.empty()) {
-			{
-				string current_driver;
-				current_driver = backend->driver_name ();
-
-				// driver might not have been set yet
-				if (current_driver == "") {
-					current_driver = driver_combo.get_active_text ();
-					if (current_driver == "")
-						// driver has never been set, make sure it's not blank
-						current_driver = drivers.front ();
-				}
-
-				PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-				set_popdown_strings (driver_combo, drivers);
-				driver_combo.set_active_text (current_driver);
-			}
-
+		if (set_driver_popdown_strings ()) {
 			driver_changed ();
 		}
-
 	} else {
-		driver_combo.set_sensitive (false);
 		/* this will change the device text which will cause a call to
 		 * device changed which will set up parameters
 		 */
 		list_devices ();
 	}
 
+	update_midi_options ();
+
+	connect_disconnect_button.hide();
+
+	midi_option_changed();
+
+	started_at_least_once = false;
+
+	/* changing the backend implies stopping the engine
+	 * ARDOUR::AudioEngine() may or may not emit this signal
+	 * depending on previous engine state
+	 */
+	engine_stopped (); // set "active/inactive"
+
+	if (!ignore_changes) {
+		maybe_display_saved_state ();
+	}
+}
+
+void
+EngineControl::update_midi_options ()
+{
+	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	vector<string> midi_options = backend->enumerate_midi_options();
 
 	if (midi_options.size() == 1) {
@@ -821,16 +994,6 @@ EngineControl::backend_changed ()
 			midi_option_combo.set_sensitive (false);
 		}
 	}
-
-	connect_disconnect_button.hide();
-
-	midi_option_changed();
-
-	started_at_least_once = false;
-
-	if (!ignore_changes) {
-		maybe_display_saved_state ();
-	}
 }
 
 bool
@@ -851,10 +1014,41 @@ EngineControl::print_channel_count (Gtk::SpinButton* sb)
 	return true;
 }
 
+// @return true if there are drivers available
+bool
+EngineControl::set_driver_popdown_strings ()
+{
+	DEBUG_ECONTROL ("set_driver_popdown_strings");
+	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+	vector<string> drivers = backend->enumerate_drivers();
+
+	if (drivers.empty ()) {
+		// This is an error...?
+		return false;
+	}
+
+	string current_driver = backend->driver_name ();
+
+	DEBUG_ECONTROL (string_compose ("backend->driver_name: %1", current_driver));
+
+	if (std::find (drivers.begin (), drivers.end (), current_driver) ==
+	    drivers.end ()) {
+
+		current_driver = drivers.front ();
+	}
+
+	set_popdown_strings (driver_combo, drivers);
+	DEBUG_ECONTROL (
+	    string_compose ("driver_combo.set_active_text: %1", current_driver));
+	driver_combo.set_active_text (current_driver);
+	return true;
+}
+
 // @return true if there are devices available
 bool
 EngineControl::set_device_popdown_strings ()
 {
+	DEBUG_ECONTROL ("set_device_popdown_strings");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	vector<ARDOUR::AudioBackend::DeviceStatus> all_devices = backend->enumerate_devices ();
 
@@ -873,44 +1067,35 @@ EngineControl::set_device_popdown_strings ()
 		available_devices.push_back (i->name);
 	}
 
+	if (available_devices.empty ()) {
+		return false;
+	}
 
-	if (!available_devices.empty()) {
-		update_sensitivity ();
+	string current_device = backend->device_name ();
 
-		{
-			string current_device, found_device;
-			current_device = device_combo.get_active_text ();
-			if (current_device == "") {
-				current_device = backend->device_name ();
-			}
+	// Make sure that backend->device_name () is a valid
+	// device, the backend may not return a valid device if it hasn't
+	// been set yet.
+	if (std::find (available_devices.begin (),
+	               available_devices.end (),
+	               current_device) == available_devices.end ()) {
 
-			// Make sure that the active text is still relevant for this
-			// device (it might only be relevant to the previous device!!)
-			for (vector<string>::const_iterator i = available_devices.begin(); i != available_devices.end(); ++i) {
-				if (*i == current_device)
-					found_device = current_device;
-			}
-			if (found_device == "")
-				// device has never been set (or was not relevant
-				// for this backend) Let's make sure it's not blank
-				current_device = available_devices.front ();
+		current_device = available_devices.front ();
+	}
 
-			PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-			set_popdown_strings (device_combo, available_devices);
+	set_popdown_strings (device_combo, available_devices);
+	DEBUG_ECONTROL (
+	    string_compose ("set device_combo active text: %1", current_device));
 
-			device_combo.set_active_text (current_device);
-		}
-
-		device_changed ();
-		return true;
-	}
-	return false;
+	device_combo.set_active_text (current_device);
+	return true;
 }
 
 // @return true if there are input devices available
 bool
 EngineControl::set_input_device_popdown_strings ()
 {
+	DEBUG_ECONTROL ("set_input_device_popdown_strings");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	vector<ARDOUR::AudioBackend::DeviceStatus> all_devices = backend->enumerate_input_devices ();
 
@@ -920,44 +1105,35 @@ EngineControl::set_input_device_popdown_strings ()
 		available_devices.push_back (i->name);
 	}
 
-	if (!available_devices.empty()) {
-		update_sensitivity ();
-
-		{
-			string current_device, found_device;
-			current_device = input_device_combo.get_active_text ();
-			if (current_device == "") {
-				current_device = backend->input_device_name ();
-			}
-
-			// Make sure that the active text is still relevant for this
-			// device (it might only be relevant to the previous device!!)
-			for (vector<string>::const_iterator i = available_devices.begin(); i != available_devices.end(); ++i) {
-				if (*i == current_device)
-					found_device = current_device;
-			}
-			if (found_device == "")
-				// device has never been set (or was not relevant
-				// for this backend) Let's make sure it's not blank
-				current_device = available_devices.front ();
+	if (available_devices.empty()) {
+		return false;
+	}
 
-			PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-			set_popdown_strings (input_device_combo, available_devices);
+	string current_device = backend->input_device_name ();
 
-			input_device_combo.set_active_text (current_device);
-		}
+	// Make sure that backend->input_device_name () is a valid
+	// device, the backend may not return a valid device if it hasn't
+	// been set yet.
+	if (std::find (available_devices.begin (),
+	               available_devices.end (),
+	               current_device) == available_devices.end ()) {
 
-		input_device_changed ();
-		return true;
+		current_device = available_devices.front ();
 	}
 
-	return false;
+	set_popdown_strings (input_device_combo, available_devices);
+
+	DEBUG_ECONTROL (
+	    string_compose ("set input_device_combo active text: %1", current_device));
+	input_device_combo.set_active_text (current_device);
+	return true;
 }
 
 // @return true if there are output devices available
 bool
 EngineControl::set_output_device_popdown_strings ()
 {
+	DEBUG_ECONTROL ("set_output_device_popdown_strings");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	vector<ARDOUR::AudioBackend::DeviceStatus> all_devices = backend->enumerate_output_devices ();
 
@@ -967,43 +1143,34 @@ EngineControl::set_output_device_popdown_strings ()
 		available_devices.push_back (i->name);
 	}
 
-	if (!available_devices.empty()) {
-		update_sensitivity ();
-
-		{
-			string current_device, found_device;
-			current_device = output_device_combo.get_active_text ();
-			if (current_device == "") {
-				current_device = backend->output_device_name ();
-			}
-
-			// Make sure that the active text is still relevant for this
-			// device (it might only be relevant to the previous device!!)
-			for (vector<string>::const_iterator i = available_devices.begin(); i != available_devices.end(); ++i) {
-				if (*i == current_device)
-					found_device = current_device;
-			}
-			if (found_device == "")
-				// device has never been set (or was not relevant
-				// for this backend) Let's make sure it's not blank
-				current_device = available_devices.front ();
+	if (available_devices.empty()) {
+		return false;
+	}
 
-			PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-			set_popdown_strings (output_device_combo, available_devices);
+	string current_device = backend->output_device_name ();
 
-			output_device_combo.set_active_text (current_device);
-		}
+	// Make sure that backend->output_device_name () is a valid
+	// device, the backend may not return a valid device if it hasn't
+	// been set yet.
+	if (std::find (available_devices.begin (),
+	               available_devices.end (),
+	               current_device) == available_devices.end ()) {
 
-		output_device_changed ();
-		return true;
+		current_device = available_devices.front ();
 	}
 
-	return false;
+	set_popdown_strings (output_device_combo, available_devices);
+
+	DEBUG_ECONTROL (
+	    string_compose ("set output_device_combo active text: %1", current_device));
+	output_device_combo.set_active_text (current_device);
+	return true;
 }
 
 void
 EngineControl::list_devices ()
 {
+	DEBUG_ECONTROL ("list_devices");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	assert (backend);
 
@@ -1020,44 +1187,19 @@ EngineControl::list_devices ()
 	}
 
 	if (devices_available) {
-		input_latency.set_sensitive (true);
-		output_latency.set_sensitive (true);
-		input_channels.set_sensitive (true);
-		output_channels.set_sensitive (true);
-
-		ok_button->set_sensitive (true);
-		apply_button->set_sensitive (true);
-
+		device_changed ();
 	} else {
 		device_combo.clear();
 		input_device_combo.clear();
 		output_device_combo.clear();
-		sample_rate_combo.set_sensitive (false);
-		buffer_size_combo.set_sensitive (false);
-		input_latency.set_sensitive (false);
-		output_latency.set_sensitive (false);
-		input_channels.set_sensitive (false);
-		output_channels.set_sensitive (false);
-		if (_have_control) {
-			ok_button->set_sensitive (false);
-			apply_button->set_sensitive (false);
-		} else {
-			ok_button->set_sensitive (true);
-			apply_button->set_sensitive (true);
-			if (backend->can_change_sample_rate_when_running() && sample_rate_combo.get_children().size() > 0) {
-				sample_rate_combo.set_sensitive (true);
-			}
-			if (backend->can_change_buffer_size_when_running() && buffer_size_combo.get_children().size() > 0) {
-				buffer_size_combo.set_sensitive (true);
-			}
-
-		}
 	}
+	update_sensitivity ();
 }
 
 void
 EngineControl::driver_changed ()
 {
+	SignalBlocker blocker (*this, "driver_changed");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	assert (backend);
 
@@ -1069,27 +1211,50 @@ EngineControl::driver_changed ()
 	}
 }
 
+vector<float>
+EngineControl::get_sample_rates_for_all_devices ()
+{
+	boost::shared_ptr<ARDOUR::AudioBackend> backend =
+	    ARDOUR::AudioEngine::instance ()->current_backend ();
+	vector<float> all_rates;
+
+	if (backend->use_separate_input_and_output_devices ()) {
+		all_rates = backend->available_sample_rates2 (get_input_device_name (), get_output_device_name ());
+	} else {
+		all_rates = backend->available_sample_rates (get_device_name ());
+	}
+	return all_rates;
+}
+
+vector<float>
+EngineControl::get_default_sample_rates ()
+{
+	vector<float> rates;
+	rates.push_back (8000.0f);
+	rates.push_back (16000.0f);
+	rates.push_back (32000.0f);
+	rates.push_back (44100.0f);
+	rates.push_back (48000.0f);
+	rates.push_back (88200.0f);
+	rates.push_back (96000.0f);
+	rates.push_back (192000.0f);
+	rates.push_back (384000.0f);
+	return rates;
+}
+
 void
-EngineControl::set_samplerate_popdown_strings (const std::string& device_name)
+EngineControl::set_samplerate_popdown_strings ()
 {
+	DEBUG_ECONTROL ("set_samplerate_popdown_strings");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	string desired;
 	vector<float> sr;
 	vector<string> s;
 
 	if (_have_control) {
-		sr = backend->available_sample_rates (device_name);
+		sr = get_sample_rates_for_all_devices ();
 	} else {
-
-		sr.push_back (8000.0f);
-		sr.push_back (16000.0f);
-		sr.push_back (32000.0f);
-		sr.push_back (44100.0f);
-		sr.push_back (48000.0f);
-		sr.push_back (88200.0f);
-		sr.push_back (96000.0f);
-		sr.push_back (192000.0f);
-		sr.push_back (384000.0f);
+		sr = get_default_sample_rates ();
 	}
 
 	for (vector<float>::const_iterator x = sr.begin(); x != sr.end(); ++x) {
@@ -1099,66 +1264,102 @@ EngineControl::set_samplerate_popdown_strings (const std::string& device_name)
 		}
 	}
 
+	set_popdown_strings (sample_rate_combo, s);
+
 	if (!s.empty()) {
-		sample_rate_combo.set_sensitive (true);
-		set_popdown_strings (sample_rate_combo, s);
+		if (desired.empty ()) {
+			float new_active_sr = backend->default_sample_rate ();
 
-		if (desired.empty()) {
-			sample_rate_combo.set_active_text (rate_as_string (backend->default_sample_rate()));
+			if (std::find (sr.begin (), sr.end (), new_active_sr) == sr.end ()) {
+				new_active_sr = sr.front ();
+			}
+
+			sample_rate_combo.set_active_text (rate_as_string (new_active_sr));
 		} else {
 			sample_rate_combo.set_active_text (desired);
 		}
 
+	}
+	update_sensitivity ();
+}
+
+vector<uint32_t>
+EngineControl::get_buffer_sizes_for_all_devices ()
+{
+	boost::shared_ptr<ARDOUR::AudioBackend> backend =
+	    ARDOUR::AudioEngine::instance ()->current_backend ();
+	vector<uint32_t> all_sizes;
+
+	if (backend->use_separate_input_and_output_devices ()) {
+		all_sizes = backend->available_buffer_sizes2 (get_input_device_name (), get_output_device_name ());
 	} else {
-		sample_rate_combo.set_sensitive (false);
+		all_sizes = backend->available_buffer_sizes (get_device_name ());
 	}
+	return all_sizes;
+}
+
+vector<uint32_t>
+EngineControl::get_default_buffer_sizes ()
+{
+	vector<uint32_t> sizes;
+	sizes.push_back (8);
+	sizes.push_back (16);
+	sizes.push_back (32);
+	sizes.push_back (64);
+	sizes.push_back (128);
+	sizes.push_back (256);
+	sizes.push_back (512);
+	sizes.push_back (1024);
+	sizes.push_back (2048);
+	sizes.push_back (4096);
+	sizes.push_back (8192);
+	return sizes;
 }
 
 void
-EngineControl::set_buffersize_popdown_strings (const std::string& device_name)
+EngineControl::set_buffersize_popdown_strings ()
 {
+	DEBUG_ECONTROL ("set_buffersize_popdown_strings");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	vector<uint32_t> bs;
 	vector<string> s;
 
 	if (_have_control) {
-		bs = backend->available_buffer_sizes (device_name);
+		bs = get_buffer_sizes_for_all_devices ();
 	} else if (backend->can_change_buffer_size_when_running()) {
-		bs.push_back (8);
-		bs.push_back (16);
-		bs.push_back (32);
-		bs.push_back (64);
-		bs.push_back (128);
-		bs.push_back (256);
-		bs.push_back (512);
-		bs.push_back (1024);
-		bs.push_back (2048);
-		bs.push_back (4096);
-		bs.push_back (8192);
-	}
-	s.clear ();
+		bs = get_default_buffer_sizes ();
+	}
+
 	for (vector<uint32_t>::const_iterator x = bs.begin(); x != bs.end(); ++x) {
 		s.push_back (bufsize_as_string (*x));
 	}
 
+	set_popdown_strings (buffer_size_combo, s);
+
 	if (!s.empty()) {
-		buffer_size_combo.set_sensitive (true);
-		set_popdown_strings (buffer_size_combo, s);
+		buffer_size_combo.set_active_text (s.front());
 
 		uint32_t period = backend->buffer_size();
-		if (0 == period) {
-			period = backend->default_buffer_size(device_name);
+		if (0 == period && backend->use_separate_input_and_output_devices ()) {
+			period = backend->default_buffer_size (get_input_device_name ());
+		}
+		if (0 == period && backend->use_separate_input_and_output_devices ()) {
+			period = backend->default_buffer_size (get_output_device_name ());
+		}
+		if (0 == period && !backend->use_separate_input_and_output_devices ()) {
+			period = backend->default_buffer_size (get_device_name ());
 		}
+
 		set_active_text_if_present (buffer_size_combo, bufsize_as_string (period));
 		show_buffer_duration ();
-	} else {
-		buffer_size_combo.set_sensitive (false);
 	}
+	update_sensitivity ();
 }
 
 void
 EngineControl::device_changed ()
 {
+	SignalBlocker blocker (*this, "device_changed");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	assert (backend);
 
@@ -1201,13 +1402,10 @@ EngineControl::device_changed ()
 		 */
 		PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
 
-		/* backends that support separate devices, need to ignore
-		 * the device-name - and use the devies set above
-		 */
-		set_samplerate_popdown_strings (device_name_in);
-		set_buffersize_popdown_strings (device_name_in);
-		/* XXX theoretically need to set min + max channel counts here
-		*/
+		set_samplerate_popdown_strings ();
+		set_buffersize_popdown_strings ();
+
+		/* TODO set min + max channel counts here */
 
 		manage_control_app_sensitivity ();
 	}
@@ -1222,63 +1420,15 @@ EngineControl::device_changed ()
 void
 EngineControl::input_device_changed ()
 {
-	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
-	assert (backend);
-	string input_device_name = input_device_combo.get_active_text ();
-
-	if (!ignore_changes && input_device_name != backend->input_device_name()) {
-		queue_device_changed = true;
-	}
-
-	backend->set_input_device_name(input_device_name);
-
-	{
-		PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-
-		set_samplerate_popdown_strings (input_device_name);
-		set_buffersize_popdown_strings (input_device_name);
-		/* XXX theoretically need to set min + max channel counts here
-		*/
-
-		manage_control_app_sensitivity ();
-	}
-
-	/* pick up any saved state for this device */
-
-	if (!ignore_changes) {
-		maybe_display_saved_state ();
-	}
+	DEBUG_ECONTROL ("input_device_changed");
+	device_changed ();
 }
 
 void
 EngineControl::output_device_changed ()
 {
-	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
-	assert (backend);
-	string output_device_name = output_device_combo.get_active_text ();
-
-	if (!ignore_changes && output_device_name != backend->output_device_name()) {
-		queue_device_changed = true;
-	}
-
-	backend->set_output_device_name(output_device_name);
-
-	{
-		PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-
-		set_samplerate_popdown_strings (output_device_name);
-		set_buffersize_popdown_strings (output_device_name);
-		/* XXX theoretically need to set min + max channel counts here
-		*/
-
-		manage_control_app_sensitivity ();
-	}
-
-	/* pick up any saved state for this device */
-
-	if (!ignore_changes) {
-		maybe_display_saved_state ();
-	}
+	DEBUG_ECONTROL ("output_device_changed");
+	device_changed ();
 }
 
 string
@@ -1295,6 +1445,7 @@ EngineControl::bufsize_as_string (uint32_t sz)
 void
 EngineControl::sample_rate_changed ()
 {
+	DEBUG_ECONTROL ("sample_rate_changed");
 	/* reset the strings for buffer size to show the correct msec value
 	   (reflecting the new sample rate).
 	 */
@@ -1306,13 +1457,14 @@ EngineControl::sample_rate_changed ()
 void
 EngineControl::buffer_size_changed ()
 {
+	DEBUG_ECONTROL ("buffer_size_changed");
 	show_buffer_duration ();
 }
 
 void
 EngineControl::show_buffer_duration ()
 {
-
+	DEBUG_ECONTROL ("show_buffer_duration");
 	/* buffer sizes  - convert from just samples to samples + msecs for
 	 * the displayed string
 	 */
@@ -1346,6 +1498,7 @@ EngineControl::show_buffer_duration ()
 void
 EngineControl::midi_option_changed ()
 {
+	DEBUG_ECONTROL ("midi_option_changed");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	assert (backend);
 
@@ -1537,6 +1690,8 @@ EngineControl::maybe_display_saved_state ()
 XMLNode&
 EngineControl::get_state ()
 {
+	LocaleGuard lg (X_("C"));
+
 	XMLNode* root = new XMLNode ("AudioMIDISetup");
 	std::string path;
 
@@ -1582,6 +1737,22 @@ EngineControl::get_state ()
 }
 
 void
+EngineControl::set_default_state ()
+{
+	vector<string> backend_names;
+	vector<const ARDOUR::AudioBackendInfo*> backends = ARDOUR::AudioEngine::instance()->available_backends();
+
+	for (vector<const ARDOUR::AudioBackendInfo*>::const_iterator b = backends.begin(); b != backends.end(); ++b) {
+		backend_names.push_back ((*b)->name);
+	}
+	backend_combo.set_active_text (backend_names.front());
+
+	// We could set default backends per platform etc here
+
+	backend_changed ();
+}
+
+bool
 EngineControl::set_state (const XMLNode& root)
 {
 	XMLNodeList          clist, cclist;
@@ -1593,7 +1764,7 @@ EngineControl::set_state (const XMLNode& root)
 	fprintf (stderr, "EngineControl::set_state\n");
 
 	if (root.name() != "AudioMIDISetup") {
-		return;
+		return false;
 	}
 
 	clist = root.children();
@@ -1746,27 +1917,105 @@ EngineControl::set_state (const XMLNode& root)
 	for (StateList::const_iterator i = states.begin(); i != states.end(); ++i) {
 
 		if ((*i)->active) {
-			PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-			backend_combo.set_active_text ((*i)->backend);
-			driver_combo.set_active_text ((*i)->driver);
-			device_combo.set_active_text ((*i)->device);
-			fprintf (stderr, "setting input device to: %s ", (*i)->input_device.c_str());
-			input_device_combo.set_active_text ((*i)->input_device);
-			fprintf (stderr, "setting output device to: %s ", (*i)->output_device.c_str());
-			output_device_combo.set_active_text ((*i)->output_device);
-			sample_rate_combo.set_active_text (rate_as_string ((*i)->sample_rate));
-			set_active_text_if_present (buffer_size_combo, bufsize_as_string ((*i)->buffer_size));
-			input_latency.set_value ((*i)->input_latency);
-			output_latency.set_value ((*i)->output_latency);
-			midi_option_combo.set_active_text ((*i)->midi_option);
-			break;
+			return set_current_state (*i);
 		}
 	}
+	return false;
+}
+
+bool
+EngineControl::set_current_state (const State& state)
+{
+	DEBUG_ECONTROL ("set_current_state");
+
+	boost::shared_ptr<ARDOUR::AudioBackend> backend;
+
+	if (!(backend = ARDOUR::AudioEngine::instance ()->set_backend (
+	          state->backend, "ardour", ""))) {
+		DEBUG_ECONTROL (string_compose ("Unable to set backend to %1", state->backend));
+		// this shouldn't happen as the invalid backend names should have been
+		// removed from the list of states.
+		return false;
+	}
+
+	// now reflect the change in the backend in the GUI so backend_changed will
+	// do the right thing
+	backend_combo.set_active_text (state->backend);
+
+	if (!state->driver.empty ()) {
+		if (!backend->requires_driver_selection ()) {
+			DEBUG_ECONTROL ("Backend should require driver selection");
+			// A backend has changed from having driver selection to not having
+			// it or someone has been manually editing a config file and messed
+			// it up
+			return false;
+		}
+
+		if (backend->set_driver (state->driver) != 0) {
+			DEBUG_ECONTROL (string_compose ("Unable to set driver %1", state->driver));
+			// Driver names for a backend have changed and the name in the
+			// config file is now invalid or support for driver is no longer
+			// included in the backend
+			return false;
+		}
+		// no need to set the driver_combo as backend_changed will use
+		// backend->driver_name to set the active driver
+	}
+
+	if (!state->device.empty ()) {
+		if (backend->set_device_name (state->device) != 0) {
+			DEBUG_ECONTROL (
+			    string_compose ("Unable to set device name %1", state->device));
+			// device is no longer available on the system
+			return false;
+		}
+		// no need to set active device as it will be picked up in
+		// via backend_changed ()/set_device_popdown_strings
+
+	} else {
+		// backend supports separate input/output devices
+		if (backend->set_input_device_name (state->input_device) != 0) {
+			DEBUG_ECONTROL (string_compose ("Unable to set input device name %1",
+			                                state->input_device));
+			// input device is no longer available on the system
+			return false;
+		}
+
+		if (backend->set_output_device_name (state->output_device) != 0) {
+			DEBUG_ECONTROL (string_compose ("Unable to set output device name %1",
+			                                state->input_device));
+			// output device is no longer available on the system
+			return false;
+		}
+		// no need to set active devices as it will be picked up in via
+		// backend_changed ()/set_*_device_popdown_strings
+	}
+
+	backend_changed ();
+
+	// Now restore the state of the rest of the controls
+
+	// We don't use a SignalBlocker as set_current_state is currently only
+	// called from set_state before any signals are connected. If at some point
+	// a more general named state mechanism is implemented and
+	// set_current_state is called while signals are connected then a
+	// SignalBlocker will need to be instantiated before setting these.
+
+	device_combo.set_active_text (state->device);
+	input_device_combo.set_active_text (state->input_device);
+	output_device_combo.set_active_text (state->output_device);
+	sample_rate_combo.set_active_text (rate_as_string (state->sample_rate));
+	set_active_text_if_present (buffer_size_combo, bufsize_as_string (state->buffer_size));
+	input_latency.set_value (state->input_latency);
+	output_latency.set_value (state->output_latency);
+	midi_option_combo.set_active_text (state->midi_option);
+	return true;
 }
 
 int
 EngineControl::push_state_to_backend (bool start)
 {
+	DEBUG_ECONTROL ("push_state_to_backend");
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 
 	if (!backend) {
@@ -2156,7 +2405,7 @@ EngineControl::get_backend () const
 string
 EngineControl::get_driver () const
 {
-	if (driver_combo.get_sensitive() && driver_combo.get_parent()) {
+	if (driver_combo.get_parent()) {
 		return driver_combo.get_active_text ();
 	} else {
 		return "";
@@ -2194,6 +2443,12 @@ EngineControl::control_app_button_clicked ()
 }
 
 void
+EngineControl::stop_engine_button_clicked ()
+{
+	ARDOUR::AudioEngine::instance()->stop ();
+}
+
+void
 EngineControl::manage_control_app_sensitivity ()
 {
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
@@ -2216,8 +2471,6 @@ EngineControl::set_desired_sample_rate (uint32_t sr)
 {
 	_desired_sample_rate = sr;
 	device_changed ();
-	input_device_changed ();
-	output_device_changed ();
 }
 
 void
@@ -2225,9 +2478,8 @@ EngineControl::on_switch_page (GtkNotebookPage*, guint page_num)
 {
 	if (page_num == 0) {
 		cancel_button->set_sensitive (true);
-		ok_button->set_sensitive (true);
-		apply_button->set_sensitive (true);
 		_measure_midi.reset();
+		update_sensitivity ();
 	} else {
 		cancel_button->set_sensitive (false);
 		ok_button->set_sensitive (false);
@@ -2509,14 +2761,16 @@ EngineControl::engine_running ()
 	set_active_text_if_present (buffer_size_combo, bufsize_as_string (backend->buffer_size()));
 	sample_rate_combo.set_active_text (rate_as_string (backend->sample_rate()));
 
-	buffer_size_combo.set_sensitive (true);
-	sample_rate_combo.set_sensitive (true);
-
 	connect_disconnect_button.set_label (string_compose (_("Disconnect from %1"), backend->name()));
 	connect_disconnect_button.show();
 
 	started_at_least_once = true;
-	engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("Active")));
+	if (_have_control) {
+		engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("Running")));
+	} else {
+		engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("Connected")));
+	}
+	update_sensitivity();
 }
 
 void
@@ -2525,13 +2779,11 @@ EngineControl::engine_stopped ()
 	boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 	assert (backend);
 
-	buffer_size_combo.set_sensitive (false);
 	connect_disconnect_button.set_label (string_compose (_("Connect to %1"), backend->name()));
 	connect_disconnect_button.show();
 
-	sample_rate_combo.set_sensitive (true);
-	buffer_size_combo.set_sensitive (true);
-	engine_status.set_markup(string_compose ("<span foreground=\"red\">%1</span>", _("Inactive")));
+	engine_status.set_markup(X_(""));
+	update_sensitivity();
 }
 
 void
diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h
index 1ca9937..783ab44 100644
--- a/gtk2_ardour/engine_dialog.h
+++ b/gtk2_ardour/engine_dialog.h
@@ -46,7 +46,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
     static bool need_setup ();
 
     XMLNode& get_state ();
-    void set_state (const XMLNode&);
+    bool set_state (const XMLNode&);
 
     void set_desired_sample_rate (uint32_t);
 
@@ -82,8 +82,9 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
     Gtk::SpinButton ports_spinner;
 
     Gtk::Label      have_control_text;
-    Gtk::Button     control_app_button;
+    ArdourButton    control_app_button;
     ArdourButton    midi_devices_button;
+    ArdourButton    stop_engine_button;
 
     Gtk::Button     connect_disconnect_button;
 
@@ -134,8 +135,16 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
     void setup_midi_tab_for_jack ();
     void refresh_midi_display (std::string focus = "");
 
+	void update_midi_options ();
+
     std::string bufsize_as_string (uint32_t);
 
+	std::vector<float> get_default_sample_rates ();
+	std::vector<uint32_t> get_default_buffer_sizes ();
+
+	std::vector<float> get_sample_rates_for_all_devices ();
+	std::vector<uint32_t> get_buffer_sizes_for_all_devices ();
+
     float get_rate() const;
     uint32_t get_buffer_size() const;
     uint32_t get_input_channels() const;
@@ -152,11 +161,12 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
     void device_changed ();
     void input_device_changed ();
     void output_device_changed ();
+    bool set_driver_popdown_strings ();
     bool set_device_popdown_strings ();
     bool set_input_device_popdown_strings ();
     bool set_output_device_popdown_strings ();
-    void set_samplerate_popdown_strings (const std::string& dev_name);
-    void set_buffersize_popdown_strings (const std::string& dev_name);
+    void set_samplerate_popdown_strings ();
+    void set_buffersize_popdown_strings ();
     void list_devices ();
     void show_buffer_duration ();
 
@@ -234,6 +244,9 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
     void store_state (State);
     bool equivalent_states (const State&, const State&);
 
+	bool set_current_state (const State& state);
+	void set_default_state ();
+
     bool  _have_control;
 
     static bool print_channel_count (Gtk::SpinButton*);
@@ -242,9 +255,41 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
     void build_full_control_notebook ();
     void build_no_control_notebook ();
 
+	void connect_changed_signals ();
+	void block_changed_signals ();
+	void unblock_changed_signals ();
+
+	class SignalBlocker
+	{
+	public:
+		SignalBlocker (EngineControl& engine_control, const std::string& reason);
+
+		~SignalBlocker ();
+
+	private:
+		EngineControl& ec;
+		std::string m_reason;
+	};
+
+	uint32_t block_signals;
+
+	sigc::connection backend_combo_connection;
+	sigc::connection driver_combo_connection;
+	sigc::connection sample_rate_combo_connection;
+	sigc::connection buffer_size_combo_connection;
+	sigc::connection device_combo_connection;
+	sigc::connection input_device_combo_connection;
+	sigc::connection output_device_combo_connection;
+	sigc::connection midi_option_combo_connection;
+	sigc::connection input_latency_connection;
+	sigc::connection output_latency_connection;
+	sigc::connection input_channels_connection;
+	sigc::connection output_channels_connection;
+
     void on_show ();
     void on_response (int);
     void control_app_button_clicked ();
+    void stop_engine_button_clicked ();
     void use_latency_button_clicked ();
     void manage_control_app_sensitivity ();
     int push_state_to_backend (bool start);
diff --git a/gtk2_ardour/export_channel_selector.cc b/gtk2_ardour/export_channel_selector.cc
index 77cabad..c868d69 100644
--- a/gtk2_ardour/export_channel_selector.cc
+++ b/gtk2_ardour/export_channel_selector.cc
@@ -40,6 +40,12 @@ using namespace Glib;
 using namespace ARDOUR;
 using namespace PBD;
 
+struct EditorOrderRouteSorter {
+    bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
+	    return a->order_key () < b->order_key ();
+    }
+};
+
 PortExportChannelSelector::PortExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager) :
   ExportChannelSelector (session, manager),
   channels_label (_("Channels:"), Gtk::ALIGN_LEFT),
@@ -115,6 +121,8 @@ PortExportChannelSelector::fill_route_list ()
 		channel_view.add_route (master);
 	}
 
+	routes.sort (EditorOrderRouteSorter ());
+
 	for (RouteList::iterator it = routes.begin(); it != routes.end(); ++it) {
 		if ((*it)->is_master () || (*it)->is_monitor ()) {
 			continue;
@@ -539,8 +547,7 @@ RegionExportChannelSelector::handle_selection ()
 
 TrackExportChannelSelector::TrackExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager)
   : ExportChannelSelector(session, manager)
-  , region_contents_button(source_group, _("Export region contents"))
-  , track_output_button(source_group, _("Export track output"))
+  , track_output_button(_("Apply track/bus processing"))
   , select_tracks_button (_("Select all tracks"))
   , select_busses_button (_("Select all busses"))
   , select_none_button (_("Deselect all"))
@@ -548,7 +555,6 @@ TrackExportChannelSelector::TrackExportChannelSelector (ARDOUR::Session * sessio
 	pack_start(main_layout);
 
 	// Options
-	options_box.pack_start(region_contents_button);
 	options_box.pack_start(track_output_button);
 	options_box.pack_start (select_tracks_button);
 	options_box.pack_start (select_busses_button);
@@ -588,6 +594,8 @@ TrackExportChannelSelector::TrackExportChannelSelector (ARDOUR::Session * sessio
 	select_busses_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::select_busses));
 	select_none_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::select_none));
 
+	track_output_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::track_outputs_selected));
+
 	fill_list();
 
 	show_all_children ();
@@ -639,6 +647,12 @@ TrackExportChannelSelector::select_none ()
 }
 
 void
+TrackExportChannelSelector::track_outputs_selected ()
+{
+	update_config();
+}
+
+void
 TrackExportChannelSelector::fill_list()
 {
 	track_list->clear();
@@ -716,6 +730,7 @@ TrackExportChannelSelector::update_config()
 		}
 
 		state->config->set_name (route->name());
+
 	}
 
 	CriticalSelectionChanged ();
diff --git a/gtk2_ardour/export_channel_selector.h b/gtk2_ardour/export_channel_selector.h
index aa9999a..6dd770c 100644
--- a/gtk2_ardour/export_channel_selector.h
+++ b/gtk2_ardour/export_channel_selector.h
@@ -263,15 +263,15 @@ class TrackExportChannelSelector : public ExportChannelSelector
 	Gtk::ScrolledWindow          track_scroller;
 
 	Gtk::HBox                    options_box;
-	Gtk::RadioButton::Group      source_group;
-	Gtk::RadioButton             region_contents_button;
-	Gtk::RadioButton             track_output_button;
+	Gtk::CheckButton             track_output_button;
 	Gtk::Button                  select_tracks_button;
 	Gtk::Button                  select_busses_button;
 	Gtk::Button                  select_none_button;
 	void select_tracks ();
 	void select_busses ();
 	void select_none ();
+
+	void track_outputs_selected ();
 };
 
 #endif /* __export_channel_selector_h__ */
diff --git a/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj b/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..2d5ae13
--- /dev/null
+++ b/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj
@@ -0,0 +1,2987 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		43279248194EFFF1003C9FEA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43279247194EFFF1003C9FEA /* Cocoa.framework */; };
+		43279252194EFFF1003C9FEA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 43279250194EFFF1003C9FEA /* InfoPlist.strings */; };
+		43279254194EFFF1003C9FEA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 43279253194EFFF1003C9FEA /* main.m */; };
+		43279258194EFFF1003C9FEA /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 43279256194EFFF1003C9FEA /* Credits.rtf */; };
+		4327925B194EFFF1003C9FEA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4327925A194EFFF1003C9FEA /* AppDelegate.m */; };
+		4327925E194EFFF1003C9FEA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4327925C194EFFF1003C9FEA /* MainMenu.xib */; };
+		43279331194F003A003C9FEA /* act-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279263194F0039003C9FEA /* act-disabled.png */; };
+		43279332194F003A003C9FEA /* add.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279264194F0039003C9FEA /* add.png */; };
+		43279333194F003A003C9FEA /* application-x-ardour_16px.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279265194F0039003C9FEA /* application-x-ardour_16px.png */; };
+		43279334194F003A003C9FEA /* application-x-ardour_22px.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279266194F0039003C9FEA /* application-x-ardour_22px.png */; };
+		43279335194F003A003C9FEA /* application-x-ardour_32px.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279267194F0039003C9FEA /* application-x-ardour_32px.png */; };
+		43279336194F003A003C9FEA /* application-x-ardour_48px.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279268194F0039003C9FEA /* application-x-ardour_48px.png */; };
+		43279337194F003A003C9FEA /* ardour-app-icon_osx.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279269194F0039003C9FEA /* ardour-app-icon_osx.png */; };
+		43279338194F003A003C9FEA /* ardour-app-icon_osx_mask.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926A194F0039003C9FEA /* ardour-app-icon_osx_mask.png */; };
+		43279339194F003A003C9FEA /* ardour_icon_16px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926B194F0039003C9FEA /* ardour_icon_16px.png */; };
+		4327933A194F003A003C9FEA /* ardour_icon_22px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926C194F0039003C9FEA /* ardour_icon_22px.png */; };
+		4327933B194F003A003C9FEA /* ardour_icon_256px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926D194F0039003C9FEA /* ardour_icon_256px.png */; };
+		4327933C194F003A003C9FEA /* ardour_icon_32px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926E194F0039003C9FEA /* ardour_icon_32px.png */; };
+		4327933D194F003A003C9FEA /* ardour_icon_48px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926F194F0039003C9FEA /* ardour_icon_48px.png */; };
+		4327933E194F003A003C9FEA /* chord.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279270194F0039003C9FEA /* chord.png */; };
+		4327933F194F003A003C9FEA /* close.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279271194F0039003C9FEA /* close.png */; };
+		43279340194F003A003C9FEA /* computer_keyboard.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279272194F0039003C9FEA /* computer_keyboard.png */; };
+		43279341194F003A003C9FEA /* computer_keyboard_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279273194F0039003C9FEA /* computer_keyboard_active.png */; };
+		43279342194F003A003C9FEA /* display_clock_mockup.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279274194F0039003C9FEA /* display_clock_mockup.png */; };
+		43279343194F003A003C9FEA /* display_metrics_mockup.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279275194F0039003C9FEA /* display_metrics_mockup.png */; };
+		43279344194F003A003C9FEA /* eighthnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279276194F0039003C9FEA /* eighthnote.png */; };
+		43279345194F003A003C9FEA /* expand_left_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279277194F0039003C9FEA /* expand_left_right_cursor.png */; };
+		43279346194F003A003C9FEA /* expand_up_down_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279278194F0039003C9FEA /* expand_up_down_cursor.png */; };
+		43279347194F003A003C9FEA /* export_icons.sh in Resources */ = {isa = PBXBuildFile; fileRef = 43279279194F0039003C9FEA /* export_icons.sh */; };
+		43279348194F003A003C9FEA /* fade_in_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927A194F0039003C9FEA /* fade_in_cursor.png */; };
+		43279349194F003A003C9FEA /* fade_out_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927B194F0039003C9FEA /* fade_out_cursor.png */; };
+		4327934A194F003A003C9FEA /* fadein-constant-power.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927C194F0039003C9FEA /* fadein-constant-power.png */; };
+		4327934B194F003A003C9FEA /* fadein-fast-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927D194F0039003C9FEA /* fadein-fast-cut.png */; };
+		4327934C194F003A003C9FEA /* fadein-linear.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927E194F0039003C9FEA /* fadein-linear.png */; };
+		4327934D194F003A003C9FEA /* fadein-long-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927F194F0039003C9FEA /* fadein-long-cut.png */; };
+		4327934E194F003A003C9FEA /* fadein-S1.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279280194F0039003C9FEA /* fadein-S1.png */; };
+		4327934F194F003A003C9FEA /* fadein-S2.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279281194F0039003C9FEA /* fadein-S2.png */; };
+		43279350194F003A003C9FEA /* fadein-short-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279282194F0039003C9FEA /* fadein-short-cut.png */; };
+		43279351194F003A003C9FEA /* fadein-slow-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279283194F0039003C9FEA /* fadein-slow-cut.png */; };
+		43279352194F003A003C9FEA /* fadeout-constant-power.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279284194F0039003C9FEA /* fadeout-constant-power.png */; };
+		43279353194F003A003C9FEA /* fadeout-fast-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279285194F0039003C9FEA /* fadeout-fast-cut.png */; };
+		43279354194F003A003C9FEA /* fadeout-linear.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279286194F0039003C9FEA /* fadeout-linear.png */; };
+		43279355194F003A003C9FEA /* fadeout-long-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279287194F0039003C9FEA /* fadeout-long-cut.png */; };
+		43279356194F003A003C9FEA /* fadeout-S1.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279288194F0039003C9FEA /* fadeout-S1.png */; };
+		43279357194F003A003C9FEA /* fadeout-S2.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279289194F0039003C9FEA /* fadeout-S2.png */; };
+		43279358194F003A003C9FEA /* fadeout-short-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928A194F0039003C9FEA /* fadeout-short-cut.png */; };
+		43279359194F003A003C9FEA /* fadeout-slow-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928B194F0039003C9FEA /* fadeout-slow-cut.png */; };
+		4327935A194F003A003C9FEA /* fader_belt.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928C194F0039003C9FEA /* fader_belt.png */; };
+		4327935B194F003A003C9FEA /* fader_belt_desensitised.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928D194F0039003C9FEA /* fader_belt_desensitised.png */; };
+		4327935C194F003A003C9FEA /* fader_belt_h.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928E194F0039003C9FEA /* fader_belt_h.png */; };
+		4327935D194F003A003C9FEA /* fader_belt_h_desensitised.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928F194F0039003C9FEA /* fader_belt_h_desensitised.png */; };
+		4327935E194F003A003C9FEA /* fader_belt_h_medium.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279290194F0039003C9FEA /* fader_belt_h_medium.png */; };
+		4327935F194F003A003C9FEA /* fader_belt_h_medium_desensitised.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279291194F0039003C9FEA /* fader_belt_h_medium_desensitised.png */; };
+		43279360194F003A003C9FEA /* fader_belt_h_thin.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279292194F0039003C9FEA /* fader_belt_h_thin.png */; };
+		43279361194F003A003C9FEA /* fader_belt_h_thin_desensitised.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279293194F0039003C9FEA /* fader_belt_h_thin_desensitised.png */; };
+		43279362194F003A003C9FEA /* fader_handle.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279294194F0039003C9FEA /* fader_handle.png */; };
+		43279363194F003A003C9FEA /* ferret_02.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279295194F0039003C9FEA /* ferret_02.png */; };
+		43279364194F003A003C9FEA /* forte.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279296194F0039003C9FEA /* forte.png */; };
+		43279365194F003A003C9FEA /* fortissimo.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279297194F0039003C9FEA /* fortissimo.png */; };
+		43279366194F003A003C9FEA /* fortississimo.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279298194F0039003C9FEA /* fortississimo.png */; };
+		43279367194F003A003C9FEA /* grabber.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279299194F0039003C9FEA /* grabber.png */; };
+		43279368194F003A003C9FEA /* grabber_edit_point.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929A194F0039003C9FEA /* grabber_edit_point.png */; };
+		43279369194F003A003C9FEA /* grabber_note.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929B194F0039003C9FEA /* grabber_note.png */; };
+		4327936A194F003A003C9FEA /* halfnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929C194F0039003C9FEA /* halfnote.png */; };
+		4327936B194F003A003C9FEA /* hide.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929D194F0039003C9FEA /* hide.png */; };
+		4327936C194F003A003C9FEA /* horizontal_zoom_fader_face.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929E194F0039003C9FEA /* horizontal_zoom_fader_face.png */; };
+		4327936D194F003A003C9FEA /* i_beam_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929F194F0039003C9FEA /* i_beam_cursor.png */; };
+		4327936E194F003A003C9FEA /* inspector_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A0194F0039003C9FEA /* inspector_on.png */; };
+		4327936F194F003A003C9FEA /* inspector_on_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A1194F0039003C9FEA /* inspector_on_active.png */; };
+		43279370194F003A003C9FEA /* inspector_on_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A2194F0039003C9FEA /* inspector_on_prelight.png */; };
+		43279371194F003A003C9FEA /* join_tools.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A3194F0039003C9FEA /* join_tools.png */; };
+		43279372194F003A003C9FEA /* knob.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A4194F0039003C9FEA /* knob.png */; };
+		43279373194F003A003C9FEA /* lock_session.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A5194F0039003C9FEA /* lock_session.png */; };
+		43279374194F003A003C9FEA /* lock_session_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A6194F0039003C9FEA /* lock_session_active.png */; };
+		43279375194F003A003C9FEA /* lock_session_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A7194F0039003C9FEA /* lock_session_prelight.png */; };
+		43279376194F003A003C9FEA /* media_button.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A8194F0039003C9FEA /* media_button.png */; };
+		43279377194F003A003C9FEA /* media_button_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A9194F0039003C9FEA /* media_button_active.png */; };
+		43279378194F003A003C9FEA /* media_button_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AA194F0039003C9FEA /* media_button_prelight.png */; };
+		43279379194F003A003C9FEA /* meter_bridge_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AB194F0039003C9FEA /* meter_bridge_on.png */; };
+		4327937A194F003A003C9FEA /* meter_bridge_on_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AC194F0039003C9FEA /* meter_bridge_on_active.png */; };
+		4327937B194F003A003C9FEA /* meter_bridge_on_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AD194F0039003C9FEA /* meter_bridge_on_prelight.png */; };
+		4327937C194F003A003C9FEA /* metronome.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AE194F0039003C9FEA /* metronome.png */; };
+		4327937D194F003A003C9FEA /* mezzforte.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AF194F0039003C9FEA /* mezzforte.png */; };
+		4327937E194F003A003C9FEA /* mezzoforte.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B0194F0039003C9FEA /* mezzoforte.png */; };
+		4327937F194F003A003C9FEA /* mezzopiano.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B1194F0039003C9FEA /* mezzopiano.png */; };
+		43279380194F003A003C9FEA /* midi-input-active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B2194F0039003C9FEA /* midi-input-active.png */; };
+		43279381194F003A003C9FEA /* midi-input-inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B3194F0039003C9FEA /* midi-input-inactive.png */; };
+		43279382194F003A003C9FEA /* midi_panic.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B4194F0039003C9FEA /* midi_panic.png */; };
+		43279383194F003A003C9FEA /* midi_socket_small.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B5194F0039003C9FEA /* midi_socket_small.png */; };
+		43279384194F003A003C9FEA /* midi_sound_notes.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B6194F0039003C9FEA /* midi_sound_notes.png */; };
+		43279385194F003A003C9FEA /* midi_tool_erase.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B7194F0039003C9FEA /* midi_tool_erase.png */; };
+		43279386194F003A003C9FEA /* midi_tool_pencil.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B8194F0039003C9FEA /* midi_tool_pencil.png */; };
+		43279387194F003A003C9FEA /* midi_tool_select.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B9194F0039003C9FEA /* midi_tool_select.png */; };
+		43279388194F003A003C9FEA /* mixer_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BA194F0039003C9FEA /* mixer_on.png */; };
+		43279389194F003A003C9FEA /* mixer_on_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BB194F0039003C9FEA /* mixer_on_active.png */; };
+		4327938A194F003A003C9FEA /* mixer_on_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BC194F0039003C9FEA /* mixer_on_prelight.png */; };
+		4327938B194F003A003C9FEA /* mode_multi_out.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BD194F0039003C9FEA /* mode_multi_out.png */; };
+		4327938C194F003A003C9FEA /* mode_multi_out_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BE194F0039003C9FEA /* mode_multi_out_active.png */; };
+		4327938D194F003A003C9FEA /* mode_multi_out_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BF194F0039003C9FEA /* mode_multi_out_prelight.png */; };
+		4327938E194F003A003C9FEA /* mode_stereo_out.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C0194F0039003C9FEA /* mode_stereo_out.png */; };
+		4327938F194F003A003C9FEA /* mode_stereo_out_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C1194F0039003C9FEA /* mode_stereo_out_active.png */; };
+		43279390194F003A003C9FEA /* mode_stereo_out_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C2194F0039003C9FEA /* mode_stereo_out_prelight.png */; };
+		43279391194F003A003C9FEA /* move_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C3194F0039003C9FEA /* move_cursor.png */; };
+		43279392194F003A003C9FEA /* mute-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C4194F0039003C9FEA /* mute-disabled.png */; };
+		43279393194F003A003C9FEA /* mute-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C5194F0039003C9FEA /* mute-enabled.png */; };
+		43279394194F003A003C9FEA /* muted-by-others.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C6194F0039003C9FEA /* muted-by-others.png */; };
+		43279395194F003A003C9FEA /* nudge_left.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C7194F0039003C9FEA /* nudge_left.png */; };
+		43279396194F003A003C9FEA /* nudge_right.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C8194F0039003C9FEA /* nudge_right.png */; };
+		43279397194F003A003C9FEA /* pianissimo.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C9194F0039003C9FEA /* pianissimo.png */; };
+		43279398194F003A003C9FEA /* pianississimo.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CA194F0039003C9FEA /* pianississimo.png */; };
+		43279399194F003A003C9FEA /* piano.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CB194F0039003C9FEA /* piano.png */; };
+		4327939A194F003A003C9FEA /* quarternote.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CC194F0039003C9FEA /* quarternote.png */; };
+		4327939B194F003A003C9FEA /* rec-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CD194F0039003C9FEA /* rec-enabled.png */; };
+		4327939C194F003A003C9FEA /* rec-in-progress.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CE194F0039003C9FEA /* rec-in-progress.png */; };
+		4327939D194F003A003C9FEA /* record-normal-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CF194F0039003C9FEA /* record-normal-disabled.png */; };
+		4327939E194F003A003C9FEA /* record-normal-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D0194F0039003C9FEA /* record-normal-enabled.png */; };
+		4327939F194F003A003C9FEA /* record-normal-in-progress.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D1194F0039003C9FEA /* record-normal-in-progress.png */; };
+		432793A0194F003A003C9FEA /* record-step.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D2194F0039003C9FEA /* record-step.png */; };
+		432793A1194F003A003C9FEA /* record_disabled_grey.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D3194F0039003C9FEA /* record_disabled_grey.png */; };
+		432793A2194F003A003C9FEA /* record_normal_red.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D4194F0039003C9FEA /* record_normal_red.png */; };
+		432793A3194F003A003C9FEA /* record_tape_red.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D5194F0039003C9FEA /* record_tape_red.png */; };
+		432793A4194F003A003C9FEA /* resize_bottom_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D6194F0039003C9FEA /* resize_bottom_cursor.png */; };
+		432793A5194F003A003C9FEA /* resize_bottom_left_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D7194F0039003C9FEA /* resize_bottom_left_cursor.png */; };
+		432793A6194F003A003C9FEA /* resize_bottom_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D8194F0039003C9FEA /* resize_bottom_right_cursor.png */; };
+		432793A7194F003A003C9FEA /* resize_left_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D9194F0039003C9FEA /* resize_left_cursor.png */; };
+		432793A8194F003A003C9FEA /* resize_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DA194F0039003C9FEA /* resize_right_cursor.png */; };
+		432793A9194F003A003C9FEA /* resize_top_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DB194F0039003C9FEA /* resize_top_cursor.png */; };
+		432793AA194F003A003C9FEA /* resize_top_left_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DC194F0039003C9FEA /* resize_top_left_cursor.png */; };
+		432793AB194F003A003C9FEA /* resize_top_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DD194F0039003C9FEA /* resize_top_right_cursor.png */; };
+		432793AC194F003A003C9FEA /* sae.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DE194F0039003C9FEA /* sae.png */; };
+		432793AD194F003A003C9FEA /* sessionlock.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DF194F0039003C9FEA /* sessionlock.png */; };
+		432793AE194F003A003C9FEA /* sixteenthnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E0194F0039003C9FEA /* sixteenthnote.png */; };
+		432793AF194F003A003C9FEA /* sixtyfourthnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E1194F0039003C9FEA /* sixtyfourthnote.png */; };
+		432793B0194F003A003C9FEA /* slider_controller_fader.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E2194F0039003C9FEA /* slider_controller_fader.png */; };
+		432793B1194F003A003C9FEA /* slider_controller_fader_handle.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E3194F0039003C9FEA /* slider_controller_fader_handle.png */; };
+		432793B2194F003A003C9FEA /* solo-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E4194F0039003C9FEA /* solo-disabled.png */; };
+		432793B3194F003A003C9FEA /* solo-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E5194F0039003C9FEA /* solo-enabled.png */; };
+		432793B4194F003A003C9FEA /* solo-isolate-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E6194F0039003C9FEA /* solo-isolate-disabled.png */; };
+		432793B5194F003A003C9FEA /* solo-isolate-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E7194F0039003C9FEA /* solo-isolate-enabled.png */; };
+		432793B6194F003A003C9FEA /* solo-isolated.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E8194F0039003C9FEA /* solo-isolated.png */; };
+		432793B7194F003A003C9FEA /* solo-safe-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E9194F0039003C9FEA /* solo-safe-disabled.png */; };
+		432793B8194F003A003C9FEA /* solo-safe-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EA194F0039003C9FEA /* solo-safe-enabled.png */; };
+		432793B9194F003A003C9FEA /* solo-safe-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EB194F0039003C9FEA /* solo-safe-icon.png */; };
+		432793BA194F003A003C9FEA /* soloed-by-others.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EC194F0039003C9FEA /* soloed-by-others.png */; };
+		432793BB194F003A003C9FEA /* step-editing.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792ED194F0039003C9FEA /* step-editing.png */; };
+		432793BC194F003A003C9FEA /* strip_width.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EE194F0039003C9FEA /* strip_width.png */; };
+		432793BD194F003A003C9FEA /* systemlock.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EF194F0039003C9FEA /* systemlock.png */; };
+		432793BE194F003A003C9FEA /* tav_exp.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F0194F0039003C9FEA /* tav_exp.png */; };
+		432793BF194F003A003C9FEA /* tav_shrink.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F1194F0039003C9FEA /* tav_shrink.png */; };
+		432793C0194F003A003C9FEA /* thirtysecondnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F2194F0039003C9FEA /* thirtysecondnote.png */; };
+		432793C1194F003A003C9FEA /* tool_arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F3194F0039003C9FEA /* tool_arrow.png */; };
+		432793C2194F003A003C9FEA /* tool_arrow_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F4194F0039003C9FEA /* tool_arrow_active.png */; };
+		432793C3194F003A003C9FEA /* tool_arrow_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F5194F0039003C9FEA /* tool_arrow_prelight.png */; };
+		432793C4194F003A003C9FEA /* tool_audition.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F6194F0039003C9FEA /* tool_audition.png */; };
+		432793C5194F003A003C9FEA /* tool_cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F7194F0039003C9FEA /* tool_cut.png */; };
+		432793C6194F003A003C9FEA /* tool_cut_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F8194F0039003C9FEA /* tool_cut_active.png */; };
+		432793C7194F003A003C9FEA /* tool_cut_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F9194F0039003C9FEA /* tool_cut_prelight.png */; };
+		432793C8194F003A003C9FEA /* tool_gain.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FA194F0039003C9FEA /* tool_gain.png */; };
+		432793C9194F003A003C9FEA /* tool_marker.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FB194F0039003C9FEA /* tool_marker.png */; };
+		432793CA194F003A003C9FEA /* tool_marker_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FC194F0039003C9FEA /* tool_marker_active.png */; };
+		432793CB194F003A003C9FEA /* tool_marker_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FD194F0039003C9FEA /* tool_marker_prelight.png */; };
+		432793CC194F003A003C9FEA /* tool_note.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FE194F0039003C9FEA /* tool_note.png */; };
+		432793CD194F003A003C9FEA /* tool_object.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FF194F0039003C9FEA /* tool_object.png */; };
+		432793CE194F003A003C9FEA /* tool_object_range.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279300194F0039003C9FEA /* tool_object_range.png */; };
+		432793CF194F003A003C9FEA /* tool_range.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279301194F0039003C9FEA /* tool_range.png */; };
+		432793D0194F003A003C9FEA /* tool_stretch.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279302194F0039003C9FEA /* tool_stretch.png */; };
+		432793D1194F003A003C9FEA /* tool_waveform_zoom.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279303194F0039003C9FEA /* tool_waveform_zoom.png */; };
+		432793D2194F003A003C9FEA /* tool_waveform_zoom_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279304194F0039003C9FEA /* tool_waveform_zoom_active.png */; };
+		432793D3194F003A003C9FEA /* tool_waveform_zoom_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279305194F0039003C9FEA /* tool_waveform_zoom_prelight.png */; };
+		432793D4194F003A003C9FEA /* tool_zoom.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279306194F0039003C9FEA /* tool_zoom.png */; };
+		432793D5194F003A003C9FEA /* tool_zoom_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279307194F0039003C9FEA /* tool_zoom_active.png */; };
+		432793D6194F003A003C9FEA /* tool_zoom_ardour.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279308194F0039003C9FEA /* tool_zoom_ardour.png */; };
+		432793D7194F003A003C9FEA /* tool_zoom_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279309194F0039003C9FEA /* tool_zoom_prelight.png */; };
+		432793D8194F003A003C9FEA /* tracks.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930A194F003A003C9FEA /* tracks.png */; };
+		432793D9194F003A003C9FEA /* tracks_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930B194F003A003C9FEA /* tracks_active.png */; };
+		432793DA194F003A003C9FEA /* tracks_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930C194F003A003C9FEA /* tracks_prelight.png */; };
+		432793DB194F003A003C9FEA /* transport_end.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930D194F003A003C9FEA /* transport_end.png */; };
+		432793DC194F003A003C9FEA /* transport_end_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930E194F003A003C9FEA /* transport_end_active.png */; };
+		432793DD194F003A003C9FEA /* transport_end_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930F194F003A003C9FEA /* transport_end_prelight.png */; };
+		432793DE194F003A003C9FEA /* transport_loop.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279310194F003A003C9FEA /* transport_loop.png */; };
+		432793DF194F003A003C9FEA /* transport_loop_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279311194F003A003C9FEA /* transport_loop_active.png */; };
+		432793E0194F003A003C9FEA /* transport_loop_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279312194F003A003C9FEA /* transport_loop_prelight.png */; };
+		432793E1194F003A003C9FEA /* transport_play.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279313194F003A003C9FEA /* transport_play.png */; };
+		432793E2194F003A003C9FEA /* transport_play_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279314194F003A003C9FEA /* transport_play_active.png */; };
+		432793E3194F003A003C9FEA /* transport_play_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279315194F003A003C9FEA /* transport_play_prelight.png */; };
+		432793E4194F003A003C9FEA /* transport_range.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279316194F003A003C9FEA /* transport_range.png */; };
+		432793E5194F003A003C9FEA /* transport_record.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279317194F003A003C9FEA /* transport_record.png */; };
+		432793E6194F003A003C9FEA /* transport_record_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279318194F003A003C9FEA /* transport_record_active.png */; };
+		432793E7194F003A003C9FEA /* transport_record_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279319194F003A003C9FEA /* transport_record_prelight.png */; };
+		432793E8194F003A003C9FEA /* transport_start.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931A194F003A003C9FEA /* transport_start.png */; };
+		432793E9194F003A003C9FEA /* transport_start_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931B194F003A003C9FEA /* transport_start_active.png */; };
+		432793EA194F003A003C9FEA /* transport_start_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931C194F003A003C9FEA /* transport_start_prelight.png */; };
+		432793EB194F003A003C9FEA /* transport_stop.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931D194F003A003C9FEA /* transport_stop.png */; };
+		432793EC194F003A003C9FEA /* transport_stop_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931E194F003A003C9FEA /* transport_stop_active.png */; };
+		432793ED194F003A003C9FEA /* transport_stop_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931F194F003A003C9FEA /* transport_stop_prelight.png */; };
+		432793EE194F003A003C9FEA /* trim_bottom_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279320194F003A003C9FEA /* trim_bottom_cursor.png */; };
+		432793EF194F003A003C9FEA /* trim_left_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279321194F003A003C9FEA /* trim_left_cursor.png */; };
+		432793F0194F003A003C9FEA /* trim_left_cursor_5.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279322194F003A003C9FEA /* trim_left_cursor_5.png */; };
+		432793F1194F003A003C9FEA /* trim_left_cursor_right_only.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279323194F003A003C9FEA /* trim_left_cursor_right_only.png */; };
+		432793F2194F003A003C9FEA /* trim_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279324194F003A003C9FEA /* trim_right_cursor.png */; };
+		432793F3194F003A003C9FEA /* trim_right_cursor_5.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279325194F003A003C9FEA /* trim_right_cursor_5.png */; };
+		432793F4194F003A003C9FEA /* trim_right_cursor_left_only.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279326194F003A003C9FEA /* trim_right_cursor_left_only.png */; };
+		432793F5194F003A003C9FEA /* trim_top_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279327194F003A003C9FEA /* trim_top_cursor.png */; };
+		432793F6194F003A003C9FEA /* vertical_zoom_fader_face.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279328194F003A003C9FEA /* vertical_zoom_fader_face.png */; };
+		432793F7194F003A003C9FEA /* wholenote.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279329194F003A003C9FEA /* wholenote.png */; };
+		432793F8194F003A003C9FEA /* zoom_fader_handle.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932A194F003A003C9FEA /* zoom_fader_handle.png */; };
+		432793F9194F003A003C9FEA /* zoom_fader_handle_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932B194F003A003C9FEA /* zoom_fader_handle_active.png */; };
+		432793FA194F003A003C9FEA /* zoom_full.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932C194F003A003C9FEA /* zoom_full.png */; };
+		432793FB194F003A003C9FEA /* zoom_in.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932D194F003A003C9FEA /* zoom_in.png */; };
+		432793FC194F003A003C9FEA /* zoom_in_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932E194F003A003C9FEA /* zoom_in_cursor.png */; };
+		432793FD194F003A003C9FEA /* zoom_out.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932F194F003A003C9FEA /* zoom_out.png */; };
+		432793FE194F003A003C9FEA /* zoom_out_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279330194F003A003C9FEA /* zoom_out_cursor.png */; };
+		43279431194F0062003C9FEA /* forwardblarrow.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279400194F0062003C9FEA /* forwardblarrow.xpm */; };
+		43279432194F0062003C9FEA /* h_meter_strip.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279401194F0062003C9FEA /* h_meter_strip.xpm */; };
+		43279433194F0062003C9FEA /* hiin.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279402194F0062003C9FEA /* hiin.xpm */; };
+		43279434194F0062003C9FEA /* hiout.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279403194F0062003C9FEA /* hiout.xpm */; };
+		43279435194F0062003C9FEA /* hslider00.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279404194F0062003C9FEA /* hslider00.xpm */; };
+		43279436194F0062003C9FEA /* hslider01.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279405194F0062003C9FEA /* hslider01.xpm */; };
+		43279437194F0062003C9FEA /* left_arrow.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279406194F0062003C9FEA /* left_arrow.xpm */; };
+		43279438194F0062003C9FEA /* linin.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279407194F0062003C9FEA /* linin.xpm */; };
+		43279439194F0062003C9FEA /* linout.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279408194F0062003C9FEA /* linout.xpm */; };
+		4327943A194F0062003C9FEA /* loin.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279409194F0062003C9FEA /* loin.xpm */; };
+		4327943B194F0062003C9FEA /* loop.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940A194F0062003C9FEA /* loop.xpm */; };
+		4327943C194F0062003C9FEA /* loout.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940B194F0062003C9FEA /* loout.xpm */; };
+		4327943D194F0062003C9FEA /* lr.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940C194F0062003C9FEA /* lr.xpm */; };
+		4327943E194F0062003C9FEA /* regin.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940D194F0062003C9FEA /* regin.xpm */; };
+		4327943F194F0062003C9FEA /* regin2.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940E194F0062003C9FEA /* regin2.xpm */; };
+		43279440194F0062003C9FEA /* regout.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940F194F0062003C9FEA /* regout.xpm */; };
+		43279441194F0062003C9FEA /* regout2.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279410194F0062003C9FEA /* regout2.xpm */; };
+		43279442194F0062003C9FEA /* revdblarrow.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279411194F0062003C9FEA /* revdblarrow.xpm */; };
+		43279443194F0062003C9FEA /* right_arrow.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279412194F0062003C9FEA /* right_arrow.xpm */; };
+		43279444194F0062003C9FEA /* set-next-button.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279413194F0062003C9FEA /* set-next-button.xpm */; };
+		43279445194F0062003C9FEA /* small-round-button-01.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279414194F0062003C9FEA /* small-round-button-01.xpm */; };
+		43279446194F0062003C9FEA /* small_x.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279415194F0062003C9FEA /* small_x.xpm */; };
+		43279447194F0062003C9FEA /* toggle-button-00.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279416194F0062003C9FEA /* toggle-button-00.xpm */; };
+		43279448194F0062003C9FEA /* toggle-button-01.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279417194F0062003C9FEA /* toggle-button-01.xpm */; };
+		43279449194F0062003C9FEA /* tool_audition.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279418194F0062003C9FEA /* tool_audition.xpm */; };
+		4327944A194F0062003C9FEA /* tool_gain.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279419194F0062003C9FEA /* tool_gain.xpm */; };
+		4327944B194F0062003C9FEA /* tool_object.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941A194F0062003C9FEA /* tool_object.xpm */; };
+		4327944C194F0062003C9FEA /* tool_range.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941B194F0062003C9FEA /* tool_range.xpm */; };
+		4327944D194F0062003C9FEA /* tool_stretch.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941C194F0062003C9FEA /* tool_stretch.xpm */; };
+		4327944E194F0062003C9FEA /* tool_zoom.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941D194F0062003C9FEA /* tool_zoom.xpm */; };
+		4327944F194F0062003C9FEA /* v_meter_strip.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941E194F0062003C9FEA /* v_meter_strip.xpm */; };
+		43279450194F0062003C9FEA /* vslider00.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941F194F0062003C9FEA /* vslider00.xpm */; };
+		43279451194F0062003C9FEA /* vslider01.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279420194F0062003C9FEA /* vslider01.xpm */; };
+		43279452194F0062003C9FEA /* vslider02_rail.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279421194F0062003C9FEA /* vslider02_rail.xpm */; };
+		43279453194F0062003C9FEA /* vslider02_slider.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279422194F0062003C9FEA /* vslider02_slider.xpm */; };
+		43279454194F0062003C9FEA /* vslider_slider_16wide.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279423194F0062003C9FEA /* vslider_slider_16wide.xpm */; };
+		43279455194F0062003C9FEA /* zoom_full.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279424194F0062003C9FEA /* zoom_full.xpm */; };
+		43279456194F0062003C9FEA /* zoom_in.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279425194F0062003C9FEA /* zoom_in.xpm */; };
+		43279457194F0062003C9FEA /* zoom_out.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279426194F0062003C9FEA /* zoom_out.xpm */; };
+		43279458194F0062003C9FEA /* small-splash.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279427194F0062003C9FEA /* small-splash.png */; };
+		43279459194F0062003C9FEA /* splash.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279428194F0062003C9FEA /* splash.png */; };
+		4327945A194F0062003C9FEA /* device_capture_control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942A194F0062003C9FEA /* device_capture_control.xml */; };
+		4327945B194F0062003C9FEA /* device_playback_control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942B194F0062003C9FEA /* device_playback_control.xml */; };
+		4327945C194F0062003C9FEA /* editor_window.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942C194F0062003C9FEA /* editor_window.xml */; };
+		4327945D194F0062003C9FEA /* midi_device_control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942D194F0062003C9FEA /* midi_device_control.xml */; };
+		4327945E194F0062003C9FEA /* session_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942E194F0062003C9FEA /* session_dialog.xml */; };
+		4327945F194F0062003C9FEA /* session_lock_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942F194F0062003C9FEA /* session_lock_dialog.xml */; };
+		43279460194F0062003C9FEA /* tracks_preferences.xml in Resources */ = {isa = PBXBuildFile; fileRef = 43279430194F0062003C9FEA /* tracks_preferences.xml */; };
+		4327947F194F009E003C9FEA /* tracks.menus.in in Resources */ = {isa = PBXBuildFile; fileRef = 43279475194F009E003C9FEA /* tracks.menus.in */; };
+		43B351ED194F04E00038C140 /* step_editing.bindings in Resources */ = {isa = PBXBuildFile; fileRef = 43B351C0194F04E00038C140 /* step_editing.bindings */; };
+		5BC24BAA1A64328D006A2400 /* trackslive.menus.in in Resources */ = {isa = PBXBuildFile; fileRef = 5BC24BA91A64328D006A2400 /* trackslive.menus.in */; };
+		5BC67E591A408FCE00F29ABA /* progress_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 5BC67E581A408FCE00F29ABA /* progress_dialog.xml */; };
+		5BC67E5F1A4090BD00F29ABA /* progress_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5BC67E5E1A4090BD00F29ABA /* progress_dialog.cc */; };
+		95176F7A1A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95176F791A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc */; };
+		95176F7E1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95176F7D1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml */; };
+		952E0B3C1A0A1D7000F375D0 /* buildlog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 952E0B3B1A0A1D7000F375D0 /* buildlog.txt */; };
+		954DCFBD1A0239DA00B7160E /* about_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 954DCFBC1A0239DA00B7160E /* about_dialog.cc */; };
+		954DCFC11A023AAB00B7160E /* about_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 954DCFBF1A023AAB00B7160E /* about_dialog.xml */; };
+		954DCFC21A023AAB00B7160E /* license_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 954DCFC01A023AAB00B7160E /* license_dialog.xml */; };
+		954DCFDE1A07A14E00B7160E /* read_only_session_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 954DCFDD1A07A14E00B7160E /* read_only_session_dialog.xml */; };
+		956D3F8A1A851805004F328C /* waves_import_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 956D3F891A851805004F328C /* waves_import_dialog.xml */; };
+		957EF44B1A30BFB300F1500E /* waves_message_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 957EF44A1A30BFB300F1500E /* waves_message_dialog.cc */; };
+		95A134DE1A0239080008E3D6 /* license_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95A134DD1A0239080008E3D6 /* license_dialog.cc */; };
+		95D1C51F1A78ED2100BE28DB /* waves_edit_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D1C51E1A78ED2100BE28DB /* waves_edit_dialog.cc */; };
+		95D1C5211A78ED3A00BE28DB /* waves_edit_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D1C5201A78ED3A00BE28DB /* waves_edit_dialog.xml */; };
+		95D4986E1AEA363E006E065D /* audio_engine_reset_info_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D4986B1AEA363E006E065D /* audio_engine_reset_info_dialog.xml */; };
+		95D4986F1AEA363E006E065D /* crash_recovery_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D4986C1AEA363E006E065D /* crash_recovery_dialog.xml */; };
+		95D498701AEA363E006E065D /* waves_save_template_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D4986D1AEA363E006E065D /* waves_save_template_dialog.xml */; };
+		95D5D1371A8A514300407F98 /* waves_numeric_edit_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D5D1361A8A514300407F98 /* waves_numeric_edit_dialog.cc */; };
+		95D5D1391A8A514300407F98 /* waves_numeric_edit_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D5D1381A8A514300407F98 /* waves_numeric_edit_dialog.xml */; };
+		95D6A67C1A8E22E80030CDD0 /* waves_keyeditor.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D6A67A1A8E22E80030CDD0 /* waves_keyeditor.xml */; };
+		95D71D551A4C66F600DE5B3B /* waves_track_color_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D71D541A4C66F600DE5B3B /* waves_track_color_dialog.cc */; };
+		95D71D581A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D71D571A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc */; };
+		95D795E81A7BB40C00120A4F /* marker_inspector_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795DB1A7BB40C00120A4F /* marker_inspector_dialog.xml */; };
+		95D795EA1A7BB40C00120A4F /* waves_export_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795DD1A7BB40C00120A4F /* waves_export_dialog.xml */; };
+		95D795EB1A7BB40C00120A4F /* waves_export_file_notebook_page.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795DE1A7BB40C00120A4F /* waves_export_file_notebook_page.xml */; };
+		95D795EC1A7BB40C00120A4F /* waves_export_file_notebook.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795DF1A7BB40C00120A4F /* waves_export_file_notebook.xml */; };
+		95D795ED1A7BB40C00120A4F /* waves_export_filename_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E01A7BB40C00120A4F /* waves_export_filename_selector.xml */; };
+		95D795EE1A7BB40C00120A4F /* waves_export_format_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E11A7BB40C00120A4F /* waves_export_format_selector.xml */; };
+		95D795EF1A7BB40C00120A4F /* waves_export_preset_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E21A7BB40C00120A4F /* waves_export_preset_selector.xml */; };
+		95D795F01A7BB40C00120A4F /* waves_export_timespan_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E31A7BB40C00120A4F /* waves_export_timespan_selector.xml */; };
+		95D795F11A7BB40C00120A4F /* waves_port_export_channel_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E41A7BB40C00120A4F /* waves_port_export_channel_selector.xml */; };
+		95D795F21A7BB40C00120A4F /* waves_region_export_channel_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E51A7BB40C00120A4F /* waves_region_export_channel_selector.xml */; };
+		95D795F31A7BB40C00120A4F /* waves_track_color_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E61A7BB40C00120A4F /* waves_track_color_dialog.xml */; };
+		95D795F41A7BB40C00120A4F /* waves_track_export_channel_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E71A7BB40C00120A4F /* waves_track_export_channel_selector.xml */; };
+		95D7960B1A7BB9E000120A4F /* floating_text_entry.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D795FF1A7BB9E000120A4F /* floating_text_entry.cc */; };
+		95D7960C1A7BB9E000120A4F /* marker_inspector_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796001A7BB9E000120A4F /* marker_inspector_dialog.cc */; };
+		95D7960D1A7BB9E000120A4F /* marker_inspector_dialog.logic.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796011A7BB9E000120A4F /* marker_inspector_dialog.logic.cc */; };
+		95D7960E1A7BB9E000120A4F /* route_inspector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796021A7BB9E000120A4F /* route_inspector.cc */; };
+		95D7960F1A7BB9E000120A4F /* waves_export_channel_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796031A7BB9E000120A4F /* waves_export_channel_selector.cc */; };
+		95D796101A7BB9E000120A4F /* waves_export_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796041A7BB9E000120A4F /* waves_export_dialog.cc */; };
+		95D796111A7BB9E000120A4F /* waves_export_file_notebook.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796051A7BB9E000120A4F /* waves_export_file_notebook.cc */; };
+		95D796121A7BB9E000120A4F /* waves_export_filename_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796061A7BB9E000120A4F /* waves_export_filename_selector.cc */; };
+		95D796131A7BB9E000120A4F /* waves_export_format_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796071A7BB9E000120A4F /* waves_export_format_selector.cc */; };
+		95D796141A7BB9E000120A4F /* waves_export_preset_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796081A7BB9E000120A4F /* waves_export_preset_selector.cc */; };
+		95D796151A7BB9E000120A4F /* waves_export_timespan_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796091A7BB9E000120A4F /* waves_export_timespan_selector.cc */; };
+		95D796161A7BB9E000120A4F /* waves_import_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D7960A1A7BB9E000120A4F /* waves_import_dialog.cc */; };
+		95D9E3791A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D9E3771A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml */; };
+		95D9E37A1A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D9E3781A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml */; };
+		95D9E37F1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D9E37D1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc */; };
+		95D9E3801A8D1B6600A0DA46 /* waves_missing_file_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D9E37E1A8D1B6600A0DA46 /* waves_missing_file_dialog.cc */; };
+		95E2A7AB1A8F652F0080BD79 /* waves_radio_item.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95E2A7AA1A8F652F0080BD79 /* waves_radio_item.xml */; };
+		95E5E9461AE946510000E2CE /* waves_tooltip.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95E5E9451AE946510000E2CE /* waves_tooltip.cc */; };
+		95F9DFD71A35A8BD0007E953 /* waves_message_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFD61A35A8BD0007E953 /* waves_message_dialog.xml */; };
+		95F9DFE01A35F3310007E953 /* waves_clean_up_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */; };
+		95F9DFE11A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */; };
+		95F9DFE21A35F3310007E953 /* waves_excessive_split_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */; };
+		95F9DFE41A35F3310007E953 /* waves_file_exists_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */; };
+		95F9DFE51A35F3310007E953 /* waves_how_to_import_dialog_1.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */; };
+		95F9DFE61A35F3310007E953 /* waves_how_to_import_dialog_2.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */; };
+		95F9DFE71A35F3310007E953 /* waves_route_rename_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDF1A35F3310007E953 /* waves_route_rename_dialog.xml */; };
+		CE1A907A199A37AE00ECA62B /* add_tracks_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE1A9079199A37AE00ECA62B /* add_tracks_dialog.cc */; };
+		CE1C6DCE19879F04006BDB03 /* compact_meter_bridge.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE1C6DCC19879F04006BDB03 /* compact_meter_bridge.cc */; };
+		CE1C6DCF19879F04006BDB03 /* compact_meter_strip.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE1C6DCD19879F04006BDB03 /* compact_meter_strip.cc */; };
+		CE1C6DE01987A924006BDB03 /* master_bus_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE1C6DDF1987A924006BDB03 /* master_bus_ui.cc */; };
+		CE294C5F19CAD4E300D12768 /* add_tracks_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5719CAD4E300D12768 /* add_tracks_dialog.xml */; };
+		CE294C6019CAD4E300D12768 /* compact_meter_bridge.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5819CAD4E300D12768 /* compact_meter_bridge.xml */; };
+		CE294C6119CAD4E300D12768 /* compact_meter_strip.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5919CAD4E300D12768 /* compact_meter_strip.xml */; };
+		CE294C6219CAD4E300D12768 /* marker_io_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5A19CAD4E300D12768 /* marker_io_dialog.xml */; };
+		CE294C6319CAD4E300D12768 /* meter_bridge_view.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5B19CAD4E300D12768 /* meter_bridge_view.xml */; };
+		CE294C6419CAD4E300D12768 /* meter_strip_gain_meter.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5C19CAD4E300D12768 /* meter_strip_gain_meter.xml */; };
+		CE294C6519CAD4E300D12768 /* mixer_bridge_view.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5D19CAD4E300D12768 /* mixer_bridge_view.xml */; };
+		CE294C6619CAD4E300D12768 /* time_info_box.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5E19CAD4E300D12768 /* time_info_box.xml */; };
+		CE294C7519CAD54500D12768 /* marker_io_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6B19CAD54500D12768 /* marker_io_dialog.cc */; };
+		CE294C7619CAD54500D12768 /* mixer_bridge_view.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6C19CAD54500D12768 /* mixer_bridge_view.cc */; };
+		CE294C7719CAD54500D12768 /* open_file_dialog_nix.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6D19CAD54500D12768 /* open_file_dialog_nix.cc */; };
+		CE294C7819CAD54500D12768 /* open_file_dialog_windows.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6E19CAD54500D12768 /* open_file_dialog_windows.cc */; };
+		CE294C7919CAD54500D12768 /* ruler_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6F19CAD54500D12768 /* ruler_dialog.cc */; };
+		CE294C7A19CAD54500D12768 /* soundcloud_export_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C7019CAD54500D12768 /* soundcloud_export_selector.cc */; };
+		CE294C7B19CAD54500D12768 /* waves_dropdown.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C7119CAD54500D12768 /* waves_dropdown.cc */; };
+		CE294C7C19CAD54500D12768 /* waves_grid.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C7219CAD54500D12768 /* waves_grid.cc */; };
+		CE294C7D19CAD54500D12768 /* waves_zoom_control.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C7319CAD54500D12768 /* waves_zoom_control.cc */; };
+		CEAFC770195445560016ACF0 /* bbt_time.cc in Sources */ = {isa = PBXBuildFile; fileRef = CEAFC76E195445560016ACF0 /* bbt_time.cc */; };
+		CEAFC771195445560016ACF0 /* time.cc in Sources */ = {isa = PBXBuildFile; fileRef = CEAFC76F195445560016ACF0 /* time.cc */; };
+		CEB0A9F219583F96006D269A /* session_close_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = CEB0A9F119583F96006D269A /* session_close_dialog.cc */; };
+		CEB0A9F41958447C006D269A /* session_close_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB0A9F31958447C006D269A /* session_close_dialog.xml */; };
+		CEB9D791197516BE00B21780 /* audio_time_axis.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D787197516BE00B21780 /* audio_time_axis.xml */; };
+		CEB9D792197516BE00B21780 /* automation_time_axis.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D788197516BE00B21780 /* automation_time_axis.xml */; };
+		CEB9D793197516BE00B21780 /* editor_mixer.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D789197516BE00B21780 /* editor_mixer.xml */; };
+		CEB9D794197516BE00B21780 /* inspector_gain_meter.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78A197516BE00B21780 /* inspector_gain_meter.xml */; };
+		CEB9D796197516BE00B21780 /* master_ui.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78C197516BE00B21780 /* master_ui.xml */; };
+		CEB9D797197516BE00B21780 /* meter_strip.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78D197516BE00B21780 /* meter_strip.xml */; };
+		CEB9D798197516BE00B21780 /* mixer_gain_meter.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78E197516BE00B21780 /* mixer_gain_meter.xml */; };
+		CEB9D799197516BE00B21780 /* mixer_strip.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78F197516BE00B21780 /* mixer_strip.xml */; };
+		CEB9D79A197516BE00B21780 /* track_header_gain_meter.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D790197516BE00B21780 /* track_header_gain_meter.xml */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		43B351F2194F12FB0038C140 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 43B351EE194F12FB0038C140 /* waves_audiobackend.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 43AA86DC194EECE000A67B56;
+			remoteInfo = waves_audiobackend;
+		};
+		43B351F8194F130D0038C140 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 43B351F4194F130C0038C140 /* libardour.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 43AA82A9194EEAAF00A67B56;
+			remoteInfo = libardour;
+		};
+		43B351FE194F131E0038C140 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 43B351FA194F131D0038C140 /* pbd.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 8D07F2C80486CC7A007CD1D0;
+			remoteInfo = pbd;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		43279043194EFFB9003C9FEA /* actions.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = actions.cc; path = ../actions.cc; sourceTree = SOURCE_ROOT; };
+		43279045194EFFB9003C9FEA /* add_route_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = add_route_dialog.cc; path = ../add_route_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279047194EFFB9003C9FEA /* add_video_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = add_video_dialog.cc; path = ../add_video_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279049194EFFB9003C9FEA /* ambiguous_file_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ambiguous_file_dialog.cc; path = ../ambiguous_file_dialog.cc; sourceTree = SOURCE_ROOT; };
+		4327904B194EFFB9003C9FEA /* analysis_window.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = analysis_window.cc; path = ../analysis_window.cc; sourceTree = SOURCE_ROOT; };
+		4327904D194EFFB9003C9FEA /* ardour_button.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_button.cc; path = ../ardour_button.cc; sourceTree = SOURCE_ROOT; };
+		4327904F194EFFB9003C9FEA /* ardour_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_dialog.cc; path = ../ardour_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279051194EFFB9003C9FEA /* ardour_ui_dependents.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_dependents.cc; path = ../ardour_ui_dependents.cc; sourceTree = SOURCE_ROOT; };
+		43279052194EFFB9003C9FEA /* ardour_ui_dialogs.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_dialogs.cc; path = ../ardour_ui_dialogs.cc; sourceTree = SOURCE_ROOT; };
+		43279053194EFFB9003C9FEA /* ardour_ui_ed.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_ed.cc; path = ../ardour_ui_ed.cc; sourceTree = SOURCE_ROOT; };
+		43279054194EFFB9003C9FEA /* ardour_ui_mixer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_mixer.cc; path = ../ardour_ui_mixer.cc; sourceTree = SOURCE_ROOT; };
+		43279055194EFFB9003C9FEA /* ardour_ui_options.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_options.cc; path = ../ardour_ui_options.cc; sourceTree = SOURCE_ROOT; };
+		43279056194EFFB9003C9FEA /* ardour_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui.cc; path = ../ardour_ui.cc; sourceTree = SOURCE_ROOT; };
+		43279058194EFFB9003C9FEA /* ardour_ui2.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui2.cc; path = ../ardour_ui2.cc; sourceTree = SOURCE_ROOT; };
+		43279059194EFFB9003C9FEA /* ardour_window.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_window.cc; path = ../ardour_window.cc; sourceTree = SOURCE_ROOT; };
+		4327905C194EFFB9003C9FEA /* au_pluginui.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = au_pluginui.mm; path = ../au_pluginui.mm; sourceTree = SOURCE_ROOT; };
+		4327905D194EFFB9003C9FEA /* audio_clock.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_clock.cc; path = ../audio_clock.cc; sourceTree = SOURCE_ROOT; };
+		4327905F194EFFB9003C9FEA /* audio_region_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_editor.cc; path = ../audio_region_editor.cc; sourceTree = SOURCE_ROOT; };
+		43279061194EFFB9003C9FEA /* audio_region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_view.cc; path = ../audio_region_view.cc; sourceTree = SOURCE_ROOT; };
+		43279063194EFFB9003C9FEA /* audio_streamview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_streamview.cc; path = ../audio_streamview.cc; sourceTree = SOURCE_ROOT; };
+		43279065194EFFB9003C9FEA /* audio_time_axis.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_time_axis.cc; path = ../audio_time_axis.cc; sourceTree = SOURCE_ROOT; };
+		43279067194EFFB9003C9FEA /* automation_controller.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_controller.cc; path = ../automation_controller.cc; sourceTree = SOURCE_ROOT; };
+		43279069194EFFB9003C9FEA /* automation_line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_line.cc; path = ../automation_line.cc; sourceTree = SOURCE_ROOT; };
+		4327906B194EFFB9003C9FEA /* automation_region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_region_view.cc; path = ../automation_region_view.cc; sourceTree = SOURCE_ROOT; };
+		4327906E194EFFB9003C9FEA /* automation_streamview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_streamview.cc; path = ../automation_streamview.cc; sourceTree = SOURCE_ROOT; };
+		43279070194EFFB9003C9FEA /* automation_time_axis.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_time_axis.cc; path = ../automation_time_axis.cc; sourceTree = SOURCE_ROOT; };
+		43279072194EFFB9003C9FEA /* axis_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = axis_view.cc; path = ../axis_view.cc; sourceTree = SOURCE_ROOT; };
+		43279074194EFFB9003C9FEA /* big_clock_window.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = big_clock_window.cc; path = ../big_clock_window.cc; sourceTree = SOURCE_ROOT; };
+		43279076194EFFB9003C9FEA /* bundle_env_cocoa.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_env_cocoa.cc; path = ../bundle_env_cocoa.cc; sourceTree = SOURCE_ROOT; };
+		43279077194EFFB9003C9FEA /* bundle_env_linux.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_env_linux.cc; path = ../bundle_env_linux.cc; sourceTree = SOURCE_ROOT; };
+		43279078194EFFB9003C9FEA /* bundle_env_mingw.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_env_mingw.cc; path = ../bundle_env_mingw.cc; sourceTree = SOURCE_ROOT; };
+		43279079194EFFB9003C9FEA /* bundle_env_msvc.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_env_msvc.cc; path = ../bundle_env_msvc.cc; sourceTree = SOURCE_ROOT; };
+		4327907B194EFFB9003C9FEA /* bundle_manager.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_manager.cc; path = ../bundle_manager.cc; sourceTree = SOURCE_ROOT; };
+		4327907D194EFFB9003C9FEA /* button_joiner.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button_joiner.cc; path = ../button_joiner.cc; sourceTree = SOURCE_ROOT; };
+		4327907F194EFFB9003C9FEA /* canvas_patch_change.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = canvas_patch_change.cc; path = ../canvas_patch_change.cc; sourceTree = SOURCE_ROOT; };
+		43279081194EFFB9003C9FEA /* canvas-simpleline.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "canvas-simpleline.c"; path = "../canvas-simpleline.c"; sourceTree = SOURCE_ROOT; };
+		43279082194EFFB9003C9FEA /* canvas-simplerect.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "canvas-simplerect.c"; path = "../canvas-simplerect.c"; sourceTree = SOURCE_ROOT; };
+		43279083194EFFB9003C9FEA /* canvas-waveview.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "canvas-waveview.c"; path = "../canvas-waveview.c"; sourceTree = SOURCE_ROOT; };
+		43279085194EFFB9003C9FEA /* clock_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = clock_group.cc; path = ../clock_group.cc; sourceTree = SOURCE_ROOT; };
+		43279087194EFFB9003C9FEA /* cocoacarbon.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = cocoacarbon.mm; path = ../cocoacarbon.mm; sourceTree = SOURCE_ROOT; };
+		43279088194EFFB9003C9FEA /* configinfo.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = configinfo.cc; path = ../configinfo.cc; sourceTree = SOURCE_ROOT; };
+		4327908A194EFFB9003C9FEA /* control_point_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = control_point_dialog.cc; path = ../control_point_dialog.cc; sourceTree = SOURCE_ROOT; };
+		4327908C194EFFB9003C9FEA /* control_point.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = control_point.cc; path = ../control_point.cc; sourceTree = SOURCE_ROOT; };
+		4327908E194EFFB9003C9FEA /* crossfade_edit.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = crossfade_edit.cc; path = ../crossfade_edit.cc; sourceTree = SOURCE_ROOT; };
+		43279092194EFFB9003C9FEA /* curvetest.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = curvetest.cc; path = ../curvetest.cc; sourceTree = SOURCE_ROOT; };
+		43279094194EFFB9003C9FEA /* debug.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = debug.cc; path = ../debug.cc; sourceTree = SOURCE_ROOT; };
+		43279096194EFFB9003C9FEA /* device_connection_control.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = device_connection_control.cc; path = ../device_connection_control.cc; sourceTree = SOURCE_ROOT; };
+		43279098194EFFB9003C9FEA /* edit_note_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = edit_note_dialog.cc; path = ../edit_note_dialog.cc; sourceTree = SOURCE_ROOT; };
+		4327909B194EFFB9003C9FEA /* editing.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editing.cc; path = ../editing.cc; sourceTree = SOURCE_ROOT; };
+		4327909D194EFFB9003C9FEA /* editor_actions.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_actions.cc; path = ../editor_actions.cc; sourceTree = SOURCE_ROOT; };
+		4327909E194EFFB9003C9FEA /* editor_audio_import.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_audio_import.cc; path = ../editor_audio_import.cc; sourceTree = SOURCE_ROOT; };
+		4327909F194EFFB9003C9FEA /* editor_audiotrack.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_audiotrack.cc; path = ../editor_audiotrack.cc; sourceTree = SOURCE_ROOT; };
+		432790A0194EFFB9003C9FEA /* editor_canvas_events.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_canvas_events.cc; path = ../editor_canvas_events.cc; sourceTree = SOURCE_ROOT; };
+		432790A1194EFFB9003C9FEA /* editor_canvas.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_canvas.cc; path = ../editor_canvas.cc; sourceTree = SOURCE_ROOT; };
+		432790A2194EFFB9003C9FEA /* editor_component.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_component.cc; path = ../editor_component.cc; sourceTree = SOURCE_ROOT; };
+		432790A4194EFFB9003C9FEA /* editor_cursors.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_cursors.cc; path = ../editor_cursors.cc; sourceTree = SOURCE_ROOT; };
+		432790A6194EFFB9003C9FEA /* editor_drag.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_drag.cc; path = ../editor_drag.cc; sourceTree = SOURCE_ROOT; };
+		432790A9194EFFB9003C9FEA /* editor_export_audio.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_export_audio.cc; path = ../editor_export_audio.cc; sourceTree = SOURCE_ROOT; };
+		432790AA194EFFB9003C9FEA /* editor_group_tabs.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_group_tabs.cc; path = ../editor_group_tabs.cc; sourceTree = SOURCE_ROOT; };
+		432790AD194EFFB9003C9FEA /* editor_keys.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_keys.cc; path = ../editor_keys.cc; sourceTree = SOURCE_ROOT; };
+		432790AE194EFFB9003C9FEA /* editor_locations.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_locations.cc; path = ../editor_locations.cc; sourceTree = SOURCE_ROOT; };
+		432790B0194EFFB9003C9FEA /* editor_markers.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_markers.cc; path = ../editor_markers.cc; sourceTree = SOURCE_ROOT; };
+		432790B1194EFFB9003C9FEA /* editor_mixer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_mixer.cc; path = ../editor_mixer.cc; sourceTree = SOURCE_ROOT; };
+		432790B2194EFFB9003C9FEA /* editor_mouse.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_mouse.cc; path = ../editor_mouse.cc; sourceTree = SOURCE_ROOT; };
+		432790B3194EFFB9003C9FEA /* editor_ops.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_ops.cc; path = ../editor_ops.cc; sourceTree = SOURCE_ROOT; };
+		432790B4194EFFB9003C9FEA /* editor_regions.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_regions.cc; path = ../editor_regions.cc; sourceTree = SOURCE_ROOT; };
+		432790B6194EFFB9003C9FEA /* editor_route_groups.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_route_groups.cc; path = ../editor_route_groups.cc; sourceTree = SOURCE_ROOT; };
+		432790B8194EFFB9003C9FEA /* editor_routes.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_routes.cc; path = ../editor_routes.cc; sourceTree = SOURCE_ROOT; };
+		432790BA194EFFB9003C9FEA /* editor_rulers.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_rulers.cc; path = ../editor_rulers.cc; sourceTree = SOURCE_ROOT; };
+		432790BB194EFFB9003C9FEA /* editor_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_selection.cc; path = ../editor_selection.cc; sourceTree = SOURCE_ROOT; };
+		432790BC194EFFB9003C9FEA /* editor_snapshots.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_snapshots.cc; path = ../editor_snapshots.cc; sourceTree = SOURCE_ROOT; };
+		432790BE194EFFB9003C9FEA /* editor_summary.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_summary.cc; path = ../editor_summary.cc; sourceTree = SOURCE_ROOT; };
+		432790C0194EFFB9003C9FEA /* editor_tempodisplay.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_tempodisplay.cc; path = ../editor_tempodisplay.cc; sourceTree = SOURCE_ROOT; };
+		432790C1194EFFB9003C9FEA /* editor_timefx.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_timefx.cc; path = ../editor_timefx.cc; sourceTree = SOURCE_ROOT; };
+		432790C2194EFFB9003C9FEA /* editor_videotimeline.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_videotimeline.cc; path = ../editor_videotimeline.cc; sourceTree = SOURCE_ROOT; };
+		432790C5194EFFB9003C9FEA /* editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor.cc; path = ../editor.cc; sourceTree = SOURCE_ROOT; };
+		432790C7194EFFB9003C9FEA /* engine_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = engine_dialog.cc; path = ../engine_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432790C9194EFFB9003C9FEA /* enums.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = enums.cc; path = ../enums.cc; sourceTree = SOURCE_ROOT; };
+		432790CB194EFFB9003C9FEA /* evtest.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = evtest.cc; path = ../evtest.cc; sourceTree = SOURCE_ROOT; };
+		432790CC194EFFB9003C9FEA /* export_channel_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_channel_selector.cc; path = ../export_channel_selector.cc; sourceTree = SOURCE_ROOT; };
+		432790CE194EFFB9003C9FEA /* export_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_dialog.cc; path = ../export_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432790D0194EFFB9003C9FEA /* export_file_notebook.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_file_notebook.cc; path = ../export_file_notebook.cc; sourceTree = SOURCE_ROOT; };
+		432790D2194EFFB9003C9FEA /* export_filename_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_filename_selector.cc; path = ../export_filename_selector.cc; sourceTree = SOURCE_ROOT; };
+		432790D4194EFFB9003C9FEA /* export_format_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_dialog.cc; path = ../export_format_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432790D6194EFFB9003C9FEA /* export_format_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_selector.cc; path = ../export_format_selector.cc; sourceTree = SOURCE_ROOT; };
+		432790D8194EFFB9003C9FEA /* export_preset_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_preset_selector.cc; path = ../export_preset_selector.cc; sourceTree = SOURCE_ROOT; };
+		432790DA194EFFB9003C9FEA /* export_range_markers_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_range_markers_dialog.cc; path = ../export_range_markers_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432790DC194EFFB9003C9FEA /* export_timespan_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_timespan_selector.cc; path = ../export_timespan_selector.cc; sourceTree = SOURCE_ROOT; };
+		432790DE194EFFB9003C9FEA /* export_video_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_video_dialog.cc; path = ../export_video_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432790E0194EFFB9003C9FEA /* export_video_infobox.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_video_infobox.cc; path = ../export_video_infobox.cc; sourceTree = SOURCE_ROOT; };
+		432790E2194EFFB9003C9FEA /* fft_graph.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fft_graph.cc; path = ../fft_graph.cc; sourceTree = SOURCE_ROOT; };
+		432790E4194EFFB9003C9FEA /* fft_result.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fft_result.cc; path = ../fft_result.cc; sourceTree = SOURCE_ROOT; };
+		432790E6194EFFB9003C9FEA /* fft.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fft.cc; path = ../fft.cc; sourceTree = SOURCE_ROOT; };
+		432790E9194EFFB9003C9FEA /* gain_meter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = gain_meter.cc; path = ../gain_meter.cc; sourceTree = SOURCE_ROOT; };
+		432790EB194EFFB9003C9FEA /* generic_pluginui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = generic_pluginui.cc; path = ../generic_pluginui.cc; sourceTree = SOURCE_ROOT; };
+		432790ED194EFFB9003C9FEA /* ghostregion.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ghostregion.cc; path = ../ghostregion.cc; sourceTree = SOURCE_ROOT; };
+		432790EF194EFFB9003C9FEA /* global_port_matrix.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = global_port_matrix.cc; path = ../global_port_matrix.cc; sourceTree = SOURCE_ROOT; };
+		432790F2194EFFB9003C9FEA /* gprofhelper.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gprofhelper.c; path = ../gprofhelper.c; sourceTree = SOURCE_ROOT; };
+		432790F3194EFFB9003C9FEA /* group_tabs.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = group_tabs.cc; path = ../group_tabs.cc; sourceTree = SOURCE_ROOT; };
+		432790F5194EFFB9003C9FEA /* gtk_pianokeyboard.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gtk_pianokeyboard.c; path = ../gtk_pianokeyboard.c; sourceTree = SOURCE_ROOT; };
+		432790FB194EFFB9003C9FEA /* gui_object.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = gui_object.cc; path = ../gui_object.cc; sourceTree = SOURCE_ROOT; };
+		432790FE194EFFB9003C9FEA /* hit.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = hit.cc; path = ../hit.cc; sourceTree = SOURCE_ROOT; };
+		43279101194EFFB9003C9FEA /* insert_time_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = insert_time_dialog.cc; path = ../insert_time_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279103194EFFB9003C9FEA /* interthread_progress_window.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = interthread_progress_window.cc; path = ../interthread_progress_window.cc; sourceTree = SOURCE_ROOT; };
+		43279105194EFFB9003C9FEA /* io_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = io_selector.cc; path = ../io_selector.cc; sourceTree = SOURCE_ROOT; };
+		43279107194EFFB9003C9FEA /* keyboard.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = keyboard.cc; path = ../keyboard.cc; sourceTree = SOURCE_ROOT; };
+		43279109194EFFB9003C9FEA /* keyeditor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = keyeditor.cc; path = ../keyeditor.cc; sourceTree = SOURCE_ROOT; };
+		4327910B194EFFB9003C9FEA /* latency_gui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = latency_gui.cc; path = ../latency_gui.cc; sourceTree = SOURCE_ROOT; };
+		4327910D194EFFB9003C9FEA /* led.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = led.cc; path = ../led.cc; sourceTree = SOURCE_ROOT; };
+		4327910F194EFFB9003C9FEA /* level_meter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = level_meter.cc; path = ../level_meter.cc; sourceTree = SOURCE_ROOT; };
+		43279111194EFFB9003C9FEA /* linux_vst_gui_support.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = linux_vst_gui_support.cc; path = ../linux_vst_gui_support.cc; sourceTree = SOURCE_ROOT; };
+		43279112194EFFB9003C9FEA /* location_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = location_ui.cc; path = ../location_ui.cc; sourceTree = SOURCE_ROOT; };
+		43279116194EFFB9003C9FEA /* lv2_plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = lv2_plugin_ui.cc; path = ../lv2_plugin_ui.cc; sourceTree = SOURCE_ROOT; };
+		43279118194EFFB9003C9FEA /* lxvst_plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = lxvst_plugin_ui.cc; path = ../lxvst_plugin_ui.cc; sourceTree = SOURCE_ROOT; };
+		4327911A194EFFB9003C9FEA /* main_clock.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main_clock.cc; path = ../main_clock.cc; sourceTree = SOURCE_ROOT; };
+		4327911C194EFFB9003C9FEA /* main.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main.cc; path = ../main.cc; sourceTree = SOURCE_ROOT; };
+		4327911E194EFFB9003C9FEA /* marker.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = marker.cc; path = ../marker.cc; sourceTree = SOURCE_ROOT; };
+		43279120194EFFB9003C9FEA /* meter_patterns.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = meter_patterns.cc; path = ../meter_patterns.cc; sourceTree = SOURCE_ROOT; };
+		43279122194EFFB9003C9FEA /* meter_strip.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = meter_strip.cc; path = ../meter_strip.cc; sourceTree = SOURCE_ROOT; };
+		43279124194EFFB9003C9FEA /* meterbridge.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = meterbridge.cc; path = ../meterbridge.cc; sourceTree = SOURCE_ROOT; };
+		43279126194EFFB9003C9FEA /* midi_automation_line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_automation_line.cc; path = ../midi_automation_line.cc; sourceTree = SOURCE_ROOT; };
+		43279128194EFFB9003C9FEA /* midi_channel_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_channel_dialog.cc; path = ../midi_channel_dialog.cc; sourceTree = SOURCE_ROOT; };
+		4327912A194EFFB9003C9FEA /* midi_channel_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_channel_selector.cc; path = ../midi_channel_selector.cc; sourceTree = SOURCE_ROOT; };
+		4327912C194EFFB9003C9FEA /* midi_cut_buffer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_cut_buffer.cc; path = ../midi_cut_buffer.cc; sourceTree = SOURCE_ROOT; };
+		4327912E194EFFB9003C9FEA /* midi_device_connection_control.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_device_connection_control.cc; path = ../midi_device_connection_control.cc; sourceTree = SOURCE_ROOT; };
+		43279130194EFFB9003C9FEA /* midi_export_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_export_dialog.cc; path = ../midi_export_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279132194EFFB9003C9FEA /* midi_list_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_list_editor.cc; path = ../midi_list_editor.cc; sourceTree = SOURCE_ROOT; };
+		43279134194EFFB9003C9FEA /* midi_port_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_port_dialog.cc; path = ../midi_port_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279136194EFFB9003C9FEA /* midi_region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_region_view.cc; path = ../midi_region_view.cc; sourceTree = SOURCE_ROOT; };
+		43279138194EFFB9003C9FEA /* midi_scroomer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_scroomer.cc; path = ../midi_scroomer.cc; sourceTree = SOURCE_ROOT; };
+		4327913A194EFFB9003C9FEA /* midi_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_selection.cc; path = ../midi_selection.cc; sourceTree = SOURCE_ROOT; };
+		4327913C194EFFB9003C9FEA /* midi_streamview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_streamview.cc; path = ../midi_streamview.cc; sourceTree = SOURCE_ROOT; };
+		4327913E194EFFB9003C9FEA /* midi_time_axis.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_time_axis.cc; path = ../midi_time_axis.cc; sourceTree = SOURCE_ROOT; };
+		43279140194EFFB9003C9FEA /* midi_tracer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_tracer.cc; path = ../midi_tracer.cc; sourceTree = SOURCE_ROOT; };
+		43279143194EFFB9003C9FEA /* midi_velocity_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_velocity_dialog.cc; path = ../midi_velocity_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279145194EFFB9003C9FEA /* missing_file_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = missing_file_dialog.cc; path = ../missing_file_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279147194EFFB9003C9FEA /* missing_plugin_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = missing_plugin_dialog.cc; path = ../missing_plugin_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279149194EFFB9003C9FEA /* mixer_actor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_actor.cc; path = ../mixer_actor.cc; sourceTree = SOURCE_ROOT; };
+		4327914B194EFFB9003C9FEA /* mixer_group_tabs.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_group_tabs.cc; path = ../mixer_group_tabs.cc; sourceTree = SOURCE_ROOT; };
+		4327914D194EFFB9003C9FEA /* mixer_strip.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_strip.cc; path = ../mixer_strip.cc; sourceTree = SOURCE_ROOT; };
+		4327914F194EFFB9003C9FEA /* mixer_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_ui.cc; path = ../mixer_ui.cc; sourceTree = SOURCE_ROOT; };
+		43279151194EFFB9003C9FEA /* monitor_section.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = monitor_section.cc; path = ../monitor_section.cc; sourceTree = SOURCE_ROOT; };
+		43279153194EFFB9003C9FEA /* mono_panner_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mono_panner_editor.cc; path = ../mono_panner_editor.cc; sourceTree = SOURCE_ROOT; };
+		43279155194EFFB9003C9FEA /* mono_panner.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mono_panner.cc; path = ../mono_panner.cc; sourceTree = SOURCE_ROOT; };
+		43279157194EFFB9003C9FEA /* mouse_cursors.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mouse_cursors.cc; path = ../mouse_cursors.cc; sourceTree = SOURCE_ROOT; };
+		43279159194EFFB9003C9FEA /* mtest.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtest.cc; path = ../mtest.cc; sourceTree = SOURCE_ROOT; };
+		4327915A194EFFB9003C9FEA /* nag.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nag.cc; path = ../nag.cc; sourceTree = SOURCE_ROOT; };
+		4327915C194EFFB9003C9FEA /* new_plugin_preset_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = new_plugin_preset_dialog.cc; path = ../new_plugin_preset_dialog.cc; sourceTree = SOURCE_ROOT; };
+		4327915E194EFFB9003C9FEA /* normalize_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = normalize_dialog.cc; path = ../normalize_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279160194EFFB9003C9FEA /* note_base.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = note_base.cc; path = ../note_base.cc; sourceTree = SOURCE_ROOT; };
+		43279162194EFFB9003C9FEA /* note_player.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = note_player.cc; path = ../note_player.cc; sourceTree = SOURCE_ROOT; };
+		43279164194EFFB9003C9FEA /* note.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = note.cc; path = ../note.cc; sourceTree = SOURCE_ROOT; };
+		43279166194EFFB9003C9FEA /* nsm.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nsm.cc; path = ../nsm.cc; sourceTree = SOURCE_ROOT; };
+		43279168194EFFB9003C9FEA /* nsmclient.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nsmclient.cc; path = ../nsmclient.cc; sourceTree = SOURCE_ROOT; };
+		4327916D194EFFB9003C9FEA /* open_file_dialog.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = open_file_dialog.mm; path = ../open_file_dialog.mm; sourceTree = SOURCE_ROOT; };
+		4327916E194EFFB9003C9FEA /* option_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = option_editor.cc; path = ../option_editor.cc; sourceTree = SOURCE_ROOT; };
+		43279170194EFFB9003C9FEA /* opts.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = opts.cc; path = ../opts.cc; sourceTree = SOURCE_ROOT; };
+		43279172194EFFB9003C9FEA /* panner_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = panner_editor.cc; path = ../panner_editor.cc; sourceTree = SOURCE_ROOT; };
+		43279174194EFFB9003C9FEA /* panner_interface.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = panner_interface.cc; path = ../panner_interface.cc; sourceTree = SOURCE_ROOT; };
+		43279176194EFFB9003C9FEA /* panner_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = panner_ui.cc; path = ../panner_ui.cc; sourceTree = SOURCE_ROOT; };
+		43279178194EFFB9003C9FEA /* panner2d.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = panner2d.cc; path = ../panner2d.cc; sourceTree = SOURCE_ROOT; };
+		4327917A194EFFB9003C9FEA /* patch_change_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = patch_change_dialog.cc; path = ../patch_change_dialog.cc; sourceTree = SOURCE_ROOT; };
+		4327917C194EFFB9003C9FEA /* patch_change.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = patch_change.cc; path = ../patch_change.cc; sourceTree = SOURCE_ROOT; };
+		4327917E194EFFB9003C9FEA /* piano_roll_header.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = piano_roll_header.cc; path = ../piano_roll_header.cc; sourceTree = SOURCE_ROOT; };
+		43279180194EFFB9003C9FEA /* pingback.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pingback.cc; path = ../pingback.cc; sourceTree = SOURCE_ROOT; };
+		43279183194EFFB9003C9FEA /* playlist_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_selector.cc; path = ../playlist_selector.cc; sourceTree = SOURCE_ROOT; };
+		43279185194EFFB9003C9FEA /* plugin_eq_gui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_eq_gui.cc; path = ../plugin_eq_gui.cc; sourceTree = SOURCE_ROOT; };
+		43279188194EFFBA003C9FEA /* plugin_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_selector.cc; path = ../plugin_selector.cc; sourceTree = SOURCE_ROOT; };
+		4327918A194EFFBA003C9FEA /* plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_ui.cc; path = ../plugin_ui.cc; sourceTree = SOURCE_ROOT; };
+		4327918D194EFFBA003C9FEA /* port_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_group.cc; path = ../port_group.cc; sourceTree = SOURCE_ROOT; };
+		4327918F194EFFBA003C9FEA /* port_insert_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_insert_ui.cc; path = ../port_insert_ui.cc; sourceTree = SOURCE_ROOT; };
+		43279191194EFFBA003C9FEA /* port_matrix_body.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_body.cc; path = ../port_matrix_body.cc; sourceTree = SOURCE_ROOT; };
+		43279193194EFFBA003C9FEA /* port_matrix_column_labels.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_column_labels.cc; path = ../port_matrix_column_labels.cc; sourceTree = SOURCE_ROOT; };
+		43279195194EFFBA003C9FEA /* port_matrix_component.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_component.cc; path = ../port_matrix_component.cc; sourceTree = SOURCE_ROOT; };
+		43279197194EFFBA003C9FEA /* port_matrix_grid.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_grid.cc; path = ../port_matrix_grid.cc; sourceTree = SOURCE_ROOT; };
+		43279199194EFFBA003C9FEA /* port_matrix_labels.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_labels.cc; path = ../port_matrix_labels.cc; sourceTree = SOURCE_ROOT; };
+		4327919B194EFFBA003C9FEA /* port_matrix_row_labels.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_row_labels.cc; path = ../port_matrix_row_labels.cc; sourceTree = SOURCE_ROOT; };
+		4327919E194EFFBA003C9FEA /* port_matrix.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix.cc; path = ../port_matrix.cc; sourceTree = SOURCE_ROOT; };
+		432791A0194EFFBA003C9FEA /* processor_box.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = processor_box.cc; path = ../processor_box.cc; sourceTree = SOURCE_ROOT; };
+		432791A3194EFFBA003C9FEA /* progress_reporter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = progress_reporter.cc; path = ../progress_reporter.cc; sourceTree = SOURCE_ROOT; };
+		432791A5194EFFBA003C9FEA /* prompter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = prompter.cc; path = ../prompter.cc; sourceTree = SOURCE_ROOT; };
+		432791A7194EFFBA003C9FEA /* public_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = public_editor.cc; path = ../public_editor.cc; sourceTree = SOURCE_ROOT; };
+		432791A9194EFFBA003C9FEA /* quantize_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = quantize_dialog.cc; path = ../quantize_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791AB194EFFBA003C9FEA /* rc_option_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rc_option_editor.cc; path = ../rc_option_editor.cc; sourceTree = SOURCE_ROOT; };
+		432791AD194EFFBA003C9FEA /* region_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_editor.cc; path = ../region_editor.cc; sourceTree = SOURCE_ROOT; };
+		432791AF194EFFBA003C9FEA /* region_gain_line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_gain_line.cc; path = ../region_gain_line.cc; sourceTree = SOURCE_ROOT; };
+		432791B1194EFFBA003C9FEA /* region_layering_order_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_layering_order_editor.cc; path = ../region_layering_order_editor.cc; sourceTree = SOURCE_ROOT; };
+		432791B3194EFFBA003C9FEA /* region_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_selection.cc; path = ../region_selection.cc; sourceTree = SOURCE_ROOT; };
+		432791B5194EFFBA003C9FEA /* region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_view.cc; path = ../region_view.cc; sourceTree = SOURCE_ROOT; };
+		432791B7194EFFBA003C9FEA /* return_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = return_ui.cc; path = ../return_ui.cc; sourceTree = SOURCE_ROOT; };
+		432791BA194EFFBA003C9FEA /* rhythm_ferret.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rhythm_ferret.cc; path = ../rhythm_ferret.cc; sourceTree = SOURCE_ROOT; };
+		432791BC194EFFBA003C9FEA /* route_group_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_group_dialog.cc; path = ../route_group_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791BE194EFFBA003C9FEA /* route_group_menu.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_group_menu.cc; path = ../route_group_menu.cc; sourceTree = SOURCE_ROOT; };
+		432791C0194EFFBA003C9FEA /* route_params_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_params_ui.cc; path = ../route_params_ui.cc; sourceTree = SOURCE_ROOT; };
+		432791C2194EFFBA003C9FEA /* route_processor_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_processor_selection.cc; path = ../route_processor_selection.cc; sourceTree = SOURCE_ROOT; };
+		432791C5194EFFBA003C9FEA /* route_time_axis.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_time_axis.cc; path = ../route_time_axis.cc; sourceTree = SOURCE_ROOT; };
+		432791C8194EFFBA003C9FEA /* route_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_ui.cc; path = ../route_ui.cc; sourceTree = SOURCE_ROOT; };
+		432791CA194EFFBA003C9FEA /* search_path_option.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = search_path_option.cc; path = ../search_path_option.cc; sourceTree = SOURCE_ROOT; };
+		432791CE194EFFBA003C9FEA /* selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = selection.cc; path = ../selection.cc; sourceTree = SOURCE_ROOT; };
+		432791D0194EFFBA003C9FEA /* send_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = send_ui.cc; path = ../send_ui.cc; sourceTree = SOURCE_ROOT; };
+		432791D2194EFFBA003C9FEA /* session_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_dialog.cc; path = ../session_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791D4194EFFBA003C9FEA /* session_dialog.logic.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_dialog.logic.cc; path = ../session_dialog.logic.cc; sourceTree = SOURCE_ROOT; };
+		432791D6194EFFBA003C9FEA /* session_import_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_import_dialog.cc; path = ../session_import_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791D8194EFFBA003C9FEA /* session_lock_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_lock_dialog.cc; path = ../session_lock_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791DA194EFFBA003C9FEA /* session_metadata_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_metadata_dialog.cc; path = ../session_metadata_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791DC194EFFBA003C9FEA /* session_option_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_option_editor.cc; path = ../session_option_editor.cc; sourceTree = SOURCE_ROOT; };
+		432791DE194EFFBA003C9FEA /* sfdb_freesound_mootcher.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sfdb_freesound_mootcher.cc; path = ../sfdb_freesound_mootcher.cc; sourceTree = SOURCE_ROOT; };
+		432791E0194EFFBA003C9FEA /* sfdb_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sfdb_ui.cc; path = ../sfdb_ui.cc; sourceTree = SOURCE_ROOT; };
+		432791E2194EFFBA003C9FEA /* shuttle_control.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = shuttle_control.cc; path = ../shuttle_control.cc; sourceTree = SOURCE_ROOT; };
+		432791E4194EFFBA003C9FEA /* speaker_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = speaker_dialog.cc; path = ../speaker_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791E6194EFFBA003C9FEA /* splash.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = splash.cc; path = ../splash.cc; sourceTree = SOURCE_ROOT; };
+		432791EA194EFFBA003C9FEA /* step_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = step_editor.cc; path = ../step_editor.cc; sourceTree = SOURCE_ROOT; };
+		432791EC194EFFBA003C9FEA /* step_entry.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = step_entry.cc; path = ../step_entry.cc; sourceTree = SOURCE_ROOT; };
+		432791EE194EFFBA003C9FEA /* stereo_panner_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stereo_panner_editor.cc; path = ../stereo_panner_editor.cc; sourceTree = SOURCE_ROOT; };
+		432791F0194EFFBA003C9FEA /* stereo_panner.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stereo_panner.cc; path = ../stereo_panner.cc; sourceTree = SOURCE_ROOT; };
+		432791F2194EFFBA003C9FEA /* streamview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = streamview.cc; path = ../streamview.cc; sourceTree = SOURCE_ROOT; };
+		432791F5194EFFBA003C9FEA /* strip_silence_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = strip_silence_dialog.cc; path = ../strip_silence_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791F7194EFFBA003C9FEA /* sys_ex.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sys_ex.cc; path = ../sys_ex.cc; sourceTree = SOURCE_ROOT; };
+		432791F9194EFFBA003C9FEA /* tape_region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tape_region_view.cc; path = ../tape_region_view.cc; sourceTree = SOURCE_ROOT; };
+		432791FB194EFFBA003C9FEA /* tempo_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tempo_dialog.cc; path = ../tempo_dialog.cc; sourceTree = SOURCE_ROOT; };
+		432791FD194EFFBA003C9FEA /* tempo_lines.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tempo_lines.cc; path = ../tempo_lines.cc; sourceTree = SOURCE_ROOT; };
+		432791FF194EFFBA003C9FEA /* theme_manager.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = theme_manager.cc; path = ../theme_manager.cc; sourceTree = SOURCE_ROOT; };
+		43279201194EFFBA003C9FEA /* time_axis_view_item.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_axis_view_item.cc; path = ../time_axis_view_item.cc; sourceTree = SOURCE_ROOT; };
+		43279203194EFFBA003C9FEA /* time_axis_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_axis_view.cc; path = ../time_axis_view.cc; sourceTree = SOURCE_ROOT; };
+		43279205194EFFBA003C9FEA /* time_fx_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_fx_dialog.cc; path = ../time_fx_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279207194EFFBA003C9FEA /* time_info_box.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_info_box.cc; path = ../time_info_box.cc; sourceTree = SOURCE_ROOT; };
+		43279209194EFFBA003C9FEA /* time_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_selection.cc; path = ../time_selection.cc; sourceTree = SOURCE_ROOT; };
+		4327920B194EFFBA003C9FEA /* timecode_tester.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = timecode_tester.cc; path = ../timecode_tester.cc; sourceTree = SOURCE_ROOT; };
+		4327920C194EFFBA003C9FEA /* track_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = track_selection.cc; path = ../track_selection.cc; sourceTree = SOURCE_ROOT; };
+		4327920E194EFFBA003C9FEA /* track_view_list.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = track_view_list.cc; path = ../track_view_list.cc; sourceTree = SOURCE_ROOT; };
+		43279210194EFFBA003C9FEA /* tracks_control_panel.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tracks_control_panel.cc; path = ../tracks_control_panel.cc; sourceTree = SOURCE_ROOT; };
+		43279212194EFFBA003C9FEA /* tracks_control_panel.logic.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tracks_control_panel.logic.cc; path = ../tracks_control_panel.logic.cc; sourceTree = SOURCE_ROOT; };
+		43279214194EFFBA003C9FEA /* transcode_ffmpeg.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = transcode_ffmpeg.cc; path = ../transcode_ffmpeg.cc; sourceTree = SOURCE_ROOT; };
+		43279216194EFFBA003C9FEA /* transcode_video_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = transcode_video_dialog.cc; path = ../transcode_video_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279218194EFFBA003C9FEA /* transpose_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = transpose_dialog.cc; path = ../transpose_dialog.cc; sourceTree = SOURCE_ROOT; };
+		4327921B194EFFBA003C9FEA /* ui_config.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ui_config.cc; path = ../ui_config.cc; sourceTree = SOURCE_ROOT; };
+		4327921D194EFFBA003C9FEA /* utils_videotl.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = utils_videotl.cc; path = ../utils_videotl.cc; sourceTree = SOURCE_ROOT; };
+		4327921F194EFFBA003C9FEA /* utils.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = utils.cc; path = ../utils.cc; sourceTree = SOURCE_ROOT; };
+		43279221194EFFBA003C9FEA /* verbose_cursor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = verbose_cursor.cc; path = ../verbose_cursor.cc; sourceTree = SOURCE_ROOT; };
+		43279223194EFFBA003C9FEA /* version.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = version.cc; path = ../version.cc; sourceTree = SOURCE_ROOT; };
+		43279225194EFFBA003C9FEA /* video_image_frame.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_image_frame.cc; path = ../video_image_frame.cc; sourceTree = SOURCE_ROOT; };
+		43279227194EFFBA003C9FEA /* video_monitor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_monitor.cc; path = ../video_monitor.cc; sourceTree = SOURCE_ROOT; };
+		43279229194EFFBA003C9FEA /* video_server_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_server_dialog.cc; path = ../video_server_dialog.cc; sourceTree = SOURCE_ROOT; };
+		4327922B194EFFBA003C9FEA /* video_timeline.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_timeline.cc; path = ../video_timeline.cc; sourceTree = SOURCE_ROOT; };
+		4327922D194EFFBA003C9FEA /* visibility_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = visibility_group.cc; path = ../visibility_group.cc; sourceTree = SOURCE_ROOT; };
+		4327922F194EFFBA003C9FEA /* volume_controller.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = volume_controller.cc; path = ../volume_controller.cc; sourceTree = SOURCE_ROOT; };
+		43279231194EFFBA003C9FEA /* vst_plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = vst_plugin_ui.cc; path = ../vst_plugin_ui.cc; sourceTree = SOURCE_ROOT; };
+		43279233194EFFBA003C9FEA /* waves_button.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = waves_button.cc; path = ../waves_button.cc; sourceTree = SOURCE_ROOT; };
+		43279235194EFFBA003C9FEA /* waves_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = waves_dialog.cc; path = ../waves_dialog.cc; sourceTree = SOURCE_ROOT; };
+		43279237194EFFBA003C9FEA /* waves_icon_button.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = waves_icon_button.cc; path = ../waves_icon_button.cc; sourceTree = SOURCE_ROOT; };
+		43279239194EFFBA003C9FEA /* waves_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = waves_ui.cc; path = ../waves_ui.cc; sourceTree = SOURCE_ROOT; };
+		4327923B194EFFBA003C9FEA /* window_manager.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = window_manager.cc; path = ../window_manager.cc; sourceTree = SOURCE_ROOT; };
+		4327923D194EFFBA003C9FEA /* windows_vst_plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = windows_vst_plugin_ui.cc; path = ../windows_vst_plugin_ui.cc; sourceTree = SOURCE_ROOT; };
+		43279244194EFFF1003C9FEA /* Tracks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tracks.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		43279247194EFFF1003C9FEA /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		4327924A194EFFF1003C9FEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+		4327924B194EFFF1003C9FEA /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		4327924C194EFFF1003C9FEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		4327924F194EFFF1003C9FEA /* Tracks-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Tracks-Info.plist"; path = "Tracks/Tracks-Info.plist"; sourceTree = SOURCE_ROOT; };
+		43279251194EFFF1003C9FEA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		43279253194EFFF1003C9FEA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Tracks/main.m; sourceTree = SOURCE_ROOT; };
+		43279255194EFFF1003C9FEA /* Tracks-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "Tracks-Prefix.pch"; path = "Tracks/Tracks-Prefix.pch"; sourceTree = SOURCE_ROOT; };
+		43279257194EFFF1003C9FEA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = "<group>"; };
+		43279259194EFFF1003C9FEA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Tracks/AppDelegate.h; sourceTree = SOURCE_ROOT; };
+		4327925A194EFFF1003C9FEA /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Tracks/AppDelegate.m; sourceTree = SOURCE_ROOT; };
+		4327925D194EFFF1003C9FEA /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; };
+		43279263194F0039003C9FEA /* act-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "act-disabled.png"; path = "../icons/act-disabled.png"; sourceTree = SOURCE_ROOT; };
+		43279264194F0039003C9FEA /* add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add.png; path = ../icons/add.png; sourceTree = SOURCE_ROOT; };
+		43279265194F0039003C9FEA /* application-x-ardour_16px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "application-x-ardour_16px.png"; path = "../icons/application-x-ardour_16px.png"; sourceTree = SOURCE_ROOT; };
+		43279266194F0039003C9FEA /* application-x-ardour_22px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "application-x-ardour_22px.png"; path = "../icons/application-x-ardour_22px.png"; sourceTree = SOURCE_ROOT; };
+		43279267194F0039003C9FEA /* application-x-ardour_32px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "application-x-ardour_32px.png"; path = "../icons/application-x-ardour_32px.png"; sourceTree = SOURCE_ROOT; };
+		43279268194F0039003C9FEA /* application-x-ardour_48px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "application-x-ardour_48px.png"; path = "../icons/application-x-ardour_48px.png"; sourceTree = SOURCE_ROOT; };
+		43279269194F0039003C9FEA /* ardour-app-icon_osx.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ardour-app-icon_osx.png"; path = "../icons/ardour-app-icon_osx.png"; sourceTree = SOURCE_ROOT; };
+		4327926A194F0039003C9FEA /* ardour-app-icon_osx_mask.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ardour-app-icon_osx_mask.png"; path = "../icons/ardour-app-icon_osx_mask.png"; sourceTree = SOURCE_ROOT; };
+		4327926B194F0039003C9FEA /* ardour_icon_16px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_16px.png; path = ../icons/ardour_icon_16px.png; sourceTree = SOURCE_ROOT; };
+		4327926C194F0039003C9FEA /* ardour_icon_22px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_22px.png; path = ../icons/ardour_icon_22px.png; sourceTree = SOURCE_ROOT; };
+		4327926D194F0039003C9FEA /* ardour_icon_256px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_256px.png; path = ../icons/ardour_icon_256px.png; sourceTree = SOURCE_ROOT; };
+		4327926E194F0039003C9FEA /* ardour_icon_32px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_32px.png; path = ../icons/ardour_icon_32px.png; sourceTree = SOURCE_ROOT; };
+		4327926F194F0039003C9FEA /* ardour_icon_48px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_48px.png; path = ../icons/ardour_icon_48px.png; sourceTree = SOURCE_ROOT; };
+		43279270194F0039003C9FEA /* chord.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chord.png; path = ../icons/chord.png; sourceTree = SOURCE_ROOT; };
+		43279271194F0039003C9FEA /* close.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = close.png; path = ../icons/close.png; sourceTree = SOURCE_ROOT; };
+		43279272194F0039003C9FEA /* computer_keyboard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = computer_keyboard.png; path = ../icons/computer_keyboard.png; sourceTree = SOURCE_ROOT; };
+		43279273194F0039003C9FEA /* computer_keyboard_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = computer_keyboard_active.png; path = ../icons/computer_keyboard_active.png; sourceTree = SOURCE_ROOT; };
+		43279274194F0039003C9FEA /* display_clock_mockup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = display_clock_mockup.png; path = ../icons/display_clock_mockup.png; sourceTree = SOURCE_ROOT; };
+		43279275194F0039003C9FEA /* display_metrics_mockup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = display_metrics_mockup.png; path = ../icons/display_metrics_mockup.png; sourceTree = SOURCE_ROOT; };
+		43279276194F0039003C9FEA /* eighthnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = eighthnote.png; path = ../icons/eighthnote.png; sourceTree = SOURCE_ROOT; };
+		43279277194F0039003C9FEA /* expand_left_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = expand_left_right_cursor.png; path = ../icons/expand_left_right_cursor.png; sourceTree = SOURCE_ROOT; };
+		43279278194F0039003C9FEA /* expand_up_down_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = expand_up_down_cursor.png; path = ../icons/expand_up_down_cursor.png; sourceTree = SOURCE_ROOT; };
+		43279279194F0039003C9FEA /* export_icons.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = export_icons.sh; path = ../icons/export_icons.sh; sourceTree = SOURCE_ROOT; };
+		4327927A194F0039003C9FEA /* fade_in_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fade_in_cursor.png; path = ../icons/fade_in_cursor.png; sourceTree = SOURCE_ROOT; };
+		4327927B194F0039003C9FEA /* fade_out_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fade_out_cursor.png; path = ../icons/fade_out_cursor.png; sourceTree = SOURCE_ROOT; };
+		4327927C194F0039003C9FEA /* fadein-constant-power.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-constant-power.png"; path = "../icons/fadein-constant-power.png"; sourceTree = SOURCE_ROOT; };
+		4327927D194F0039003C9FEA /* fadein-fast-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-fast-cut.png"; path = "../icons/fadein-fast-cut.png"; sourceTree = SOURCE_ROOT; };
+		4327927E194F0039003C9FEA /* fadein-linear.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-linear.png"; path = "../icons/fadein-linear.png"; sourceTree = SOURCE_ROOT; };
+		4327927F194F0039003C9FEA /* fadein-long-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-long-cut.png"; path = "../icons/fadein-long-cut.png"; sourceTree = SOURCE_ROOT; };
+		43279280194F0039003C9FEA /* fadein-S1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-S1.png"; path = "../icons/fadein-S1.png"; sourceTree = SOURCE_ROOT; };
+		43279281194F0039003C9FEA /* fadein-S2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-S2.png"; path = "../icons/fadein-S2.png"; sourceTree = SOURCE_ROOT; };
+		43279282194F0039003C9FEA /* fadein-short-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-short-cut.png"; path = "../icons/fadein-short-cut.png"; sourceTree = SOURCE_ROOT; };
+		43279283194F0039003C9FEA /* fadein-slow-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-slow-cut.png"; path = "../icons/fadein-slow-cut.png"; sourceTree = SOURCE_ROOT; };
+		43279284194F0039003C9FEA /* fadeout-constant-power.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-constant-power.png"; path = "../icons/fadeout-constant-power.png"; sourceTree = SOURCE_ROOT; };
+		43279285194F0039003C9FEA /* fadeout-fast-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-fast-cut.png"; path = "../icons/fadeout-fast-cut.png"; sourceTree = SOURCE_ROOT; };
+		43279286194F0039003C9FEA /* fadeout-linear.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-linear.png"; path = "../icons/fadeout-linear.png"; sourceTree = SOURCE_ROOT; };
+		43279287194F0039003C9FEA /* fadeout-long-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-long-cut.png"; path = "../icons/fadeout-long-cut.png"; sourceTree = SOURCE_ROOT; };
+		43279288194F0039003C9FEA /* fadeout-S1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-S1.png"; path = "../icons/fadeout-S1.png"; sourceTree = SOURCE_ROOT; };
+		43279289194F0039003C9FEA /* fadeout-S2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-S2.png"; path = "../icons/fadeout-S2.png"; sourceTree = SOURCE_ROOT; };
+		4327928A194F0039003C9FEA /* fadeout-short-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-short-cut.png"; path = "../icons/fadeout-short-cut.png"; sourceTree = SOURCE_ROOT; };
+		4327928B194F0039003C9FEA /* fadeout-slow-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-slow-cut.png"; path = "../icons/fadeout-slow-cut.png"; sourceTree = SOURCE_ROOT; };
+		4327928C194F0039003C9FEA /* fader_belt.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt.png; path = ../icons/fader_belt.png; sourceTree = SOURCE_ROOT; };
+		4327928D194F0039003C9FEA /* fader_belt_desensitised.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_desensitised.png; path = ../icons/fader_belt_desensitised.png; sourceTree = SOURCE_ROOT; };
+		4327928E194F0039003C9FEA /* fader_belt_h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h.png; path = ../icons/fader_belt_h.png; sourceTree = SOURCE_ROOT; };
+		4327928F194F0039003C9FEA /* fader_belt_h_desensitised.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_desensitised.png; path = ../icons/fader_belt_h_desensitised.png; sourceTree = SOURCE_ROOT; };
+		43279290194F0039003C9FEA /* fader_belt_h_medium.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_medium.png; path = ../icons/fader_belt_h_medium.png; sourceTree = SOURCE_ROOT; };
+		43279291194F0039003C9FEA /* fader_belt_h_medium_desensitised.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_medium_desensitised.png; path = ../icons/fader_belt_h_medium_desensitised.png; sourceTree = SOURCE_ROOT; };
+		43279292194F0039003C9FEA /* fader_belt_h_thin.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_thin.png; path = ../icons/fader_belt_h_thin.png; sourceTree = SOURCE_ROOT; };
+		43279293194F0039003C9FEA /* fader_belt_h_thin_desensitised.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_thin_desensitised.png; path = ../icons/fader_belt_h_thin_desensitised.png; sourceTree = SOURCE_ROOT; };
+		43279294194F0039003C9FEA /* fader_handle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_handle.png; path = ../icons/fader_handle.png; sourceTree = SOURCE_ROOT; };
+		43279295194F0039003C9FEA /* ferret_02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ferret_02.png; path = ../icons/ferret_02.png; sourceTree = SOURCE_ROOT; };
+		43279296194F0039003C9FEA /* forte.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = forte.png; path = ../icons/forte.png; sourceTree = SOURCE_ROOT; };
+		43279297194F0039003C9FEA /* fortissimo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fortissimo.png; path = ../icons/fortissimo.png; sourceTree = SOURCE_ROOT; };
+		43279298194F0039003C9FEA /* fortississimo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fortississimo.png; path = ../icons/fortississimo.png; sourceTree = SOURCE_ROOT; };
+		43279299194F0039003C9FEA /* grabber.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = grabber.png; path = ../icons/grabber.png; sourceTree = SOURCE_ROOT; };
+		4327929A194F0039003C9FEA /* grabber_edit_point.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = grabber_edit_point.png; path = ../icons/grabber_edit_point.png; sourceTree = SOURCE_ROOT; };
+		4327929B194F0039003C9FEA /* grabber_note.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = grabber_note.png; path = ../icons/grabber_note.png; sourceTree = SOURCE_ROOT; };
+		4327929C194F0039003C9FEA /* halfnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = halfnote.png; path = ../icons/halfnote.png; sourceTree = SOURCE_ROOT; };
+		4327929D194F0039003C9FEA /* hide.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = hide.png; path = ../icons/hide.png; sourceTree = SOURCE_ROOT; };
+		4327929E194F0039003C9FEA /* horizontal_zoom_fader_face.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = horizontal_zoom_fader_face.png; path = ../icons/horizontal_zoom_fader_face.png; sourceTree = SOURCE_ROOT; };
+		4327929F194F0039003C9FEA /* i_beam_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = i_beam_cursor.png; path = ../icons/i_beam_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792A0194F0039003C9FEA /* inspector_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = inspector_on.png; path = ../icons/inspector_on.png; sourceTree = SOURCE_ROOT; };
+		432792A1194F0039003C9FEA /* inspector_on_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = inspector_on_active.png; path = ../icons/inspector_on_active.png; sourceTree = SOURCE_ROOT; };
+		432792A2194F0039003C9FEA /* inspector_on_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = inspector_on_prelight.png; path = ../icons/inspector_on_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792A3194F0039003C9FEA /* join_tools.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = join_tools.png; path = ../icons/join_tools.png; sourceTree = SOURCE_ROOT; };
+		432792A4194F0039003C9FEA /* knob.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = knob.png; path = ../icons/knob.png; sourceTree = SOURCE_ROOT; };
+		432792A5194F0039003C9FEA /* lock_session.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = lock_session.png; path = ../icons/lock_session.png; sourceTree = SOURCE_ROOT; };
+		432792A6194F0039003C9FEA /* lock_session_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = lock_session_active.png; path = ../icons/lock_session_active.png; sourceTree = SOURCE_ROOT; };
+		432792A7194F0039003C9FEA /* lock_session_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = lock_session_prelight.png; path = ../icons/lock_session_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792A8194F0039003C9FEA /* media_button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = media_button.png; path = ../icons/media_button.png; sourceTree = SOURCE_ROOT; };
+		432792A9194F0039003C9FEA /* media_button_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = media_button_active.png; path = ../icons/media_button_active.png; sourceTree = SOURCE_ROOT; };
+		432792AA194F0039003C9FEA /* media_button_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = media_button_prelight.png; path = ../icons/media_button_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792AB194F0039003C9FEA /* meter_bridge_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = meter_bridge_on.png; path = ../icons/meter_bridge_on.png; sourceTree = SOURCE_ROOT; };
+		432792AC194F0039003C9FEA /* meter_bridge_on_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = meter_bridge_on_active.png; path = ../icons/meter_bridge_on_active.png; sourceTree = SOURCE_ROOT; };
+		432792AD194F0039003C9FEA /* meter_bridge_on_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = meter_bridge_on_prelight.png; path = ../icons/meter_bridge_on_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792AE194F0039003C9FEA /* metronome.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = metronome.png; path = ../icons/metronome.png; sourceTree = SOURCE_ROOT; };
+		432792AF194F0039003C9FEA /* mezzforte.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mezzforte.png; path = ../icons/mezzforte.png; sourceTree = SOURCE_ROOT; };
+		432792B0194F0039003C9FEA /* mezzoforte.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mezzoforte.png; path = ../icons/mezzoforte.png; sourceTree = SOURCE_ROOT; };
+		432792B1194F0039003C9FEA /* mezzopiano.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mezzopiano.png; path = ../icons/mezzopiano.png; sourceTree = SOURCE_ROOT; };
+		432792B2194F0039003C9FEA /* midi-input-active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "midi-input-active.png"; path = "../icons/midi-input-active.png"; sourceTree = SOURCE_ROOT; };
+		432792B3194F0039003C9FEA /* midi-input-inactive.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "midi-input-inactive.png"; path = "../icons/midi-input-inactive.png"; sourceTree = SOURCE_ROOT; };
+		432792B4194F0039003C9FEA /* midi_panic.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_panic.png; path = ../icons/midi_panic.png; sourceTree = SOURCE_ROOT; };
+		432792B5194F0039003C9FEA /* midi_socket_small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_socket_small.png; path = ../icons/midi_socket_small.png; sourceTree = SOURCE_ROOT; };
+		432792B6194F0039003C9FEA /* midi_sound_notes.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_sound_notes.png; path = ../icons/midi_sound_notes.png; sourceTree = SOURCE_ROOT; };
+		432792B7194F0039003C9FEA /* midi_tool_erase.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_tool_erase.png; path = ../icons/midi_tool_erase.png; sourceTree = SOURCE_ROOT; };
+		432792B8194F0039003C9FEA /* midi_tool_pencil.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_tool_pencil.png; path = ../icons/midi_tool_pencil.png; sourceTree = SOURCE_ROOT; };
+		432792B9194F0039003C9FEA /* midi_tool_select.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_tool_select.png; path = ../icons/midi_tool_select.png; sourceTree = SOURCE_ROOT; };
+		432792BA194F0039003C9FEA /* mixer_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mixer_on.png; path = ../icons/mixer_on.png; sourceTree = SOURCE_ROOT; };
+		432792BB194F0039003C9FEA /* mixer_on_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mixer_on_active.png; path = ../icons/mixer_on_active.png; sourceTree = SOURCE_ROOT; };
+		432792BC194F0039003C9FEA /* mixer_on_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mixer_on_prelight.png; path = ../icons/mixer_on_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792BD194F0039003C9FEA /* mode_multi_out.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_multi_out.png; path = ../icons/mode_multi_out.png; sourceTree = SOURCE_ROOT; };
+		432792BE194F0039003C9FEA /* mode_multi_out_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_multi_out_active.png; path = ../icons/mode_multi_out_active.png; sourceTree = SOURCE_ROOT; };
+		432792BF194F0039003C9FEA /* mode_multi_out_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_multi_out_prelight.png; path = ../icons/mode_multi_out_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792C0194F0039003C9FEA /* mode_stereo_out.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_stereo_out.png; path = ../icons/mode_stereo_out.png; sourceTree = SOURCE_ROOT; };
+		432792C1194F0039003C9FEA /* mode_stereo_out_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_stereo_out_active.png; path = ../icons/mode_stereo_out_active.png; sourceTree = SOURCE_ROOT; };
+		432792C2194F0039003C9FEA /* mode_stereo_out_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_stereo_out_prelight.png; path = ../icons/mode_stereo_out_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792C3194F0039003C9FEA /* move_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = move_cursor.png; path = ../icons/move_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792C4194F0039003C9FEA /* mute-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "mute-disabled.png"; path = "../icons/mute-disabled.png"; sourceTree = SOURCE_ROOT; };
+		432792C5194F0039003C9FEA /* mute-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "mute-enabled.png"; path = "../icons/mute-enabled.png"; sourceTree = SOURCE_ROOT; };
+		432792C6194F0039003C9FEA /* muted-by-others.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "muted-by-others.png"; path = "../icons/muted-by-others.png"; sourceTree = SOURCE_ROOT; };
+		432792C7194F0039003C9FEA /* nudge_left.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = nudge_left.png; path = ../icons/nudge_left.png; sourceTree = SOURCE_ROOT; };
+		432792C8194F0039003C9FEA /* nudge_right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = nudge_right.png; path = ../icons/nudge_right.png; sourceTree = SOURCE_ROOT; };
+		432792C9194F0039003C9FEA /* pianissimo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pianissimo.png; path = ../icons/pianissimo.png; sourceTree = SOURCE_ROOT; };
+		432792CA194F0039003C9FEA /* pianississimo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pianississimo.png; path = ../icons/pianississimo.png; sourceTree = SOURCE_ROOT; };
+		432792CB194F0039003C9FEA /* piano.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = piano.png; path = ../icons/piano.png; sourceTree = SOURCE_ROOT; };
+		432792CC194F0039003C9FEA /* quarternote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = quarternote.png; path = ../icons/quarternote.png; sourceTree = SOURCE_ROOT; };
+		432792CD194F0039003C9FEA /* rec-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "rec-enabled.png"; path = "../icons/rec-enabled.png"; sourceTree = SOURCE_ROOT; };
+		432792CE194F0039003C9FEA /* rec-in-progress.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "rec-in-progress.png"; path = "../icons/rec-in-progress.png"; sourceTree = SOURCE_ROOT; };
+		432792CF194F0039003C9FEA /* record-normal-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "record-normal-disabled.png"; path = "../icons/record-normal-disabled.png"; sourceTree = SOURCE_ROOT; };
+		432792D0194F0039003C9FEA /* record-normal-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "record-normal-enabled.png"; path = "../icons/record-normal-enabled.png"; sourceTree = SOURCE_ROOT; };
+		432792D1194F0039003C9FEA /* record-normal-in-progress.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "record-normal-in-progress.png"; path = "../icons/record-normal-in-progress.png"; sourceTree = SOURCE_ROOT; };
+		432792D2194F0039003C9FEA /* record-step.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "record-step.png"; path = "../icons/record-step.png"; sourceTree = SOURCE_ROOT; };
+		432792D3194F0039003C9FEA /* record_disabled_grey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = record_disabled_grey.png; path = ../icons/record_disabled_grey.png; sourceTree = SOURCE_ROOT; };
+		432792D4194F0039003C9FEA /* record_normal_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = record_normal_red.png; path = ../icons/record_normal_red.png; sourceTree = SOURCE_ROOT; };
+		432792D5194F0039003C9FEA /* record_tape_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = record_tape_red.png; path = ../icons/record_tape_red.png; sourceTree = SOURCE_ROOT; };
+		432792D6194F0039003C9FEA /* resize_bottom_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_bottom_cursor.png; path = ../icons/resize_bottom_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792D7194F0039003C9FEA /* resize_bottom_left_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_bottom_left_cursor.png; path = ../icons/resize_bottom_left_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792D8194F0039003C9FEA /* resize_bottom_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_bottom_right_cursor.png; path = ../icons/resize_bottom_right_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792D9194F0039003C9FEA /* resize_left_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_left_cursor.png; path = ../icons/resize_left_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792DA194F0039003C9FEA /* resize_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_right_cursor.png; path = ../icons/resize_right_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792DB194F0039003C9FEA /* resize_top_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_top_cursor.png; path = ../icons/resize_top_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792DC194F0039003C9FEA /* resize_top_left_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_top_left_cursor.png; path = ../icons/resize_top_left_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792DD194F0039003C9FEA /* resize_top_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_top_right_cursor.png; path = ../icons/resize_top_right_cursor.png; sourceTree = SOURCE_ROOT; };
+		432792DE194F0039003C9FEA /* sae.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sae.png; path = ../icons/sae.png; sourceTree = SOURCE_ROOT; };
+		432792DF194F0039003C9FEA /* sessionlock.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sessionlock.png; path = ../icons/sessionlock.png; sourceTree = SOURCE_ROOT; };
+		432792E0194F0039003C9FEA /* sixteenthnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sixteenthnote.png; path = ../icons/sixteenthnote.png; sourceTree = SOURCE_ROOT; };
+		432792E1194F0039003C9FEA /* sixtyfourthnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sixtyfourthnote.png; path = ../icons/sixtyfourthnote.png; sourceTree = SOURCE_ROOT; };
+		432792E2194F0039003C9FEA /* slider_controller_fader.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider_controller_fader.png; path = ../icons/slider_controller_fader.png; sourceTree = SOURCE_ROOT; };
+		432792E3194F0039003C9FEA /* slider_controller_fader_handle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider_controller_fader_handle.png; path = ../icons/slider_controller_fader_handle.png; sourceTree = SOURCE_ROOT; };
+		432792E4194F0039003C9FEA /* solo-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-disabled.png"; path = "../icons/solo-disabled.png"; sourceTree = SOURCE_ROOT; };
+		432792E5194F0039003C9FEA /* solo-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-enabled.png"; path = "../icons/solo-enabled.png"; sourceTree = SOURCE_ROOT; };
+		432792E6194F0039003C9FEA /* solo-isolate-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-isolate-disabled.png"; path = "../icons/solo-isolate-disabled.png"; sourceTree = SOURCE_ROOT; };
+		432792E7194F0039003C9FEA /* solo-isolate-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-isolate-enabled.png"; path = "../icons/solo-isolate-enabled.png"; sourceTree = SOURCE_ROOT; };
+		432792E8194F0039003C9FEA /* solo-isolated.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-isolated.png"; path = "../icons/solo-isolated.png"; sourceTree = SOURCE_ROOT; };
+		432792E9194F0039003C9FEA /* solo-safe-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-safe-disabled.png"; path = "../icons/solo-safe-disabled.png"; sourceTree = SOURCE_ROOT; };
+		432792EA194F0039003C9FEA /* solo-safe-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-safe-enabled.png"; path = "../icons/solo-safe-enabled.png"; sourceTree = SOURCE_ROOT; };
+		432792EB194F0039003C9FEA /* solo-safe-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-safe-icon.png"; path = "../icons/solo-safe-icon.png"; sourceTree = SOURCE_ROOT; };
+		432792EC194F0039003C9FEA /* soloed-by-others.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "soloed-by-others.png"; path = "../icons/soloed-by-others.png"; sourceTree = SOURCE_ROOT; };
+		432792ED194F0039003C9FEA /* step-editing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "step-editing.png"; path = "../icons/step-editing.png"; sourceTree = SOURCE_ROOT; };
+		432792EE194F0039003C9FEA /* strip_width.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = strip_width.png; path = ../icons/strip_width.png; sourceTree = SOURCE_ROOT; };
+		432792EF194F0039003C9FEA /* systemlock.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = systemlock.png; path = ../icons/systemlock.png; sourceTree = SOURCE_ROOT; };
+		432792F0194F0039003C9FEA /* tav_exp.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tav_exp.png; path = ../icons/tav_exp.png; sourceTree = SOURCE_ROOT; };
+		432792F1194F0039003C9FEA /* tav_shrink.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tav_shrink.png; path = ../icons/tav_shrink.png; sourceTree = SOURCE_ROOT; };
+		432792F2194F0039003C9FEA /* thirtysecondnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = thirtysecondnote.png; path = ../icons/thirtysecondnote.png; sourceTree = SOURCE_ROOT; };
+		432792F3194F0039003C9FEA /* tool_arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_arrow.png; path = ../icons/tool_arrow.png; sourceTree = SOURCE_ROOT; };
+		432792F4194F0039003C9FEA /* tool_arrow_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_arrow_active.png; path = ../icons/tool_arrow_active.png; sourceTree = SOURCE_ROOT; };
+		432792F5194F0039003C9FEA /* tool_arrow_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_arrow_prelight.png; path = ../icons/tool_arrow_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792F6194F0039003C9FEA /* tool_audition.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_audition.png; path = ../icons/tool_audition.png; sourceTree = SOURCE_ROOT; };
+		432792F7194F0039003C9FEA /* tool_cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_cut.png; path = ../icons/tool_cut.png; sourceTree = SOURCE_ROOT; };
+		432792F8194F0039003C9FEA /* tool_cut_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_cut_active.png; path = ../icons/tool_cut_active.png; sourceTree = SOURCE_ROOT; };
+		432792F9194F0039003C9FEA /* tool_cut_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_cut_prelight.png; path = ../icons/tool_cut_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792FA194F0039003C9FEA /* tool_gain.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_gain.png; path = ../icons/tool_gain.png; sourceTree = SOURCE_ROOT; };
+		432792FB194F0039003C9FEA /* tool_marker.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_marker.png; path = ../icons/tool_marker.png; sourceTree = SOURCE_ROOT; };
+		432792FC194F0039003C9FEA /* tool_marker_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_marker_active.png; path = ../icons/tool_marker_active.png; sourceTree = SOURCE_ROOT; };
+		432792FD194F0039003C9FEA /* tool_marker_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_marker_prelight.png; path = ../icons/tool_marker_prelight.png; sourceTree = SOURCE_ROOT; };
+		432792FE194F0039003C9FEA /* tool_note.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_note.png; path = ../icons/tool_note.png; sourceTree = SOURCE_ROOT; };
+		432792FF194F0039003C9FEA /* tool_object.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_object.png; path = ../icons/tool_object.png; sourceTree = SOURCE_ROOT; };
+		43279300194F0039003C9FEA /* tool_object_range.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_object_range.png; path = ../icons/tool_object_range.png; sourceTree = SOURCE_ROOT; };
+		43279301194F0039003C9FEA /* tool_range.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_range.png; path = ../icons/tool_range.png; sourceTree = SOURCE_ROOT; };
+		43279302194F0039003C9FEA /* tool_stretch.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_stretch.png; path = ../icons/tool_stretch.png; sourceTree = SOURCE_ROOT; };
+		43279303194F0039003C9FEA /* tool_waveform_zoom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_waveform_zoom.png; path = ../icons/tool_waveform_zoom.png; sourceTree = SOURCE_ROOT; };
+		43279304194F0039003C9FEA /* tool_waveform_zoom_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_waveform_zoom_active.png; path = ../icons/tool_waveform_zoom_active.png; sourceTree = SOURCE_ROOT; };
+		43279305194F0039003C9FEA /* tool_waveform_zoom_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_waveform_zoom_prelight.png; path = ../icons/tool_waveform_zoom_prelight.png; sourceTree = SOURCE_ROOT; };
+		43279306194F0039003C9FEA /* tool_zoom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_zoom.png; path = ../icons/tool_zoom.png; sourceTree = SOURCE_ROOT; };
+		43279307194F0039003C9FEA /* tool_zoom_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_zoom_active.png; path = ../icons/tool_zoom_active.png; sourceTree = SOURCE_ROOT; };
+		43279308194F0039003C9FEA /* tool_zoom_ardour.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_zoom_ardour.png; path = ../icons/tool_zoom_ardour.png; sourceTree = SOURCE_ROOT; };
+		43279309194F0039003C9FEA /* tool_zoom_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_zoom_prelight.png; path = ../icons/tool_zoom_prelight.png; sourceTree = SOURCE_ROOT; };
+		4327930A194F003A003C9FEA /* tracks.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tracks.png; path = ../icons/tracks.png; sourceTree = SOURCE_ROOT; };
+		4327930B194F003A003C9FEA /* tracks_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tracks_active.png; path = ../icons/tracks_active.png; sourceTree = SOURCE_ROOT; };
+		4327930C194F003A003C9FEA /* tracks_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tracks_prelight.png; path = ../icons/tracks_prelight.png; sourceTree = SOURCE_ROOT; };
+		4327930D194F003A003C9FEA /* transport_end.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_end.png; path = ../icons/transport_end.png; sourceTree = SOURCE_ROOT; };
+		4327930E194F003A003C9FEA /* transport_end_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_end_active.png; path = ../icons/transport_end_active.png; sourceTree = SOURCE_ROOT; };
+		4327930F194F003A003C9FEA /* transport_end_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_end_prelight.png; path = ../icons/transport_end_prelight.png; sourceTree = SOURCE_ROOT; };
+		43279310194F003A003C9FEA /* transport_loop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_loop.png; path = ../icons/transport_loop.png; sourceTree = SOURCE_ROOT; };
+		43279311194F003A003C9FEA /* transport_loop_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_loop_active.png; path = ../icons/transport_loop_active.png; sourceTree = SOURCE_ROOT; };
+		43279312194F003A003C9FEA /* transport_loop_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_loop_prelight.png; path = ../icons/transport_loop_prelight.png; sourceTree = SOURCE_ROOT; };
+		43279313194F003A003C9FEA /* transport_play.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_play.png; path = ../icons/transport_play.png; sourceTree = SOURCE_ROOT; };
+		43279314194F003A003C9FEA /* transport_play_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_play_active.png; path = ../icons/transport_play_active.png; sourceTree = SOURCE_ROOT; };
+		43279315194F003A003C9FEA /* transport_play_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_play_prelight.png; path = ../icons/transport_play_prelight.png; sourceTree = SOURCE_ROOT; };
+		43279316194F003A003C9FEA /* transport_range.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_range.png; path = ../icons/transport_range.png; sourceTree = SOURCE_ROOT; };
+		43279317194F003A003C9FEA /* transport_record.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_record.png; path = ../icons/transport_record.png; sourceTree = SOURCE_ROOT; };
+		43279318194F003A003C9FEA /* transport_record_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_record_active.png; path = ../icons/transport_record_active.png; sourceTree = SOURCE_ROOT; };
+		43279319194F003A003C9FEA /* transport_record_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_record_prelight.png; path = ../icons/transport_record_prelight.png; sourceTree = SOURCE_ROOT; };
+		4327931A194F003A003C9FEA /* transport_start.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_start.png; path = ../icons/transport_start.png; sourceTree = SOURCE_ROOT; };
+		4327931B194F003A003C9FEA /* transport_start_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_start_active.png; path = ../icons/transport_start_active.png; sourceTree = SOURCE_ROOT; };
+		4327931C194F003A003C9FEA /* transport_start_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_start_prelight.png; path = ../icons/transport_start_prelight.png; sourceTree = SOURCE_ROOT; };
+		4327931D194F003A003C9FEA /* transport_stop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_stop.png; path = ../icons/transport_stop.png; sourceTree = SOURCE_ROOT; };
+		4327931E194F003A003C9FEA /* transport_stop_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_stop_active.png; path = ../icons/transport_stop_active.png; sourceTree = SOURCE_ROOT; };
+		4327931F194F003A003C9FEA /* transport_stop_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_stop_prelight.png; path = ../icons/transport_stop_prelight.png; sourceTree = SOURCE_ROOT; };
+		43279320194F003A003C9FEA /* trim_bottom_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_bottom_cursor.png; path = ../icons/trim_bottom_cursor.png; sourceTree = SOURCE_ROOT; };
+		43279321194F003A003C9FEA /* trim_left_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_left_cursor.png; path = ../icons/trim_left_cursor.png; sourceTree = SOURCE_ROOT; };
+		43279322194F003A003C9FEA /* trim_left_cursor_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_left_cursor_5.png; path = ../icons/trim_left_cursor_5.png; sourceTree = SOURCE_ROOT; };
+		43279323194F003A003C9FEA /* trim_left_cursor_right_only.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_left_cursor_right_only.png; path = ../icons/trim_left_cursor_right_only.png; sourceTree = SOURCE_ROOT; };
+		43279324194F003A003C9FEA /* trim_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_right_cursor.png; path = ../icons/trim_right_cursor.png; sourceTree = SOURCE_ROOT; };
+		43279325194F003A003C9FEA /* trim_right_cursor_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_right_cursor_5.png; path = ../icons/trim_right_cursor_5.png; sourceTree = SOURCE_ROOT; };
+		43279326194F003A003C9FEA /* trim_right_cursor_left_only.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_right_cursor_left_only.png; path = ../icons/trim_right_cursor_left_only.png; sourceTree = SOURCE_ROOT; };
+		43279327194F003A003C9FEA /* trim_top_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_top_cursor.png; path = ../icons/trim_top_cursor.png; sourceTree = SOURCE_ROOT; };
+		43279328194F003A003C9FEA /* vertical_zoom_fader_face.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = vertical_zoom_fader_face.png; path = ../icons/vertical_zoom_fader_face.png; sourceTree = SOURCE_ROOT; };
+		43279329194F003A003C9FEA /* wholenote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = wholenote.png; path = ../icons/wholenote.png; sourceTree = SOURCE_ROOT; };
+		4327932A194F003A003C9FEA /* zoom_fader_handle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_fader_handle.png; path = ../icons/zoom_fader_handle.png; sourceTree = SOURCE_ROOT; };
+		4327932B194F003A003C9FEA /* zoom_fader_handle_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_fader_handle_active.png; path = ../icons/zoom_fader_handle_active.png; sourceTree = SOURCE_ROOT; };
+		4327932C194F003A003C9FEA /* zoom_full.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_full.png; path = ../icons/zoom_full.png; sourceTree = SOURCE_ROOT; };
+		4327932D194F003A003C9FEA /* zoom_in.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_in.png; path = ../icons/zoom_in.png; sourceTree = SOURCE_ROOT; };
+		4327932E194F003A003C9FEA /* zoom_in_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_in_cursor.png; path = ../icons/zoom_in_cursor.png; sourceTree = SOURCE_ROOT; };
+		4327932F194F003A003C9FEA /* zoom_out.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_out.png; path = ../icons/zoom_out.png; sourceTree = SOURCE_ROOT; };
+		43279330194F003A003C9FEA /* zoom_out_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_out_cursor.png; path = ../icons/zoom_out_cursor.png; sourceTree = SOURCE_ROOT; };
+		43279400194F0062003C9FEA /* forwardblarrow.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = forwardblarrow.xpm; path = ../pixmaps/forwardblarrow.xpm; sourceTree = SOURCE_ROOT; };
+		43279401194F0062003C9FEA /* h_meter_strip.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = h_meter_strip.xpm; path = ../pixmaps/h_meter_strip.xpm; sourceTree = SOURCE_ROOT; };
+		43279402194F0062003C9FEA /* hiin.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hiin.xpm; path = ../pixmaps/hiin.xpm; sourceTree = SOURCE_ROOT; };
+		43279403194F0062003C9FEA /* hiout.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hiout.xpm; path = ../pixmaps/hiout.xpm; sourceTree = SOURCE_ROOT; };
+		43279404194F0062003C9FEA /* hslider00.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hslider00.xpm; path = ../pixmaps/hslider00.xpm; sourceTree = SOURCE_ROOT; };
+		43279405194F0062003C9FEA /* hslider01.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hslider01.xpm; path = ../pixmaps/hslider01.xpm; sourceTree = SOURCE_ROOT; };
+		43279406194F0062003C9FEA /* left_arrow.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = left_arrow.xpm; path = ../pixmaps/left_arrow.xpm; sourceTree = SOURCE_ROOT; };
+		43279407194F0062003C9FEA /* linin.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = linin.xpm; path = ../pixmaps/linin.xpm; sourceTree = SOURCE_ROOT; };
+		43279408194F0062003C9FEA /* linout.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = linout.xpm; path = ../pixmaps/linout.xpm; sourceTree = SOURCE_ROOT; };
+		43279409194F0062003C9FEA /* loin.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = loin.xpm; path = ../pixmaps/loin.xpm; sourceTree = SOURCE_ROOT; };
+		4327940A194F0062003C9FEA /* loop.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = loop.xpm; path = ../pixmaps/loop.xpm; sourceTree = SOURCE_ROOT; };
+		4327940B194F0062003C9FEA /* loout.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = loout.xpm; path = ../pixmaps/loout.xpm; sourceTree = SOURCE_ROOT; };
+		4327940C194F0062003C9FEA /* lr.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = lr.xpm; path = ../pixmaps/lr.xpm; sourceTree = SOURCE_ROOT; };
+		4327940D194F0062003C9FEA /* regin.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = regin.xpm; path = ../pixmaps/regin.xpm; sourceTree = SOURCE_ROOT; };
+		4327940E194F0062003C9FEA /* regin2.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = regin2.xpm; path = ../pixmaps/regin2.xpm; sourceTree = SOURCE_ROOT; };
+		4327940F194F0062003C9FEA /* regout.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = regout.xpm; path = ../pixmaps/regout.xpm; sourceTree = SOURCE_ROOT; };
+		43279410194F0062003C9FEA /* regout2.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = regout2.xpm; path = ../pixmaps/regout2.xpm; sourceTree = SOURCE_ROOT; };
+		43279411194F0062003C9FEA /* revdblarrow.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = revdblarrow.xpm; path = ../pixmaps/revdblarrow.xpm; sourceTree = SOURCE_ROOT; };
+		43279412194F0062003C9FEA /* right_arrow.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = right_arrow.xpm; path = ../pixmaps/right_arrow.xpm; sourceTree = SOURCE_ROOT; };
+		43279413194F0062003C9FEA /* set-next-button.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "set-next-button.xpm"; path = "../pixmaps/set-next-button.xpm"; sourceTree = SOURCE_ROOT; };
+		43279414194F0062003C9FEA /* small-round-button-01.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "small-round-button-01.xpm"; path = "../pixmaps/small-round-button-01.xpm"; sourceTree = SOURCE_ROOT; };
+		43279415194F0062003C9FEA /* small_x.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = small_x.xpm; path = ../pixmaps/small_x.xpm; sourceTree = SOURCE_ROOT; };
+		43279416194F0062003C9FEA /* toggle-button-00.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "toggle-button-00.xpm"; path = "../pixmaps/toggle-button-00.xpm"; sourceTree = SOURCE_ROOT; };
+		43279417194F0062003C9FEA /* toggle-button-01.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "toggle-button-01.xpm"; path = "../pixmaps/toggle-button-01.xpm"; sourceTree = SOURCE_ROOT; };
+		43279418194F0062003C9FEA /* tool_audition.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_audition.xpm; path = ../pixmaps/tool_audition.xpm; sourceTree = SOURCE_ROOT; };
+		43279419194F0062003C9FEA /* tool_gain.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_gain.xpm; path = ../pixmaps/tool_gain.xpm; sourceTree = SOURCE_ROOT; };
+		4327941A194F0062003C9FEA /* tool_object.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_object.xpm; path = ../pixmaps/tool_object.xpm; sourceTree = SOURCE_ROOT; };
+		4327941B194F0062003C9FEA /* tool_range.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_range.xpm; path = ../pixmaps/tool_range.xpm; sourceTree = SOURCE_ROOT; };
+		4327941C194F0062003C9FEA /* tool_stretch.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_stretch.xpm; path = ../pixmaps/tool_stretch.xpm; sourceTree = SOURCE_ROOT; };
+		4327941D194F0062003C9FEA /* tool_zoom.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_zoom.xpm; path = ../pixmaps/tool_zoom.xpm; sourceTree = SOURCE_ROOT; };
+		4327941E194F0062003C9FEA /* v_meter_strip.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = v_meter_strip.xpm; path = ../pixmaps/v_meter_strip.xpm; sourceTree = SOURCE_ROOT; };
+		4327941F194F0062003C9FEA /* vslider00.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider00.xpm; path = ../pixmaps/vslider00.xpm; sourceTree = SOURCE_ROOT; };
+		43279420194F0062003C9FEA /* vslider01.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider01.xpm; path = ../pixmaps/vslider01.xpm; sourceTree = SOURCE_ROOT; };
+		43279421194F0062003C9FEA /* vslider02_rail.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider02_rail.xpm; path = ../pixmaps/vslider02_rail.xpm; sourceTree = SOURCE_ROOT; };
+		43279422194F0062003C9FEA /* vslider02_slider.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider02_slider.xpm; path = ../pixmaps/vslider02_slider.xpm; sourceTree = SOURCE_ROOT; };
+		43279423194F0062003C9FEA /* vslider_slider_16wide.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider_slider_16wide.xpm; path = ../pixmaps/vslider_slider_16wide.xpm; sourceTree = SOURCE_ROOT; };
+		43279424194F0062003C9FEA /* zoom_full.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = zoom_full.xpm; path = ../pixmaps/zoom_full.xpm; sourceTree = SOURCE_ROOT; };
+		43279425194F0062003C9FEA /* zoom_in.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = zoom_in.xpm; path = ../pixmaps/zoom_in.xpm; sourceTree = SOURCE_ROOT; };
+		43279426194F0062003C9FEA /* zoom_out.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = zoom_out.xpm; path = ../pixmaps/zoom_out.xpm; sourceTree = SOURCE_ROOT; };
+		43279427194F0062003C9FEA /* small-splash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "small-splash.png"; path = "../small-splash.png"; sourceTree = SOURCE_ROOT; };
+		43279428194F0062003C9FEA /* splash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = splash.png; path = ../splash.png; sourceTree = SOURCE_ROOT; };
+		4327942A194F0062003C9FEA /* device_capture_control.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = device_capture_control.xml; path = ../ui/device_capture_control.xml; sourceTree = SOURCE_ROOT; };
+		4327942B194F0062003C9FEA /* device_playback_control.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = device_playback_control.xml; path = ../ui/device_playback_control.xml; sourceTree = SOURCE_ROOT; };
+		4327942C194F0062003C9FEA /* editor_window.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = editor_window.xml; path = ../ui/editor_window.xml; sourceTree = SOURCE_ROOT; };
+		4327942D194F0062003C9FEA /* midi_device_control.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = midi_device_control.xml; path = ../ui/midi_device_control.xml; sourceTree = SOURCE_ROOT; };
+		4327942E194F0062003C9FEA /* session_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = session_dialog.xml; path = ../ui/session_dialog.xml; sourceTree = SOURCE_ROOT; };
+		4327942F194F0062003C9FEA /* session_lock_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = session_lock_dialog.xml; path = ../ui/session_lock_dialog.xml; sourceTree = SOURCE_ROOT; };
+		43279430194F0062003C9FEA /* tracks_preferences.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = tracks_preferences.xml; path = ../ui/tracks_preferences.xml; sourceTree = SOURCE_ROOT; };
+		43279475194F009E003C9FEA /* tracks.menus.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tracks.menus.in; path = ../tracks.menus.in; sourceTree = SOURCE_ROOT; };
+		435E66781A4AB60C00472D50 /* audiographer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = audiographer.xcodeproj; path = ../../libs/audiographer/macos/audiographer/audiographer.xcodeproj; sourceTree = "<group>"; };
+		4397595019CADAFC00740098 /* canvas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = canvas.xcodeproj; path = ../../libs/canvas/macosx/canvas/canvas.xcodeproj; sourceTree = "<group>"; };
+		4397599619CB06AC00740098 /* gtkmm2ext.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = gtkmm2ext.xcodeproj; path = ../../libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj; sourceTree = "<group>"; };
+		43B350F1194F04E00038C140 /* actions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = actions.h; path = ../actions.h; sourceTree = SOURCE_ROOT; };
+		43B350F2194F04E00038C140 /* add_route_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = add_route_dialog.h; path = ../add_route_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B350F3194F04E00038C140 /* add_video_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = add_video_dialog.h; path = ../add_video_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B350F4194F04E00038C140 /* ambiguous_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ambiguous_file_dialog.h; path = ../ambiguous_file_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B350F5194F04E00038C140 /* analysis_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = analysis_window.h; path = ../analysis_window.h; sourceTree = SOURCE_ROOT; };
+		43B350F6194F04E00038C140 /* ardour_button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_button.h; path = ../ardour_button.h; sourceTree = SOURCE_ROOT; };
+		43B350F7194F04E00038C140 /* ardour_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_dialog.h; path = ../ardour_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B350F8194F04E00038C140 /* ardour_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_ui.h; path = ../ardour_ui.h; sourceTree = SOURCE_ROOT; };
+		43B350F9194F04E00038C140 /* ardour_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_window.h; path = ../ardour_window.h; sourceTree = SOURCE_ROOT; };
+		43B350FA194F04E00038C140 /* au_pluginui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = au_pluginui.h; path = ../au_pluginui.h; sourceTree = SOURCE_ROOT; };
+		43B350FB194F04E00038C140 /* audio_clock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_clock.h; path = ../audio_clock.h; sourceTree = SOURCE_ROOT; };
+		43B350FC194F04E00038C140 /* audio_region_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_editor.h; path = ../audio_region_editor.h; sourceTree = SOURCE_ROOT; };
+		43B350FD194F04E00038C140 /* audio_region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_view.h; path = ../audio_region_view.h; sourceTree = SOURCE_ROOT; };
+		43B350FE194F04E00038C140 /* audio_streamview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_streamview.h; path = ../audio_streamview.h; sourceTree = SOURCE_ROOT; };
+		43B350FF194F04E00038C140 /* audio_time_axis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_time_axis.h; path = ../audio_time_axis.h; sourceTree = SOURCE_ROOT; };
+		43B35100194F04E00038C140 /* automation_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_controller.h; path = ../automation_controller.h; sourceTree = SOURCE_ROOT; };
+		43B35101194F04E00038C140 /* automation_line.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_line.h; path = ../automation_line.h; sourceTree = SOURCE_ROOT; };
+		43B35102194F04E00038C140 /* automation_region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_region_view.h; path = ../automation_region_view.h; sourceTree = SOURCE_ROOT; };
+		43B35103194F04E00038C140 /* automation_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_selection.h; path = ../automation_selection.h; sourceTree = SOURCE_ROOT; };
+		43B35104194F04E00038C140 /* automation_streamview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_streamview.h; path = ../automation_streamview.h; sourceTree = SOURCE_ROOT; };
+		43B35105194F04E00038C140 /* automation_time_axis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_time_axis.h; path = ../automation_time_axis.h; sourceTree = SOURCE_ROOT; };
+		43B35106194F04E00038C140 /* axis_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = axis_view.h; path = ../axis_view.h; sourceTree = SOURCE_ROOT; };
+		43B35107194F04E00038C140 /* big_clock_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = big_clock_window.h; path = ../big_clock_window.h; sourceTree = SOURCE_ROOT; };
+		43B35108194F04E00038C140 /* bundle_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bundle_env.h; path = ../bundle_env.h; sourceTree = SOURCE_ROOT; };
+		43B35109194F04E00038C140 /* bundle_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bundle_manager.h; path = ../bundle_manager.h; sourceTree = SOURCE_ROOT; };
+		43B3510A194F04E00038C140 /* button_joiner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = button_joiner.h; path = ../button_joiner.h; sourceTree = SOURCE_ROOT; };
+		43B3510B194F04E00038C140 /* canvas_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = canvas_vars.h; path = ../canvas_vars.h; sourceTree = SOURCE_ROOT; };
+		43B3510C194F04E00038C140 /* canvas-waveview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "canvas-waveview.h"; path = "../canvas-waveview.h"; sourceTree = SOURCE_ROOT; };
+		43B3510D194F04E00038C140 /* clock_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = clock_group.h; path = ../clock_group.h; sourceTree = SOURCE_ROOT; };
+		43B3510E194F04E00038C140 /* configinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = configinfo.h; path = ../configinfo.h; sourceTree = SOURCE_ROOT; };
+		43B3510F194F04E00038C140 /* control_point_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control_point_dialog.h; path = ../control_point_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35110194F04E00038C140 /* control_point.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control_point.h; path = ../control_point.h; sourceTree = SOURCE_ROOT; };
+		43B35111194F04E00038C140 /* crossfade_edit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crossfade_edit.h; path = ../crossfade_edit.h; sourceTree = SOURCE_ROOT; };
+		43B35112194F04E00038C140 /* crossfade_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crossfade_view.h; path = ../crossfade_view.h; sourceTree = SOURCE_ROOT; };
+		43B35113194F04E00038C140 /* crossfade_xpms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crossfade_xpms.h; path = ../crossfade_xpms.h; sourceTree = SOURCE_ROOT; };
+		43B35114194F04E00038C140 /* dbg_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dbg_msg.h; path = ../dbg_msg.h; sourceTree = SOURCE_ROOT; };
+		43B35115194F04E00038C140 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../debug.h; sourceTree = SOURCE_ROOT; };
+		43B35116194F04E00038C140 /* device_connection_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = device_connection_control.h; path = ../device_connection_control.h; sourceTree = SOURCE_ROOT; };
+		43B35117194F04E00038C140 /* edit_note_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = edit_note_dialog.h; path = ../edit_note_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35118194F04E00038C140 /* editing_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editing_syms.h; path = ../editing_syms.h; sourceTree = SOURCE_ROOT; };
+		43B35119194F04E00038C140 /* editing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editing.h; path = ../editing.h; sourceTree = SOURCE_ROOT; };
+		43B3511A194F04E00038C140 /* editor_component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_component.h; path = ../editor_component.h; sourceTree = SOURCE_ROOT; };
+		43B3511B194F04E00038C140 /* editor_cursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_cursors.h; path = ../editor_cursors.h; sourceTree = SOURCE_ROOT; };
+		43B3511C194F04E00038C140 /* editor_drag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_drag.h; path = ../editor_drag.h; sourceTree = SOURCE_ROOT; };
+		43B3511D194F04E00038C140 /* editor_enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_enums.h; path = ../editor_enums.h; sourceTree = SOURCE_ROOT; };
+		43B3511E194F04E00038C140 /* editor_group_tabs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_group_tabs.h; path = ../editor_group_tabs.h; sourceTree = SOURCE_ROOT; };
+		43B3511F194F04E00038C140 /* editor_items.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_items.h; path = ../editor_items.h; sourceTree = SOURCE_ROOT; };
+		43B35120194F04E00038C140 /* editor_locations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_locations.h; path = ../editor_locations.h; sourceTree = SOURCE_ROOT; };
+		43B35121194F04E00038C140 /* editor_regions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_regions.h; path = ../editor_regions.h; sourceTree = SOURCE_ROOT; };
+		43B35122194F04E00038C140 /* editor_route_groups.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_route_groups.h; path = ../editor_route_groups.h; sourceTree = SOURCE_ROOT; };
+		43B35123194F04E00038C140 /* editor_routes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_routes.h; path = ../editor_routes.h; sourceTree = SOURCE_ROOT; };
+		43B35124194F04E00038C140 /* editor_snapshots.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_snapshots.h; path = ../editor_snapshots.h; sourceTree = SOURCE_ROOT; };
+		43B35125194F04E00038C140 /* editor_summary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_summary.h; path = ../editor_summary.h; sourceTree = SOURCE_ROOT; };
+		43B35126194F04E00038C140 /* editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor.h; path = ../editor.h; sourceTree = SOURCE_ROOT; };
+		43B35127194F04E00038C140 /* engine_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = engine_dialog.h; path = ../engine_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35128194F04E00038C140 /* enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = enums.h; path = ../enums.h; sourceTree = SOURCE_ROOT; };
+		43B3512A194F04E00038C140 /* export_channel_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_channel_selector.h; path = ../export_channel_selector.h; sourceTree = SOURCE_ROOT; };
+		43B3512B194F04E00038C140 /* export_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_dialog.h; path = ../export_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B3512C194F04E00038C140 /* export_file_notebook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_file_notebook.h; path = ../export_file_notebook.h; sourceTree = SOURCE_ROOT; };
+		43B3512D194F04E00038C140 /* export_filename_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_filename_selector.h; path = ../export_filename_selector.h; sourceTree = SOURCE_ROOT; };
+		43B3512E194F04E00038C140 /* export_format_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_dialog.h; path = ../export_format_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B3512F194F04E00038C140 /* export_format_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_selector.h; path = ../export_format_selector.h; sourceTree = SOURCE_ROOT; };
+		43B35130194F04E00038C140 /* export_preset_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_preset_selector.h; path = ../export_preset_selector.h; sourceTree = SOURCE_ROOT; };
+		43B35131194F04E00038C140 /* export_range_markers_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_range_markers_dialog.h; path = ../export_range_markers_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35132194F04E00038C140 /* export_timespan_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_timespan_selector.h; path = ../export_timespan_selector.h; sourceTree = SOURCE_ROOT; };
+		43B35133194F04E00038C140 /* export_video_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_video_dialog.h; path = ../export_video_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35134194F04E00038C140 /* export_video_infobox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_video_infobox.h; path = ../export_video_infobox.h; sourceTree = SOURCE_ROOT; };
+		43B35135194F04E00038C140 /* fft_graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fft_graph.h; path = ../fft_graph.h; sourceTree = SOURCE_ROOT; };
+		43B35136194F04E00038C140 /* fft_result.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fft_result.h; path = ../fft_result.h; sourceTree = SOURCE_ROOT; };
+		43B35137194F04E00038C140 /* fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fft.h; path = ../fft.h; sourceTree = SOURCE_ROOT; };
+		43B35138194F04E00038C140 /* fix_carbon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fix_carbon.h; path = ../fix_carbon.h; sourceTree = SOURCE_ROOT; };
+		43B35139194F04E00038C140 /* gain_meter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gain_meter.h; path = ../gain_meter.h; sourceTree = SOURCE_ROOT; };
+		43B3513A194F04E00038C140 /* gettext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gettext.h; path = ../gettext.h; sourceTree = SOURCE_ROOT; };
+		43B3513B194F04E00038C140 /* ghostregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ghostregion.h; path = ../ghostregion.h; sourceTree = SOURCE_ROOT; };
+		43B3513C194F04E00038C140 /* global_port_matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = global_port_matrix.h; path = ../global_port_matrix.h; sourceTree = SOURCE_ROOT; };
+		43B3513D194F04E00038C140 /* global_signals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = global_signals.h; path = ../global_signals.h; sourceTree = SOURCE_ROOT; };
+		43B3513E194F04E00038C140 /* group_tabs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = group_tabs.h; path = ../group_tabs.h; sourceTree = SOURCE_ROOT; };
+		43B3513F194F04E00038C140 /* gtk_pianokeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gtk_pianokeyboard.h; path = ../gtk_pianokeyboard.h; sourceTree = SOURCE_ROOT; };
+		43B35142194F04E00038C140 /* gui_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gui_object.h; path = ../gui_object.h; sourceTree = SOURCE_ROOT; };
+		43B35143194F04E00038C140 /* gui_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gui_thread.h; path = ../gui_thread.h; sourceTree = SOURCE_ROOT; };
+		43B35144194F04E00038C140 /* hit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hit.h; path = ../hit.h; sourceTree = SOURCE_ROOT; };
+		43B35145194F04E00038C140 /* i18n.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i18n.h; path = ../i18n.h; sourceTree = SOURCE_ROOT; };
+		43B35146194F04E00038C140 /* insert_time_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = insert_time_dialog.h; path = ../insert_time_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35147194F04E00038C140 /* interthread_progress_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interthread_progress_window.h; path = ../interthread_progress_window.h; sourceTree = SOURCE_ROOT; };
+		43B35148194F04E00038C140 /* io_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = io_selector.h; path = ../io_selector.h; sourceTree = SOURCE_ROOT; };
+		43B35149194F04E00038C140 /* keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = keyboard.h; path = ../keyboard.h; sourceTree = SOURCE_ROOT; };
+		43B3514A194F04E00038C140 /* keyeditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = keyeditor.h; path = ../keyeditor.h; sourceTree = SOURCE_ROOT; };
+		43B3514B194F04E00038C140 /* latency_gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = latency_gui.h; path = ../latency_gui.h; sourceTree = SOURCE_ROOT; };
+		43B3514C194F04E00038C140 /* led.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = led.h; path = ../led.h; sourceTree = SOURCE_ROOT; };
+		43B3514D194F04E00038C140 /* level_meter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = level_meter.h; path = ../level_meter.h; sourceTree = SOURCE_ROOT; };
+		43B3514E194F04E00038C140 /* location_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = location_ui.h; path = ../location_ui.h; sourceTree = SOURCE_ROOT; };
+		43B3514F194F04E00038C140 /* logmeter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = logmeter.h; path = ../logmeter.h; sourceTree = SOURCE_ROOT; };
+		43B35150194F04E00038C140 /* lv2_external_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv2_external_ui.h; path = ../lv2_external_ui.h; sourceTree = SOURCE_ROOT; };
+		43B35151194F04E00038C140 /* lv2_plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv2_plugin_ui.h; path = ../lv2_plugin_ui.h; sourceTree = SOURCE_ROOT; };
+		43B35152194F04E00038C140 /* lxvst_plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lxvst_plugin_ui.h; path = ../lxvst_plugin_ui.h; sourceTree = SOURCE_ROOT; };
+		43B35153194F04E00038C140 /* main_clock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = main_clock.h; path = ../main_clock.h; sourceTree = SOURCE_ROOT; };
+		43B35154194F04E00038C140 /* marker_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker_selection.h; path = ../marker_selection.h; sourceTree = SOURCE_ROOT; };
+		43B35155194F04E00038C140 /* marker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker.h; path = ../marker.h; sourceTree = SOURCE_ROOT; };
+		43B35156194F04E00038C140 /* meter_patterns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = meter_patterns.h; path = ../meter_patterns.h; sourceTree = SOURCE_ROOT; };
+		43B35157194F04E00038C140 /* meter_strip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = meter_strip.h; path = ../meter_strip.h; sourceTree = SOURCE_ROOT; };
+		43B35158194F04E00038C140 /* meterbridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = meterbridge.h; path = ../meterbridge.h; sourceTree = SOURCE_ROOT; };
+		43B35159194F04E00038C140 /* midi_automation_line.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_automation_line.h; path = ../midi_automation_line.h; sourceTree = SOURCE_ROOT; };
+		43B3515A194F04E00038C140 /* midi_channel_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_channel_dialog.h; path = ../midi_channel_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B3515B194F04E00038C140 /* midi_channel_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_channel_selector.h; path = ../midi_channel_selector.h; sourceTree = SOURCE_ROOT; };
+		43B3515C194F04E00038C140 /* midi_cut_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_cut_buffer.h; path = ../midi_cut_buffer.h; sourceTree = SOURCE_ROOT; };
+		43B3515D194F04E00038C140 /* midi_device_connection_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_device_connection_control.h; path = ../midi_device_connection_control.h; sourceTree = SOURCE_ROOT; };
+		43B3515E194F04E00038C140 /* midi_export_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_export_dialog.h; path = ../midi_export_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B3515F194F04E00038C140 /* midi_list_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_list_editor.h; path = ../midi_list_editor.h; sourceTree = SOURCE_ROOT; };
+		43B35160194F04E00038C140 /* midi_port_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_port_dialog.h; path = ../midi_port_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35161194F04E00038C140 /* midi_region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_region_view.h; path = ../midi_region_view.h; sourceTree = SOURCE_ROOT; };
+		43B35162194F04E00038C140 /* midi_scroomer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_scroomer.h; path = ../midi_scroomer.h; sourceTree = SOURCE_ROOT; };
+		43B35163194F04E00038C140 /* midi_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_selection.h; path = ../midi_selection.h; sourceTree = SOURCE_ROOT; };
+		43B35164194F04E00038C140 /* midi_streamview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_streamview.h; path = ../midi_streamview.h; sourceTree = SOURCE_ROOT; };
+		43B35165194F04E00038C140 /* midi_time_axis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_time_axis.h; path = ../midi_time_axis.h; sourceTree = SOURCE_ROOT; };
+		43B35166194F04E00038C140 /* midi_tracer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_tracer.h; path = ../midi_tracer.h; sourceTree = SOURCE_ROOT; };
+		43B35167194F04E00038C140 /* midi_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_util.h; path = ../midi_util.h; sourceTree = SOURCE_ROOT; };
+		43B35168194F04E00038C140 /* midi_velocity_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_velocity_dialog.h; path = ../midi_velocity_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35169194F04E00038C140 /* missing_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = missing_file_dialog.h; path = ../missing_file_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B3516A194F04E00038C140 /* missing_plugin_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = missing_plugin_dialog.h; path = ../missing_plugin_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B3516B194F04E00038C140 /* mixer_actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_actor.h; path = ../mixer_actor.h; sourceTree = SOURCE_ROOT; };
+		43B3516C194F04E00038C140 /* mixer_group_tabs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_group_tabs.h; path = ../mixer_group_tabs.h; sourceTree = SOURCE_ROOT; };
+		43B3516D194F04E00038C140 /* mixer_strip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_strip.h; path = ../mixer_strip.h; sourceTree = SOURCE_ROOT; };
+		43B3516E194F04E00038C140 /* mixer_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_ui.h; path = ../mixer_ui.h; sourceTree = SOURCE_ROOT; };
+		43B3516F194F04E00038C140 /* monitor_section.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = monitor_section.h; path = ../monitor_section.h; sourceTree = SOURCE_ROOT; };
+		43B35170194F04E00038C140 /* mono_panner_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mono_panner_editor.h; path = ../mono_panner_editor.h; sourceTree = SOURCE_ROOT; };
+		43B35171194F04E00038C140 /* mono_panner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mono_panner.h; path = ../mono_panner.h; sourceTree = SOURCE_ROOT; };
+		43B35172194F04E00038C140 /* mouse_cursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mouse_cursors.h; path = ../mouse_cursors.h; sourceTree = SOURCE_ROOT; };
+		43B35173194F04E00038C140 /* nag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = nag.h; path = ../nag.h; sourceTree = SOURCE_ROOT; };
+		43B35174194F04E00038C140 /* new_plugin_preset_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = new_plugin_preset_dialog.h; path = ../new_plugin_preset_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35175194F04E00038C140 /* normalize_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = normalize_dialog.h; path = ../normalize_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35176194F04E00038C140 /* note_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = note_base.h; path = ../note_base.h; sourceTree = SOURCE_ROOT; };
+		43B35177194F04E00038C140 /* note_player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = note_player.h; path = ../note_player.h; sourceTree = SOURCE_ROOT; };
+		43B35178194F04E00038C140 /* note.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = note.h; path = ../note.h; sourceTree = SOURCE_ROOT; };
+		43B35179194F04E00038C140 /* nsm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = nsm.h; path = ../nsm.h; sourceTree = SOURCE_ROOT; };
+		43B3517A194F04E00038C140 /* nsmclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = nsmclient.h; path = ../nsmclient.h; sourceTree = SOURCE_ROOT; };
+		43B3517B194F04E00038C140 /* open_file_dialog_proxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = open_file_dialog_proxy.h; path = ../open_file_dialog_proxy.h; sourceTree = SOURCE_ROOT; };
+		43B3517C194F04E00038C140 /* open_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = open_file_dialog.h; path = ../open_file_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B3517D194F04E00038C140 /* option_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = option_editor.h; path = ../option_editor.h; sourceTree = SOURCE_ROOT; };
+		43B3517E194F04E00038C140 /* opts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = opts.h; path = ../opts.h; sourceTree = SOURCE_ROOT; };
+		43B3517F194F04E00038C140 /* panner_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_editor.h; path = ../panner_editor.h; sourceTree = SOURCE_ROOT; };
+		43B35180194F04E00038C140 /* panner_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_interface.h; path = ../panner_interface.h; sourceTree = SOURCE_ROOT; };
+		43B35181194F04E00038C140 /* panner_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_ui.h; path = ../panner_ui.h; sourceTree = SOURCE_ROOT; };
+		43B35182194F04E00038C140 /* panner2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner2d.h; path = ../panner2d.h; sourceTree = SOURCE_ROOT; };
+		43B35183194F04E00038C140 /* patch_change_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = patch_change_dialog.h; path = ../patch_change_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B35184194F04E00038C140 /* patch_change.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = patch_change.h; path = ../patch_change.h; sourceTree = SOURCE_ROOT; };
+		43B35185194F04E00038C140 /* piano_roll_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = piano_roll_header.h; path = ../piano_roll_header.h; sourceTree = SOURCE_ROOT; };
+		43B35186194F04E00038C140 /* pingback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pingback.h; path = ../pingback.h; sourceTree = SOURCE_ROOT; };
+		43B35187194F04E00038C140 /* playlist_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_selection.h; path = ../playlist_selection.h; sourceTree = SOURCE_ROOT; };
+		43B35188194F04E00038C140 /* playlist_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_selector.h; path = ../playlist_selector.h; sourceTree = SOURCE_ROOT; };
+		43B35189194F04E00038C140 /* plugin_eq_gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_eq_gui.h; path = ../plugin_eq_gui.h; sourceTree = SOURCE_ROOT; };
+		43B3518A194F04E00038C140 /* plugin_interest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_interest.h; path = ../plugin_interest.h; sourceTree = SOURCE_ROOT; };
+		43B3518B194F04E00038C140 /* plugin_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_selector.h; path = ../plugin_selector.h; sourceTree = SOURCE_ROOT; };
+		43B3518C194F04E00038C140 /* plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_ui.h; path = ../plugin_ui.h; sourceTree = SOURCE_ROOT; };
+		43B3518D194F04E00038C140 /* point_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = point_selection.h; path = ../point_selection.h; sourceTree = SOURCE_ROOT; };
+		43B3518E194F04E00038C140 /* port_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_group.h; path = ../port_group.h; sourceTree = SOURCE_ROOT; };
+		43B3518F194F04E00038C140 /* port_insert_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_insert_ui.h; path = ../port_insert_ui.h; sourceTree = SOURCE_ROOT; };
+		43B35190194F04E00038C140 /* port_matrix_body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_body.h; path = ../port_matrix_body.h; sourceTree = SOURCE_ROOT; };
+		43B35191194F04E00038C140 /* port_matrix_column_labels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_column_labels.h; path = ../port_matrix_column_labels.h; sourceTree = SOURCE_ROOT; };
+		43B35192194F04E00038C140 /* port_matrix_component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_component.h; path = ../port_matrix_component.h; sourceTree = SOURCE_ROOT; };
+		43B35193194F04E00038C140 /* port_matrix_grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_grid.h; path = ../port_matrix_grid.h; sourceTree = SOURCE_ROOT; };
+		43B35194194F04E00038C140 /* port_matrix_labels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_labels.h; path = ../port_matrix_labels.h; sourceTree = SOURCE_ROOT; };
+		43B35195194F04E00038C140 /* port_matrix_row_labels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_row_labels.h; path = ../port_matrix_row_labels.h; sourceTree = SOURCE_ROOT; };
+		43B35196194F04E00038C140 /* port_matrix_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_types.h; path = ../port_matrix_types.h; sourceTree = SOURCE_ROOT; };
+		43B35197194F04E00038C140 /* port_matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix.h; path = ../port_matrix.h; sourceTree = SOURCE_ROOT; };
+		43B35198194F04E00038C140 /* processor_box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = processor_box.h; path = ../processor_box.h; sourceTree = SOURCE_ROOT; };
+		43B35199194F04E00038C140 /* processor_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = processor_selection.h; path = ../processor_selection.h; sourceTree = SOURCE_ROOT; };
+		43B3519A194F04E00038C140 /* progress_reporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = progress_reporter.h; path = ../progress_reporter.h; sourceTree = SOURCE_ROOT; };
+		43B3519B194F04E00038C140 /* prompter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prompter.h; path = ../prompter.h; sourceTree = SOURCE_ROOT; };
+		43B3519C194F04E00038C140 /* public_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = public_editor.h; path = ../public_editor.h; sourceTree = SOURCE_ROOT; };
+		43B3519D194F04E00038C140 /* quantize_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quantize_dialog.h; path = ../quantize_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B3519E194F04E00038C140 /* rc_option_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rc_option_editor.h; path = ../rc_option_editor.h; sourceTree = SOURCE_ROOT; };
+		43B3519F194F04E00038C140 /* region_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_editor.h; path = ../region_editor.h; sourceTree = SOURCE_ROOT; };
+		43B351A0194F04E00038C140 /* region_gain_line.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_gain_line.h; path = ../region_gain_line.h; sourceTree = SOURCE_ROOT; };
+		43B351A1194F04E00038C140 /* region_layering_order_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_layering_order_editor.h; path = ../region_layering_order_editor.h; sourceTree = SOURCE_ROOT; };
+		43B351A2194F04E00038C140 /* region_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_selection.h; path = ../region_selection.h; sourceTree = SOURCE_ROOT; };
+		43B351A3194F04E00038C140 /* region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_view.h; path = ../region_view.h; sourceTree = SOURCE_ROOT; };
+		43B351A4194F04E00038C140 /* return_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = return_ui.h; path = ../return_ui.h; sourceTree = SOURCE_ROOT; };
+		43B351A5194F04E00038C140 /* rgb_macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rgb_macros.h; path = ../rgb_macros.h; sourceTree = SOURCE_ROOT; };
+		43B351A6194F04E00038C140 /* rhythm_ferret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rhythm_ferret.h; path = ../rhythm_ferret.h; sourceTree = SOURCE_ROOT; };
+		43B351A7194F04E00038C140 /* route_group_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group_dialog.h; path = ../route_group_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351A8194F04E00038C140 /* route_group_menu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group_menu.h; path = ../route_group_menu.h; sourceTree = SOURCE_ROOT; };
+		43B351A9194F04E00038C140 /* route_params_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_params_ui.h; path = ../route_params_ui.h; sourceTree = SOURCE_ROOT; };
+		43B351AA194F04E00038C140 /* route_processor_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_processor_selection.h; path = ../route_processor_selection.h; sourceTree = SOURCE_ROOT; };
+		43B351AB194F04E00038C140 /* route_sorter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_sorter.h; path = ../route_sorter.h; sourceTree = SOURCE_ROOT; };
+		43B351AC194F04E00038C140 /* route_time_axis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_time_axis.h; path = ../route_time_axis.h; sourceTree = SOURCE_ROOT; };
+		43B351AD194F04E00038C140 /* route_ui_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_ui_selection.h; path = ../route_ui_selection.h; sourceTree = SOURCE_ROOT; };
+		43B351AE194F04E00038C140 /* route_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_ui.h; path = ../route_ui.h; sourceTree = SOURCE_ROOT; };
+		43B351AF194F04E00038C140 /* search_path_option.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = search_path_option.h; path = ../search_path_option.h; sourceTree = SOURCE_ROOT; };
+		43B351B0194F04E00038C140 /* selectable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = selectable.h; path = ../selectable.h; sourceTree = SOURCE_ROOT; };
+		43B351B1194F04E00038C140 /* selection_templates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = selection_templates.h; path = ../selection_templates.h; sourceTree = SOURCE_ROOT; };
+		43B351B2194F04E00038C140 /* selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = selection.h; path = ../selection.h; sourceTree = SOURCE_ROOT; };
+		43B351B3194F04E00038C140 /* send_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = send_ui.h; path = ../send_ui.h; sourceTree = SOURCE_ROOT; };
+		43B351B4194F04E00038C140 /* session_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_dialog.h; path = ../session_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351B5194F04E00038C140 /* session_dialog.logic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_dialog.logic.h; path = ../session_dialog.logic.h; sourceTree = SOURCE_ROOT; };
+		43B351B6194F04E00038C140 /* session_import_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_import_dialog.h; path = ../session_import_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351B7194F04E00038C140 /* session_lock_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_lock_dialog.h; path = ../session_lock_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351B8194F04E00038C140 /* session_metadata_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_metadata_dialog.h; path = ../session_metadata_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351B9194F04E00038C140 /* session_option_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_option_editor.h; path = ../session_option_editor.h; sourceTree = SOURCE_ROOT; };
+		43B351BA194F04E00038C140 /* sfdb_freesound_mootcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sfdb_freesound_mootcher.h; path = ../sfdb_freesound_mootcher.h; sourceTree = SOURCE_ROOT; };
+		43B351BB194F04E00038C140 /* sfdb_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sfdb_ui.h; path = ../sfdb_ui.h; sourceTree = SOURCE_ROOT; };
+		43B351BC194F04E00038C140 /* shuttle_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = shuttle_control.h; path = ../shuttle_control.h; sourceTree = SOURCE_ROOT; };
+		43B351BD194F04E00038C140 /* speaker_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = speaker_dialog.h; path = ../speaker_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351BE194F04E00038C140 /* splash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = splash.h; path = ../splash.h; sourceTree = SOURCE_ROOT; };
+		43B351BF194F04E00038C140 /* startup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = startup.h; path = ../startup.h; sourceTree = SOURCE_ROOT; };
+		43B351C0194F04E00038C140 /* step_editing.bindings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = step_editing.bindings; path = ../step_editing.bindings; sourceTree = SOURCE_ROOT; };
+		43B351C1194F04E00038C140 /* step_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = step_editor.h; path = ../step_editor.h; sourceTree = SOURCE_ROOT; };
+		43B351C2194F04E00038C140 /* step_entry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = step_entry.h; path = ../step_entry.h; sourceTree = SOURCE_ROOT; };
+		43B351C3194F04E00038C140 /* stereo_panner_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stereo_panner_editor.h; path = ../stereo_panner_editor.h; sourceTree = SOURCE_ROOT; };
+		43B351C4194F04E00038C140 /* stereo_panner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stereo_panner.h; path = ../stereo_panner.h; sourceTree = SOURCE_ROOT; };
+		43B351C5194F04E00038C140 /* streamview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = streamview.h; path = ../streamview.h; sourceTree = SOURCE_ROOT; };
+		43B351C6194F04E00038C140 /* strip_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strip_selection.h; path = ../strip_selection.h; sourceTree = SOURCE_ROOT; };
+		43B351C7194F04E00038C140 /* strip_silence_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strip_silence_dialog.h; path = ../strip_silence_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351C8194F04E00038C140 /* sys_ex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sys_ex.h; path = ../sys_ex.h; sourceTree = SOURCE_ROOT; };
+		43B351C9194F04E00038C140 /* tape_region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tape_region_view.h; path = ../tape_region_view.h; sourceTree = SOURCE_ROOT; };
+		43B351CA194F04E00038C140 /* tempo_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo_dialog.h; path = ../tempo_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351CB194F04E00038C140 /* tempo_lines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo_lines.h; path = ../tempo_lines.h; sourceTree = SOURCE_ROOT; };
+		43B351CC194F04E00038C140 /* theme_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = theme_manager.h; path = ../theme_manager.h; sourceTree = SOURCE_ROOT; };
+		43B351CD194F04E00038C140 /* time_axis_view_item.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_axis_view_item.h; path = ../time_axis_view_item.h; sourceTree = SOURCE_ROOT; };
+		43B351CE194F04E00038C140 /* time_axis_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_axis_view.h; path = ../time_axis_view.h; sourceTree = SOURCE_ROOT; };
+		43B351CF194F04E00038C140 /* time_fx_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_fx_dialog.h; path = ../time_fx_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351D0194F04E00038C140 /* time_info_box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_info_box.h; path = ../time_info_box.h; sourceTree = SOURCE_ROOT; };
+		43B351D1194F04E00038C140 /* time_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_selection.h; path = ../time_selection.h; sourceTree = SOURCE_ROOT; };
+		43B351D2194F04E00038C140 /* track_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = track_selection.h; path = ../track_selection.h; sourceTree = SOURCE_ROOT; };
+		43B351D3194F04E00038C140 /* track_view_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = track_view_list.h; path = ../track_view_list.h; sourceTree = SOURCE_ROOT; };
+		43B351D4194F04E00038C140 /* tracks_control_panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tracks_control_panel.h; path = ../tracks_control_panel.h; sourceTree = SOURCE_ROOT; };
+		43B351D5194F04E00038C140 /* tracks_control_panel.logic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tracks_control_panel.logic.h; path = ../tracks_control_panel.logic.h; sourceTree = SOURCE_ROOT; };
+		43B351D6194F04E00038C140 /* transcode_ffmpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transcode_ffmpeg.h; path = ../transcode_ffmpeg.h; sourceTree = SOURCE_ROOT; };
+		43B351D7194F04E00038C140 /* transcode_video_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transcode_video_dialog.h; path = ../transcode_video_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351D8194F04E00038C140 /* transpose_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transpose_dialog.h; path = ../transpose_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351D9194F04E00038C140 /* ui_config_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ui_config_vars.h; path = ../ui_config_vars.h; sourceTree = SOURCE_ROOT; };
+		43B351DA194F04E00038C140 /* ui_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ui_config.h; path = ../ui_config.h; sourceTree = SOURCE_ROOT; };
+		43B351DB194F04E00038C140 /* utils_videotl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils_videotl.h; path = ../utils_videotl.h; sourceTree = SOURCE_ROOT; };
+		43B351DC194F04E00038C140 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../utils.h; sourceTree = SOURCE_ROOT; };
+		43B351DD194F04E00038C140 /* verbose_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = verbose_cursor.h; path = ../verbose_cursor.h; sourceTree = SOURCE_ROOT; };
+		43B351DE194F04E00038C140 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../version.h; sourceTree = SOURCE_ROOT; };
+		43B351DF194F04E00038C140 /* video_image_frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_image_frame.h; path = ../video_image_frame.h; sourceTree = SOURCE_ROOT; };
+		43B351E0194F04E00038C140 /* video_monitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_monitor.h; path = ../video_monitor.h; sourceTree = SOURCE_ROOT; };
+		43B351E1194F04E00038C140 /* video_server_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_server_dialog.h; path = ../video_server_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351E2194F04E00038C140 /* video_timeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_timeline.h; path = ../video_timeline.h; sourceTree = SOURCE_ROOT; };
+		43B351E3194F04E00038C140 /* visibility_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = visibility_group.h; path = ../visibility_group.h; sourceTree = SOURCE_ROOT; };
+		43B351E4194F04E00038C140 /* volume_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = volume_controller.h; path = ../volume_controller.h; sourceTree = SOURCE_ROOT; };
+		43B351E5194F04E00038C140 /* vst_plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vst_plugin_ui.h; path = ../vst_plugin_ui.h; sourceTree = SOURCE_ROOT; };
+		43B351E6194F04E00038C140 /* waves_button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_button.h; path = ../waves_button.h; sourceTree = SOURCE_ROOT; };
+		43B351E7194F04E00038C140 /* waves_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_dialog.h; path = ../waves_dialog.h; sourceTree = SOURCE_ROOT; };
+		43B351E8194F04E00038C140 /* waves_icon_button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_icon_button.h; path = ../waves_icon_button.h; sourceTree = SOURCE_ROOT; };
+		43B351E9194F04E00038C140 /* waves_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_ui.h; path = ../waves_ui.h; sourceTree = SOURCE_ROOT; };
+		43B351EA194F04E00038C140 /* window_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = window_manager.h; path = ../window_manager.h; sourceTree = SOURCE_ROOT; };
+		43B351EB194F04E00038C140 /* windows_vst_plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = windows_vst_plugin_ui.h; path = ../windows_vst_plugin_ui.h; sourceTree = SOURCE_ROOT; };
+		43B351EE194F12FB0038C140 /* waves_audiobackend.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = waves_audiobackend.xcodeproj; path = ../../libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj; sourceTree = "<group>"; };
+		43B351F4194F130C0038C140 /* libardour.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libardour.xcodeproj; path = ../../libs/ardour/macosx/libardour.xcodeproj; sourceTree = "<group>"; };
+		43B351FA194F131D0038C140 /* pbd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = pbd.xcodeproj; path = ../../libs/pbd/macosx/pbd.xcodeproj; sourceTree = "<group>"; };
+		5BC24BA91A64328D006A2400 /* trackslive.menus.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = trackslive.menus.in; path = ../trackslive.menus.in; sourceTree = "<group>"; };
+		5BC67E581A408FCE00F29ABA /* progress_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = progress_dialog.xml; sourceTree = "<group>"; };
+		5BC67E5D1A4090AA00F29ABA /* progress_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = progress_dialog.h; path = ../progress_dialog.h; sourceTree = "<group>"; };
+		5BC67E5E1A4090BD00F29ABA /* progress_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = progress_dialog.cc; path = ../progress_dialog.cc; sourceTree = "<group>"; };
+		95176F781A08E6D800E32046 /* file_sample_rate_mismatch_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = file_sample_rate_mismatch_dialog.h; path = ../file_sample_rate_mismatch_dialog.h; sourceTree = "<group>"; };
+		95176F791A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_sample_rate_mismatch_dialog.cc; path = ../file_sample_rate_mismatch_dialog.cc; sourceTree = "<group>"; };
+		95176F7D1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = file_sample_rate_mismatch_dialog.xml; sourceTree = "<group>"; };
+		952E0B3B1A0A1D7000F375D0 /* buildlog.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = buildlog.txt; path = ../../../buildlog.txt; sourceTree = "<group>"; };
+		954DCFBC1A0239DA00B7160E /* about_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = about_dialog.cc; path = ../about_dialog.cc; sourceTree = "<group>"; };
+		954DCFBE1A0239EC00B7160E /* about_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = about_dialog.h; path = ../about_dialog.h; sourceTree = "<group>"; };
+		954DCFBF1A023AAB00B7160E /* about_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = about_dialog.xml; sourceTree = "<group>"; };
+		954DCFC01A023AAB00B7160E /* license_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = license_dialog.xml; sourceTree = "<group>"; };
+		954DCFDD1A07A14E00B7160E /* read_only_session_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = read_only_session_dialog.xml; sourceTree = "<group>"; };
+		956D3F891A851805004F328C /* waves_import_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_import_dialog.xml; sourceTree = "<group>"; };
+		957EF44A1A30BFB300F1500E /* waves_message_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_message_dialog.cc; path = ../waves_message_dialog.cc; sourceTree = "<group>"; };
+		957EF44F1A30BFBF00F1500E /* waves_message_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_message_dialog.h; path = ../waves_message_dialog.h; sourceTree = "<group>"; };
+		95A134DD1A0239080008E3D6 /* license_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = license_dialog.cc; path = ../license_dialog.cc; sourceTree = "<group>"; };
+		95A134DF1A02391F0008E3D6 /* license_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = license_dialog.h; path = ../license_dialog.h; sourceTree = "<group>"; };
+		95D1C51A1A78ED1100BE28DB /* waves_edit_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_edit_dialog.h; path = ../waves_edit_dialog.h; sourceTree = "<group>"; };
+		95D1C51E1A78ED2100BE28DB /* waves_edit_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_edit_dialog.cc; path = ../waves_edit_dialog.cc; sourceTree = "<group>"; };
+		95D1C5201A78ED3A00BE28DB /* waves_edit_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_edit_dialog.xml; sourceTree = "<group>"; };
+		95D4986B1AEA363E006E065D /* audio_engine_reset_info_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = audio_engine_reset_info_dialog.xml; sourceTree = "<group>"; };
+		95D4986C1AEA363E006E065D /* crash_recovery_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = crash_recovery_dialog.xml; sourceTree = "<group>"; };
+		95D4986D1AEA363E006E065D /* waves_save_template_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_save_template_dialog.xml; sourceTree = "<group>"; };
+		95D5D1321A8A514300407F98 /* waves_numeric_edit_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_numeric_edit_dialog.h; path = ../waves_numeric_edit_dialog.h; sourceTree = "<group>"; };
+		95D5D1361A8A514300407F98 /* waves_numeric_edit_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_numeric_edit_dialog.cc; path = ../waves_numeric_edit_dialog.cc; sourceTree = "<group>"; };
+		95D5D1381A8A514300407F98 /* waves_numeric_edit_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_numeric_edit_dialog.xml; sourceTree = "<group>"; };
+		95D6A67A1A8E22E80030CDD0 /* waves_keyeditor.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_keyeditor.xml; sourceTree = "<group>"; };
+		95D71D501A4C66DF00DE5B3B /* waves_track_color_dialog.logic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_track_color_dialog.logic.h; path = ../waves_track_color_dialog.logic.h; sourceTree = "<group>"; };
+		95D71D541A4C66F600DE5B3B /* waves_track_color_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_track_color_dialog.cc; path = ../waves_track_color_dialog.cc; sourceTree = "<group>"; };
+		95D71D561A4C697700DE5B3B /* waves_track_color_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_track_color_dialog.h; path = ../waves_track_color_dialog.h; sourceTree = "<group>"; };
+		95D71D571A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_track_color_dialog.logic.cc; path = ../waves_track_color_dialog.logic.cc; sourceTree = "<group>"; };
+		95D795DB1A7BB40C00120A4F /* marker_inspector_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = marker_inspector_dialog.xml; sourceTree = "<group>"; };
+		95D795DD1A7BB40C00120A4F /* waves_export_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_dialog.xml; sourceTree = "<group>"; };
+		95D795DE1A7BB40C00120A4F /* waves_export_file_notebook_page.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_file_notebook_page.xml; sourceTree = "<group>"; };
+		95D795DF1A7BB40C00120A4F /* waves_export_file_notebook.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_file_notebook.xml; sourceTree = "<group>"; };
+		95D795E01A7BB40C00120A4F /* waves_export_filename_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_filename_selector.xml; sourceTree = "<group>"; };
+		95D795E11A7BB40C00120A4F /* waves_export_format_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_format_selector.xml; sourceTree = "<group>"; };
+		95D795E21A7BB40C00120A4F /* waves_export_preset_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_preset_selector.xml; sourceTree = "<group>"; };
+		95D795E31A7BB40C00120A4F /* waves_export_timespan_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_timespan_selector.xml; sourceTree = "<group>"; };
+		95D795E41A7BB40C00120A4F /* waves_port_export_channel_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_port_export_channel_selector.xml; sourceTree = "<group>"; };
+		95D795E51A7BB40C00120A4F /* waves_region_export_channel_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_region_export_channel_selector.xml; sourceTree = "<group>"; };
+		95D795E61A7BB40C00120A4F /* waves_track_color_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_track_color_dialog.xml; sourceTree = "<group>"; };
+		95D795E71A7BB40C00120A4F /* waves_track_export_channel_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_track_export_channel_selector.xml; sourceTree = "<group>"; };
+		95D795FF1A7BB9E000120A4F /* floating_text_entry.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = floating_text_entry.cc; path = ../floating_text_entry.cc; sourceTree = "<group>"; };
+		95D796001A7BB9E000120A4F /* marker_inspector_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = marker_inspector_dialog.cc; path = ../marker_inspector_dialog.cc; sourceTree = "<group>"; };
+		95D796011A7BB9E000120A4F /* marker_inspector_dialog.logic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = marker_inspector_dialog.logic.cc; path = ../marker_inspector_dialog.logic.cc; sourceTree = "<group>"; };
+		95D796021A7BB9E000120A4F /* route_inspector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route_inspector.cc; path = ../route_inspector.cc; sourceTree = "<group>"; };
+		95D796031A7BB9E000120A4F /* waves_export_channel_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_channel_selector.cc; path = ../waves_export_channel_selector.cc; sourceTree = "<group>"; };
+		95D796041A7BB9E000120A4F /* waves_export_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_dialog.cc; path = ../waves_export_dialog.cc; sourceTree = "<group>"; };
+		95D796051A7BB9E000120A4F /* waves_export_file_notebook.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_file_notebook.cc; path = ../waves_export_file_notebook.cc; sourceTree = "<group>"; };
+		95D796061A7BB9E000120A4F /* waves_export_filename_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_filename_selector.cc; path = ../waves_export_filename_selector.cc; sourceTree = "<group>"; };
+		95D796071A7BB9E000120A4F /* waves_export_format_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_format_selector.cc; path = ../waves_export_format_selector.cc; sourceTree = "<group>"; };
+		95D796081A7BB9E000120A4F /* waves_export_preset_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_preset_selector.cc; path = ../waves_export_preset_selector.cc; sourceTree = "<group>"; };
+		95D796091A7BB9E000120A4F /* waves_export_timespan_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_timespan_selector.cc; path = ../waves_export_timespan_selector.cc; sourceTree = "<group>"; };
+		95D7960A1A7BB9E000120A4F /* waves_import_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_import_dialog.cc; path = ../waves_import_dialog.cc; sourceTree = "<group>"; };
+		95D7961A1A7BBA4E00120A4F /* floating_text_entry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = floating_text_entry.h; path = ../floating_text_entry.h; sourceTree = "<group>"; };
+		95D7961B1A7BBA4E00120A4F /* marker_inspector_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker_inspector_dialog.h; path = ../marker_inspector_dialog.h; sourceTree = "<group>"; };
+		95D7961C1A7BBA4E00120A4F /* marker_inspector_dialog.logic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker_inspector_dialog.logic.h; path = ../marker_inspector_dialog.logic.h; sourceTree = "<group>"; };
+		95D7961D1A7BBA4E00120A4F /* product_definition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = product_definition.h; path = ../product_definition.h; sourceTree = "<group>"; };
+		95D7961E1A7BBA4E00120A4F /* ruler_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ruler_dialog.h; path = ../ruler_dialog.h; sourceTree = "<group>"; };
+		95D7961F1A7BBA4E00120A4F /* trackslive_resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trackslive_resource.h; path = ../trackslive_resource.h; sourceTree = "<group>"; };
+		95D796201A7BBA4E00120A4F /* waves_export_channel_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_channel_selector.h; path = ../waves_export_channel_selector.h; sourceTree = "<group>"; };
+		95D796211A7BBA4E00120A4F /* waves_export_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_dialog.h; path = ../waves_export_dialog.h; sourceTree = "<group>"; };
+		95D796221A7BBA4E00120A4F /* waves_export_file_notebook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_file_notebook.h; path = ../waves_export_file_notebook.h; sourceTree = "<group>"; };
+		95D796231A7BBA4E00120A4F /* waves_export_filename_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_filename_selector.h; path = ../waves_export_filename_selector.h; sourceTree = "<group>"; };
+		95D796241A7BBA4E00120A4F /* waves_export_format_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_format_selector.h; path = ../waves_export_format_selector.h; sourceTree = "<group>"; };
+		95D796251A7BBA4E00120A4F /* waves_export_preset_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_preset_selector.h; path = ../waves_export_preset_selector.h; sourceTree = "<group>"; };
+		95D796261A7BBA4E00120A4F /* waves_export_timespan_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_timespan_selector.h; path = ../waves_export_timespan_selector.h; sourceTree = "<group>"; };
+		95D796271A7BBA4E00120A4F /* waves_grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_grid.h; path = ../waves_grid.h; sourceTree = "<group>"; };
+		95D796281A7BBA4E00120A4F /* waves_import_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_import_dialog.h; path = ../waves_import_dialog.h; sourceTree = "<group>"; };
+		95D9E3771A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_ambiguous_file_dialog.xml; sourceTree = "<group>"; };
+		95D9E3781A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_missing_file_dialog.xml; sourceTree = "<group>"; };
+		95D9E37B1A8D1B5200A0DA46 /* waves_ambiguous_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_ambiguous_file_dialog.h; path = ../waves_ambiguous_file_dialog.h; sourceTree = "<group>"; };
+		95D9E37C1A8D1B5200A0DA46 /* waves_missing_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_missing_file_dialog.h; path = ../waves_missing_file_dialog.h; sourceTree = "<group>"; };
+		95D9E37D1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_ambiguous_file_dialog.cc; path = ../waves_ambiguous_file_dialog.cc; sourceTree = "<group>"; };
+		95D9E37E1A8D1B6600A0DA46 /* waves_missing_file_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_missing_file_dialog.cc; path = ../waves_missing_file_dialog.cc; sourceTree = "<group>"; };
+		95E2A7AA1A8F652F0080BD79 /* waves_radio_item.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_radio_item.xml; sourceTree = "<group>"; };
+		95E5E9411AE9462B0000E2CE /* waves_tooltip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_tooltip.h; path = ../waves_tooltip.h; sourceTree = "<group>"; };
+		95E5E9451AE946510000E2CE /* waves_tooltip.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_tooltip.cc; path = ../waves_tooltip.cc; sourceTree = "<group>"; };
+		95ED5FF61A95F285006D39E4 /* route_inspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_inspector.h; path = ../route_inspector.h; sourceTree = "<group>"; };
+		95F9DFD61A35A8BD0007E953 /* waves_message_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_message_dialog.xml; sourceTree = "<group>"; };
+		95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_clean_up_dialog.xml; sourceTree = "<group>"; };
+		95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_connect_to_backend_error_dialog.xml; sourceTree = "<group>"; };
+		95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_excessive_split_dialog.xml; sourceTree = "<group>"; };
+		95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_file_exists_dialog.xml; sourceTree = "<group>"; };
+		95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_how_to_import_dialog_1.xml; sourceTree = "<group>"; };
+		95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_how_to_import_dialog_2.xml; sourceTree = "<group>"; };
+		95F9DFDF1A35F3310007E953 /* waves_route_rename_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_route_rename_dialog.xml; sourceTree = "<group>"; };
+		CE1A9079199A37AE00ECA62B /* add_tracks_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = add_tracks_dialog.cc; path = ../add_tracks_dialog.cc; sourceTree = "<group>"; };
+		CE1A907E199A37BF00ECA62B /* add_tracks_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = add_tracks_dialog.h; path = ../add_tracks_dialog.h; sourceTree = "<group>"; };
+		CE1C6DCC19879F04006BDB03 /* compact_meter_bridge.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compact_meter_bridge.cc; path = ../compact_meter_bridge.cc; sourceTree = "<group>"; };
+		CE1C6DCD19879F04006BDB03 /* compact_meter_strip.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compact_meter_strip.cc; path = ../compact_meter_strip.cc; sourceTree = "<group>"; };
+		CE1C6DD319879F1B006BDB03 /* compact_meter_bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = compact_meter_bridge.h; path = ../compact_meter_bridge.h; sourceTree = "<group>"; };
+		CE1C6DD419879F1B006BDB03 /* compact_meter_strip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = compact_meter_strip.h; path = ../compact_meter_strip.h; sourceTree = "<group>"; };
+		CE1C6DDB1987A910006BDB03 /* master_bus_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = master_bus_ui.h; path = ../master_bus_ui.h; sourceTree = "<group>"; };
+		CE1C6DDF1987A924006BDB03 /* master_bus_ui.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = master_bus_ui.cc; path = ../master_bus_ui.cc; sourceTree = "<group>"; };
+		CE294C5719CAD4E300D12768 /* add_tracks_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = add_tracks_dialog.xml; sourceTree = "<group>"; };
+		CE294C5819CAD4E300D12768 /* compact_meter_bridge.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = compact_meter_bridge.xml; sourceTree = "<group>"; };
+		CE294C5919CAD4E300D12768 /* compact_meter_strip.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = compact_meter_strip.xml; sourceTree = "<group>"; };
+		CE294C5A19CAD4E300D12768 /* marker_io_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = marker_io_dialog.xml; sourceTree = "<group>"; };
+		CE294C5B19CAD4E300D12768 /* meter_bridge_view.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = meter_bridge_view.xml; sourceTree = "<group>"; };
+		CE294C5C19CAD4E300D12768 /* meter_strip_gain_meter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = meter_strip_gain_meter.xml; sourceTree = "<group>"; };
+		CE294C5D19CAD4E300D12768 /* mixer_bridge_view.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = mixer_bridge_view.xml; sourceTree = "<group>"; };
+		CE294C5E19CAD4E300D12768 /* time_info_box.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = time_info_box.xml; sourceTree = "<group>"; };
+		CE294C6B19CAD54500D12768 /* marker_io_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = marker_io_dialog.cc; path = ../marker_io_dialog.cc; sourceTree = "<group>"; };
+		CE294C6C19CAD54500D12768 /* mixer_bridge_view.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_bridge_view.cc; path = ../mixer_bridge_view.cc; sourceTree = "<group>"; };
+		CE294C6D19CAD54500D12768 /* open_file_dialog_nix.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = open_file_dialog_nix.cc; path = ../open_file_dialog_nix.cc; sourceTree = "<group>"; };
+		CE294C6E19CAD54500D12768 /* open_file_dialog_windows.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = open_file_dialog_windows.cc; path = ../open_file_dialog_windows.cc; sourceTree = "<group>"; };
+		CE294C6F19CAD54500D12768 /* ruler_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ruler_dialog.cc; path = ../ruler_dialog.cc; sourceTree = "<group>"; };
+		CE294C7019CAD54500D12768 /* soundcloud_export_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = soundcloud_export_selector.cc; path = ../soundcloud_export_selector.cc; sourceTree = "<group>"; };
+		CE294C7119CAD54500D12768 /* waves_dropdown.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_dropdown.cc; path = ../waves_dropdown.cc; sourceTree = "<group>"; };
+		CE294C7219CAD54500D12768 /* waves_grid.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_grid.cc; path = ../waves_grid.cc; sourceTree = "<group>"; };
+		CE294C7319CAD54500D12768 /* waves_zoom_control.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_zoom_control.cc; path = ../waves_zoom_control.cc; sourceTree = "<group>"; };
+		CE294C7E19CAD58500D12768 /* ardour_dropdown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_dropdown.h; path = ../ardour_dropdown.h; sourceTree = "<group>"; };
+		CE294C7F19CAD58500D12768 /* marker_io_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker_io_dialog.h; path = ../marker_io_dialog.h; sourceTree = "<group>"; };
+		CE294C8019CAD58500D12768 /* mixer_bridge_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_bridge_view.h; path = ../mixer_bridge_view.h; sourceTree = "<group>"; };
+		CE294C8119CAD58500D12768 /* soundcloud_export_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = soundcloud_export_selector.h; path = ../soundcloud_export_selector.h; sourceTree = "<group>"; };
+		CE294C8219CAD58500D12768 /* waves_dropdown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_dropdown.h; path = ../waves_dropdown.h; sourceTree = "<group>"; };
+		CE294C8319CAD58500D12768 /* waves_zoom_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_zoom_control.h; path = ../waves_zoom_control.h; sourceTree = "<group>"; };
+		CEAFC76E195445560016ACF0 /* bbt_time.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bbt_time.cc; path = ../../libs/timecode/src/bbt_time.cc; sourceTree = "<group>"; };
+		CEAFC76F195445560016ACF0 /* time.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = time.cc; path = ../../libs/timecode/src/time.cc; sourceTree = "<group>"; };
+		CEAFC775195445D90016ACF0 /* bbt_time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bbt_time.h; path = ../../libs/timecode/timecode/bbt_time.h; sourceTree = "<group>"; };
+		CEAFC776195445D90016ACF0 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time.h; path = ../../libs/timecode/timecode/time.h; sourceTree = "<group>"; };
+		CEAFC777195445D90016ACF0 /* visibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../libs/timecode/timecode/visibility.h; sourceTree = "<group>"; };
+		CEB0A45A19583F3F006D269A /* session_close_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_close_dialog.h; path = ../session_close_dialog.h; sourceTree = "<group>"; };
+		CEB0A9F119583F96006D269A /* session_close_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_close_dialog.cc; path = ../session_close_dialog.cc; sourceTree = "<group>"; };
+		CEB0A9F31958447C006D269A /* session_close_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = session_close_dialog.xml; sourceTree = "<group>"; };
+		CEB9D787197516BE00B21780 /* audio_time_axis.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = audio_time_axis.xml; sourceTree = "<group>"; };
+		CEB9D788197516BE00B21780 /* automation_time_axis.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = automation_time_axis.xml; sourceTree = "<group>"; };
+		CEB9D789197516BE00B21780 /* editor_mixer.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = editor_mixer.xml; sourceTree = "<group>"; };
+		CEB9D78A197516BE00B21780 /* inspector_gain_meter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = inspector_gain_meter.xml; sourceTree = "<group>"; };
+		CEB9D78C197516BE00B21780 /* master_ui.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = master_ui.xml; sourceTree = "<group>"; };
+		CEB9D78D197516BE00B21780 /* meter_strip.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = meter_strip.xml; sourceTree = "<group>"; };
+		CEB9D78E197516BE00B21780 /* mixer_gain_meter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = mixer_gain_meter.xml; sourceTree = "<group>"; };
+		CEB9D78F197516BE00B21780 /* mixer_strip.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = mixer_strip.xml; sourceTree = "<group>"; };
+		CEB9D790197516BE00B21780 /* track_header_gain_meter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = track_header_gain_meter.xml; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		43279241194EFFF1003C9FEA /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				43279248194EFFF1003C9FEA /* Cocoa.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		43279039194EFF24003C9FEA = {
+			isa = PBXGroup;
+			children = (
+				5BC24BA91A64328D006A2400 /* trackslive.menus.in */,
+				435E66781A4AB60C00472D50 /* audiographer.xcodeproj */,
+				952E0B3B1A0A1D7000F375D0 /* buildlog.txt */,
+				4397599619CB06AC00740098 /* gtkmm2ext.xcodeproj */,
+				4397595019CADAFC00740098 /* canvas.xcodeproj */,
+				43B351FA194F131D0038C140 /* pbd.xcodeproj */,
+				43B351F4194F130C0038C140 /* libardour.xcodeproj */,
+				43B351EE194F12FB0038C140 /* waves_audiobackend.xcodeproj */,
+				43279480194F00CB003C9FEA /* headers */,
+				43279461194F007F003C9FEA /* menus */,
+				43279429194F0062003C9FEA /* ui */,
+				432793FF194F0062003C9FEA /* pixmaps */,
+				4327923F194EFFC3003C9FEA /* Resources */,
+				43279040194EFF38003C9FEA /* source */,
+				4327924D194EFFF1003C9FEA /* Tracks */,
+				43279246194EFFF1003C9FEA /* Frameworks */,
+				43279245194EFFF1003C9FEA /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		43279040194EFF38003C9FEA /* source */ = {
+			isa = PBXGroup;
+			children = (
+				95E5E9451AE946510000E2CE /* waves_tooltip.cc */,
+				95D9E37D1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc */,
+				95D9E37E1A8D1B6600A0DA46 /* waves_missing_file_dialog.cc */,
+				95D5D1361A8A514300407F98 /* waves_numeric_edit_dialog.cc */,
+				95D795FF1A7BB9E000120A4F /* floating_text_entry.cc */,
+				95D796001A7BB9E000120A4F /* marker_inspector_dialog.cc */,
+				95D796011A7BB9E000120A4F /* marker_inspector_dialog.logic.cc */,
+				95D796021A7BB9E000120A4F /* route_inspector.cc */,
+				95D796031A7BB9E000120A4F /* waves_export_channel_selector.cc */,
+				95D796041A7BB9E000120A4F /* waves_export_dialog.cc */,
+				95D796051A7BB9E000120A4F /* waves_export_file_notebook.cc */,
+				95D796061A7BB9E000120A4F /* waves_export_filename_selector.cc */,
+				95D796071A7BB9E000120A4F /* waves_export_format_selector.cc */,
+				95D796081A7BB9E000120A4F /* waves_export_preset_selector.cc */,
+				95D796091A7BB9E000120A4F /* waves_export_timespan_selector.cc */,
+				95D7960A1A7BB9E000120A4F /* waves_import_dialog.cc */,
+				95D1C51E1A78ED2100BE28DB /* waves_edit_dialog.cc */,
+				95D71D571A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc */,
+				95D71D541A4C66F600DE5B3B /* waves_track_color_dialog.cc */,
+				5BC67E5E1A4090BD00F29ABA /* progress_dialog.cc */,
+				957EF44A1A30BFB300F1500E /* waves_message_dialog.cc */,
+				95176F791A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc */,
+				954DCFBC1A0239DA00B7160E /* about_dialog.cc */,
+				95A134DD1A0239080008E3D6 /* license_dialog.cc */,
+				CE294C6B19CAD54500D12768 /* marker_io_dialog.cc */,
+				CE294C6C19CAD54500D12768 /* mixer_bridge_view.cc */,
+				CE294C6D19CAD54500D12768 /* open_file_dialog_nix.cc */,
+				CE294C6E19CAD54500D12768 /* open_file_dialog_windows.cc */,
+				CE294C6F19CAD54500D12768 /* ruler_dialog.cc */,
+				CE294C7019CAD54500D12768 /* soundcloud_export_selector.cc */,
+				CE294C7119CAD54500D12768 /* waves_dropdown.cc */,
+				CE294C7219CAD54500D12768 /* waves_grid.cc */,
+				CE294C7319CAD54500D12768 /* waves_zoom_control.cc */,
+				CE1A9079199A37AE00ECA62B /* add_tracks_dialog.cc */,
+				CE1C6DDF1987A924006BDB03 /* master_bus_ui.cc */,
+				CE1C6DCC19879F04006BDB03 /* compact_meter_bridge.cc */,
+				CE1C6DCD19879F04006BDB03 /* compact_meter_strip.cc */,
+				CEB0A9F119583F96006D269A /* session_close_dialog.cc */,
+				CEAFC76E195445560016ACF0 /* bbt_time.cc */,
+				CEAFC76F195445560016ACF0 /* time.cc */,
+				43279210194EFFBA003C9FEA /* tracks_control_panel.cc */,
+				43279212194EFFBA003C9FEA /* tracks_control_panel.logic.cc */,
+				43279043194EFFB9003C9FEA /* actions.cc */,
+				43279045194EFFB9003C9FEA /* add_route_dialog.cc */,
+				43279047194EFFB9003C9FEA /* add_video_dialog.cc */,
+				43279049194EFFB9003C9FEA /* ambiguous_file_dialog.cc */,
+				4327904B194EFFB9003C9FEA /* analysis_window.cc */,
+				4327904D194EFFB9003C9FEA /* ardour_button.cc */,
+				4327904F194EFFB9003C9FEA /* ardour_dialog.cc */,
+				43279051194EFFB9003C9FEA /* ardour_ui_dependents.cc */,
+				43279052194EFFB9003C9FEA /* ardour_ui_dialogs.cc */,
+				43279053194EFFB9003C9FEA /* ardour_ui_ed.cc */,
+				43279054194EFFB9003C9FEA /* ardour_ui_mixer.cc */,
+				43279055194EFFB9003C9FEA /* ardour_ui_options.cc */,
+				43279056194EFFB9003C9FEA /* ardour_ui.cc */,
+				43279058194EFFB9003C9FEA /* ardour_ui2.cc */,
+				43279059194EFFB9003C9FEA /* ardour_window.cc */,
+				4327905C194EFFB9003C9FEA /* au_pluginui.mm */,
+				4327905D194EFFB9003C9FEA /* audio_clock.cc */,
+				4327905F194EFFB9003C9FEA /* audio_region_editor.cc */,
+				43279061194EFFB9003C9FEA /* audio_region_view.cc */,
+				43279063194EFFB9003C9FEA /* audio_streamview.cc */,
+				43279065194EFFB9003C9FEA /* audio_time_axis.cc */,
+				43279067194EFFB9003C9FEA /* automation_controller.cc */,
+				43279069194EFFB9003C9FEA /* automation_line.cc */,
+				4327906B194EFFB9003C9FEA /* automation_region_view.cc */,
+				4327906E194EFFB9003C9FEA /* automation_streamview.cc */,
+				43279070194EFFB9003C9FEA /* automation_time_axis.cc */,
+				43279072194EFFB9003C9FEA /* axis_view.cc */,
+				43279074194EFFB9003C9FEA /* big_clock_window.cc */,
+				43279076194EFFB9003C9FEA /* bundle_env_cocoa.cc */,
+				43279077194EFFB9003C9FEA /* bundle_env_linux.cc */,
+				43279078194EFFB9003C9FEA /* bundle_env_mingw.cc */,
+				43279079194EFFB9003C9FEA /* bundle_env_msvc.cc */,
+				4327907B194EFFB9003C9FEA /* bundle_manager.cc */,
+				4327907D194EFFB9003C9FEA /* button_joiner.cc */,
+				4327907F194EFFB9003C9FEA /* canvas_patch_change.cc */,
+				43279081194EFFB9003C9FEA /* canvas-simpleline.c */,
+				43279082194EFFB9003C9FEA /* canvas-simplerect.c */,
+				43279083194EFFB9003C9FEA /* canvas-waveview.c */,
+				43279085194EFFB9003C9FEA /* clock_group.cc */,
+				43279087194EFFB9003C9FEA /* cocoacarbon.mm */,
+				43279088194EFFB9003C9FEA /* configinfo.cc */,
+				4327908A194EFFB9003C9FEA /* control_point_dialog.cc */,
+				4327908C194EFFB9003C9FEA /* control_point.cc */,
+				4327908E194EFFB9003C9FEA /* crossfade_edit.cc */,
+				43279092194EFFB9003C9FEA /* curvetest.cc */,
+				43279094194EFFB9003C9FEA /* debug.cc */,
+				43279096194EFFB9003C9FEA /* device_connection_control.cc */,
+				43279098194EFFB9003C9FEA /* edit_note_dialog.cc */,
+				4327909B194EFFB9003C9FEA /* editing.cc */,
+				4327909D194EFFB9003C9FEA /* editor_actions.cc */,
+				4327909E194EFFB9003C9FEA /* editor_audio_import.cc */,
+				4327909F194EFFB9003C9FEA /* editor_audiotrack.cc */,
+				432790A0194EFFB9003C9FEA /* editor_canvas_events.cc */,
+				432790A1194EFFB9003C9FEA /* editor_canvas.cc */,
+				432790A2194EFFB9003C9FEA /* editor_component.cc */,
+				432790A4194EFFB9003C9FEA /* editor_cursors.cc */,
+				432790A6194EFFB9003C9FEA /* editor_drag.cc */,
+				432790A9194EFFB9003C9FEA /* editor_export_audio.cc */,
+				432790AA194EFFB9003C9FEA /* editor_group_tabs.cc */,
+				432790AD194EFFB9003C9FEA /* editor_keys.cc */,
+				432790AE194EFFB9003C9FEA /* editor_locations.cc */,
+				432790B0194EFFB9003C9FEA /* editor_markers.cc */,
+				432790B1194EFFB9003C9FEA /* editor_mixer.cc */,
+				432790B2194EFFB9003C9FEA /* editor_mouse.cc */,
+				432790B3194EFFB9003C9FEA /* editor_ops.cc */,
+				432790B4194EFFB9003C9FEA /* editor_regions.cc */,
+				432790B6194EFFB9003C9FEA /* editor_route_groups.cc */,
+				432790B8194EFFB9003C9FEA /* editor_routes.cc */,
+				432790BA194EFFB9003C9FEA /* editor_rulers.cc */,
+				432790BB194EFFB9003C9FEA /* editor_selection.cc */,
+				432790BC194EFFB9003C9FEA /* editor_snapshots.cc */,
+				432790BE194EFFB9003C9FEA /* editor_summary.cc */,
+				432790C0194EFFB9003C9FEA /* editor_tempodisplay.cc */,
+				432790C1194EFFB9003C9FEA /* editor_timefx.cc */,
+				432790C2194EFFB9003C9FEA /* editor_videotimeline.cc */,
+				432790C5194EFFB9003C9FEA /* editor.cc */,
+				432790C7194EFFB9003C9FEA /* engine_dialog.cc */,
+				432790C9194EFFB9003C9FEA /* enums.cc */,
+				432790CB194EFFB9003C9FEA /* evtest.cc */,
+				432790CC194EFFB9003C9FEA /* export_channel_selector.cc */,
+				432790CE194EFFB9003C9FEA /* export_dialog.cc */,
+				432790D0194EFFB9003C9FEA /* export_file_notebook.cc */,
+				432790D2194EFFB9003C9FEA /* export_filename_selector.cc */,
+				432790D4194EFFB9003C9FEA /* export_format_dialog.cc */,
+				432790D6194EFFB9003C9FEA /* export_format_selector.cc */,
+				432790D8194EFFB9003C9FEA /* export_preset_selector.cc */,
+				432790DA194EFFB9003C9FEA /* export_range_markers_dialog.cc */,
+				432790DC194EFFB9003C9FEA /* export_timespan_selector.cc */,
+				432790DE194EFFB9003C9FEA /* export_video_dialog.cc */,
+				432790E0194EFFB9003C9FEA /* export_video_infobox.cc */,
+				432790E2194EFFB9003C9FEA /* fft_graph.cc */,
+				432790E4194EFFB9003C9FEA /* fft_result.cc */,
+				432790E6194EFFB9003C9FEA /* fft.cc */,
+				432790E9194EFFB9003C9FEA /* gain_meter.cc */,
+				432790EB194EFFB9003C9FEA /* generic_pluginui.cc */,
+				432790ED194EFFB9003C9FEA /* ghostregion.cc */,
+				432790EF194EFFB9003C9FEA /* global_port_matrix.cc */,
+				432790F2194EFFB9003C9FEA /* gprofhelper.c */,
+				432790F3194EFFB9003C9FEA /* group_tabs.cc */,
+				432790F5194EFFB9003C9FEA /* gtk_pianokeyboard.c */,
+				432790FB194EFFB9003C9FEA /* gui_object.cc */,
+				432790FE194EFFB9003C9FEA /* hit.cc */,
+				43279101194EFFB9003C9FEA /* insert_time_dialog.cc */,
+				43279103194EFFB9003C9FEA /* interthread_progress_window.cc */,
+				43279105194EFFB9003C9FEA /* io_selector.cc */,
+				43279107194EFFB9003C9FEA /* keyboard.cc */,
+				43279109194EFFB9003C9FEA /* keyeditor.cc */,
+				4327910B194EFFB9003C9FEA /* latency_gui.cc */,
+				4327910D194EFFB9003C9FEA /* led.cc */,
+				4327910F194EFFB9003C9FEA /* level_meter.cc */,
+				43279111194EFFB9003C9FEA /* linux_vst_gui_support.cc */,
+				43279112194EFFB9003C9FEA /* location_ui.cc */,
+				43279116194EFFB9003C9FEA /* lv2_plugin_ui.cc */,
+				43279118194EFFB9003C9FEA /* lxvst_plugin_ui.cc */,
+				4327911A194EFFB9003C9FEA /* main_clock.cc */,
+				4327911C194EFFB9003C9FEA /* main.cc */,
+				4327911E194EFFB9003C9FEA /* marker.cc */,
+				43279120194EFFB9003C9FEA /* meter_patterns.cc */,
+				43279122194EFFB9003C9FEA /* meter_strip.cc */,
+				43279124194EFFB9003C9FEA /* meterbridge.cc */,
+				43279126194EFFB9003C9FEA /* midi_automation_line.cc */,
+				43279128194EFFB9003C9FEA /* midi_channel_dialog.cc */,
+				4327912A194EFFB9003C9FEA /* midi_channel_selector.cc */,
+				4327912C194EFFB9003C9FEA /* midi_cut_buffer.cc */,
+				4327912E194EFFB9003C9FEA /* midi_device_connection_control.cc */,
+				43279130194EFFB9003C9FEA /* midi_export_dialog.cc */,
+				43279132194EFFB9003C9FEA /* midi_list_editor.cc */,
+				43279134194EFFB9003C9FEA /* midi_port_dialog.cc */,
+				43279136194EFFB9003C9FEA /* midi_region_view.cc */,
+				43279138194EFFB9003C9FEA /* midi_scroomer.cc */,
+				4327913A194EFFB9003C9FEA /* midi_selection.cc */,
+				4327913C194EFFB9003C9FEA /* midi_streamview.cc */,
+				4327913E194EFFB9003C9FEA /* midi_time_axis.cc */,
+				43279140194EFFB9003C9FEA /* midi_tracer.cc */,
+				43279143194EFFB9003C9FEA /* midi_velocity_dialog.cc */,
+				43279145194EFFB9003C9FEA /* missing_file_dialog.cc */,
+				43279147194EFFB9003C9FEA /* missing_plugin_dialog.cc */,
+				43279149194EFFB9003C9FEA /* mixer_actor.cc */,
+				4327914B194EFFB9003C9FEA /* mixer_group_tabs.cc */,
+				4327914D194EFFB9003C9FEA /* mixer_strip.cc */,
+				4327914F194EFFB9003C9FEA /* mixer_ui.cc */,
+				43279151194EFFB9003C9FEA /* monitor_section.cc */,
+				43279153194EFFB9003C9FEA /* mono_panner_editor.cc */,
+				43279155194EFFB9003C9FEA /* mono_panner.cc */,
+				43279157194EFFB9003C9FEA /* mouse_cursors.cc */,
+				43279159194EFFB9003C9FEA /* mtest.cc */,
+				4327915A194EFFB9003C9FEA /* nag.cc */,
+				4327915C194EFFB9003C9FEA /* new_plugin_preset_dialog.cc */,
+				4327915E194EFFB9003C9FEA /* normalize_dialog.cc */,
+				43279160194EFFB9003C9FEA /* note_base.cc */,
+				43279162194EFFB9003C9FEA /* note_player.cc */,
+				43279164194EFFB9003C9FEA /* note.cc */,
+				43279166194EFFB9003C9FEA /* nsm.cc */,
+				43279168194EFFB9003C9FEA /* nsmclient.cc */,
+				4327916D194EFFB9003C9FEA /* open_file_dialog.mm */,
+				4327916E194EFFB9003C9FEA /* option_editor.cc */,
+				43279170194EFFB9003C9FEA /* opts.cc */,
+				43279172194EFFB9003C9FEA /* panner_editor.cc */,
+				43279174194EFFB9003C9FEA /* panner_interface.cc */,
+				43279176194EFFB9003C9FEA /* panner_ui.cc */,
+				43279178194EFFB9003C9FEA /* panner2d.cc */,
+				4327917A194EFFB9003C9FEA /* patch_change_dialog.cc */,
+				4327917C194EFFB9003C9FEA /* patch_change.cc */,
+				4327917E194EFFB9003C9FEA /* piano_roll_header.cc */,
+				43279180194EFFB9003C9FEA /* pingback.cc */,
+				43279183194EFFB9003C9FEA /* playlist_selector.cc */,
+				43279185194EFFB9003C9FEA /* plugin_eq_gui.cc */,
+				43279188194EFFBA003C9FEA /* plugin_selector.cc */,
+				4327918A194EFFBA003C9FEA /* plugin_ui.cc */,
+				4327918D194EFFBA003C9FEA /* port_group.cc */,
+				4327918F194EFFBA003C9FEA /* port_insert_ui.cc */,
+				43279191194EFFBA003C9FEA /* port_matrix_body.cc */,
+				43279193194EFFBA003C9FEA /* port_matrix_column_labels.cc */,
+				43279195194EFFBA003C9FEA /* port_matrix_component.cc */,
+				43279197194EFFBA003C9FEA /* port_matrix_grid.cc */,
+				43279199194EFFBA003C9FEA /* port_matrix_labels.cc */,
+				4327919B194EFFBA003C9FEA /* port_matrix_row_labels.cc */,
+				4327919E194EFFBA003C9FEA /* port_matrix.cc */,
+				432791A0194EFFBA003C9FEA /* processor_box.cc */,
+				432791A3194EFFBA003C9FEA /* progress_reporter.cc */,
+				432791A5194EFFBA003C9FEA /* prompter.cc */,
+				432791A7194EFFBA003C9FEA /* public_editor.cc */,
+				432791A9194EFFBA003C9FEA /* quantize_dialog.cc */,
+				432791AB194EFFBA003C9FEA /* rc_option_editor.cc */,
+				432791AD194EFFBA003C9FEA /* region_editor.cc */,
+				432791AF194EFFBA003C9FEA /* region_gain_line.cc */,
+				432791B1194EFFBA003C9FEA /* region_layering_order_editor.cc */,
+				432791B3194EFFBA003C9FEA /* region_selection.cc */,
+				432791B5194EFFBA003C9FEA /* region_view.cc */,
+				432791B7194EFFBA003C9FEA /* return_ui.cc */,
+				432791BA194EFFBA003C9FEA /* rhythm_ferret.cc */,
+				432791BC194EFFBA003C9FEA /* route_group_dialog.cc */,
+				432791BE194EFFBA003C9FEA /* route_group_menu.cc */,
+				432791C0194EFFBA003C9FEA /* route_params_ui.cc */,
+				432791C2194EFFBA003C9FEA /* route_processor_selection.cc */,
+				432791C5194EFFBA003C9FEA /* route_time_axis.cc */,
+				432791C8194EFFBA003C9FEA /* route_ui.cc */,
+				432791CA194EFFBA003C9FEA /* search_path_option.cc */,
+				432791CE194EFFBA003C9FEA /* selection.cc */,
+				432791D0194EFFBA003C9FEA /* send_ui.cc */,
+				432791D2194EFFBA003C9FEA /* session_dialog.cc */,
+				432791D4194EFFBA003C9FEA /* session_dialog.logic.cc */,
+				432791D6194EFFBA003C9FEA /* session_import_dialog.cc */,
+				432791D8194EFFBA003C9FEA /* session_lock_dialog.cc */,
+				432791DA194EFFBA003C9FEA /* session_metadata_dialog.cc */,
+				432791DC194EFFBA003C9FEA /* session_option_editor.cc */,
+				432791DE194EFFBA003C9FEA /* sfdb_freesound_mootcher.cc */,
+				432791E0194EFFBA003C9FEA /* sfdb_ui.cc */,
+				432791E2194EFFBA003C9FEA /* shuttle_control.cc */,
+				432791E4194EFFBA003C9FEA /* speaker_dialog.cc */,
+				432791E6194EFFBA003C9FEA /* splash.cc */,
+				432791EA194EFFBA003C9FEA /* step_editor.cc */,
+				432791EC194EFFBA003C9FEA /* step_entry.cc */,
+				432791EE194EFFBA003C9FEA /* stereo_panner_editor.cc */,
+				432791F0194EFFBA003C9FEA /* stereo_panner.cc */,
+				432791F2194EFFBA003C9FEA /* streamview.cc */,
+				432791F5194EFFBA003C9FEA /* strip_silence_dialog.cc */,
+				432791F7194EFFBA003C9FEA /* sys_ex.cc */,
+				432791F9194EFFBA003C9FEA /* tape_region_view.cc */,
+				432791FB194EFFBA003C9FEA /* tempo_dialog.cc */,
+				432791FD194EFFBA003C9FEA /* tempo_lines.cc */,
+				432791FF194EFFBA003C9FEA /* theme_manager.cc */,
+				43279201194EFFBA003C9FEA /* time_axis_view_item.cc */,
+				43279203194EFFBA003C9FEA /* time_axis_view.cc */,
+				43279205194EFFBA003C9FEA /* time_fx_dialog.cc */,
+				43279207194EFFBA003C9FEA /* time_info_box.cc */,
+				43279209194EFFBA003C9FEA /* time_selection.cc */,
+				4327920B194EFFBA003C9FEA /* timecode_tester.cc */,
+				4327920C194EFFBA003C9FEA /* track_selection.cc */,
+				4327920E194EFFBA003C9FEA /* track_view_list.cc */,
+				43279214194EFFBA003C9FEA /* transcode_ffmpeg.cc */,
+				43279216194EFFBA003C9FEA /* transcode_video_dialog.cc */,
+				43279218194EFFBA003C9FEA /* transpose_dialog.cc */,
+				4327921B194EFFBA003C9FEA /* ui_config.cc */,
+				4327921D194EFFBA003C9FEA /* utils_videotl.cc */,
+				4327921F194EFFBA003C9FEA /* utils.cc */,
+				43279221194EFFBA003C9FEA /* verbose_cursor.cc */,
+				43279223194EFFBA003C9FEA /* version.cc */,
+				43279225194EFFBA003C9FEA /* video_image_frame.cc */,
+				43279227194EFFBA003C9FEA /* video_monitor.cc */,
+				43279229194EFFBA003C9FEA /* video_server_dialog.cc */,
+				4327922B194EFFBA003C9FEA /* video_timeline.cc */,
+				4327922D194EFFBA003C9FEA /* visibility_group.cc */,
+				4327922F194EFFBA003C9FEA /* volume_controller.cc */,
+				43279231194EFFBA003C9FEA /* vst_plugin_ui.cc */,
+				43279233194EFFBA003C9FEA /* waves_button.cc */,
+				43279235194EFFBA003C9FEA /* waves_dialog.cc */,
+				43279237194EFFBA003C9FEA /* waves_icon_button.cc */,
+				43279239194EFFBA003C9FEA /* waves_ui.cc */,
+				4327923B194EFFBA003C9FEA /* window_manager.cc */,
+				4327923D194EFFBA003C9FEA /* windows_vst_plugin_ui.cc */,
+			);
+			name = source;
+			sourceTree = "<group>";
+		};
+		4327923F194EFFC3003C9FEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				43279427194F0062003C9FEA /* small-splash.png */,
+				43279428194F0062003C9FEA /* splash.png */,
+				43279262194F0039003C9FEA /* icons */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		43279245194EFFF1003C9FEA /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				43279244194EFFF1003C9FEA /* Tracks.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		43279246194EFFF1003C9FEA /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				43279247194EFFF1003C9FEA /* Cocoa.framework */,
+				43279249194EFFF1003C9FEA /* Other Frameworks */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		43279249194EFFF1003C9FEA /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				4327924A194EFFF1003C9FEA /* AppKit.framework */,
+				4327924B194EFFF1003C9FEA /* CoreData.framework */,
+				4327924C194EFFF1003C9FEA /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
+			sourceTree = "<group>";
+		};
+		4327924D194EFFF1003C9FEA /* Tracks */ = {
+			isa = PBXGroup;
+			children = (
+				43279259194EFFF1003C9FEA /* AppDelegate.h */,
+				4327925A194EFFF1003C9FEA /* AppDelegate.m */,
+				4327925C194EFFF1003C9FEA /* MainMenu.xib */,
+				4327924E194EFFF1003C9FEA /* Supporting Files */,
+			);
+			path = Tracks;
+			sourceTree = "<group>";
+		};
+		4327924E194EFFF1003C9FEA /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				4327924F194EFFF1003C9FEA /* Tracks-Info.plist */,
+				43279250194EFFF1003C9FEA /* InfoPlist.strings */,
+				43279253194EFFF1003C9FEA /* main.m */,
+				43279255194EFFF1003C9FEA /* Tracks-Prefix.pch */,
+				43279256194EFFF1003C9FEA /* Credits.rtf */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		43279262194F0039003C9FEA /* icons */ = {
+			isa = PBXGroup;
+			children = (
+				43279263194F0039003C9FEA /* act-disabled.png */,
+				43279264194F0039003C9FEA /* add.png */,
+				43279265194F0039003C9FEA /* application-x-ardour_16px.png */,
+				43279266194F0039003C9FEA /* application-x-ardour_22px.png */,
+				43279267194F0039003C9FEA /* application-x-ardour_32px.png */,
+				43279268194F0039003C9FEA /* application-x-ardour_48px.png */,
+				43279269194F0039003C9FEA /* ardour-app-icon_osx.png */,
+				4327926A194F0039003C9FEA /* ardour-app-icon_osx_mask.png */,
+				4327926B194F0039003C9FEA /* ardour_icon_16px.png */,
+				4327926C194F0039003C9FEA /* ardour_icon_22px.png */,
+				4327926D194F0039003C9FEA /* ardour_icon_256px.png */,
+				4327926E194F0039003C9FEA /* ardour_icon_32px.png */,
+				4327926F194F0039003C9FEA /* ardour_icon_48px.png */,
+				43279270194F0039003C9FEA /* chord.png */,
+				43279271194F0039003C9FEA /* close.png */,
+				43279272194F0039003C9FEA /* computer_keyboard.png */,
+				43279273194F0039003C9FEA /* computer_keyboard_active.png */,
+				43279274194F0039003C9FEA /* display_clock_mockup.png */,
+				43279275194F0039003C9FEA /* display_metrics_mockup.png */,
+				43279276194F0039003C9FEA /* eighthnote.png */,
+				43279277194F0039003C9FEA /* expand_left_right_cursor.png */,
+				43279278194F0039003C9FEA /* expand_up_down_cursor.png */,
+				43279279194F0039003C9FEA /* export_icons.sh */,
+				4327927A194F0039003C9FEA /* fade_in_cursor.png */,
+				4327927B194F0039003C9FEA /* fade_out_cursor.png */,
+				4327927C194F0039003C9FEA /* fadein-constant-power.png */,
+				4327927D194F0039003C9FEA /* fadein-fast-cut.png */,
+				4327927E194F0039003C9FEA /* fadein-linear.png */,
+				4327927F194F0039003C9FEA /* fadein-long-cut.png */,
+				43279280194F0039003C9FEA /* fadein-S1.png */,
+				43279281194F0039003C9FEA /* fadein-S2.png */,
+				43279282194F0039003C9FEA /* fadein-short-cut.png */,
+				43279283194F0039003C9FEA /* fadein-slow-cut.png */,
+				43279284194F0039003C9FEA /* fadeout-constant-power.png */,
+				43279285194F0039003C9FEA /* fadeout-fast-cut.png */,
+				43279286194F0039003C9FEA /* fadeout-linear.png */,
+				43279287194F0039003C9FEA /* fadeout-long-cut.png */,
+				43279288194F0039003C9FEA /* fadeout-S1.png */,
+				43279289194F0039003C9FEA /* fadeout-S2.png */,
+				4327928A194F0039003C9FEA /* fadeout-short-cut.png */,
+				4327928B194F0039003C9FEA /* fadeout-slow-cut.png */,
+				4327928C194F0039003C9FEA /* fader_belt.png */,
+				4327928D194F0039003C9FEA /* fader_belt_desensitised.png */,
+				4327928E194F0039003C9FEA /* fader_belt_h.png */,
+				4327928F194F0039003C9FEA /* fader_belt_h_desensitised.png */,
+				43279290194F0039003C9FEA /* fader_belt_h_medium.png */,
+				43279291194F0039003C9FEA /* fader_belt_h_medium_desensitised.png */,
+				43279292194F0039003C9FEA /* fader_belt_h_thin.png */,
+				43279293194F0039003C9FEA /* fader_belt_h_thin_desensitised.png */,
+				43279294194F0039003C9FEA /* fader_handle.png */,
+				43279295194F0039003C9FEA /* ferret_02.png */,
+				43279296194F0039003C9FEA /* forte.png */,
+				43279297194F0039003C9FEA /* fortissimo.png */,
+				43279298194F0039003C9FEA /* fortississimo.png */,
+				43279299194F0039003C9FEA /* grabber.png */,
+				4327929A194F0039003C9FEA /* grabber_edit_point.png */,
+				4327929B194F0039003C9FEA /* grabber_note.png */,
+				4327929C194F0039003C9FEA /* halfnote.png */,
+				4327929D194F0039003C9FEA /* hide.png */,
+				4327929E194F0039003C9FEA /* horizontal_zoom_fader_face.png */,
+				4327929F194F0039003C9FEA /* i_beam_cursor.png */,
+				432792A0194F0039003C9FEA /* inspector_on.png */,
+				432792A1194F0039003C9FEA /* inspector_on_active.png */,
+				432792A2194F0039003C9FEA /* inspector_on_prelight.png */,
+				432792A3194F0039003C9FEA /* join_tools.png */,
+				432792A4194F0039003C9FEA /* knob.png */,
+				432792A5194F0039003C9FEA /* lock_session.png */,
+				432792A6194F0039003C9FEA /* lock_session_active.png */,
+				432792A7194F0039003C9FEA /* lock_session_prelight.png */,
+				432792A8194F0039003C9FEA /* media_button.png */,
+				432792A9194F0039003C9FEA /* media_button_active.png */,
+				432792AA194F0039003C9FEA /* media_button_prelight.png */,
+				432792AB194F0039003C9FEA /* meter_bridge_on.png */,
+				432792AC194F0039003C9FEA /* meter_bridge_on_active.png */,
+				432792AD194F0039003C9FEA /* meter_bridge_on_prelight.png */,
+				432792AE194F0039003C9FEA /* metronome.png */,
+				432792AF194F0039003C9FEA /* mezzforte.png */,
+				432792B0194F0039003C9FEA /* mezzoforte.png */,
+				432792B1194F0039003C9FEA /* mezzopiano.png */,
+				432792B2194F0039003C9FEA /* midi-input-active.png */,
+				432792B3194F0039003C9FEA /* midi-input-inactive.png */,
+				432792B4194F0039003C9FEA /* midi_panic.png */,
+				432792B5194F0039003C9FEA /* midi_socket_small.png */,
+				432792B6194F0039003C9FEA /* midi_sound_notes.png */,
+				432792B7194F0039003C9FEA /* midi_tool_erase.png */,
+				432792B8194F0039003C9FEA /* midi_tool_pencil.png */,
+				432792B9194F0039003C9FEA /* midi_tool_select.png */,
+				432792BA194F0039003C9FEA /* mixer_on.png */,
+				432792BB194F0039003C9FEA /* mixer_on_active.png */,
+				432792BC194F0039003C9FEA /* mixer_on_prelight.png */,
+				432792BD194F0039003C9FEA /* mode_multi_out.png */,
+				432792BE194F0039003C9FEA /* mode_multi_out_active.png */,
+				432792BF194F0039003C9FEA /* mode_multi_out_prelight.png */,
+				432792C0194F0039003C9FEA /* mode_stereo_out.png */,
+				432792C1194F0039003C9FEA /* mode_stereo_out_active.png */,
+				432792C2194F0039003C9FEA /* mode_stereo_out_prelight.png */,
+				432792C3194F0039003C9FEA /* move_cursor.png */,
+				432792C4194F0039003C9FEA /* mute-disabled.png */,
+				432792C5194F0039003C9FEA /* mute-enabled.png */,
+				432792C6194F0039003C9FEA /* muted-by-others.png */,
+				432792C7194F0039003C9FEA /* nudge_left.png */,
+				432792C8194F0039003C9FEA /* nudge_right.png */,
+				432792C9194F0039003C9FEA /* pianissimo.png */,
+				432792CA194F0039003C9FEA /* pianississimo.png */,
+				432792CB194F0039003C9FEA /* piano.png */,
+				432792CC194F0039003C9FEA /* quarternote.png */,
+				432792CD194F0039003C9FEA /* rec-enabled.png */,
+				432792CE194F0039003C9FEA /* rec-in-progress.png */,
+				432792CF194F0039003C9FEA /* record-normal-disabled.png */,
+				432792D0194F0039003C9FEA /* record-normal-enabled.png */,
+				432792D1194F0039003C9FEA /* record-normal-in-progress.png */,
+				432792D2194F0039003C9FEA /* record-step.png */,
+				432792D3194F0039003C9FEA /* record_disabled_grey.png */,
+				432792D4194F0039003C9FEA /* record_normal_red.png */,
+				432792D5194F0039003C9FEA /* record_tape_red.png */,
+				432792D6194F0039003C9FEA /* resize_bottom_cursor.png */,
+				432792D7194F0039003C9FEA /* resize_bottom_left_cursor.png */,
+				432792D8194F0039003C9FEA /* resize_bottom_right_cursor.png */,
+				432792D9194F0039003C9FEA /* resize_left_cursor.png */,
+				432792DA194F0039003C9FEA /* resize_right_cursor.png */,
+				432792DB194F0039003C9FEA /* resize_top_cursor.png */,
+				432792DC194F0039003C9FEA /* resize_top_left_cursor.png */,
+				432792DD194F0039003C9FEA /* resize_top_right_cursor.png */,
+				432792DE194F0039003C9FEA /* sae.png */,
+				432792DF194F0039003C9FEA /* sessionlock.png */,
+				432792E0194F0039003C9FEA /* sixteenthnote.png */,
+				432792E1194F0039003C9FEA /* sixtyfourthnote.png */,
+				432792E2194F0039003C9FEA /* slider_controller_fader.png */,
+				432792E3194F0039003C9FEA /* slider_controller_fader_handle.png */,
+				432792E4194F0039003C9FEA /* solo-disabled.png */,
+				432792E5194F0039003C9FEA /* solo-enabled.png */,
+				432792E6194F0039003C9FEA /* solo-isolate-disabled.png */,
+				432792E7194F0039003C9FEA /* solo-isolate-enabled.png */,
+				432792E8194F0039003C9FEA /* solo-isolated.png */,
+				432792E9194F0039003C9FEA /* solo-safe-disabled.png */,
+				432792EA194F0039003C9FEA /* solo-safe-enabled.png */,
+				432792EB194F0039003C9FEA /* solo-safe-icon.png */,
+				432792EC194F0039003C9FEA /* soloed-by-others.png */,
+				432792ED194F0039003C9FEA /* step-editing.png */,
+				432792EE194F0039003C9FEA /* strip_width.png */,
+				432792EF194F0039003C9FEA /* systemlock.png */,
+				432792F0194F0039003C9FEA /* tav_exp.png */,
+				432792F1194F0039003C9FEA /* tav_shrink.png */,
+				432792F2194F0039003C9FEA /* thirtysecondnote.png */,
+				432792F3194F0039003C9FEA /* tool_arrow.png */,
+				432792F4194F0039003C9FEA /* tool_arrow_active.png */,
+				432792F5194F0039003C9FEA /* tool_arrow_prelight.png */,
+				432792F6194F0039003C9FEA /* tool_audition.png */,
+				432792F7194F0039003C9FEA /* tool_cut.png */,
+				432792F8194F0039003C9FEA /* tool_cut_active.png */,
+				432792F9194F0039003C9FEA /* tool_cut_prelight.png */,
+				432792FA194F0039003C9FEA /* tool_gain.png */,
+				432792FB194F0039003C9FEA /* tool_marker.png */,
+				432792FC194F0039003C9FEA /* tool_marker_active.png */,
+				432792FD194F0039003C9FEA /* tool_marker_prelight.png */,
+				432792FE194F0039003C9FEA /* tool_note.png */,
+				432792FF194F0039003C9FEA /* tool_object.png */,
+				43279300194F0039003C9FEA /* tool_object_range.png */,
+				43279301194F0039003C9FEA /* tool_range.png */,
+				43279302194F0039003C9FEA /* tool_stretch.png */,
+				43279303194F0039003C9FEA /* tool_waveform_zoom.png */,
+				43279304194F0039003C9FEA /* tool_waveform_zoom_active.png */,
+				43279305194F0039003C9FEA /* tool_waveform_zoom_prelight.png */,
+				43279306194F0039003C9FEA /* tool_zoom.png */,
+				43279307194F0039003C9FEA /* tool_zoom_active.png */,
+				43279308194F0039003C9FEA /* tool_zoom_ardour.png */,
+				43279309194F0039003C9FEA /* tool_zoom_prelight.png */,
+				4327930A194F003A003C9FEA /* tracks.png */,
+				4327930B194F003A003C9FEA /* tracks_active.png */,
+				4327930C194F003A003C9FEA /* tracks_prelight.png */,
+				4327930D194F003A003C9FEA /* transport_end.png */,
+				4327930E194F003A003C9FEA /* transport_end_active.png */,
+				4327930F194F003A003C9FEA /* transport_end_prelight.png */,
+				43279310194F003A003C9FEA /* transport_loop.png */,
+				43279311194F003A003C9FEA /* transport_loop_active.png */,
+				43279312194F003A003C9FEA /* transport_loop_prelight.png */,
+				43279313194F003A003C9FEA /* transport_play.png */,
+				43279314194F003A003C9FEA /* transport_play_active.png */,
+				43279315194F003A003C9FEA /* transport_play_prelight.png */,
+				43279316194F003A003C9FEA /* transport_range.png */,
+				43279317194F003A003C9FEA /* transport_record.png */,
+				43279318194F003A003C9FEA /* transport_record_active.png */,
+				43279319194F003A003C9FEA /* transport_record_prelight.png */,
+				4327931A194F003A003C9FEA /* transport_start.png */,
+				4327931B194F003A003C9FEA /* transport_start_active.png */,
+				4327931C194F003A003C9FEA /* transport_start_prelight.png */,
+				4327931D194F003A003C9FEA /* transport_stop.png */,
+				4327931E194F003A003C9FEA /* transport_stop_active.png */,
+				4327931F194F003A003C9FEA /* transport_stop_prelight.png */,
+				43279320194F003A003C9FEA /* trim_bottom_cursor.png */,
+				43279321194F003A003C9FEA /* trim_left_cursor.png */,
+				43279322194F003A003C9FEA /* trim_left_cursor_5.png */,
+				43279323194F003A003C9FEA /* trim_left_cursor_right_only.png */,
+				43279324194F003A003C9FEA /* trim_right_cursor.png */,
+				43279325194F003A003C9FEA /* trim_right_cursor_5.png */,
+				43279326194F003A003C9FEA /* trim_right_cursor_left_only.png */,
+				43279327194F003A003C9FEA /* trim_top_cursor.png */,
+				43279328194F003A003C9FEA /* vertical_zoom_fader_face.png */,
+				43279329194F003A003C9FEA /* wholenote.png */,
+				4327932A194F003A003C9FEA /* zoom_fader_handle.png */,
+				4327932B194F003A003C9FEA /* zoom_fader_handle_active.png */,
+				4327932C194F003A003C9FEA /* zoom_full.png */,
+				4327932D194F003A003C9FEA /* zoom_in.png */,
+				4327932E194F003A003C9FEA /* zoom_in_cursor.png */,
+				4327932F194F003A003C9FEA /* zoom_out.png */,
+				43279330194F003A003C9FEA /* zoom_out_cursor.png */,
+			);
+			name = icons;
+			path = ../icons;
+			sourceTree = "<group>";
+		};
+		432793FF194F0062003C9FEA /* pixmaps */ = {
+			isa = PBXGroup;
+			children = (
+				43279400194F0062003C9FEA /* forwardblarrow.xpm */,
+				43279401194F0062003C9FEA /* h_meter_strip.xpm */,
+				43279402194F0062003C9FEA /* hiin.xpm */,
+				43279403194F0062003C9FEA /* hiout.xpm */,
+				43279404194F0062003C9FEA /* hslider00.xpm */,
+				43279405194F0062003C9FEA /* hslider01.xpm */,
+				43279406194F0062003C9FEA /* left_arrow.xpm */,
+				43279407194F0062003C9FEA /* linin.xpm */,
+				43279408194F0062003C9FEA /* linout.xpm */,
+				43279409194F0062003C9FEA /* loin.xpm */,
+				4327940A194F0062003C9FEA /* loop.xpm */,
+				4327940B194F0062003C9FEA /* loout.xpm */,
+				4327940C194F0062003C9FEA /* lr.xpm */,
+				4327940D194F0062003C9FEA /* regin.xpm */,
+				4327940E194F0062003C9FEA /* regin2.xpm */,
+				4327940F194F0062003C9FEA /* regout.xpm */,
+				43279410194F0062003C9FEA /* regout2.xpm */,
+				43279411194F0062003C9FEA /* revdblarrow.xpm */,
+				43279412194F0062003C9FEA /* right_arrow.xpm */,
+				43279413194F0062003C9FEA /* set-next-button.xpm */,
+				43279414194F0062003C9FEA /* small-round-button-01.xpm */,
+				43279415194F0062003C9FEA /* small_x.xpm */,
+				43279416194F0062003C9FEA /* toggle-button-00.xpm */,
+				43279417194F0062003C9FEA /* toggle-button-01.xpm */,
+				43279418194F0062003C9FEA /* tool_audition.xpm */,
+				43279419194F0062003C9FEA /* tool_gain.xpm */,
+				4327941A194F0062003C9FEA /* tool_object.xpm */,
+				4327941B194F0062003C9FEA /* tool_range.xpm */,
+				4327941C194F0062003C9FEA /* tool_stretch.xpm */,
+				4327941D194F0062003C9FEA /* tool_zoom.xpm */,
+				4327941E194F0062003C9FEA /* v_meter_strip.xpm */,
+				4327941F194F0062003C9FEA /* vslider00.xpm */,
+				43279420194F0062003C9FEA /* vslider01.xpm */,
+				43279421194F0062003C9FEA /* vslider02_rail.xpm */,
+				43279422194F0062003C9FEA /* vslider02_slider.xpm */,
+				43279423194F0062003C9FEA /* vslider_slider_16wide.xpm */,
+				43279424194F0062003C9FEA /* zoom_full.xpm */,
+				43279425194F0062003C9FEA /* zoom_in.xpm */,
+				43279426194F0062003C9FEA /* zoom_out.xpm */,
+			);
+			name = pixmaps;
+			path = ../pixmaps;
+			sourceTree = "<group>";
+		};
+		43279429194F0062003C9FEA /* ui */ = {
+			isa = PBXGroup;
+			children = (
+				95D4986B1AEA363E006E065D /* audio_engine_reset_info_dialog.xml */,
+				95D4986C1AEA363E006E065D /* crash_recovery_dialog.xml */,
+				95D4986D1AEA363E006E065D /* waves_save_template_dialog.xml */,
+				95E2A7AA1A8F652F0080BD79 /* waves_radio_item.xml */,
+				95D6A67A1A8E22E80030CDD0 /* waves_keyeditor.xml */,
+				95D9E3771A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml */,
+				95D9E3781A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml */,
+				95D5D1381A8A514300407F98 /* waves_numeric_edit_dialog.xml */,
+				956D3F891A851805004F328C /* waves_import_dialog.xml */,
+				95D795DB1A7BB40C00120A4F /* marker_inspector_dialog.xml */,
+				95D795DD1A7BB40C00120A4F /* waves_export_dialog.xml */,
+				95D795DE1A7BB40C00120A4F /* waves_export_file_notebook_page.xml */,
+				95D795DF1A7BB40C00120A4F /* waves_export_file_notebook.xml */,
+				95D795E01A7BB40C00120A4F /* waves_export_filename_selector.xml */,
+				95D795E11A7BB40C00120A4F /* waves_export_format_selector.xml */,
+				95D795E21A7BB40C00120A4F /* waves_export_preset_selector.xml */,
+				95D795E31A7BB40C00120A4F /* waves_export_timespan_selector.xml */,
+				95D795E41A7BB40C00120A4F /* waves_port_export_channel_selector.xml */,
+				95D795E51A7BB40C00120A4F /* waves_region_export_channel_selector.xml */,
+				95D795E61A7BB40C00120A4F /* waves_track_color_dialog.xml */,
+				95D795E71A7BB40C00120A4F /* waves_track_export_channel_selector.xml */,
+				95D1C5201A78ED3A00BE28DB /* waves_edit_dialog.xml */,
+				5BC67E581A408FCE00F29ABA /* progress_dialog.xml */,
+				95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */,
+				95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */,
+				95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */,
+				95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */,
+				95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */,
+				95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */,
+				95F9DFDF1A35F3310007E953 /* waves_route_rename_dialog.xml */,
+				95F9DFD61A35A8BD0007E953 /* waves_message_dialog.xml */,
+				95176F7D1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml */,
+				954DCFDD1A07A14E00B7160E /* read_only_session_dialog.xml */,
+				954DCFBF1A023AAB00B7160E /* about_dialog.xml */,
+				954DCFC01A023AAB00B7160E /* license_dialog.xml */,
+				CE294C5719CAD4E300D12768 /* add_tracks_dialog.xml */,
+				CE294C5819CAD4E300D12768 /* compact_meter_bridge.xml */,
+				CE294C5919CAD4E300D12768 /* compact_meter_strip.xml */,
+				CE294C5A19CAD4E300D12768 /* marker_io_dialog.xml */,
+				CE294C5B19CAD4E300D12768 /* meter_bridge_view.xml */,
+				CE294C5C19CAD4E300D12768 /* meter_strip_gain_meter.xml */,
+				CE294C5D19CAD4E300D12768 /* mixer_bridge_view.xml */,
+				CE294C5E19CAD4E300D12768 /* time_info_box.xml */,
+				CEB9D787197516BE00B21780 /* audio_time_axis.xml */,
+				CEB9D788197516BE00B21780 /* automation_time_axis.xml */,
+				CEB9D789197516BE00B21780 /* editor_mixer.xml */,
+				CEB9D78A197516BE00B21780 /* inspector_gain_meter.xml */,
+				CEB9D78C197516BE00B21780 /* master_ui.xml */,
+				CEB9D78D197516BE00B21780 /* meter_strip.xml */,
+				CEB9D78E197516BE00B21780 /* mixer_gain_meter.xml */,
+				CEB9D78F197516BE00B21780 /* mixer_strip.xml */,
+				CEB9D790197516BE00B21780 /* track_header_gain_meter.xml */,
+				CEB0A9F31958447C006D269A /* session_close_dialog.xml */,
+				4327942A194F0062003C9FEA /* device_capture_control.xml */,
+				4327942B194F0062003C9FEA /* device_playback_control.xml */,
+				4327942C194F0062003C9FEA /* editor_window.xml */,
+				4327942D194F0062003C9FEA /* midi_device_control.xml */,
+				4327942E194F0062003C9FEA /* session_dialog.xml */,
+				4327942F194F0062003C9FEA /* session_lock_dialog.xml */,
+				43279430194F0062003C9FEA /* tracks_preferences.xml */,
+			);
+			name = ui;
+			path = ../ui;
+			sourceTree = "<group>";
+		};
+		43279461194F007F003C9FEA /* menus */ = {
+			isa = PBXGroup;
+			children = (
+				43279475194F009E003C9FEA /* tracks.menus.in */,
+			);
+			name = menus;
+			sourceTree = "<group>";
+		};
+		43279480194F00CB003C9FEA /* headers */ = {
+			isa = PBXGroup;
+			children = (
+				95E5E9411AE9462B0000E2CE /* waves_tooltip.h */,
+				95ED5FF61A95F285006D39E4 /* route_inspector.h */,
+				95D9E37B1A8D1B5200A0DA46 /* waves_ambiguous_file_dialog.h */,
+				95D9E37C1A8D1B5200A0DA46 /* waves_missing_file_dialog.h */,
+				95D5D1321A8A514300407F98 /* waves_numeric_edit_dialog.h */,
+				95D7961A1A7BBA4E00120A4F /* floating_text_entry.h */,
+				95D7961B1A7BBA4E00120A4F /* marker_inspector_dialog.h */,
+				95D7961C1A7BBA4E00120A4F /* marker_inspector_dialog.logic.h */,
+				95D7961D1A7BBA4E00120A4F /* product_definition.h */,
+				95D7961E1A7BBA4E00120A4F /* ruler_dialog.h */,
+				95D7961F1A7BBA4E00120A4F /* trackslive_resource.h */,
+				95D796201A7BBA4E00120A4F /* waves_export_channel_selector.h */,
+				95D796211A7BBA4E00120A4F /* waves_export_dialog.h */,
+				95D796221A7BBA4E00120A4F /* waves_export_file_notebook.h */,
+				95D796231A7BBA4E00120A4F /* waves_export_filename_selector.h */,
+				95D796241A7BBA4E00120A4F /* waves_export_format_selector.h */,
+				95D796251A7BBA4E00120A4F /* waves_export_preset_selector.h */,
+				95D796261A7BBA4E00120A4F /* waves_export_timespan_selector.h */,
+				95D796271A7BBA4E00120A4F /* waves_grid.h */,
+				95D796281A7BBA4E00120A4F /* waves_import_dialog.h */,
+				95D1C51A1A78ED1100BE28DB /* waves_edit_dialog.h */,
+				95D71D561A4C697700DE5B3B /* waves_track_color_dialog.h */,
+				95D71D501A4C66DF00DE5B3B /* waves_track_color_dialog.logic.h */,
+				5BC67E5D1A4090AA00F29ABA /* progress_dialog.h */,
+				957EF44F1A30BFBF00F1500E /* waves_message_dialog.h */,
+				95176F781A08E6D800E32046 /* file_sample_rate_mismatch_dialog.h */,
+				954DCFBE1A0239EC00B7160E /* about_dialog.h */,
+				95A134DF1A02391F0008E3D6 /* license_dialog.h */,
+				CE294C7E19CAD58500D12768 /* ardour_dropdown.h */,
+				CE294C7F19CAD58500D12768 /* marker_io_dialog.h */,
+				CE294C8019CAD58500D12768 /* mixer_bridge_view.h */,
+				CE294C8119CAD58500D12768 /* soundcloud_export_selector.h */,
+				CE294C8219CAD58500D12768 /* waves_dropdown.h */,
+				CE294C8319CAD58500D12768 /* waves_zoom_control.h */,
+				CE1A907E199A37BF00ECA62B /* add_tracks_dialog.h */,
+				CE1C6DDB1987A910006BDB03 /* master_bus_ui.h */,
+				CE1C6DD319879F1B006BDB03 /* compact_meter_bridge.h */,
+				CE1C6DD419879F1B006BDB03 /* compact_meter_strip.h */,
+				CEB0A45A19583F3F006D269A /* session_close_dialog.h */,
+				CEAFC775195445D90016ACF0 /* bbt_time.h */,
+				CEAFC776195445D90016ACF0 /* time.h */,
+				CEAFC777195445D90016ACF0 /* visibility.h */,
+				43B351D4194F04E00038C140 /* tracks_control_panel.h */,
+				43B351D5194F04E00038C140 /* tracks_control_panel.logic.h */,
+				43B350F1194F04E00038C140 /* actions.h */,
+				43B350F2194F04E00038C140 /* add_route_dialog.h */,
+				43B350F3194F04E00038C140 /* add_video_dialog.h */,
+				43B350F4194F04E00038C140 /* ambiguous_file_dialog.h */,
+				43B350F5194F04E00038C140 /* analysis_window.h */,
+				43B350F6194F04E00038C140 /* ardour_button.h */,
+				43B350F7194F04E00038C140 /* ardour_dialog.h */,
+				43B350F8194F04E00038C140 /* ardour_ui.h */,
+				43B350F9194F04E00038C140 /* ardour_window.h */,
+				43B350FA194F04E00038C140 /* au_pluginui.h */,
+				43B350FB194F04E00038C140 /* audio_clock.h */,
+				43B350FC194F04E00038C140 /* audio_region_editor.h */,
+				43B350FD194F04E00038C140 /* audio_region_view.h */,
+				43B350FE194F04E00038C140 /* audio_streamview.h */,
+				43B350FF194F04E00038C140 /* audio_time_axis.h */,
+				43B35100194F04E00038C140 /* automation_controller.h */,
+				43B35101194F04E00038C140 /* automation_line.h */,
+				43B35102194F04E00038C140 /* automation_region_view.h */,
+				43B35103194F04E00038C140 /* automation_selection.h */,
+				43B35104194F04E00038C140 /* automation_streamview.h */,
+				43B35105194F04E00038C140 /* automation_time_axis.h */,
+				43B35106194F04E00038C140 /* axis_view.h */,
+				43B35107194F04E00038C140 /* big_clock_window.h */,
+				43B35108194F04E00038C140 /* bundle_env.h */,
+				43B35109194F04E00038C140 /* bundle_manager.h */,
+				43B3510A194F04E00038C140 /* button_joiner.h */,
+				43B3510B194F04E00038C140 /* canvas_vars.h */,
+				43B3510C194F04E00038C140 /* canvas-waveview.h */,
+				43B3510D194F04E00038C140 /* clock_group.h */,
+				43B3510E194F04E00038C140 /* configinfo.h */,
+				43B3510F194F04E00038C140 /* control_point_dialog.h */,
+				43B35110194F04E00038C140 /* control_point.h */,
+				43B35111194F04E00038C140 /* crossfade_edit.h */,
+				43B35112194F04E00038C140 /* crossfade_view.h */,
+				43B35113194F04E00038C140 /* crossfade_xpms.h */,
+				43B35114194F04E00038C140 /* dbg_msg.h */,
+				43B35115194F04E00038C140 /* debug.h */,
+				43B35116194F04E00038C140 /* device_connection_control.h */,
+				43B35117194F04E00038C140 /* edit_note_dialog.h */,
+				43B35118194F04E00038C140 /* editing_syms.h */,
+				43B35119194F04E00038C140 /* editing.h */,
+				43B3511A194F04E00038C140 /* editor_component.h */,
+				43B3511B194F04E00038C140 /* editor_cursors.h */,
+				43B3511C194F04E00038C140 /* editor_drag.h */,
+				43B3511D194F04E00038C140 /* editor_enums.h */,
+				43B3511E194F04E00038C140 /* editor_group_tabs.h */,
+				43B3511F194F04E00038C140 /* editor_items.h */,
+				43B35120194F04E00038C140 /* editor_locations.h */,
+				43B35121194F04E00038C140 /* editor_regions.h */,
+				43B35122194F04E00038C140 /* editor_route_groups.h */,
+				43B35123194F04E00038C140 /* editor_routes.h */,
+				43B35124194F04E00038C140 /* editor_snapshots.h */,
+				43B35125194F04E00038C140 /* editor_summary.h */,
+				43B35126194F04E00038C140 /* editor.h */,
+				43B35127194F04E00038C140 /* engine_dialog.h */,
+				43B35128194F04E00038C140 /* enums.h */,
+				43B3512A194F04E00038C140 /* export_channel_selector.h */,
+				43B3512B194F04E00038C140 /* export_dialog.h */,
+				43B3512C194F04E00038C140 /* export_file_notebook.h */,
+				43B3512D194F04E00038C140 /* export_filename_selector.h */,
+				43B3512E194F04E00038C140 /* export_format_dialog.h */,
+				43B3512F194F04E00038C140 /* export_format_selector.h */,
+				43B35130194F04E00038C140 /* export_preset_selector.h */,
+				43B35131194F04E00038C140 /* export_range_markers_dialog.h */,
+				43B35132194F04E00038C140 /* export_timespan_selector.h */,
+				43B35133194F04E00038C140 /* export_video_dialog.h */,
+				43B35134194F04E00038C140 /* export_video_infobox.h */,
+				43B35135194F04E00038C140 /* fft_graph.h */,
+				43B35136194F04E00038C140 /* fft_result.h */,
+				43B35137194F04E00038C140 /* fft.h */,
+				43B35138194F04E00038C140 /* fix_carbon.h */,
+				43B35139194F04E00038C140 /* gain_meter.h */,
+				43B3513A194F04E00038C140 /* gettext.h */,
+				43B3513B194F04E00038C140 /* ghostregion.h */,
+				43B3513C194F04E00038C140 /* global_port_matrix.h */,
+				43B3513D194F04E00038C140 /* global_signals.h */,
+				43B3513E194F04E00038C140 /* group_tabs.h */,
+				43B3513F194F04E00038C140 /* gtk_pianokeyboard.h */,
+				43B35142194F04E00038C140 /* gui_object.h */,
+				43B35143194F04E00038C140 /* gui_thread.h */,
+				43B35144194F04E00038C140 /* hit.h */,
+				43B35145194F04E00038C140 /* i18n.h */,
+				43B35146194F04E00038C140 /* insert_time_dialog.h */,
+				43B35147194F04E00038C140 /* interthread_progress_window.h */,
+				43B35148194F04E00038C140 /* io_selector.h */,
+				43B35149194F04E00038C140 /* keyboard.h */,
+				43B3514A194F04E00038C140 /* keyeditor.h */,
+				43B3514B194F04E00038C140 /* latency_gui.h */,
+				43B3514C194F04E00038C140 /* led.h */,
+				43B3514D194F04E00038C140 /* level_meter.h */,
+				43B3514E194F04E00038C140 /* location_ui.h */,
+				43B3514F194F04E00038C140 /* logmeter.h */,
+				43B35150194F04E00038C140 /* lv2_external_ui.h */,
+				43B35151194F04E00038C140 /* lv2_plugin_ui.h */,
+				43B35152194F04E00038C140 /* lxvst_plugin_ui.h */,
+				43B35153194F04E00038C140 /* main_clock.h */,
+				43B35154194F04E00038C140 /* marker_selection.h */,
+				43B35155194F04E00038C140 /* marker.h */,
+				43B35156194F04E00038C140 /* meter_patterns.h */,
+				43B35157194F04E00038C140 /* meter_strip.h */,
+				43B35158194F04E00038C140 /* meterbridge.h */,
+				43B35159194F04E00038C140 /* midi_automation_line.h */,
+				43B3515A194F04E00038C140 /* midi_channel_dialog.h */,
+				43B3515B194F04E00038C140 /* midi_channel_selector.h */,
+				43B3515C194F04E00038C140 /* midi_cut_buffer.h */,
+				43B3515D194F04E00038C140 /* midi_device_connection_control.h */,
+				43B3515E194F04E00038C140 /* midi_export_dialog.h */,
+				43B3515F194F04E00038C140 /* midi_list_editor.h */,
+				43B35160194F04E00038C140 /* midi_port_dialog.h */,
+				43B35161194F04E00038C140 /* midi_region_view.h */,
+				43B35162194F04E00038C140 /* midi_scroomer.h */,
+				43B35163194F04E00038C140 /* midi_selection.h */,
+				43B35164194F04E00038C140 /* midi_streamview.h */,
+				43B35165194F04E00038C140 /* midi_time_axis.h */,
+				43B35166194F04E00038C140 /* midi_tracer.h */,
+				43B35167194F04E00038C140 /* midi_util.h */,
+				43B35168194F04E00038C140 /* midi_velocity_dialog.h */,
+				43B35169194F04E00038C140 /* missing_file_dialog.h */,
+				43B3516A194F04E00038C140 /* missing_plugin_dialog.h */,
+				43B3516B194F04E00038C140 /* mixer_actor.h */,
+				43B3516C194F04E00038C140 /* mixer_group_tabs.h */,
+				43B3516D194F04E00038C140 /* mixer_strip.h */,
+				43B3516E194F04E00038C140 /* mixer_ui.h */,
+				43B3516F194F04E00038C140 /* monitor_section.h */,
+				43B35170194F04E00038C140 /* mono_panner_editor.h */,
+				43B35171194F04E00038C140 /* mono_panner.h */,
+				43B35172194F04E00038C140 /* mouse_cursors.h */,
+				43B35173194F04E00038C140 /* nag.h */,
+				43B35174194F04E00038C140 /* new_plugin_preset_dialog.h */,
+				43B35175194F04E00038C140 /* normalize_dialog.h */,
+				43B35176194F04E00038C140 /* note_base.h */,
+				43B35177194F04E00038C140 /* note_player.h */,
+				43B35178194F04E00038C140 /* note.h */,
+				43B35179194F04E00038C140 /* nsm.h */,
+				43B3517A194F04E00038C140 /* nsmclient.h */,
+				43B3517B194F04E00038C140 /* open_file_dialog_proxy.h */,
+				43B3517C194F04E00038C140 /* open_file_dialog.h */,
+				43B3517D194F04E00038C140 /* option_editor.h */,
+				43B3517E194F04E00038C140 /* opts.h */,
+				43B3517F194F04E00038C140 /* panner_editor.h */,
+				43B35180194F04E00038C140 /* panner_interface.h */,
+				43B35181194F04E00038C140 /* panner_ui.h */,
+				43B35182194F04E00038C140 /* panner2d.h */,
+				43B35183194F04E00038C140 /* patch_change_dialog.h */,
+				43B35184194F04E00038C140 /* patch_change.h */,
+				43B35185194F04E00038C140 /* piano_roll_header.h */,
+				43B35186194F04E00038C140 /* pingback.h */,
+				43B35187194F04E00038C140 /* playlist_selection.h */,
+				43B35188194F04E00038C140 /* playlist_selector.h */,
+				43B35189194F04E00038C140 /* plugin_eq_gui.h */,
+				43B3518A194F04E00038C140 /* plugin_interest.h */,
+				43B3518B194F04E00038C140 /* plugin_selector.h */,
+				43B3518C194F04E00038C140 /* plugin_ui.h */,
+				43B3518D194F04E00038C140 /* point_selection.h */,
+				43B3518E194F04E00038C140 /* port_group.h */,
+				43B3518F194F04E00038C140 /* port_insert_ui.h */,
+				43B35190194F04E00038C140 /* port_matrix_body.h */,
+				43B35191194F04E00038C140 /* port_matrix_column_labels.h */,
+				43B35192194F04E00038C140 /* port_matrix_component.h */,
+				43B35193194F04E00038C140 /* port_matrix_grid.h */,
+				43B35194194F04E00038C140 /* port_matrix_labels.h */,
+				43B35195194F04E00038C140 /* port_matrix_row_labels.h */,
+				43B35196194F04E00038C140 /* port_matrix_types.h */,
+				43B35197194F04E00038C140 /* port_matrix.h */,
+				43B35198194F04E00038C140 /* processor_box.h */,
+				43B35199194F04E00038C140 /* processor_selection.h */,
+				43B3519A194F04E00038C140 /* progress_reporter.h */,
+				43B3519B194F04E00038C140 /* prompter.h */,
+				43B3519C194F04E00038C140 /* public_editor.h */,
+				43B3519D194F04E00038C140 /* quantize_dialog.h */,
+				43B3519E194F04E00038C140 /* rc_option_editor.h */,
+				43B3519F194F04E00038C140 /* region_editor.h */,
+				43B351A0194F04E00038C140 /* region_gain_line.h */,
+				43B351A1194F04E00038C140 /* region_layering_order_editor.h */,
+				43B351A2194F04E00038C140 /* region_selection.h */,
+				43B351A3194F04E00038C140 /* region_view.h */,
+				43B351A4194F04E00038C140 /* return_ui.h */,
+				43B351A5194F04E00038C140 /* rgb_macros.h */,
+				43B351A6194F04E00038C140 /* rhythm_ferret.h */,
+				43B351A7194F04E00038C140 /* route_group_dialog.h */,
+				43B351A8194F04E00038C140 /* route_group_menu.h */,
+				43B351A9194F04E00038C140 /* route_params_ui.h */,
+				43B351AA194F04E00038C140 /* route_processor_selection.h */,
+				43B351AB194F04E00038C140 /* route_sorter.h */,
+				43B351AC194F04E00038C140 /* route_time_axis.h */,
+				43B351AD194F04E00038C140 /* route_ui_selection.h */,
+				43B351AE194F04E00038C140 /* route_ui.h */,
+				43B351AF194F04E00038C140 /* search_path_option.h */,
+				43B351B0194F04E00038C140 /* selectable.h */,
+				43B351B1194F04E00038C140 /* selection_templates.h */,
+				43B351B2194F04E00038C140 /* selection.h */,
+				43B351B3194F04E00038C140 /* send_ui.h */,
+				43B351B4194F04E00038C140 /* session_dialog.h */,
+				43B351B5194F04E00038C140 /* session_dialog.logic.h */,
+				43B351B6194F04E00038C140 /* session_import_dialog.h */,
+				43B351B7194F04E00038C140 /* session_lock_dialog.h */,
+				43B351B8194F04E00038C140 /* session_metadata_dialog.h */,
+				43B351B9194F04E00038C140 /* session_option_editor.h */,
+				43B351BA194F04E00038C140 /* sfdb_freesound_mootcher.h */,
+				43B351BB194F04E00038C140 /* sfdb_ui.h */,
+				43B351BC194F04E00038C140 /* shuttle_control.h */,
+				43B351BD194F04E00038C140 /* speaker_dialog.h */,
+				43B351BE194F04E00038C140 /* splash.h */,
+				43B351BF194F04E00038C140 /* startup.h */,
+				43B351C0194F04E00038C140 /* step_editing.bindings */,
+				43B351C1194F04E00038C140 /* step_editor.h */,
+				43B351C2194F04E00038C140 /* step_entry.h */,
+				43B351C3194F04E00038C140 /* stereo_panner_editor.h */,
+				43B351C4194F04E00038C140 /* stereo_panner.h */,
+				43B351C5194F04E00038C140 /* streamview.h */,
+				43B351C6194F04E00038C140 /* strip_selection.h */,
+				43B351C7194F04E00038C140 /* strip_silence_dialog.h */,
+				43B351C8194F04E00038C140 /* sys_ex.h */,
+				43B351C9194F04E00038C140 /* tape_region_view.h */,
+				43B351CA194F04E00038C140 /* tempo_dialog.h */,
+				43B351CB194F04E00038C140 /* tempo_lines.h */,
+				43B351CC194F04E00038C140 /* theme_manager.h */,
+				43B351CD194F04E00038C140 /* time_axis_view_item.h */,
+				43B351CE194F04E00038C140 /* time_axis_view.h */,
+				43B351CF194F04E00038C140 /* time_fx_dialog.h */,
+				43B351D0194F04E00038C140 /* time_info_box.h */,
+				43B351D1194F04E00038C140 /* time_selection.h */,
+				43B351D2194F04E00038C140 /* track_selection.h */,
+				43B351D3194F04E00038C140 /* track_view_list.h */,
+				43B351D6194F04E00038C140 /* transcode_ffmpeg.h */,
+				43B351D7194F04E00038C140 /* transcode_video_dialog.h */,
+				43B351D8194F04E00038C140 /* transpose_dialog.h */,
+				43B351D9194F04E00038C140 /* ui_config_vars.h */,
+				43B351DA194F04E00038C140 /* ui_config.h */,
+				43B351DB194F04E00038C140 /* utils_videotl.h */,
+				43B351DC194F04E00038C140 /* utils.h */,
+				43B351DD194F04E00038C140 /* verbose_cursor.h */,
+				43B351DE194F04E00038C140 /* version.h */,
+				43B351DF194F04E00038C140 /* video_image_frame.h */,
+				43B351E0194F04E00038C140 /* video_monitor.h */,
+				43B351E1194F04E00038C140 /* video_server_dialog.h */,
+				43B351E2194F04E00038C140 /* video_timeline.h */,
+				43B351E3194F04E00038C140 /* visibility_group.h */,
+				43B351E4194F04E00038C140 /* volume_controller.h */,
+				43B351E5194F04E00038C140 /* vst_plugin_ui.h */,
+				43B351E6194F04E00038C140 /* waves_button.h */,
+				43B351E7194F04E00038C140 /* waves_dialog.h */,
+				43B351E8194F04E00038C140 /* waves_icon_button.h */,
+				43B351E9194F04E00038C140 /* waves_ui.h */,
+				43B351EA194F04E00038C140 /* window_manager.h */,
+				43B351EB194F04E00038C140 /* windows_vst_plugin_ui.h */,
+			);
+			name = headers;
+			sourceTree = "<group>";
+		};
+		435E66791A4AB60C00472D50 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		4397595119CADAFC00740098 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		4397599719CB06AC00740098 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		43B351EF194F12FB0038C140 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				43B351F3194F12FB0038C140 /* libwaves_audiobackend.dylib */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		43B351F5194F130C0038C140 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				43B351F9194F130D0038C140 /* liblibardour.dylib */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		43B351FB194F131D0038C140 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				43B351FF194F131E0038C140 /* pbd.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		43279243194EFFF1003C9FEA /* Tracks */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 4327925F194EFFF1003C9FEA /* Build configuration list for PBXNativeTarget "Tracks" */;
+			buildPhases = (
+				43279240194EFFF1003C9FEA /* Sources */,
+				43279241194EFFF1003C9FEA /* Frameworks */,
+				43279242194EFFF1003C9FEA /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Tracks;
+			productName = Tracks;
+			productReference = 43279244194EFFF1003C9FEA /* Tracks.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		4327903A194EFF24003C9FEA /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0460;
+			};
+			buildConfigurationList = 4327903D194EFF24003C9FEA /* Build configuration list for PBXProject "tracks" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 43279039194EFF24003C9FEA;
+			productRefGroup = 43279245194EFFF1003C9FEA /* Products */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = 435E66791A4AB60C00472D50 /* Products */;
+					ProjectRef = 435E66781A4AB60C00472D50 /* audiographer.xcodeproj */;
+				},
+				{
+					ProductGroup = 4397595119CADAFC00740098 /* Products */;
+					ProjectRef = 4397595019CADAFC00740098 /* canvas.xcodeproj */;
+				},
+				{
+					ProductGroup = 4397599719CB06AC00740098 /* Products */;
+					ProjectRef = 4397599619CB06AC00740098 /* gtkmm2ext.xcodeproj */;
+				},
+				{
+					ProductGroup = 43B351F5194F130C0038C140 /* Products */;
+					ProjectRef = 43B351F4194F130C0038C140 /* libardour.xcodeproj */;
+				},
+				{
+					ProductGroup = 43B351FB194F131D0038C140 /* Products */;
+					ProjectRef = 43B351FA194F131D0038C140 /* pbd.xcodeproj */;
+				},
+				{
+					ProductGroup = 43B351EF194F12FB0038C140 /* Products */;
+					ProjectRef = 43B351EE194F12FB0038C140 /* waves_audiobackend.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				43279243194EFFF1003C9FEA /* Tracks */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		43B351F3194F12FB0038C140 /* libwaves_audiobackend.dylib */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.dylib";
+			path = libwaves_audiobackend.dylib;
+			remoteRef = 43B351F2194F12FB0038C140 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		43B351F9194F130D0038C140 /* liblibardour.dylib */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.dylib";
+			path = liblibardour.dylib;
+			remoteRef = 43B351F8194F130D0038C140 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		43B351FF194F131E0038C140 /* pbd.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = pbd.framework;
+			remoteRef = 43B351FE194F131E0038C140 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		43279242194EFFF1003C9FEA /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				43279252194EFFF1003C9FEA /* InfoPlist.strings in Resources */,
+				43279258194EFFF1003C9FEA /* Credits.rtf in Resources */,
+				4327925E194EFFF1003C9FEA /* MainMenu.xib in Resources */,
+				43279331194F003A003C9FEA /* act-disabled.png in Resources */,
+				43279332194F003A003C9FEA /* add.png in Resources */,
+				43279333194F003A003C9FEA /* application-x-ardour_16px.png in Resources */,
+				43279334194F003A003C9FEA /* application-x-ardour_22px.png in Resources */,
+				43279335194F003A003C9FEA /* application-x-ardour_32px.png in Resources */,
+				43279336194F003A003C9FEA /* application-x-ardour_48px.png in Resources */,
+				43279337194F003A003C9FEA /* ardour-app-icon_osx.png in Resources */,
+				43279338194F003A003C9FEA /* ardour-app-icon_osx_mask.png in Resources */,
+				95F9DFE71A35F3310007E953 /* waves_route_rename_dialog.xml in Resources */,
+				43279339194F003A003C9FEA /* ardour_icon_16px.png in Resources */,
+				4327933A194F003A003C9FEA /* ardour_icon_22px.png in Resources */,
+				4327933B194F003A003C9FEA /* ardour_icon_256px.png in Resources */,
+				4327933C194F003A003C9FEA /* ardour_icon_32px.png in Resources */,
+				4327933D194F003A003C9FEA /* ardour_icon_48px.png in Resources */,
+				95D795F41A7BB40C00120A4F /* waves_track_export_channel_selector.xml in Resources */,
+				4327933E194F003A003C9FEA /* chord.png in Resources */,
+				95D795EE1A7BB40C00120A4F /* waves_export_format_selector.xml in Resources */,
+				4327933F194F003A003C9FEA /* close.png in Resources */,
+				43279340194F003A003C9FEA /* computer_keyboard.png in Resources */,
+				43279341194F003A003C9FEA /* computer_keyboard_active.png in Resources */,
+				43279342194F003A003C9FEA /* display_clock_mockup.png in Resources */,
+				43279343194F003A003C9FEA /* display_metrics_mockup.png in Resources */,
+				43279344194F003A003C9FEA /* eighthnote.png in Resources */,
+				43279345194F003A003C9FEA /* expand_left_right_cursor.png in Resources */,
+				43279346194F003A003C9FEA /* expand_up_down_cursor.png in Resources */,
+				43279347194F003A003C9FEA /* export_icons.sh in Resources */,
+				43279348194F003A003C9FEA /* fade_in_cursor.png in Resources */,
+				43279349194F003A003C9FEA /* fade_out_cursor.png in Resources */,
+				4327934A194F003A003C9FEA /* fadein-constant-power.png in Resources */,
+				4327934B194F003A003C9FEA /* fadein-fast-cut.png in Resources */,
+				4327934C194F003A003C9FEA /* fadein-linear.png in Resources */,
+				4327934D194F003A003C9FEA /* fadein-long-cut.png in Resources */,
+				95F9DFE11A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml in Resources */,
+				4327934E194F003A003C9FEA /* fadein-S1.png in Resources */,
+				4327934F194F003A003C9FEA /* fadein-S2.png in Resources */,
+				43279350194F003A003C9FEA /* fadein-short-cut.png in Resources */,
+				43279351194F003A003C9FEA /* fadein-slow-cut.png in Resources */,
+				43279352194F003A003C9FEA /* fadeout-constant-power.png in Resources */,
+				43279353194F003A003C9FEA /* fadeout-fast-cut.png in Resources */,
+				43279354194F003A003C9FEA /* fadeout-linear.png in Resources */,
+				43279355194F003A003C9FEA /* fadeout-long-cut.png in Resources */,
+				43279356194F003A003C9FEA /* fadeout-S1.png in Resources */,
+				43279357194F003A003C9FEA /* fadeout-S2.png in Resources */,
+				43279358194F003A003C9FEA /* fadeout-short-cut.png in Resources */,
+				43279359194F003A003C9FEA /* fadeout-slow-cut.png in Resources */,
+				4327935A194F003A003C9FEA /* fader_belt.png in Resources */,
+				4327935B194F003A003C9FEA /* fader_belt_desensitised.png in Resources */,
+				4327935C194F003A003C9FEA /* fader_belt_h.png in Resources */,
+				4327935D194F003A003C9FEA /* fader_belt_h_desensitised.png in Resources */,
+				4327935E194F003A003C9FEA /* fader_belt_h_medium.png in Resources */,
+				4327935F194F003A003C9FEA /* fader_belt_h_medium_desensitised.png in Resources */,
+				43279360194F003A003C9FEA /* fader_belt_h_thin.png in Resources */,
+				43279361194F003A003C9FEA /* fader_belt_h_thin_desensitised.png in Resources */,
+				43279362194F003A003C9FEA /* fader_handle.png in Resources */,
+				43279363194F003A003C9FEA /* ferret_02.png in Resources */,
+				43279364194F003A003C9FEA /* forte.png in Resources */,
+				43279365194F003A003C9FEA /* fortissimo.png in Resources */,
+				43279366194F003A003C9FEA /* fortississimo.png in Resources */,
+				43279367194F003A003C9FEA /* grabber.png in Resources */,
+				43279368194F003A003C9FEA /* grabber_edit_point.png in Resources */,
+				43279369194F003A003C9FEA /* grabber_note.png in Resources */,
+				4327936A194F003A003C9FEA /* halfnote.png in Resources */,
+				4327936B194F003A003C9FEA /* hide.png in Resources */,
+				4327936C194F003A003C9FEA /* horizontal_zoom_fader_face.png in Resources */,
+				4327936D194F003A003C9FEA /* i_beam_cursor.png in Resources */,
+				4327936E194F003A003C9FEA /* inspector_on.png in Resources */,
+				4327936F194F003A003C9FEA /* inspector_on_active.png in Resources */,
+				43279370194F003A003C9FEA /* inspector_on_prelight.png in Resources */,
+				43279371194F003A003C9FEA /* join_tools.png in Resources */,
+				43279372194F003A003C9FEA /* knob.png in Resources */,
+				43279373194F003A003C9FEA /* lock_session.png in Resources */,
+				43279374194F003A003C9FEA /* lock_session_active.png in Resources */,
+				43279375194F003A003C9FEA /* lock_session_prelight.png in Resources */,
+				43279376194F003A003C9FEA /* media_button.png in Resources */,
+				43279377194F003A003C9FEA /* media_button_active.png in Resources */,
+				43279378194F003A003C9FEA /* media_button_prelight.png in Resources */,
+				954DCFC21A023AAB00B7160E /* license_dialog.xml in Resources */,
+				43279379194F003A003C9FEA /* meter_bridge_on.png in Resources */,
+				4327937A194F003A003C9FEA /* meter_bridge_on_active.png in Resources */,
+				4327937B194F003A003C9FEA /* meter_bridge_on_prelight.png in Resources */,
+				4327937C194F003A003C9FEA /* metronome.png in Resources */,
+				4327937D194F003A003C9FEA /* mezzforte.png in Resources */,
+				4327937E194F003A003C9FEA /* mezzoforte.png in Resources */,
+				4327937F194F003A003C9FEA /* mezzopiano.png in Resources */,
+				43279380194F003A003C9FEA /* midi-input-active.png in Resources */,
+				43279381194F003A003C9FEA /* midi-input-inactive.png in Resources */,
+				43279382194F003A003C9FEA /* midi_panic.png in Resources */,
+				43279383194F003A003C9FEA /* midi_socket_small.png in Resources */,
+				43279384194F003A003C9FEA /* midi_sound_notes.png in Resources */,
+				43279385194F003A003C9FEA /* midi_tool_erase.png in Resources */,
+				43279386194F003A003C9FEA /* midi_tool_pencil.png in Resources */,
+				43279387194F003A003C9FEA /* midi_tool_select.png in Resources */,
+				43279388194F003A003C9FEA /* mixer_on.png in Resources */,
+				43279389194F003A003C9FEA /* mixer_on_active.png in Resources */,
+				4327938A194F003A003C9FEA /* mixer_on_prelight.png in Resources */,
+				4327938B194F003A003C9FEA /* mode_multi_out.png in Resources */,
+				4327938C194F003A003C9FEA /* mode_multi_out_active.png in Resources */,
+				4327938D194F003A003C9FEA /* mode_multi_out_prelight.png in Resources */,
+				4327938E194F003A003C9FEA /* mode_stereo_out.png in Resources */,
+				4327938F194F003A003C9FEA /* mode_stereo_out_active.png in Resources */,
+				95D795EB1A7BB40C00120A4F /* waves_export_file_notebook_page.xml in Resources */,
+				43279390194F003A003C9FEA /* mode_stereo_out_prelight.png in Resources */,
+				95D795F21A7BB40C00120A4F /* waves_region_export_channel_selector.xml in Resources */,
+				43279391194F003A003C9FEA /* move_cursor.png in Resources */,
+				43279392194F003A003C9FEA /* mute-disabled.png in Resources */,
+				43279393194F003A003C9FEA /* mute-enabled.png in Resources */,
+				95D795E81A7BB40C00120A4F /* marker_inspector_dialog.xml in Resources */,
+				43279394194F003A003C9FEA /* muted-by-others.png in Resources */,
+				43279395194F003A003C9FEA /* nudge_left.png in Resources */,
+				43279396194F003A003C9FEA /* nudge_right.png in Resources */,
+				43279397194F003A003C9FEA /* pianissimo.png in Resources */,
+				95D4986F1AEA363E006E065D /* crash_recovery_dialog.xml in Resources */,
+				43279398194F003A003C9FEA /* pianississimo.png in Resources */,
+				43279399194F003A003C9FEA /* piano.png in Resources */,
+				4327939A194F003A003C9FEA /* quarternote.png in Resources */,
+				4327939B194F003A003C9FEA /* rec-enabled.png in Resources */,
+				95D6A67C1A8E22E80030CDD0 /* waves_keyeditor.xml in Resources */,
+				4327939C194F003A003C9FEA /* rec-in-progress.png in Resources */,
+				4327939D194F003A003C9FEA /* record-normal-disabled.png in Resources */,
+				4327939E194F003A003C9FEA /* record-normal-enabled.png in Resources */,
+				4327939F194F003A003C9FEA /* record-normal-in-progress.png in Resources */,
+				432793A0194F003A003C9FEA /* record-step.png in Resources */,
+				432793A1194F003A003C9FEA /* record_disabled_grey.png in Resources */,
+				432793A2194F003A003C9FEA /* record_normal_red.png in Resources */,
+				432793A3194F003A003C9FEA /* record_tape_red.png in Resources */,
+				432793A4194F003A003C9FEA /* resize_bottom_cursor.png in Resources */,
+				432793A5194F003A003C9FEA /* resize_bottom_left_cursor.png in Resources */,
+				432793A6194F003A003C9FEA /* resize_bottom_right_cursor.png in Resources */,
+				432793A7194F003A003C9FEA /* resize_left_cursor.png in Resources */,
+				432793A8194F003A003C9FEA /* resize_right_cursor.png in Resources */,
+				432793A9194F003A003C9FEA /* resize_top_cursor.png in Resources */,
+				432793AA194F003A003C9FEA /* resize_top_left_cursor.png in Resources */,
+				95D5D1391A8A514300407F98 /* waves_numeric_edit_dialog.xml in Resources */,
+				432793AB194F003A003C9FEA /* resize_top_right_cursor.png in Resources */,
+				432793AC194F003A003C9FEA /* sae.png in Resources */,
+				432793AD194F003A003C9FEA /* sessionlock.png in Resources */,
+				432793AE194F003A003C9FEA /* sixteenthnote.png in Resources */,
+				432793AF194F003A003C9FEA /* sixtyfourthnote.png in Resources */,
+				432793B0194F003A003C9FEA /* slider_controller_fader.png in Resources */,
+				432793B1194F003A003C9FEA /* slider_controller_fader_handle.png in Resources */,
+				954DCFDE1A07A14E00B7160E /* read_only_session_dialog.xml in Resources */,
+				432793B2194F003A003C9FEA /* solo-disabled.png in Resources */,
+				432793B3194F003A003C9FEA /* solo-enabled.png in Resources */,
+				432793B4194F003A003C9FEA /* solo-isolate-disabled.png in Resources */,
+				432793B5194F003A003C9FEA /* solo-isolate-enabled.png in Resources */,
+				432793B6194F003A003C9FEA /* solo-isolated.png in Resources */,
+				432793B7194F003A003C9FEA /* solo-safe-disabled.png in Resources */,
+				432793B8194F003A003C9FEA /* solo-safe-enabled.png in Resources */,
+				432793B9194F003A003C9FEA /* solo-safe-icon.png in Resources */,
+				432793BA194F003A003C9FEA /* soloed-by-others.png in Resources */,
+				432793BB194F003A003C9FEA /* step-editing.png in Resources */,
+				432793BC194F003A003C9FEA /* strip_width.png in Resources */,
+				954DCFC11A023AAB00B7160E /* about_dialog.xml in Resources */,
+				95D1C5211A78ED3A00BE28DB /* waves_edit_dialog.xml in Resources */,
+				432793BD194F003A003C9FEA /* systemlock.png in Resources */,
+				432793BE194F003A003C9FEA /* tav_exp.png in Resources */,
+				432793BF194F003A003C9FEA /* tav_shrink.png in Resources */,
+				432793C0194F003A003C9FEA /* thirtysecondnote.png in Resources */,
+				432793C1194F003A003C9FEA /* tool_arrow.png in Resources */,
+				432793C2194F003A003C9FEA /* tool_arrow_active.png in Resources */,
+				432793C3194F003A003C9FEA /* tool_arrow_prelight.png in Resources */,
+				432793C4194F003A003C9FEA /* tool_audition.png in Resources */,
+				432793C5194F003A003C9FEA /* tool_cut.png in Resources */,
+				432793C6194F003A003C9FEA /* tool_cut_active.png in Resources */,
+				95D795EF1A7BB40C00120A4F /* waves_export_preset_selector.xml in Resources */,
+				432793C7194F003A003C9FEA /* tool_cut_prelight.png in Resources */,
+				432793C8194F003A003C9FEA /* tool_gain.png in Resources */,
+				5BC24BAA1A64328D006A2400 /* trackslive.menus.in in Resources */,
+				432793C9194F003A003C9FEA /* tool_marker.png in Resources */,
+				432793CA194F003A003C9FEA /* tool_marker_active.png in Resources */,
+				95D498701AEA363E006E065D /* waves_save_template_dialog.xml in Resources */,
+				95D795EC1A7BB40C00120A4F /* waves_export_file_notebook.xml in Resources */,
+				432793CB194F003A003C9FEA /* tool_marker_prelight.png in Resources */,
+				432793CC194F003A003C9FEA /* tool_note.png in Resources */,
+				432793CD194F003A003C9FEA /* tool_object.png in Resources */,
+				432793CE194F003A003C9FEA /* tool_object_range.png in Resources */,
+				432793CF194F003A003C9FEA /* tool_range.png in Resources */,
+				432793D0194F003A003C9FEA /* tool_stretch.png in Resources */,
+				432793D1194F003A003C9FEA /* tool_waveform_zoom.png in Resources */,
+				432793D2194F003A003C9FEA /* tool_waveform_zoom_active.png in Resources */,
+				432793D3194F003A003C9FEA /* tool_waveform_zoom_prelight.png in Resources */,
+				432793D4194F003A003C9FEA /* tool_zoom.png in Resources */,
+				95176F7E1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml in Resources */,
+				432793D5194F003A003C9FEA /* tool_zoom_active.png in Resources */,
+				432793D6194F003A003C9FEA /* tool_zoom_ardour.png in Resources */,
+				432793D7194F003A003C9FEA /* tool_zoom_prelight.png in Resources */,
+				432793D8194F003A003C9FEA /* tracks.png in Resources */,
+				432793D9194F003A003C9FEA /* tracks_active.png in Resources */,
+				432793DA194F003A003C9FEA /* tracks_prelight.png in Resources */,
+				956D3F8A1A851805004F328C /* waves_import_dialog.xml in Resources */,
+				432793DB194F003A003C9FEA /* transport_end.png in Resources */,
+				432793DC194F003A003C9FEA /* transport_end_active.png in Resources */,
+				432793DD194F003A003C9FEA /* transport_end_prelight.png in Resources */,
+				432793DE194F003A003C9FEA /* transport_loop.png in Resources */,
+				432793DF194F003A003C9FEA /* transport_loop_active.png in Resources */,
+				432793E0194F003A003C9FEA /* transport_loop_prelight.png in Resources */,
+				432793E1194F003A003C9FEA /* transport_play.png in Resources */,
+				432793E2194F003A003C9FEA /* transport_play_active.png in Resources */,
+				432793E3194F003A003C9FEA /* transport_play_prelight.png in Resources */,
+				95D795F11A7BB40C00120A4F /* waves_port_export_channel_selector.xml in Resources */,
+				432793E4194F003A003C9FEA /* transport_range.png in Resources */,
+				432793E5194F003A003C9FEA /* transport_record.png in Resources */,
+				432793E6194F003A003C9FEA /* transport_record_active.png in Resources */,
+				432793E7194F003A003C9FEA /* transport_record_prelight.png in Resources */,
+				432793E8194F003A003C9FEA /* transport_start.png in Resources */,
+				432793E9194F003A003C9FEA /* transport_start_active.png in Resources */,
+				95D4986E1AEA363E006E065D /* audio_engine_reset_info_dialog.xml in Resources */,
+				432793EA194F003A003C9FEA /* transport_start_prelight.png in Resources */,
+				432793EB194F003A003C9FEA /* transport_stop.png in Resources */,
+				432793EC194F003A003C9FEA /* transport_stop_active.png in Resources */,
+				432793ED194F003A003C9FEA /* transport_stop_prelight.png in Resources */,
+				432793EE194F003A003C9FEA /* trim_bottom_cursor.png in Resources */,
+				432793EF194F003A003C9FEA /* trim_left_cursor.png in Resources */,
+				432793F0194F003A003C9FEA /* trim_left_cursor_5.png in Resources */,
+				432793F1194F003A003C9FEA /* trim_left_cursor_right_only.png in Resources */,
+				432793F2194F003A003C9FEA /* trim_right_cursor.png in Resources */,
+				432793F3194F003A003C9FEA /* trim_right_cursor_5.png in Resources */,
+				95D795F31A7BB40C00120A4F /* waves_track_color_dialog.xml in Resources */,
+				432793F4194F003A003C9FEA /* trim_right_cursor_left_only.png in Resources */,
+				432793F5194F003A003C9FEA /* trim_top_cursor.png in Resources */,
+				432793F6194F003A003C9FEA /* vertical_zoom_fader_face.png in Resources */,
+				432793F7194F003A003C9FEA /* wholenote.png in Resources */,
+				432793F8194F003A003C9FEA /* zoom_fader_handle.png in Resources */,
+				95F9DFE61A35F3310007E953 /* waves_how_to_import_dialog_2.xml in Resources */,
+				432793F9194F003A003C9FEA /* zoom_fader_handle_active.png in Resources */,
+				432793FA194F003A003C9FEA /* zoom_full.png in Resources */,
+				432793FB194F003A003C9FEA /* zoom_in.png in Resources */,
+				432793FC194F003A003C9FEA /* zoom_in_cursor.png in Resources */,
+				432793FD194F003A003C9FEA /* zoom_out.png in Resources */,
+				432793FE194F003A003C9FEA /* zoom_out_cursor.png in Resources */,
+				95F9DFE41A35F3310007E953 /* waves_file_exists_dialog.xml in Resources */,
+				43279431194F0062003C9FEA /* forwardblarrow.xpm in Resources */,
+				43279432194F0062003C9FEA /* h_meter_strip.xpm in Resources */,
+				43279433194F0062003C9FEA /* hiin.xpm in Resources */,
+				43279434194F0062003C9FEA /* hiout.xpm in Resources */,
+				43279435194F0062003C9FEA /* hslider00.xpm in Resources */,
+				43279436194F0062003C9FEA /* hslider01.xpm in Resources */,
+				43279437194F0062003C9FEA /* left_arrow.xpm in Resources */,
+				43279438194F0062003C9FEA /* linin.xpm in Resources */,
+				43279439194F0062003C9FEA /* linout.xpm in Resources */,
+				4327943A194F0062003C9FEA /* loin.xpm in Resources */,
+				4327943B194F0062003C9FEA /* loop.xpm in Resources */,
+				4327943C194F0062003C9FEA /* loout.xpm in Resources */,
+				4327943D194F0062003C9FEA /* lr.xpm in Resources */,
+				4327943E194F0062003C9FEA /* regin.xpm in Resources */,
+				4327943F194F0062003C9FEA /* regin2.xpm in Resources */,
+				43279440194F0062003C9FEA /* regout.xpm in Resources */,
+				43279441194F0062003C9FEA /* regout2.xpm in Resources */,
+				43279442194F0062003C9FEA /* revdblarrow.xpm in Resources */,
+				43279443194F0062003C9FEA /* right_arrow.xpm in Resources */,
+				43279444194F0062003C9FEA /* set-next-button.xpm in Resources */,
+				43279445194F0062003C9FEA /* small-round-button-01.xpm in Resources */,
+				43279446194F0062003C9FEA /* small_x.xpm in Resources */,
+				43279447194F0062003C9FEA /* toggle-button-00.xpm in Resources */,
+				43279448194F0062003C9FEA /* toggle-button-01.xpm in Resources */,
+				43279449194F0062003C9FEA /* tool_audition.xpm in Resources */,
+				95D795ED1A7BB40C00120A4F /* waves_export_filename_selector.xml in Resources */,
+				95F9DFE51A35F3310007E953 /* waves_how_to_import_dialog_1.xml in Resources */,
+				95F9DFE21A35F3310007E953 /* waves_excessive_split_dialog.xml in Resources */,
+				4327944A194F0062003C9FEA /* tool_gain.xpm in Resources */,
+				4327944B194F0062003C9FEA /* tool_object.xpm in Resources */,
+				95F9DFE01A35F3310007E953 /* waves_clean_up_dialog.xml in Resources */,
+				4327944C194F0062003C9FEA /* tool_range.xpm in Resources */,
+				4327944D194F0062003C9FEA /* tool_stretch.xpm in Resources */,
+				4327944E194F0062003C9FEA /* tool_zoom.xpm in Resources */,
+				4327944F194F0062003C9FEA /* v_meter_strip.xpm in Resources */,
+				43279450194F0062003C9FEA /* vslider00.xpm in Resources */,
+				43279451194F0062003C9FEA /* vslider01.xpm in Resources */,
+				43279452194F0062003C9FEA /* vslider02_rail.xpm in Resources */,
+				43279453194F0062003C9FEA /* vslider02_slider.xpm in Resources */,
+				43279454194F0062003C9FEA /* vslider_slider_16wide.xpm in Resources */,
+				43279455194F0062003C9FEA /* zoom_full.xpm in Resources */,
+				95D9E37A1A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml in Resources */,
+				43279456194F0062003C9FEA /* zoom_in.xpm in Resources */,
+				43279457194F0062003C9FEA /* zoom_out.xpm in Resources */,
+				95D795EA1A7BB40C00120A4F /* waves_export_dialog.xml in Resources */,
+				43279458194F0062003C9FEA /* small-splash.png in Resources */,
+				95E2A7AB1A8F652F0080BD79 /* waves_radio_item.xml in Resources */,
+				43279459194F0062003C9FEA /* splash.png in Resources */,
+				4327945A194F0062003C9FEA /* device_capture_control.xml in Resources */,
+				4327945B194F0062003C9FEA /* device_playback_control.xml in Resources */,
+				4327945C194F0062003C9FEA /* editor_window.xml in Resources */,
+				4327945D194F0062003C9FEA /* midi_device_control.xml in Resources */,
+				95D9E3791A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml in Resources */,
+				4327945E194F0062003C9FEA /* session_dialog.xml in Resources */,
+				4327945F194F0062003C9FEA /* session_lock_dialog.xml in Resources */,
+				43279460194F0062003C9FEA /* tracks_preferences.xml in Resources */,
+				4327947F194F009E003C9FEA /* tracks.menus.in in Resources */,
+				43B351ED194F04E00038C140 /* step_editing.bindings in Resources */,
+				CEB0A9F41958447C006D269A /* session_close_dialog.xml in Resources */,
+				CEB9D791197516BE00B21780 /* audio_time_axis.xml in Resources */,
+				CEB9D792197516BE00B21780 /* automation_time_axis.xml in Resources */,
+				CEB9D793197516BE00B21780 /* editor_mixer.xml in Resources */,
+				952E0B3C1A0A1D7000F375D0 /* buildlog.txt in Resources */,
+				95F9DFD71A35A8BD0007E953 /* waves_message_dialog.xml in Resources */,
+				CEB9D794197516BE00B21780 /* inspector_gain_meter.xml in Resources */,
+				5BC67E591A408FCE00F29ABA /* progress_dialog.xml in Resources */,
+				CEB9D796197516BE00B21780 /* master_ui.xml in Resources */,
+				CEB9D797197516BE00B21780 /* meter_strip.xml in Resources */,
+				CEB9D798197516BE00B21780 /* mixer_gain_meter.xml in Resources */,
+				CEB9D799197516BE00B21780 /* mixer_strip.xml in Resources */,
+				CEB9D79A197516BE00B21780 /* track_header_gain_meter.xml in Resources */,
+				CE294C5F19CAD4E300D12768 /* add_tracks_dialog.xml in Resources */,
+				95D795F01A7BB40C00120A4F /* waves_export_timespan_selector.xml in Resources */,
+				CE294C6019CAD4E300D12768 /* compact_meter_bridge.xml in Resources */,
+				CE294C6119CAD4E300D12768 /* compact_meter_strip.xml in Resources */,
+				CE294C6219CAD4E300D12768 /* marker_io_dialog.xml in Resources */,
+				CE294C6319CAD4E300D12768 /* meter_bridge_view.xml in Resources */,
+				CE294C6419CAD4E300D12768 /* meter_strip_gain_meter.xml in Resources */,
+				CE294C6519CAD4E300D12768 /* mixer_bridge_view.xml in Resources */,
+				CE294C6619CAD4E300D12768 /* time_info_box.xml in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		43279240194EFFF1003C9FEA /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				95D796151A7BB9E000120A4F /* waves_export_timespan_selector.cc in Sources */,
+				43279254194EFFF1003C9FEA /* main.m in Sources */,
+				4327925B194EFFF1003C9FEA /* AppDelegate.m in Sources */,
+				CEAFC770195445560016ACF0 /* bbt_time.cc in Sources */,
+				CEAFC771195445560016ACF0 /* time.cc in Sources */,
+				95D7960C1A7BB9E000120A4F /* marker_inspector_dialog.cc in Sources */,
+				95D71D581A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc in Sources */,
+				95D796121A7BB9E000120A4F /* waves_export_filename_selector.cc in Sources */,
+				95D7960F1A7BB9E000120A4F /* waves_export_channel_selector.cc in Sources */,
+				CEB0A9F219583F96006D269A /* session_close_dialog.cc in Sources */,
+				95D796141A7BB9E000120A4F /* waves_export_preset_selector.cc in Sources */,
+				95D7960B1A7BB9E000120A4F /* floating_text_entry.cc in Sources */,
+				CE1C6DCE19879F04006BDB03 /* compact_meter_bridge.cc in Sources */,
+				95D9E37F1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc in Sources */,
+				95D7960E1A7BB9E000120A4F /* route_inspector.cc in Sources */,
+				CE1C6DCF19879F04006BDB03 /* compact_meter_strip.cc in Sources */,
+				95A134DE1A0239080008E3D6 /* license_dialog.cc in Sources */,
+				CE1C6DE01987A924006BDB03 /* master_bus_ui.cc in Sources */,
+				95D796101A7BB9E000120A4F /* waves_export_dialog.cc in Sources */,
+				954DCFBD1A0239DA00B7160E /* about_dialog.cc in Sources */,
+				95D5D1371A8A514300407F98 /* waves_numeric_edit_dialog.cc in Sources */,
+				CE1A907A199A37AE00ECA62B /* add_tracks_dialog.cc in Sources */,
+				95176F7A1A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc in Sources */,
+				95D7960D1A7BB9E000120A4F /* marker_inspector_dialog.logic.cc in Sources */,
+				95D71D551A4C66F600DE5B3B /* waves_track_color_dialog.cc in Sources */,
+				95D1C51F1A78ED2100BE28DB /* waves_edit_dialog.cc in Sources */,
+				CE294C7519CAD54500D12768 /* marker_io_dialog.cc in Sources */,
+				957EF44B1A30BFB300F1500E /* waves_message_dialog.cc in Sources */,
+				CE294C7619CAD54500D12768 /* mixer_bridge_view.cc in Sources */,
+				CE294C7719CAD54500D12768 /* open_file_dialog_nix.cc in Sources */,
+				CE294C7819CAD54500D12768 /* open_file_dialog_windows.cc in Sources */,
+				5BC67E5F1A4090BD00F29ABA /* progress_dialog.cc in Sources */,
+				95D796161A7BB9E000120A4F /* waves_import_dialog.cc in Sources */,
+				CE294C7919CAD54500D12768 /* ruler_dialog.cc in Sources */,
+				95D9E3801A8D1B6600A0DA46 /* waves_missing_file_dialog.cc in Sources */,
+				95D796131A7BB9E000120A4F /* waves_export_format_selector.cc in Sources */,
+				95D796111A7BB9E000120A4F /* waves_export_file_notebook.cc in Sources */,
+				CE294C7A19CAD54500D12768 /* soundcloud_export_selector.cc in Sources */,
+				95E5E9461AE946510000E2CE /* waves_tooltip.cc in Sources */,
+				CE294C7B19CAD54500D12768 /* waves_dropdown.cc in Sources */,
+				CE294C7C19CAD54500D12768 /* waves_grid.cc in Sources */,
+				CE294C7D19CAD54500D12768 /* waves_zoom_control.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		43279250194EFFF1003C9FEA /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				43279251194EFFF1003C9FEA /* en */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		43279256194EFFF1003C9FEA /* Credits.rtf */ = {
+			isa = PBXVariantGroup;
+			children = (
+				43279257194EFFF1003C9FEA /* en */,
+			);
+			name = Credits.rtf;
+			sourceTree = "<group>";
+		};
+		4327925C194EFFF1003C9FEA /* MainMenu.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				4327925D194EFFF1003C9FEA /* en */,
+			);
+			name = MainMenu.xib;
+			path = Tracks;
+			sourceTree = SOURCE_ROOT;
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		4327903E194EFF24003C9FEA /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Debug;
+		};
+		4327903F194EFF24003C9FEA /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Release;
+		};
+		43279260194EFFF1003C9FEA /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COMBINE_HIDPI_IMAGES = YES;
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "Tracks/Tracks-Prefix.pch";
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				INFOPLIST_FILE = "Tracks/Tracks-Info.plist";
+				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = macosx;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		43279261194EFFF1003C9FEA /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COMBINE_HIDPI_IMAGES = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "Tracks/Tracks-Prefix.pch";
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				INFOPLIST_FILE = "Tracks/Tracks-Info.plist";
+				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = macosx;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		4327903D194EFF24003C9FEA /* Build configuration list for PBXProject "tracks" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				4327903E194EFF24003C9FEA /* Debug */,
+				4327903F194EFF24003C9FEA /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		4327925F194EFFF1003C9FEA /* Build configuration list for PBXNativeTarget "Tracks" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				43279260194EFFF1003C9FEA /* Debug */,
+				43279261194EFFF1003C9FEA /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 4327903A194EFF24003C9FEA /* Project object */;
+}
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc
index f43d1bd..441b2dc 100644
--- a/gtk2_ardour/main.cc
+++ b/gtk2_ardour/main.cc
@@ -99,6 +99,28 @@ gui_jack_error ()
 	win.run ();
 }
 
+#ifndef NDEBUG
+static void ardour_g_log (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) {
+	switch (log_level) {
+		case G_LOG_FLAG_FATAL:
+		case G_LOG_LEVEL_CRITICAL:
+			fatal << "g_log: " << message << endmsg;
+			break;
+		case G_LOG_LEVEL_ERROR:
+			error << "g_log: " << message << endmsg;
+			break;
+		case G_LOG_LEVEL_WARNING:
+			warning << "g_log: " << message << endmsg;
+			break;
+		case G_LOG_LEVEL_MESSAGE:
+		case G_LOG_LEVEL_INFO:
+		default:
+			info << "g_log: " << message << endmsg;
+			break;
+	}
+}
+#endif
+
 static gboolean
 tell_about_backend_death (void* /* ignored */)
 {
@@ -359,6 +381,12 @@ int main (int argc, char *argv[])
 		exit (1);
 	}
 
+#ifndef NDEBUG
+	g_log_set_handler (NULL,
+			GLogLevelFlags (G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL |  G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_RECURSION),
+			&ardour_g_log, NULL);
+#endif
+
 	ui->run (text_receiver);
 	Gtkmm2ext::Application::instance()->cleanup();
 	delete ui;
diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc
index 97664d3..0c73769 100644
--- a/gtk2_ardour/marker.cc
+++ b/gtk2_ardour/marker.cc
@@ -50,16 +50,16 @@ using namespace ARDOUR;
 using namespace ARDOUR_UI_UTILS;
 using namespace Gtkmm2ext;
 
-PBD::Signal1<void,Marker*> Marker::CatchDeletion;
+PBD::Signal1<void,ArdourMarker*> ArdourMarker::CatchDeletion;
 
 static double marker_height = 13.0;
 
-void Marker::setup_sizes(const double timebar_height)
+void ArdourMarker::setup_sizes(const double timebar_height)
 {
 	marker_height = floor (timebar_height) - 2;
 }
 
-Marker::Marker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba, const string& annotation,
+ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba, const string& annotation,
 		Type type, framepos_t frame, bool handle_events)
 
 	: editor (ed)
@@ -284,14 +284,14 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba,
 	Gtkmm2ext::get_ink_pixel_size (layout, width, name_height);
 	
 	_name_item = new ArdourCanvas::Text (group);
-	CANVAS_DEBUG_NAME (_name_item, string_compose ("Marker::_name_item for %1", annotation));
+	CANVAS_DEBUG_NAME (_name_item, string_compose ("ArdourMarker::_name_item for %1", annotation));
 	_name_item->set_font_description (name_font);
 	_name_item->set_color (RGBA_TO_UINT (0,0,0,255));
 	_name_item->set_position (ArdourCanvas::Duple (_label_offset, (marker_height - name_height - 1) * .5 ));
 
 	set_name (annotation.c_str());
 
-	editor.ZoomChanged.connect (sigc::mem_fun (*this, &Marker::reposition));
+	editor.ZoomChanged.connect (sigc::mem_fun (*this, &ArdourMarker::reposition));
 
 	/* events will be handled by both the group and the mark itself, so
 	 * make sure they can both be used to lookup this object.
@@ -305,7 +305,7 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Container& parent, guint32 rgba,
 	}
 }
 
-Marker::~Marker ()
+ArdourMarker::~ArdourMarker ()
 {
 	CatchDeletion (this); /* EMIT SIGNAL */
 
@@ -314,28 +314,28 @@ Marker::~Marker ()
 	delete _track_canvas_line;
 }
 
-void Marker::reparent(ArdourCanvas::Container & parent)
+void ArdourMarker::reparent(ArdourCanvas::Container & parent)
 {
 	group->reparent (&parent);
 	_parent = &parent;
 }
 
 void
-Marker::set_selected (bool s)
+ArdourMarker::set_selected (bool s)
 {
 	_selected = s;
 	setup_line ();
 }
 
 void
-Marker::set_show_line (bool s)
+ArdourMarker::set_show_line (bool s)
 {
 	_line_shown = s;
 	setup_line ();
 }
 
 void
-Marker::setup_line ()
+ArdourMarker::setup_line ()
 {
 	if (_shown && (_selected || _line_shown)) {
 
@@ -365,20 +365,20 @@ Marker::setup_line ()
 }
 
 void
-Marker::canvas_height_set (double h)
+ArdourMarker::canvas_height_set (double h)
 {
 	_canvas_height = h;
 	setup_line ();
 }
 
 ArdourCanvas::Item&
-Marker::the_item() const
+ArdourMarker::the_item() const
 {
 	return *group;
 }
 
 void
-Marker::set_name (const string& new_name)
+ArdourMarker::set_name (const string& new_name)
 {
 	_name = new_name;
 
@@ -387,13 +387,13 @@ Marker::set_name (const string& new_name)
 
 /** @return true if our label is on the left of the mark, otherwise false */
 bool
-Marker::label_on_left () const
+ArdourMarker::label_on_left () const
 {
 	return (_type == SessionEnd || _type == RangeEnd || _type == LoopEnd || _type == PunchOut);
 }
 
 void
-Marker::setup_name_display ()
+ArdourMarker::setup_name_display ()
 {
 	double limit = DBL_MAX;
 
@@ -438,7 +438,7 @@ Marker::setup_name_display ()
 }
 
 void
-Marker::set_position (framepos_t frame)
+ArdourMarker::set_position (framepos_t frame)
 {
 	unit_position = editor.sample_to_pixel (frame) - _shift;
 	group->set_x_position (unit_position);
@@ -447,13 +447,13 @@ Marker::set_position (framepos_t frame)
 }
 
 void
-Marker::reposition ()
+ArdourMarker::reposition ()
 {
 	set_position (frame_position);
 }
 
 void
-Marker::show ()
+ArdourMarker::show ()
 {
 	_shown = true;
 
@@ -462,7 +462,7 @@ Marker::show ()
 }
 
 void
-Marker::hide ()
+ArdourMarker::hide ()
 {
 	_shown = false;
 
@@ -471,7 +471,7 @@ Marker::hide ()
 }
 
 void
-Marker::set_color_rgba (uint32_t c)
+ArdourMarker::set_color_rgba (uint32_t c)
 {
 	_color = c;
 	mark->set_fill_color (_color);
@@ -488,7 +488,7 @@ Marker::set_color_rgba (uint32_t c)
 
 /** Set the number of pixels that are available for a label to the left of the centre of this marker */
 void
-Marker::set_left_label_limit (double p)
+ArdourMarker::set_left_label_limit (double p)
 {
 	/* Account for the size of the marker */
 	_left_label_limit = p - marker_height;
@@ -503,7 +503,7 @@ Marker::set_left_label_limit (double p)
 
 /** Set the number of pixels that are available for a label to the right of the centre of this marker */
 void
-Marker::set_right_label_limit (double p)
+ArdourMarker::set_right_label_limit (double p)
 {
 	/* Account for the size of the marker */
 	_right_label_limit = p - marker_height;
@@ -520,7 +520,7 @@ Marker::set_right_label_limit (double p)
 
 TempoMarker::TempoMarker (PublicEditor& editor, ArdourCanvas::Container& parent, guint32 rgba, const string& text,
 			  ARDOUR::TempoSection& temp)
-	: Marker (editor, parent, rgba, text, Tempo, 0, false),
+	: ArdourMarker (editor, parent, rgba, text, Tempo, 0, false),
 	  _tempo (temp)
 {
 	set_position (_tempo.frame());
@@ -535,7 +535,7 @@ TempoMarker::~TempoMarker ()
 
 MeterMarker::MeterMarker (PublicEditor& editor, ArdourCanvas::Container& parent, guint32 rgba, const string& text,
 			  ARDOUR::MeterSection& m)
-	: Marker (editor, parent, rgba, text, Meter, 0, false),
+	: ArdourMarker (editor, parent, rgba, text, Meter, 0, false),
 	  _meter (m)
 {
 	set_position (_meter.frame());
diff --git a/gtk2_ardour/marker.h b/gtk2_ardour/marker.h
index daa44bf..b769f8d 100644
--- a/gtk2_ardour/marker.h
+++ b/gtk2_ardour/marker.h
@@ -38,7 +38,7 @@ namespace ARDOUR {
 
 class PublicEditor;
 
-class Marker : public sigc::trackable
+class ArdourMarker : public sigc::trackable
 {
   public:
 	enum Type {
@@ -56,12 +56,12 @@ class Marker : public sigc::trackable
 	};
 
 
-	Marker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, Type,
+	ArdourMarker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, Type,
 		framepos_t frame = 0, bool handle_events = true);
 
-	virtual ~Marker ();
+	virtual ~ArdourMarker ();
 
-	static PBD::Signal1<void,Marker*> CatchDeletion;
+	static PBD::Signal1<void,ArdourMarker*> CatchDeletion;
 
 	static void setup_sizes (const double timebar_height);
 
@@ -129,11 +129,11 @@ class Marker : public sigc::trackable
 
 private:
 	/* disallow copy construction */
-	Marker (Marker const &);
-	Marker & operator= (Marker const &);
+	ArdourMarker (ArdourMarker const &);
+	ArdourMarker & operator= (ArdourMarker const &);
 };
 
-class TempoMarker : public Marker
+class TempoMarker : public ArdourMarker
 {
   public:
         TempoMarker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, ARDOUR::TempoSection&);
@@ -145,7 +145,7 @@ class TempoMarker : public Marker
 	ARDOUR::TempoSection& _tempo;
 };
 
-class MeterMarker : public Marker
+class MeterMarker : public ArdourMarker
 {
   public:
         MeterMarker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, ARDOUR::MeterSection&);
diff --git a/gtk2_ardour/marker_selection.h b/gtk2_ardour/marker_selection.h
index eea0a3a..6d4749f 100644
--- a/gtk2_ardour/marker_selection.h
+++ b/gtk2_ardour/marker_selection.h
@@ -24,7 +24,7 @@
 
 #include "marker.h"
 
-struct MarkerSelection : public std::list<Marker*>
+struct MarkerSelection : public std::list<ArdourMarker*>
 {
         void range (ARDOUR::framepos_t& start, ARDOUR::framepos_t& end);
 };
diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc
index 675e567..b9653e6 100644
--- a/gtk2_ardour/meter_patterns.cc
+++ b/gtk2_ardour/meter_patterns.cc
@@ -79,10 +79,10 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
 {
 	switch (mt) {
 		case MeterPeak:
-			return _("Peak");
+			return _("Peak (+6dBFS)");
 			break;
 		case MeterPeak0dB:
-			return _("Peak 0dB");
+			return _("Peak (0dBFS)");
 			break;
 		case MeterKrms:
 			return _("RMS + Peak");
@@ -100,13 +100,13 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
 			return _("IEC2/EBU");
 			break;
 		case MeterK20:
-			return _("K20");
+			return _("K20/RMS");
 			break;
 		case MeterK14:
-			return _("K14");
+			return _("K14/RMS");
 			break;
 		case MeterK12:
-			return _("K12");
+			return _("K12/RMS");
 			break;
 		case MeterVU:
 			return _("VU");
diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc
index 08604b0..aaf1842 100644
--- a/gtk2_ardour/meterbridge.cc
+++ b/gtk2_ardour/meterbridge.cc
@@ -111,7 +111,6 @@ Meterbridge::Meterbridge ()
 	assert(max_height % 16 == 0);
 	set_geometry_hints(*((Gtk::Window*) this), geom, Gdk::HINT_MIN_SIZE | Gdk::HINT_MAX_SIZE | Gdk::HINT_RESIZE_INC);
 
-	set_keep_above (true);
 	set_border_width (0);
 
 	metrics_vpacker_left.pack_start (metrics_left, true, true);
@@ -439,7 +438,7 @@ Meterbridge::set_session (Session* s)
 
 	if (_visible) {
 		show_window();
-		ActionManager::check_toggleaction ("<Actions>/Common/toggle-meterbridge");
+		present ();
 	}
 	start_updating ();
 }
diff --git a/gtk2_ardour/midi_list_editor.cc b/gtk2_ardour/midi_list_editor.cc
index 4c7a30c..047dcf2 100644
--- a/gtk2_ardour/midi_list_editor.cc
+++ b/gtk2_ardour/midi_list_editor.cc
@@ -777,7 +777,7 @@ MidiListEditor::redisplay_model ()
 			bbt.beats = dur.get_beats ();
 			bbt.ticks = dur.get_ticks ();
 			
-			int len_ticks = (*i)->length().to_ticks();
+			uint64_t len_ticks = (*i)->length().to_ticks();
 			std::map<int,string>::iterator x = note_length_map.find (len_ticks);
 
 			if (x != note_length_map.end()) {
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index be47521..e412b82 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -1509,8 +1509,9 @@ boost::shared_ptr<MidiRegion>
 MidiTimeAxisView::add_region (framepos_t pos, framecnt_t length, bool commit)
 {
 	Editor* real_editor = dynamic_cast<Editor*> (&_editor);
-
-	real_editor->begin_reversible_command (Operations::create_region);
+	if (commit) {
+		real_editor->begin_reversible_command (Operations::create_region);
+	}
 	playlist()->clear_changes ();
 
 	real_editor->snap_to (pos, RoundNearest);
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index a011d2e..661d1f6 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -1179,6 +1179,7 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt
 	uint32_t ardour_connection_count = 0;
 	uint32_t system_connection_count = 0;
 	uint32_t other_connection_count = 0;
+	uint32_t typed_connection_count = 0;
 
 	ostringstream label;
 
@@ -1196,8 +1197,12 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt
 	
 	//to avoid confusion, the button caption should only show connections that match the datatype of the track
 	DataType dt = DataType::AUDIO;
-	if ( boost::dynamic_pointer_cast<MidiTrack>(route) != 0 )
+	if ( boost::dynamic_pointer_cast<MidiTrack>(route) != 0 ) {
 		dt = DataType::MIDI;
+		// avoid further confusion with Midi-tracks that have a synth.
+		// Audio-ports may be connected, but button says "Disconnected"
+		tooltip << _("MIDI ");
+	}
 
 	if (for_input) {
 		io_count = route->n_inputs().n_total();
@@ -1215,12 +1220,17 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt
 			port = route->output()->nth (io_index);
 		}
 		
-		//ignore any port connections that don't match our DataType
-		if (port->type() != dt)
-			continue;  
-
 		port_connections.clear ();
 		port->get_connections(port_connections);
+
+		//ignore any port connections that don't match our DataType
+		if (port->type() != dt) {
+			if (!port_connections.empty()) {
+				++typed_connection_count;
+			}
+			continue;
+		}
+
 		io_connection_count = 0;
 
 		if (!port_connections.empty()) {
@@ -1360,6 +1370,9 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt
 			// Odd configuration
 			label << "*" << total_connection_count << "*";
 		}
+		if (typed_connection_count > 0) {
+			label << "\u2295"; // circled plus
+		}
 	}
 
 	if (for_input) {
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 2314409..a1cb236 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -777,12 +777,6 @@ Mixer_UI::set_session (Session* sess)
 
 	if (_visible) {
 		show_window();
-
-		/* Bit of a hack; if we're here, we're opening the mixer because of our
-		   instant XML state having a show-mixer property.  Fix up the corresponding
-		   action state.
-		*/
-		ActionManager::check_toggleaction ("<Actions>/Common/toggle-mixer");
 	}
 
 	start_updating ();
@@ -951,7 +945,7 @@ Mixer_UI::set_all_strips_visibility (bool yn)
 
 
 void
-Mixer_UI::set_all_audio_visibility (int tracks, bool yn)
+Mixer_UI::set_all_audio_midi_visibility (int tracks, bool yn)
 {
 	TreeModel::Children rows = track_model->children();
 	TreeModel::Children::iterator i;
@@ -972,6 +966,7 @@ Mixer_UI::set_all_audio_visibility (int tracks, bool yn)
 			}
 			
 			boost::shared_ptr<AudioTrack> at = strip->audio_track();
+			boost::shared_ptr<MidiTrack> mt = strip->midi_track();
 			
 			switch (tracks) {
 			case 0:
@@ -985,7 +980,13 @@ Mixer_UI::set_all_audio_visibility (int tracks, bool yn)
 				break;
 				
 			case 2:
-				if (!at) { /* bus */
+				if (!at && !mt) { /* bus */
+					(*i)[track_columns.visible] = yn;
+				}
+				break;
+
+			case 3:
+				if (mt) { /* midi-track */
 					(*i)[track_columns.visible] = yn;
 				}
 				break;
@@ -1011,26 +1012,38 @@ Mixer_UI::show_all_routes ()
 void
 Mixer_UI::show_all_audiobus ()
 {
-	set_all_audio_visibility (2, true);
+	set_all_audio_midi_visibility (2, true);
 }
 void
 Mixer_UI::hide_all_audiobus ()
 {
-	set_all_audio_visibility (2, false);
+	set_all_audio_midi_visibility (2, false);
 }
 
 void
 Mixer_UI::show_all_audiotracks()
 {
-	set_all_audio_visibility (1, true);
+	set_all_audio_midi_visibility (1, true);
 }
 void
 Mixer_UI::hide_all_audiotracks ()
 {
-	set_all_audio_visibility (1, false);
+	set_all_audio_midi_visibility (1, false);
 }
 
 void
+Mixer_UI::show_all_miditracks()
+{
+	set_all_audio_midi_visibility (3, true);
+}
+void
+Mixer_UI::hide_all_miditracks ()
+{
+	set_all_audio_midi_visibility (3, false);
+}
+
+
+void
 Mixer_UI::track_list_reorder (const TreeModel::Path&, const TreeModel::iterator&, int* /*new_order*/)
 {
 	DEBUG_TRACE (DEBUG::OrderKeys, "mixer UI treeview reordered\n");
@@ -1202,6 +1215,8 @@ Mixer_UI::build_track_menu ()
 	items.push_back (MenuElem (_("Hide All Audio Tracks"), sigc::mem_fun(*this, &Mixer_UI::hide_all_audiotracks)));
 	items.push_back (MenuElem (_("Show All Audio Busses"), sigc::mem_fun(*this, &Mixer_UI::show_all_audiobus)));
 	items.push_back (MenuElem (_("Hide All Audio Busses"), sigc::mem_fun(*this, &Mixer_UI::hide_all_audiobus)));
+	items.push_back (MenuElem (_("Show All Midi Tracks"), sigc::mem_fun (*this, &Mixer_UI::show_all_miditracks)));
+	items.push_back (MenuElem (_("Hide All Midi Tracks"), sigc::mem_fun (*this, &Mixer_UI::hide_all_miditracks)));
 
 }
 
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index 4ab48ff..a56bb39 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -179,7 +179,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
 	void show_track_list_menu ();
       
 	void set_all_strips_visibility (bool yn);
-	void set_all_audio_visibility (int tracks, bool yn);
+	void set_all_audio_midi_visibility (int, bool);
         void track_visibility_changed (std::string const & path);
         void update_track_visibility ();
 
@@ -189,6 +189,8 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
 	void hide_all_audiobus ();
 	void show_all_audiotracks();
 	void hide_all_audiotracks ();
+	void show_all_miditracks();
+	void hide_all_miditracks ();
 
 	bool in_group_row_change;
 
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index e2e8bd4..6819ef9 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -132,11 +132,14 @@ This mode provides many different operations on both regions and control points,
 @rop|Region/boost-region-gain|<@SECONDARY@>6|increase region gain
 @rop|Region/cut-region-gain|<@SECONDARY@>7|reduce region gain
 @rop|Region/pitch-shift-region|<@SECONDARY@>8|transpose
+ at rop|Region/lower-region|<@SECONDARY@>9|lower region layer
+ at rop|Region/raise-region|<@SECONDARY@>0|raise region layer
 
 ;; letters
 ;; TOP ROW
 
 @sess|Common/Quit|<@PRIMARY@>q|quit
+ at sess|Common/Hide|<@PRIMARY@>h|hide
 @movp|Editor/jump-forward-to-mark|w|to next mark
 @movp|Editor/jump-backward-to-mark|q|to previous mark
 
@@ -213,12 +216,14 @@ This mode provides many different operations on both regions and control points,
 @mmode|MouseMode/set-mouse-mode-cut|c|cut mode
 @edit|Editor/editor-cut|<@PRIMARY@>x|cut
 @edit|Editor/editor-copy|<@PRIMARY@>c|copy
- at -group|Editor/crop|<@SECONDARY@>c|some text
+ at wvis|Window/toggle-big-clock|<@SECONDARY@>c|toggle big clock
+ at -group|Editor/crop<@PRIMARY@><@TERTIARY@>c|crop
 @rop|Region/set-region-sync-position|v|set region sync point
 @edit|Editor/editor-paste|<@PRIMARY@>v|paste
+ at edit|Editor/ToggleJadeo|<@SECONDARY@>v|video window
 @-group|Editor/brush-at-mouse|<@PRIMARY@>b|some text
+ at wvis|Common/toggle-meterbridge|<@SECONDARY@>b|show meter bridge
 @trans|Editor/track-record-enable-toggle|<@TERTIARY@>b|toggle track rec-enable 
- at wvis|Window/toggle-big-clock|<@SECONDARY@>b|toggle big clock
 @sess|Main/AddTrackBus|<@PRIMARY@><@TERTIARY@>n|add track(s) or bus(ses)
 @wvis|Window/toggle-audio-connection-manager|<@SECONDARY@>n|toggle global audio patchbay
 @sess|Main/New|<@PRIMARY@>n|open a new session
diff --git a/gtk2_ardour/opts.cc b/gtk2_ardour/opts.cc
index 4596b5c..f544ade 100644
--- a/gtk2_ardour/opts.cc
+++ b/gtk2_ardour/opts.cc
@@ -74,7 +74,7 @@ print_help (const char *execname)
 #endif
 	     << _("  -E, --save <file>           Load the specified session, save it to <file> and then quit\n")
 	     << _("  -C, --curvetest filename    Curve algorithm debugger\n")
-	     << _("  -k, --keybindings filename  Name of key bindings to load (default is ~/.ardour3/ardour.bindings)\n")
+	     << _("  -k, --keybindings filename  Name of key bindings to load\n")
 		;
 	return 1;
 
diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc
index 29806ca..23c4976 100644
--- a/gtk2_ardour/panner2d.cc
+++ b/gtk2_ardour/panner2d.cc
@@ -36,9 +36,11 @@
 #include "canvas/colors.h"
 
 #include "ardour_ui.h"
+#include "global_signals.h"
 #include "panner2d.h"
 #include "keyboard.h"
 #include "gui_thread.h"
+#include "rgb_macros.h"
 #include "utils.h"
 #include "public_editor.h"
 
@@ -51,6 +53,9 @@ using namespace ARDOUR_UI_UTILS;
 using namespace PBD;
 using Gtkmm2ext::Keyboard;
 
+Panner2d::ColorScheme Panner2d::colors;
+bool Panner2d::have_colors = false;
+
 static const int large_size_threshold = 100;
 static const int large_border_width = 25;
 static const int small_border_width = 8;
@@ -81,6 +86,13 @@ Panner2d::Panner2d (boost::shared_ptr<PannerShell> p, int32_t h)
 	, have_elevation (false)
 	, _send_mode (false)
 {
+	if (!have_colors) {
+		set_colors ();
+		have_colors = true;
+	}
+
+	ColorsChanged.connect (sigc::mem_fun (*this, &Panner2d::color_handler));
+
 	panner_shell->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context());
 
 	panner_shell->panner()->SignalPositionChanged.connect (panner_connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
@@ -100,6 +112,31 @@ Panner2d::~Panner2d()
 }
 
 void
+Panner2d::set_colors ()
+{
+	// TODO get all colors from theme, resolve dups
+	colors.background = ARDOUR_UI::config()->color ("mono panner bg");
+	colors.crosshairs =          0x4884a9ff; // 0.282, 0.517, 0.662, 1.0
+	colors.signalcircle_border = 0x84c5e1ff; // 0.517, 0.772, 0.882, 1.0
+	colors.signalcircle =        0x4884a9ff; // 0.282, 0.517, 0.662, 1.0  // also used with a = 0.9
+	colors.diffusion =           0x4884a973; // 0.282, 0.517, 0.662, 0.45
+	colors.diffusion_inv =       0xff6b6b73; // 1.0,   0.419, 0.419, 0.45
+	colors.pos_outline =         0xffe7e7d9; // 1.0,   0.905, 0.905, 0.85
+	colors.pos_fill =            0xff6b6bd9; // 1.0,   0.419, 0.419, 0.85
+	colors.signal_outline =      0x84c5e1cc; // 0.517, 0.772, 0.882, 0.8
+	colors.signal_fill =         0x4884a9bf; // 0.282, 0.517, 0.662, 0.75
+	colors.speaker_fill =        0x4884a9ff; // 0.282, 0.517, 0.662, 1.0
+	colors.text =                0x84c5e1e6; // 0.517, 0.772, 0.882, 0.9
+}
+
+void
+Panner2d::color_handler ()
+{
+	set_colors ();
+	queue_draw ();
+}
+
+void
 Panner2d::reset (uint32_t n_inputs)
 {
 	uint32_t nouts = panner_shell->panner()->out().n_audio();
@@ -413,6 +450,11 @@ Panner2d::on_motion_notify_event (GdkEventMotion *ev)
 	return handle_motion (x, y, state);
 }
 
+#define CSSRGBA(CL) \
+	cairo_set_source_rgba (cr, UINT_RGBA_R_FLT(CL), UINT_RGBA_G_FLT(CL), UINT_RGBA_B_FLT(CL), UINT_RGBA_A_FLT(CL));
+
+#define CSSRGB(CL, A) \
+	cairo_set_source_rgba (cr, UINT_RGBA_R_FLT(CL), UINT_RGBA_G_FLT(CL), UINT_RGBA_B_FLT(CL), A);
 bool
 Panner2d::on_expose_event (GdkEventExpose *event)
 {
@@ -427,14 +469,15 @@ Panner2d::on_expose_event (GdkEventExpose *event)
 
 	cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height);
 
-	double r, g, b, a;
+	uint32_t bg = colors.background;
 	if (_send_mode) {
-		ArdourCanvas::color_to_rgba (ARDOUR_UI::config()->color ("send bg"), r, g, b, a);
+		bg = ARDOUR_UI::config()->color ("send bg");
 	}
+
 	if (!panner_shell->bypassed()) {
-		cairo_set_source_rgba (cr, r, g, b, 1.0);
+		CSSRGBA(bg);
 	} else {
-		cairo_set_source_rgba (cr, r, g, b , 0.2);
+		CSSRGB(bg, 0.2);
 	}
 	cairo_fill_preserve (cr);
 	cairo_clip (cr);
@@ -447,7 +490,7 @@ Panner2d::on_expose_event (GdkEventExpose *event)
 
 	/* horizontal line of "crosshairs" */
 
-	cairo_set_source_rgba (cr, 0.282, 0.517, 0.662, 1.0);
+	CSSRGBA(colors.crosshairs);
 	cairo_move_to (cr, 0.0, radius);
 	cairo_line_to (cr, diameter, radius);
 	cairo_stroke (cr);
@@ -461,16 +504,16 @@ Panner2d::on_expose_event (GdkEventExpose *event)
 	/* the circle on which signals live */
 
 	cairo_set_line_width (cr, 1.5);
-	cairo_set_source_rgba (cr, 0.517, 0.772, 0.882, 1.0);
+	CSSRGBA(colors.signalcircle_border);
 	cairo_arc (cr, radius, radius, radius, 0.0, 2.0 * M_PI);
 	cairo_stroke (cr);
 
 	for (uint32_t rad = 15; rad < 90; rad += 15) {
 		cairo_set_line_width (cr, .5 + (float)rad / 150.0);
 		if (rad == 45) {
-			cairo_set_source_rgba (cr, 0.282, 0.517, 0.662, 1.0);
+			CSSRGBA(colors.signalcircle);
 		} else {
-			cairo_set_source_rgba (cr, 0.282, 0.517, 0.662, 0.8);
+			CSSRGB(colors.signalcircle, 0.9);
 		}
 		cairo_new_path (cr);
 		cairo_arc (cr, radius, radius, radius * sin(M_PI * (float) rad / 180.0), 0, 2.0 * M_PI);
@@ -495,10 +538,10 @@ Panner2d::on_expose_event (GdkEventExpose *event)
 			cairo_close_path (cr);
 			if (panner_shell->pannable()->pan_width_control->get_value() >= 0.0) {
 				/* normal width */
-				cairo_set_source_rgba (cr, 0.282, 0.517, 0.662, 0.45);
+				CSSRGBA(colors.diffusion);
 			} else {
 				/* inverse width */
-				cairo_set_source_rgba (cr, 1.0, 0.419, 0.419, 0.45);
+				CSSRGBA(colors.diffusion_inv);
 			}
 			cairo_fill (cr);
 			cairo_restore (cr);
@@ -525,9 +568,9 @@ Panner2d::on_expose_event (GdkEventExpose *event)
 
 		cairo_new_path (cr);
 		cairo_arc (cr, c.x, c.y, arc_radius + 1.0, 0, 2.0 * M_PI);
-		cairo_set_source_rgba (cr, 1.0, 0.419, 0.419, 0.85);
+		CSSRGBA(colors.pos_fill);
 		cairo_fill_preserve (cr);
-		cairo_set_source_rgba (cr, 1.0, 0.905, 0.905, 0.85);
+		CSSRGBA(colors.pos_outline);
 		cairo_stroke (cr);
 
 		/* signals */
@@ -549,13 +592,13 @@ Panner2d::on_expose_event (GdkEventExpose *event)
 
 					cairo_new_path (cr);
 					cairo_arc (cr, c.x, c.y, arc_radius, 0, 2.0 * M_PI);
-					cairo_set_source_rgba (cr, 0.282, 0.517, 0.662, 0.75);
+					CSSRGBA(colors.signal_fill);
 					cairo_fill_preserve (cr);
-					cairo_set_source_rgba (cr, 0.517, 0.772, 0.882, 0.8);
+					CSSRGBA(colors.signal_outline);
 					cairo_stroke (cr);
 
 					if (!xsmall && !signal->text.empty()) {
-						cairo_set_source_rgba (cr, 0.517, 0.772, 0.882, .9);
+						CSSRGBA(colors.text);
 						/* the +/- adjustments are a hack to try to center the text in the circle
 						 * TODO use pango get_pixel_size() -- see mono_panner.cc
 						 */
@@ -608,7 +651,7 @@ Panner2d::on_expose_event (GdkEventExpose *event)
 				cairo_rel_line_to (cr, -5, +5);
 				cairo_rel_line_to (cr, 0, -7);
 				cairo_close_path (cr);
-				cairo_set_source_rgba (cr, 0.282, 0.517, 0.662, 1.0);
+				CSSRGBA(colors.speaker_fill);
 				cairo_fill (cr);
 				cairo_restore (cr);
 
diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h
index 99377bd..f307718 100644
--- a/gtk2_ardour/panner2d.h
+++ b/gtk2_ardour/panner2d.h
@@ -100,6 +100,26 @@ class Panner2d : public Gtk::DrawingArea
 		bool _selected;
 	};
 
+	struct ColorScheme {
+		uint32_t background;
+		uint32_t crosshairs;
+		uint32_t signalcircle_border;
+		uint32_t signalcircle;
+		uint32_t diffusion;
+		uint32_t diffusion_inv;
+		uint32_t pos_outline;
+		uint32_t pos_fill;
+		uint32_t signal_outline;
+		uint32_t signal_fill;
+		uint32_t speaker_fill;
+		uint32_t text;
+	};
+
+	static ColorScheme colors;
+	static void set_colors ();
+	static bool have_colors;
+	void color_handler ();
+
 	boost::shared_ptr<ARDOUR::PannerShell> panner_shell;
 	Glib::RefPtr<Pango::Layout> layout;
 
diff --git a/gtk2_ardour/panner_interface.cc b/gtk2_ardour/panner_interface.cc
index 0fcba4c..0091cf5 100644
--- a/gtk2_ardour/panner_interface.cc
+++ b/gtk2_ardour/panner_interface.cc
@@ -119,7 +119,7 @@ PannerInterface::set_send_drawing_mode(bool onoff) {
 }
 
 PannerPersistentTooltip::PannerPersistentTooltip (Gtk::Widget* w)
-	: PersistentTooltip (w)
+	: PersistentTooltip (w, true)
 	, _dragging (false)
 {
 
diff --git a/gtk2_ardour/pingback.cc b/gtk2_ardour/pingback.cc
index 8e4a326..3c46a0c 100644
--- a/gtk2_ardour/pingback.cc
+++ b/gtk2_ardour/pingback.cc
@@ -23,7 +23,10 @@
 #include <fstream>
 #include <cstring>
 
-#ifndef PLATFORM_WINDOWS
+#ifdef PLATFORM_WINDOWS
+#include <windows.h>
+#include <glibmm.h>
+#else
 #include <sys/utsname.h>
 #endif
 
@@ -42,7 +45,6 @@
 using std::string;
 using namespace ARDOUR;
 
-#ifndef PLATFORM_WINDOWS // no pingback for windows, so far
 static size_t
 curl_write_data (char *bufptr, size_t size, size_t nitems, void *ptr)
 {
@@ -62,7 +64,6 @@ curl_write_data (char *bufptr, size_t size, size_t nitems, void *ptr)
 
         return size * nitems;
 }
-#endif
 
 struct ping_call {
     std::string version;
@@ -72,19 +73,40 @@ struct ping_call {
 	    : version (v), announce_path (a) {}
 };
 
+#ifdef PLATFORM_WINDOWS
+static bool
+_query_registry (const char *regkey, const char *regval, std::string &rv) {
+	HKEY key;
+	DWORD size = PATH_MAX;
+	char tmp[PATH_MAX+1];
+
+	if (   (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, regkey, 0, KEY_READ, &key))
+	    && (ERROR_SUCCESS == RegQueryValueExA (key, regval, 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size))
+		 )
+	{
+		rv = Glib::locale_to_utf8 (tmp);
+		return true;
+	}
+
+	if (   (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, regkey, 0, KEY_READ | KEY_WOW64_32KEY, &key))
+	    && (ERROR_SUCCESS == RegQueryValueExA (key, regval, 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size))
+		 )
+	{
+		rv = Glib::locale_to_utf8 (tmp);
+		return true;
+	}
+
+	return false;
+}
+#endif
+
+
 static void*
 _pingback (void *arg)
 {
-#ifndef PLATFORM_WINDOWS
 	ping_call* cm = static_cast<ping_call*> (arg);
 	CURL* c;
-	struct utsname utb;
 	string return_str;
-
-	if (uname (&utb)) {
-		return 0;
-	}
-
 	//initialize curl
 
 	curl_global_init (CURL_GLOBAL_NOTHING);
@@ -99,16 +121,31 @@ _pingback (void *arg)
 
 #ifdef __APPLE__
 	url = Config->get_osx_pingback_url ();
+#elif defined PLATFORM_WINDOWS
+	url = Config->get_windows_pingback_url ();
 #else
 	url = Config->get_linux_pingback_url ();
 #endif
 
+	if (url.compare (0, 4, "http") != 0) {
+		delete cm;
+		return 0;
+	}
+
 	char* v = curl_easy_escape (c, cm->version.c_str(), cm->version.length());
 	url += v;
 	url += '?';
 	free (v);
 
-	string uts = string_compose ("%1 %2 %3 %4", utb.sysname, utb.release, utb.version, utb.machine);
+#ifndef PLATFORM_WINDOWS
+	struct utsname utb;
+
+	if (uname (&utb)) {
+		delete cm;
+		return 0;
+	}
+
+	//string uts = string_compose ("%1 %2 %3 %4", utb.sysname, utb.release, utb.version, utb.machine);
 	string s;
 	char* query;
 
@@ -128,6 +165,40 @@ _pingback (void *arg)
 	s = string_compose ("m=%1", query);
 	url += s;
 	free (query);
+#else
+	std::string val;
+	if (_query_registry("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", val)) {
+		char* query = curl_easy_escape (c, val.c_str(), strlen (val.c_str()));
+		url += "r=";
+		url += query;
+		url += '&';
+		free (query);
+	} else {
+		url += "r=&";
+	}
+
+	if (_query_registry("Hardware\\Description\\System\\CentralProcessor\\0", "Identifier", val)) {
+		// remove "Family X Model YY Stepping Z" tail
+		size_t cut = val.find (" Family ");
+		if (string::npos != cut) {
+			val = val.substr (0, cut);
+		}
+		char* query = curl_easy_escape (c, val.c_str(), strlen (val.c_str()));
+		url += "m=";
+		url += query;
+		url += '&';
+		free (query);
+	} else {
+		url += "m=&";
+	}
+
+# if ( defined(__x86_64__) || defined(_M_X64) )
+	url += "s=Windows64";
+# else
+	url += "s=Windows32";
+# endif
+
+#endif /* PLATFORM_WINDOWS */
 
 	curl_easy_setopt (c, CURLOPT_URL, url.c_str());
 
@@ -163,9 +234,6 @@ _pingback (void *arg)
 
 	curl_easy_cleanup (c);
 	delete cm;
-
-#endif /* PLATFORM_WINDOWS */
-
 	return 0;
 }
 
diff --git a/gtk2_ardour/plugin_eq_gui.cc b/gtk2_ardour/plugin_eq_gui.cc
index 13c475e..09e72ac 100644
--- a/gtk2_ardour/plugin_eq_gui.cc
+++ b/gtk2_ardour/plugin_eq_gui.cc
@@ -344,6 +344,7 @@ PluginEqGui::run_impulse_analysis()
 	ARDOUR::ChanMapping in_map(_plugin->get_info()->n_inputs);
 	ARDOUR::ChanMapping out_map(_plugin->get_info()->n_outputs);
 
+	_plugin->set_block_size (_buffer_size);
 	_plugin->connect_and_run(_bufferset, in_map, out_map, _buffer_size, 0);
 	framecnt_t f = _plugin->signal_latency ();
 	// Adding user_latency() could be interesting
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc
index 2a1ce85..3c3d08c 100644
--- a/gtk2_ardour/plugin_selector.cc
+++ b/gtk2_ardour/plugin_selector.cc
@@ -131,8 +131,6 @@ PluginSelector::PluginSelector (PluginManager& mgr)
 	btn_remove = manage(new Gtk::Button(Stock::REMOVE));
 	btn_remove->set_sensitive (false);
 	ARDOUR_UI::instance()->set_tip(*btn_remove, _("Remove a plugin from the effect list"));
-	Gtk::Button *btn_update = manage(new Gtk::Button(Stock::REFRESH));
-	ARDOUR_UI::instance()->set_tip(*btn_update, _("Update available plugins"));
 
 	btn_add->set_name("PluginSelectorButton");
 	btn_remove->set_name("PluginSelectorButton");
@@ -163,8 +161,7 @@ PluginSelector::PluginSelector (PluginManager& mgr)
 	table->attach (*filter_box, 0, 7, 5, 6, FILL|EXPAND, FILL, 5, 5);
 
 	table->attach(*btn_add, 1, 2, 6, 7, FILL, FILL, 5, 5);
-	table->attach(*btn_remove, 3, 4, 6, 7, FILL, FILL, 5, 5);
-	table->attach(*btn_update, 5, 6, 6, 7, FILL, FILL, 5, 5);
+	table->attach(*btn_remove, 5, 6, 6, 7, FILL, FILL, 5, 5);
 
 	table->attach(ascroller, 0, 7, 8, 10);
 
@@ -183,7 +180,6 @@ PluginSelector::PluginSelector (PluginManager& mgr)
 	plugin_display.get_selection()->signal_changed().connect (sigc::mem_fun(*this, &PluginSelector::display_selection_changed));
 	plugin_display.grab_focus();
 
-	btn_update->signal_clicked().connect (sigc::mem_fun(*this, &PluginSelector::btn_update_clicked));
 	btn_add->signal_clicked().connect(sigc::mem_fun(*this, &PluginSelector::btn_add_clicked));
 	btn_remove->signal_clicked().connect(sigc::mem_fun(*this, &PluginSelector::btn_remove_clicked));
 	added_list.get_selection()->signal_changed().connect (sigc::mem_fun(*this, &PluginSelector::added_list_selection_changed));
@@ -447,12 +443,6 @@ PluginSelector::btn_remove_clicked()
 }
 
 void
-PluginSelector::btn_update_clicked()
-{
-	manager.refresh ();
-}
-
-void
 PluginSelector::display_selection_changed()
 {
 	if (plugin_display.get_selection()->count_selected_rows() != 0) {
diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h
index 84c1651..9a71d28 100644
--- a/gtk2_ardour/plugin_selector.h
+++ b/gtk2_ardour/plugin_selector.h
@@ -121,7 +121,6 @@ class PluginSelector : public ArdourDialog
 	void row_activated(Gtk::TreeModel::Path path, Gtk::TreeViewColumn* col);
 	void btn_add_clicked();
 	void btn_remove_clicked();
-	void btn_update_clicked();
 	void added_list_selection_changed();
 	void added_row_clicked(GdkEventButton* event);
 	void display_selection_changed();
diff --git a/gtk2_ardour/po/de.po b/gtk2_ardour/po/de.po
index 2100d88..44dae72 100644
--- a/gtk2_ardour/po/de.po
+++ b/gtk2_ardour/po/de.po
@@ -1,13722 +1,14068 @@
-# German translations for gtk-ardour
-# Copyright (C) 2003 Paul Davis
-# This file is distributed under the same license as the gtk-ardour package.
-#
-# Karsten Petersen <kapet at kapet.de>, 2003.
-# Edgar Aichinger <edgar.aichinger at aon.at>, 2008, 2012, 2013, 2014, 2015.
-# Benjamin Scherrer <benjamin at wagnerbrutal.de>, 2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gtk-ardour 0.347.2\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-11 19:33+0200\n"
-"PO-Revision-Date: 2015-04-12 15:35+0200\n"
-"Last-Translator: Benjamin Scherrer <benjamin at wagnerbrutal.de>\n"
-"Language-Team: Deutsch <>\n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Gtranslator 2.91.6\n"
-"X-Poedit-Basepath: ../../\n"
-"X-Poedit-SearchPath-0: gtk2_ardour\n"
-
-#: about.cc:125
-msgid "Brian Ahr"
-msgstr "Brian Ahr"
-
-#: about.cc:126
-msgid "John Anderson"
-msgstr "John Anderson"
-
-#: about.cc:127
-msgid "Marcus Andersson"
-msgstr "Marcus Andersson"
-
-#: about.cc:128
-msgid "Nedko Arnaudov"
-msgstr "Nedko Arnaudov"
-
-#: about.cc:129
-msgid "Hans Baier"
-msgstr "Hans Baier"
-
-#: about.cc:130
-msgid "Ben Bell"
-msgstr "Ben Bell"
-
-#: about.cc:131
-msgid "Sakari Bergen"
-msgstr "Sakari Bergen"
-
-#: about.cc:132
-msgid "Christian Borss"
-msgstr "Christian Borss"
-
-#: about.cc:133
-msgid "Chris Cannam"
-msgstr "Chris Cannam"
-
-#: about.cc:134
-msgid "Jeremy Carter"
-msgstr "Jeremy Carter"
-
-#: about.cc:135
-msgid "Jesse Chappell"
-msgstr "Jesse Chappell"
-
-#: about.cc:136
-msgid "Thomas Charbonnel"
-msgstr "Thomas Charbonnel"
-
-#: about.cc:137
-msgid "Sam Chessman"
-msgstr "Sam Chessman"
-
-#: about.cc:138
-msgid "André Colomb"
-msgstr "André Colomb"
-
-#: about.cc:139
-msgid "Paul Davis"
-msgstr "Paul Davis"
-
-#: about.cc:140
-msgid "Gerard van Dongen"
-msgstr "Gerard van Dongen"
-
-#: about.cc:141
-msgid "John Emmas"
-msgstr "John Emmas"
-
-#: about.cc:142
-msgid "Colin Fletcher"
-msgstr "Colin Fletcher"
-
-#: about.cc:143
-msgid "Dave Flick"
-msgstr "Dave Flick"
-
-#: about.cc:144
-msgid "Hans Fugal"
-msgstr "Hans Fugal"
-
-#: about.cc:145
-msgid "Robin Gareus"
-msgstr "Robin Gareus"
-
-#: about.cc:146
-msgid "Christopher George"
-msgstr "Christopher George"
-
-#: about.cc:147
-msgid "Chris Goddard"
-msgstr "Chris Goddard"
-
-#: about.cc:148
-msgid "J. Abelardo Gutierrez"
-msgstr "J. Abelardo Gutierrez"
-
-#: about.cc:149
-msgid "Jeremy Hall"
-msgstr "Jeremy Hall"
-
-#: about.cc:150
-msgid "Audun Halland"
-msgstr "Audun Halland"
-
-#: about.cc:151
-msgid "David Halter"
-msgstr "David Halter"
-
-#: about.cc:152
-msgid "Steve Harris"
-msgstr "Steve Harris"
-
-#: about.cc:153
-msgid "Melvin Ray Herr"
-msgstr "Melvin Ray Herr"
-
-#: about.cc:154
-msgid "Carl Hetherington"
-msgstr "Carl Hetherington"
-
-#: about.cc:155
-msgid "Rob Holland"
-msgstr "Rob Holland"
-
-#: about.cc:156
-msgid "Robert Jordens"
-msgstr "Robert Jordens"
-
-#: about.cc:157
-msgid "Stefan Kersten"
-msgstr "Stefan Kersten"
-
-#: about.cc:158
-msgid "Armand Klenk"
-msgstr "Armand Klenk"
-
-#: about.cc:159
-msgid "Julien de Kozak"
-msgstr "Julien de Kozak"
-
-#: about.cc:160
-msgid "Matt Krai"
-msgstr "Matt Krai"
-
-#: about.cc:161
-msgid "Georg Krause"
-msgstr "Georg Krause"
-
-#: about.cc:162
-msgid "Nick Lanham"
-msgstr "Nick Lanham"
-
-#: about.cc:163
-msgid "Colin Law"
-msgstr "Colin Law"
-
-#: about.cc:164
-msgid "Joshua Leach"
-msgstr "Joshua Leach"
-
-#: about.cc:165
-msgid "Ben Loftis"
-msgstr "Ben Loftis"
-
-#: about.cc:166
-msgid "Nick Mainsbridge"
-msgstr "Nick Mainsbridge"
-
-#: about.cc:167
-msgid "Tim Mayberry"
-msgstr "Tim Mayberry"
-
-#: about.cc:168
-msgid "Doug Mclain"
-msgstr "Doug Mclain"
-
-#: about.cc:169
-msgid "Todd Naugle"
-msgstr "Todd Naugle"
-
-#: about.cc:170
-msgid "Jack O'Quin"
-msgstr "Jack O'Quin"
-
-#: about.cc:171
-msgid "Nimal Ratnayake"
-msgstr "Nimal Ratnayake"
-
-#: about.cc:172
-msgid "David Robillard"
-msgstr "David Robillard"
-
-#: about.cc:173
-msgid "Taybin Rutkin"
-msgstr "Taybin Rutkin"
-
-#: about.cc:174
-msgid "Andreas Ruge"
-msgstr "Andreas Ruge"
-
-#: about.cc:175
-msgid "Sampo Savolainen"
-msgstr "Sampo Savolainen"
-
-#: about.cc:176
-msgid "Rodrigo Severo"
-msgstr "Rodrigo Severo"
-
-#: about.cc:177
-msgid "Per Sigmond"
-msgstr "Per Sigmond"
-
-#: about.cc:178
-msgid "Lincoln Spiteri"
-msgstr "Lincoln Spiteri"
-
-#: about.cc:179
-msgid "Mike Start"
-msgstr "Mike Start"
-
-#: about.cc:180
-msgid "Mark Stewart"
-msgstr "Mark Stewart"
-
-#: about.cc:181
-msgid "Roland Stigge"
-msgstr "Roland Stigge"
-
-#: about.cc:182
-msgid "Petter Sundlöf"
-msgstr "Petter Sundlöf"
-
-#: about.cc:183
-msgid "Mike Täht"
-msgstr "Mike Täht"
-
-#: about.cc:184
-msgid "Roy Vegard"
-msgstr "Roy Vegard"
-
-#: about.cc:185
-msgid "Thorsten Wilms"
-msgstr "Thorsten Wilms"
-
-#: about.cc:186
-msgid "Grygorii Zharun"
-msgstr "Grygorii Zharun"
-
-#: about.cc:191
-msgid ""
-"French:\n"
-"\tAlain Fréhel <alain.frehel at free.fr>\n"
-"\tChristophe Combelles <ccomb at free.fr>\n"
-"\tMartin Blanchard\n"
-"\tRomain Arnaud <roming22 at gmail.com>\n"
-msgstr ""
-"Französisch:\n"
-"\tAlain Fréhel <alain.frehel at free.fr>\n"
-"\tChristophe Combelles <ccomb at free.fr>\n"
-"\tMartin Blanchard\n"
-"\tRomain Arnaud <roming22 at gmail.com>\n"
-
-#: about.cc:192
-msgid ""
-"German:\n"
-"\tKarsten Petersen <kapet at kapet.de>\n"
-"\tSebastian Arnold <mail at sebastian-arnold.net>\n"
-"\tRobert Schwede <schwede at ironshark.com>\n"
-"\tBenjamin Scherrer <realhangman at web.de>\n"
-"\tEdgar Aichinger <edogawa at aon.at>\n"
-"\tRichard Oax <richard at pagliacciempire.de>\n"
-"\tRobin Gloster <robin at loc-com.de>\n"
-msgstr ""
-"Deutsch:\n"
-"\tKarsten Petersen <kapet at kapet.de>\n"
-"\tSebastian Arnold <mail at sebastian-arnold.net>\n"
-"\tRobert Schwede <schwede at ironshark.com>\n"
-"\tBenjamin Scherrer <realhangman at web.de>\n"
-"\tEdgar Aichinger <edogawa at aon.at>\n"
-"\tRichard Oax <richard at pagliacciempire.de>\n"
-"\tRobin Gloster <robin at loc-com.de>\n"
-
-#: about.cc:199
-msgid ""
-"Italian:\n"
-"\tFilippo Pappalardo <filippo at email.it>\n"
-"\tRaffaele Morelli <raffaele.morelli at gmail.com>\n"
-msgstr ""
-"Italienisch:\n"
-"\tFilippo Pappalardo <filippo at email.it>\n"
-"\tRaffaele Morelli <raffaele.morelli at gmail.com>\n"
-
-#: about.cc:200
-msgid ""
-"Portuguese:\n"
-"\tRui Nuno Capela <rncbc at rncbc.org>\n"
-msgstr ""
-"Portugiesisch:\n"
-"\tRui Nuno Capela <rncbc at rncbc.org>\n"
-
-#: about.cc:201
-msgid ""
-"Brazilian Portuguese:\n"
-"\tAlexander da Franca Fernandes <alexander at nautae.eti.br>\n"
-"\tChris Ross <chris at tebibyte.org>\n"
-msgstr ""
-"Brasilianisches Portugiesisch:\n"
-"\tAlexander da Franca Fernandes <alexander at nautae.eti.br>\n"
-"\tChris Ross <chris at tebibyte.org>\n"
-
-#: about.cc:203
-msgid ""
-"Spanish:\n"
-"\t Alex Krohn <alexkrohn at fastmail.fm>\n"
-"\tPablo Fernández <pablo.fbus at gmail.com>\n"
-msgstr ""
-"Spanisch:\n"
-"\t Alex Krohn <alexkrohn at fastmail.fm>\n"
-"\tPablo Fernández <pablo.fbus at gmail.com>\n"
-
-#: about.cc:204
-msgid ""
-"Russian:\n"
-"\t Igor Blinov <pitstop at nm.ru>\n"
-"\tAlexandre Prokoudine <alexandre.prokoudine at gmail.com>\n"
-msgstr ""
-"Russisch:\n"
-"\t Igor Blinov <pitstop at nm.ru>\n"
-"\tAlexandre Prokoudine <alexandre.prokoudine at gmail.com>\n"
-
-#: about.cc:206
-msgid ""
-"Greek:\n"
-"\t Klearchos Gourgourinis <muadib at in.gr>\n"
-msgstr ""
-"Griechisch:\n"
-"\t Klearchos Gourgourinis <muadib at in.gr>\n"
-
-#: about.cc:207
-msgid ""
-"Swedish:\n"
-"\t Petter Sundlöf <petter.sundlof at gmail.com>\n"
-msgstr ""
-"Schwedisch:\n"
-"\t Petter Sundlöf <petter.sundlof at gmail.com>\n"
-
-#: about.cc:208
-msgid ""
-"Polish:\n"
-"\t Piotr Zaryk <pzaryk at gmail.com>\n"
-msgstr ""
-"Polnisch:\n"
-"\t Piotr Zaryk <pzaryk at gmail.com>\n"
-
-#: about.cc:209
-msgid ""
-"Czech:\n"
-"\t Pavel Fric <pavelfric at seznam.cz>\n"
-msgstr ""
-"Tschechisch:\n"
-"\t Pavel Fric <pavelfric at seznam.cz>\n"
-
-#: about.cc:210
-msgid ""
-"Norwegian:\n"
-"\t Eivind Ødegård\n"
-msgstr ""
-"Norwegisch:\n"
-"\t Eivind Ødegård\n"
-
-#: about.cc:211
-msgid ""
-"Chinese:\n"
-"\t Rui-huai Zhang <zrhzrh at mail.ustc.edu.cn>\n"
-msgstr ""
-"Chinesisch:\n"
-"\t Rui-huai Zhang <zrhzrh at mail.ustc.edu.cn>\n"
-
-#: about.cc:591
-msgid "Copyright (C) 1999-2015 Paul Davis\n"
-msgstr "Copyright (C) 1999-2015 Paul Davis\n"
-
-#: about.cc:595
-msgid "http://ardour.org/"
-msgstr "http://ardour.org/"
-
-#: about.cc:596
-msgid ""
-"%1%2\n"
-"(built from revision %3)"
-msgstr ""
-"%1%2\n"
-"(kompiliert aus Revision %3)"
-
-#: about.cc:600
-msgid "Config"
-msgstr "Konfiguration"
-
-#: actions.cc:85
-msgid "Loading menus from %1"
-msgstr "Lade Menüs von %1"
-
-#: actions.cc:88 actions.cc:89
-msgid "badly formatted menu definition file: %1"
-msgstr "schlecht formatierte Menüdefinitions-Datei: %1"
-
-#: actions.cc:91
-msgid "%1 menu definition file not found"
-msgstr "Konnte die %1 Menü-Definitionsdatei nicht finden"
-
-#: actions.cc:95 actions.cc:96
-msgid "%1 will not work without a valid menu definition file"
-msgstr "%1 wird ohne gültige Menüdefinitions-Datei nicht funktionieren"
-
-#: add_route_dialog.cc:54 route_params_ui.cc:524
-msgid "Add Track or Bus"
-msgstr "Spur/Bus hinzufügen"
-
-#: add_route_dialog.cc:57
-msgid "Configuration:"
-msgstr "Kanaleinstellungen:"
-
-#: add_route_dialog.cc:58
-msgid "Record Mode:"
-msgstr "Aufnahmemodus:"
-
-#: add_route_dialog.cc:59
-msgid "Instrument:"
-msgstr "Instrument:"
-
-#: add_route_dialog.cc:77
-msgid "Audio Tracks"
-msgstr "Audiospuren"
-
-#: add_route_dialog.cc:78 add_route_dialog.cc:209
-msgid "MIDI Tracks"
-msgstr "Midispuren"
-
-#: add_route_dialog.cc:79 add_route_dialog.cc:211
-msgid "Audio+MIDI Tracks"
-msgstr "Audio+MIDI-Spuren"
-
-#: add_route_dialog.cc:80 add_route_dialog.cc:207
-msgid "Busses"
-msgstr "Audiobusse"
-
-#: add_route_dialog.cc:83 add_route_dialog.cc:559
-msgid "First"
-msgstr "Zuerst"
-
-#: add_route_dialog.cc:84 add_route_dialog.cc:561
-msgid "After Editor Selection"
-msgstr "Nach Auswahl im Editor"
-
-#: add_route_dialog.cc:85 add_route_dialog.cc:563
-msgid "After Mixer Selection"
-msgstr "Nach auswahl im Mixer"
-
-#: add_route_dialog.cc:86
-msgid "Last"
-msgstr "Zuletzt"
-
-#: add_route_dialog.cc:103
-msgid "Add:"
-msgstr "Erstelle:"
-
-#: add_route_dialog.cc:116 time_fx_dialog.cc:91 add_video_dialog.cc:135
-#: video_server_dialog.cc:121
-msgid "<b>Options</b>"
-msgstr "<b>Optionen</b>"
-
-#: add_route_dialog.cc:126 bundle_manager.cc:193 region_editor.cc:50
-#: route_group_dialog.cc:71
-msgid "Name:"
-msgstr "Name:"
-
-#: add_route_dialog.cc:156
-msgid "Group:"
-msgstr "Gruppe:"
-
-#: add_route_dialog.cc:162
-msgid "Insert:"
-msgstr "Insert:"
-
-#: add_route_dialog.cc:223 add_route_dialog.cc:232 add_route_dialog.cc:306
-#: ardour_ui_ed.cc:539 engine_dialog.cc:237 rc_option_editor.cc:1805
-#: rc_option_editor.cc:1807 rc_option_editor.cc:1809 rc_option_editor.cc:1827
-#: rc_option_editor.cc:1829 rc_option_editor.cc:1837 rc_option_editor.cc:1839
-#: rc_option_editor.cc:1857 rc_option_editor.cc:1870 rc_option_editor.cc:1872
-#: rc_option_editor.cc:1874 rc_option_editor.cc:1919 rc_option_editor.cc:1921
-#: rc_option_editor.cc:1923 rc_option_editor.cc:1931 rc_option_editor.cc:1939
-#: rc_option_editor.cc:1941 rc_option_editor.cc:1949
-msgid "Audio"
-msgstr "Audio"
-
-#: add_route_dialog.cc:224 add_route_dialog.cc:235 add_route_dialog.cc:307
-#: editor_actions.cc:109 engine_dialog.cc:239 missing_file_dialog.cc:56
-#: rc_option_editor.cc:2084 rc_option_editor.cc:2094 rc_option_editor.cc:2102
-#: rc_option_editor.cc:2110 rc_option_editor.cc:2119 rc_option_editor.cc:2127
-#: rc_option_editor.cc:2135 rc_option_editor.cc:2143 rc_option_editor.cc:2152
-#: rc_option_editor.cc:2161 rc_option_editor.cc:2170 rc_option_editor.cc:2178
-#: rc_option_editor.cc:2186 rc_option_editor.cc:2194 rc_option_editor.cc:2217
-msgid "MIDI"
-msgstr "MIDI"
-
-#: add_route_dialog.cc:225 add_route_dialog.cc:238 add_route_dialog.cc:308
-msgid "Audio+MIDI"
-msgstr "Audio+MIDI"
-
-#: add_route_dialog.cc:226 add_route_dialog.cc:241 add_route_dialog.cc:309
-msgid "Bus"
-msgstr "Bus"
-
-#: add_route_dialog.cc:268
-msgid ""
-"Audio+MIDI tracks are intended for use <b>ONLY</b> with plugins that use "
-"both audio and MIDI input data\n"
-"\n"
-"If you do not plan to use such a plugin, then use a normal audio or MIDI "
-"track instead."
-msgstr ""
-"Audio+MIDI Spuren sind <b>NUR</b> für den Gebrauch mit Plugins gedacht, die "
-"sowohl Audio als auch MIDI Eingangsdaten benutzen\n"
-"\n"
-"Falls Sie nicht vorhaben, so ein Plugin zu benutzen, verwenden Sie "
-"stattdessen eine normale Audio- oder MIDI-Spur"
-
-#: add_route_dialog.cc:327 add_route_dialog.cc:346 editor_actions.cc:420
-#: editor_rulers.cc:251 time_axis_view.cc:1374
-msgid "Normal"
-msgstr "Normal"
-
-#: add_route_dialog.cc:330 add_route_dialog.cc:348
-msgid "Non Layered"
-msgstr "Non Layered"
-
-#: add_route_dialog.cc:331 add_route_dialog.cc:350
-msgid "Tape"
-msgstr "Band"
-
-#: add_route_dialog.cc:431 monitor_section.cc:290
-msgid "Mono"
-msgstr "Mono"
-
-#: add_route_dialog.cc:435
-msgid "Stereo"
-msgstr "Stereo"
-
-#: add_route_dialog.cc:459
-msgid "3 Channel"
-msgstr "3 Kanäle"
-
-#: add_route_dialog.cc:463
-msgid "4 Channel"
-msgstr "4 Kanäle"
-
-#: add_route_dialog.cc:467
-msgid "5 Channel"
-msgstr "5 Kanäle"
-
-#: add_route_dialog.cc:471
-msgid "6 Channel"
-msgstr "6 Kanäle"
-
-#: add_route_dialog.cc:475
-msgid "8 Channel"
-msgstr "8 Kanäle"
-
-#: add_route_dialog.cc:479
-msgid "12 Channel"
-msgstr "12 Kanäle"
-
-#: add_route_dialog.cc:483 mixer_strip.cc:1843 mixer_strip.cc:2251
-msgid "Custom"
-msgstr "Benutzerdefiniert"
-
-#: add_route_dialog.cc:516 add_route_dialog.cc:532 route_group_menu.cc:81
-msgid "New Group..."
-msgstr "Neue Gruppe..."
-
-#: add_route_dialog.cc:520 route_group_menu.cc:85
-msgid "No Group"
-msgstr "Keine Gruppe"
-
-#: ambiguous_file_dialog.cc:30
-msgid "Ambiguous File"
-msgstr "Mehrmals gefundene Datei"
-
-#: ambiguous_file_dialog.cc:35
-msgid ""
-"%1 has found the file <i>%2</i> in the following places:\n"
-"\n"
-msgstr ""
-"%1 hat die Datei <i>%2</i> an den folgenden Orten gefunden:\n"
-"\n"
-
-#: ambiguous_file_dialog.cc:44
-msgid ""
-"\n"
-"\n"
-"Please select the path that you want to get the file from."
-msgstr ""
-"\n"
-"\n"
-"Bitte wähle den Pfad der gewünschten Datei aus."
-
-#: ambiguous_file_dialog.cc:46 missing_file_dialog.cc:46
-msgid "Done"
-msgstr "Fertig"
-
-#: analysis_window.cc:46
-msgid "Signal source"
-msgstr "Signalquelle"
-
-#: analysis_window.cc:47
-msgid "Selected ranges"
-msgstr "Ausgewählte Bereiche"
-
-#: analysis_window.cc:48
-msgid "Selected regions"
-msgstr "Ausgewählte Regionen"
-
-#: analysis_window.cc:50
-msgid "Display model"
-msgstr "Anzeigetyp"
-
-#: analysis_window.cc:51
-msgid "Composite graphs for each track"
-msgstr "Graphen für jede Spur einzeln"
-
-#: analysis_window.cc:52
-msgid "Composite graph of all tracks"
-msgstr "Graphen aller Spuren zusammenfassen"
-
-#: analysis_window.cc:54
-msgid "Show frequency power range"
-msgstr "Leistungsspektrum anzeigen"
-
-#: analysis_window.cc:55
-msgid "Normalize values"
-msgstr "Normalisieren"
-
-#: analysis_window.cc:59
-msgid "FFT analysis window"
-msgstr "FFT-Analysefenster"
-
-#: analysis_window.cc:60 editor.cc:1823
-msgid "Spectral Analysis"
-msgstr "FFT-Analyse"
-
-#: analysis_window.cc:67 editor_actions.cc:142 session_metadata_dialog.cc:667
-msgid "Track"
-msgstr "Spur"
-
-#: analysis_window.cc:68 editor_actions.cc:646 mixer_ui.cc:131
-#: mixer_ui.cc:1854
-msgid "Show"
-msgstr "Anzeigen"
-
-#: analysis_window.cc:135
-msgid "Re-analyze data"
-msgstr "Daten erneut analysieren"
-
-#: ardour_button.cc:1116
-msgid "button cannot watch state of non-existing Controllable\n"
-msgstr ""
-"Schaltfläche kann den Status des nichtexistenten Kontrollzieles nicht "
-"verfolgen\n"
-
-#: ardour_button.cc:1384
-msgid "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
-msgstr "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
-
-#: ardour_ui.cc:164
-msgid ""
-"%1 %2.x has discovered configuration files from %1 %3.x.\n"
-"\n"
-"Would you like these files to be copied and used for %1 %2.x?\n"
-"\n"
-"(This will require you to restart %1.)"
-msgstr ""
-"%1 %2.x hat Konfigurationsdateien von %1 %3.x gefunden.\n"
-"\n"
-"Möchten Sie diese Dateien zur Benutzung von %1 %2.x kopieren?\n"
-"\n"
-"(Dies erfordert einen Neustart von %1.)"
-
-#: ardour_ui.cc:216 editor_actions.cc:640 region_editor.cc:51
-msgid "Audition"
-msgstr "Vorhören"
-
-#: ardour_ui.cc:217 editor_actions.cc:136 mixer_strip.cc:2023
-#: monitor_section.cc:357 rc_option_editor.cc:1959 route_time_axis.cc:252
-#: route_time_axis.cc:2707
-msgid "Solo"
-msgstr "Solo"
-
-#: ardour_ui.cc:218 rc_option_editor.cc:741
-msgid "Feedback"
-msgstr "Feedback"
-
-#: ardour_ui.cc:224 speaker_dialog.cc:36
-msgid "Speaker Configuration"
-msgstr "Lautsprechereinstellung"
-
-#: ardour_ui.cc:225 keyeditor.cc:53
-msgid "Key Bindings"
-msgstr "Tastaturkürzel"
-
-#: ardour_ui.cc:226
-msgid "Preferences"
-msgstr "Globale Einstellungen"
-
-#: ardour_ui.cc:227 ardour_ui.cc:234
-msgid "Add Tracks/Busses"
-msgstr "Spuren/Busse hinzufügen"
-
-#: ardour_ui.cc:228
-msgid "About"
-msgstr "Über..."
-
-#: ardour_ui.cc:229 location_ui.cc:1141 session_option_editor.cc:189
-#: session_option_editor.cc:195 session_option_editor.cc:202
-msgid "Locations"
-msgstr "Dateiorte"
-
-#: ardour_ui.cc:230 route_params_ui.cc:59 route_params_ui.cc:630
-msgid "Tracks and Busses"
-msgstr "Spuren/Busse"
-
-#: ardour_ui.cc:231 engine_dialog.cc:70
-msgid "Audio/MIDI Setup"
-msgstr "Audio/MIDI Einstellungen"
-
-#: ardour_ui.cc:232
-msgid "Video Export Dialog"
-msgstr "Videoexport-Dialog"
-
-#: ardour_ui.cc:233
-msgid "Properties"
-msgstr "Projekteinstellungen"
-
-#: ardour_ui.cc:235 bundle_manager.cc:264
-msgid "Bundle Manager"
-msgstr "Bundle Manager"
-
-#: ardour_ui.cc:236 big_clock_window.cc:37
-msgid "Big Clock"
-msgstr "Große Zeitanzeige"
-
-#: ardour_ui.cc:237
-msgid "Audio Connections"
-msgstr "Audio-Verbindungen"
-
-#: ardour_ui.cc:238
-msgid "MIDI Connections"
-msgstr "MIDI-Verbindungen"
-
-#: ardour_ui.cc:247
-msgid "Your configuration files were copied. You can now restart %1."
-msgstr ""
-"Ihre Konfigurationsdateien wurden kopiert. Sie können jetzt %1 neu starten."
-
-#: ardour_ui.cc:486
-msgid ""
-"The audio backend was shutdown because:\n"
-"\n"
-"%1"
-msgstr ""
-"Das Audiobackend wurde aus folgendem Grund beendet:\n"
-"\n"
-"%1"
-
-#: ardour_ui.cc:488
-msgid ""
-"The audio backend has either been shutdown or it\n"
-"disconnected %1 because %1\n"
-"was not fast enough. Try to restart\n"
-"the audio backend and save the session."
-msgstr ""
-"Das Audiobackend wurde entweder beendet oder hat\n"
-"%1 getrennt, weil %1 nicht schnell genug\n"
-"war. Sie sollten versuchen, das Audiobackend \n"
-"neu zu starten und das Projekt zu speichern."
-
-#: ardour_ui.cc:512
-msgid ""
-"Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. "
-"Please see the log window for further details."
-msgstr ""
-"Audio Unit Plugin Scan fehlgeschlagen. Automatische AU Scans wurden "
-"deaktiviert. Weitere Einzelheiten finden Sie im Logfenster."
-
-#: ardour_ui.cc:513
-msgid "Audio Unit Plugin Scan Failed:"
-msgstr "Audio Unit Plugin Scan fehlgeschlagen:"
-
-#: ardour_ui.cc:833
-msgid "NSM server did not announce itself"
-msgstr "Der NSM Server hat sich nicht angemeldet"
-
-#: ardour_ui.cc:846
-msgid "NSM: no client ID provided"
-msgstr "NSM: keine Client-ID verfügbar"
-
-#: ardour_ui.cc:853
-msgid "NSM: no session created"
-msgstr "NSM: kein Projekt erzeugt"
-
-#: ardour_ui.cc:876
-msgid "NSM: initialization failed"
-msgstr "NSM: Initialisierung gescheitert"
-
-#: ardour_ui.cc:906
-msgid "Free/Demo Version Warning"
-msgstr "Demoversionswarnung"
-
-#: ardour_ui.cc:908
-msgid "Subscribe and support development of %1"
-msgstr "%1 abonnieren und die Entwicklung unterstützen"
-
-#: ardour_ui.cc:909
-msgid "Don't warn me about this again"
-msgstr "Nicht noch einmal warnen"
-
-#: ardour_ui.cc:911
-msgid ""
-"<span weight=\"bold\" size=\"large\">%1</span>\n"
-"\n"
-"<b>%2</b>\n"
-"\n"
-"<i>%3</i>\n"
-"\n"
-"%4"
-msgstr ""
-"<span weight=\"bold\" size=\"large\">%1</span>\n"
-"\n"
-"<b>%2</b>\n"
-"\n"
-"<i>%3</i>\n"
-"\n"
-"%4"
-
-#: ardour_ui.cc:912
-msgid "This is a free/demo version of %1"
-msgstr "Dies ist eine freie Demoversion von %1"
-
-#: ardour_ui.cc:913
-msgid "It will not restore OR save any plugin settings"
-msgstr "Sie kann keine Plugin-Einstellungen speichern oder laden"
-
-#: ardour_ui.cc:914
-msgid ""
-"If you load an existing session with plugin settings\n"
-"they will not be used and will be lost."
-msgstr ""
-"Wenn Sie ein existierendes Projekt mit Plugin-Einstellungen laden, werden "
-"diese nicht benutzt und beim Speichern verloren gehen."
-
-#: ardour_ui.cc:916 plugin_ui.cc:569
-msgid ""
-"To get full access to updates without this limitation\n"
-"consider becoming a subscriber for a low cost every month."
-msgstr ""
-"Um vollen Zugriff auf Updates ohne diese Einschränkung zu erhalten, erwägen "
-"Sie, uns durch ein Abonnement mit einem geringen monatlichen Betrag zu "
-"unterstützen."
-
-#: ardour_ui.cc:926
-msgid "Quit now"
-msgstr "Jetzt beenden"
-
-#: ardour_ui.cc:927
-msgid "Continue using %1"
-msgstr "%1 weiterhin benutzen"
-
-#: ardour_ui.cc:960 startup.cc:345
-msgid "%1 is ready for use"
-msgstr "%1 ist nun bereit"
-
-#: ardour_ui.cc:1002
-msgid ""
-"WARNING: Your system has a limit for maximum amount of locked memory. This "
-"might cause %1 to run out of memory before your system runs out of memory. \n"
-"\n"
-"You can view the memory limit with 'ulimit -l', and it is normally "
-"controlled by %2"
-msgstr ""
-"WARNUNG: Ihr System hat eine Begrenzung für die Reservierung von "
-"Arbeitsspeicher eingestellt. Dies könnte dazu führen, dass %1 der Speicher "
-"ausgeht bevor die Systembegrenzung erreicht ist.\n"
-"\n"
-"Sie können die Speicherbegrenzung mit 'ulimit -l' einsehen und normalerweise "
-"in %2 verändern."
-
-#: ardour_ui.cc:1019
-msgid "Do not show this window again"
-msgstr "Diese Meldung nicht erneut anzeigen"
-
-#: ardour_ui.cc:1063
-msgid "Don't quit"
-msgstr "Abbrechen"
-
-#: ardour_ui.cc:1064
-msgid "Just quit"
-msgstr "Beenden ohne zu speichern"
-
-#: ardour_ui.cc:1065 ardour_ui.cc:4734
-msgid "Save and quit"
-msgstr "Speichern und beenden"
-
-#: ardour_ui.cc:1075
-msgid ""
-"%1 was unable to save your session.\n"
-"\n"
-"If you still wish to quit, please use the\n"
-"\n"
-"\"Just quit\" option."
-msgstr ""
-"%1 konnte das Projekt nicht speichern.\n"
-"
\n"
-"Wenn Sie trotzdem beenden wollen, wählen Sie bitte\n"
-"\n"
-"\"Trotzdem beenden\"."
-
-#: ardour_ui.cc:1125
-msgid "Unsaved Session"
-msgstr "Nicht gespeichertes Projekt"
-
-#: ardour_ui.cc:1146
-msgid ""
-"The session \"%1\"\n"
-"has not been saved.\n"
-"\n"
-"Any changes made this time\n"
-"will be lost unless you save it.\n"
-"\n"
-"What do you want to do?"
-msgstr ""
-"Das Projekt \"%1\"\n"
-"wurde nicht gespeichert.\n"
-"\n"
-"Alle Änderungen werden verloren\n"
-"gehen, wenn Sie es nicht speichern.\n"
-"\n"
-"Wie wollen Sie vorgehen?"
-
-#: ardour_ui.cc:1149
-msgid ""
-"The snapshot \"%1\"\n"
-"has not been saved.\n"
-"\n"
-"Any changes made this time\n"
-"will be lost unless you save it.\n"
-"\n"
-"What do you want to do?"
-msgstr ""
-"Der Schnappschuss \"%1\"\n"
-"wurde nicht gespeichert.\n"
-"\n"
-"Alle Änderungen werden verloren\n"
-"gehen, wenn Sie ihn nicht speichern.\n"
-"\n"
-"Wie wollen Sie vorgehen?"
-
-#: ardour_ui.cc:1163
-msgid "Prompter"
-msgstr "Frage"
-
-#: ardour_ui.cc:1275 ardour_ui.cc:1283
-msgid "Audio: <span foreground=\"red\">none</span>"
-msgstr "Audio: <span foreground=\"red\">Kein</span>"
-
-#: ardour_ui.cc:1287
-#, c-format
-msgid "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
-msgstr "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
-
-#: ardour_ui.cc:1291
-#, c-format
-msgid "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
-msgstr "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
-
-#: ardour_ui.cc:1309 export_video_dialog.cc:80
-msgid "File:"
-msgstr "Datei:"
-
-#: ardour_ui.cc:1313
-msgid "BWF"
-msgstr "BWF"
-
-#: ardour_ui.cc:1316
-msgid "WAV"
-msgstr "WAV"
-
-#: ardour_ui.cc:1319
-msgid "WAV64"
-msgstr "WAV64"
-
-#: ardour_ui.cc:1322 session_option_editor.cc:185
-msgid "CAF"
-msgstr "CAF"
-
-#: ardour_ui.cc:1325
-msgid "AIFF"
-msgstr "AIFF"
-
-#: ardour_ui.cc:1328
-msgid "iXML"
-msgstr "iXML"
-
-#: ardour_ui.cc:1331
-msgid "RF64"
-msgstr "RF64"
-
-#: ardour_ui.cc:1339
-msgid "32-float"
-msgstr "32-float"
-
-#: ardour_ui.cc:1342
-msgid "24-int"
-msgstr "24-int"
-
-#: ardour_ui.cc:1345
-msgid "16-int"
-msgstr "16-int"
-
-#: ardour_ui.cc:1364
-#, c-format
-msgid "DSP: <span foreground=\"%s\">%5.1f%%</span>"
-msgstr "DSP: <span foreground=\"%s\">%5.1f%%</span>"
-
-#: ardour_ui.cc:1383
-#, c-format
-msgid ""
-"Buffers: <span foreground=\"green\">p:</span><span foreground=\"%s\">"
-"%<PRIu32>%%</span> <span foreground=\"green\">c:</span><span foreground=\"%s"
-"\">%<PRIu32>%%</span>"
-msgstr ""
-"Puffer: <span foreground=\"green\">p:</span><span foreground=\"%s\">%<PRIu32>"
-"%%</span> <span foreground=\"green\">c:</span><span foreground=\"%s\">"
-"%<PRIu32>%%</span>"
-
-#: ardour_ui.cc:1424
-msgid "Disk: <span foreground=\"green\">Unknown</span>"
-msgstr "Disk: <span foreground=\"green\">Unbekannt</span>"
-
-#: ardour_ui.cc:1426
-msgid "Disk: <span foreground=\"green\">24hrs+</span>"
-msgstr "Disk: <span foreground=\"green\">24h+</span>"
-
-#: ardour_ui.cc:1444
-msgid "Disk: <span foreground=\"green\">>24 hrs</span>"
-msgstr "Disk: <span foreground=\"green\">>24 h</span>"
-
-#: ardour_ui.cc:1455
-#, c-format
-msgid "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"
-msgstr "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"
-
-#: ardour_ui.cc:1481
-#, c-format
-msgid "Timecode|TC: <span foreground=\"%s\">%s</span>"
-msgstr "TC: <span foreground=\"%s\">%s</span>"
-
-#: ardour_ui.cc:1602 ardour_ui.cc:1611 session_dialog.cc:318
-#: session_dialog.cc:323
-msgid "Recent Sessions"
-msgstr "Zuletzt verwendete Projekte"
-
-#: ardour_ui.cc:1690
-msgid ""
-"%1 is not connected to any audio backend.\n"
-"You cannot open or close sessions in this condition"
-msgstr ""
-"%1 ist derzeit mit keinem Audiobackend verbunden.\n"
-"Daher können keine Projekte geöffnet oder geschlossen werden."
-
-#: ardour_ui.cc:1714
-msgid "Open Session"
-msgstr "Projekt öffnen"
-
-#: ardour_ui.cc:1739 session_dialog.cc:349 session_import_dialog.cc:170
-#: session_metadata_dialog.cc:858
-msgid "%1 sessions"
-msgstr "%1 Projekte"
-
-#: ardour_ui.cc:1776
-msgid "You cannot add a track without a session already loaded."
-msgstr ""
-"Sie können erst Spuren oder Busse hinzufügen, wenn ein Projekt geladen wurde."
-
-#: ardour_ui.cc:1784
-msgid "could not create %1 new mixed track"
-msgid_plural "could not create %1 new mixed tracks"
-msgstr[0] "konnte %1 neue Audio+MIDI-Spur nicht erstellen"
-msgstr[1] "konnte %1 neue Audio+MIDI-Spuren nicht erstellen"
-
-#: ardour_ui.cc:1790 ardour_ui.cc:1851
-msgid ""
-"There are insufficient ports available\n"
-"to create a new track or bus.\n"
-"You should save %1, exit and\n"
-"restart with more ports."
-msgstr ""
-"Es sind nicht genügend Ports verfügbar,\n"
-"um neue Spuren oder Busse zu erzeugen.\n"
-"Sie sollten %1 sichern, beenden und\n"
-" mit mehr Ports neustarten."
-
-#: ardour_ui.cc:1825
-msgid "You cannot add a track or bus without a session already loaded."
-msgstr ""
-"Sie können erst Spuren oder Busse hinzufügen, wenn ein Projekt geladen wurde."
-
-#: ardour_ui.cc:1834
-msgid "could not create %1 new audio track"
-msgid_plural "could not create %1 new audio tracks"
-msgstr[0] "konnte %1 neue Audiospur nicht erstellen."
-msgstr[1] "konnte %1 neue Audiospuren nicht erstellen."
-
-#: ardour_ui.cc:1843
-msgid "could not create %1 new audio bus"
-msgid_plural "could not create %1 new audio busses"
-msgstr[0] "konnte %1 neuen Audiobus nicht erstellen"
-msgstr[1] "konnte %1 neue Audiobusse nicht erstellen"
-
-#: ardour_ui.cc:1996
-msgid ""
-"Please create one or more tracks before trying to record.\n"
-"You can do this with the \"Add Track or Bus\" option in the Session menu."
-msgstr ""
-"Bitte fügen Sie, bevor Sie aufnehmen, mindestens \n"
-"eine oder mehrere Spur hinzu. Die geht über \"Spur/Bus hinzufügen\"\n"
-"im Menüpunkt Projekt."
-
-#: ardour_ui.cc:2382
-msgid "Save as..."
-msgstr "Speichern unter..."
-
-#: ardour_ui.cc:2383 ardour_ui.cc:2462
-msgid "New session name"
-msgstr "Neuer Projektname"
-
-#: ardour_ui.cc:2385
-msgid "Take Snapshot"
-msgstr "Schnappschuss machen"
-
-#: ardour_ui.cc:2386
-msgid "Name of new snapshot"
-msgstr "Name für neuen Schnappschuss"
-
-#: ardour_ui.cc:2411
-msgid ""
-"To ensure compatibility with various systems\n"
-"snapshot names may not contain a '%1' character"
-msgstr ""
-"Um die Kompatibilität mit verschiedenen Systemen sicher zu stellen,\n"
-"dürfen Namen von Schnappschüssen kein '%1'-Zeichen enthalten"
-
-#: ardour_ui.cc:2423
-msgid "Confirm Snapshot Overwrite"
-msgstr "Überschreiben des Schnappschusses bestätigen"
-
-#: ardour_ui.cc:2424
-msgid "A snapshot already exists with that name.  Do you want to overwrite it?"
-msgstr ""
-"Ein Schnappschuss mit diesem Namen existiert bereits. Wollen Sie ihn "
-"überschreiben?"
-
-#: ardour_ui.cc:2427 utils_videotl.cc:74
-msgid "Overwrite"
-msgstr "Überschreiben"
-
-#: ardour_ui.cc:2461
-msgid "Rename Session"
-msgstr "Projekt umbenennen"
-
-#: ardour_ui.cc:2476 ardour_ui.cc:2890 ardour_ui.cc:2928
-msgid ""
-"To ensure compatibility with various systems\n"
-"session names may not contain a '%1' character"
-msgstr ""
-"Um die Kompatibilität mit verschiedenen Systemen sicher zu stellen,\n"
-"dürfen Projektnamen kein '%1'-Zeichen enthalten"
-
-#: ardour_ui.cc:2484
-msgid ""
-"That name is already in use by another directory/folder. Please try again."
-msgstr ""
-"Dieser Name wird schon von einem anderen Verzeichnis/Ordner benutzt. Bitte "
-"versuchen Sie einen anderen Namen."
-
-#: ardour_ui.cc:2493
-msgid ""
-"Renaming this session failed.\n"
-"Things could be seriously messed up at this point"
-msgstr ""
-"Das Umbenennen des Projekts ist fehlgeschlagen.\n"
-"Dies könnte auf schwerwiegende Probleme hinweisen."
-
-#: ardour_ui.cc:2608
-msgid "Save Template"
-msgstr "Als Vorlage Speichern"
-
-#: ardour_ui.cc:2609
-msgid "Name for template:"
-msgstr "Name für Vorlage"
-
-#: ardour_ui.cc:2610
-msgid "-template"
-msgstr "-Vorlage"
-
-#: ardour_ui.cc:2647
-msgid ""
-"This session\n"
-"%1\n"
-"already exists. Do you want to open it?"
-msgstr ""
-"Dieses Projekt\n"
-"%1\n"
-"existiert bereits. Wollen Sie es öffnen?"
-
-#: ardour_ui.cc:2657
-msgid "Open Existing Session"
-msgstr "Vorhandenes Projekt öffnen"
-
-#: ardour_ui.cc:2918
-msgid "There is no existing session at \"%1\""
-msgstr "Es gibt kein Projekt in: \"%1\""
-
-#: ardour_ui.cc:3010
-msgid "Please wait while %1 loads your session"
-msgstr "Bitte warten Sie, während %1 das Projekt lädt"
-
-#: ardour_ui.cc:3025
-msgid "Port Registration Error"
-msgstr "Fehler bei der Registrierung von Ports"
-
-#: ardour_ui.cc:3026
-msgid "Click the Close button to try again."
-msgstr "Klicken Sie auf Schließen, um es erneut zu versuchen."
-
-#: ardour_ui.cc:3047
-msgid "Session \"%1 (snapshot %2)\" did not load successfully"
-msgstr "Projekt  \"%1 (Schnappschuss %2)\" konnte nicht geladen werden."
-
-#: ardour_ui.cc:3053
-msgid "Loading Error"
-msgstr "Fehler beim Laden"
-
-#: ardour_ui.cc:3072
-msgid ""
-"This session has been opened in read-only mode.\n"
-"\n"
-"You will not be able to record or save."
-msgstr ""
-"Dieses Projekt wurde im Nur-Lesen Modus geöffnet.\n"
-"\n"
-"Aufnehmen oder Speichern wird nicht möglich sein."
-
-#: ardour_ui.cc:3077
-msgid "Read-only Session"
-msgstr "Schreibgeschütztes Projekt"
-
-#: ardour_ui.cc:3143
-msgid "Could not create session in \"%1\""
-msgstr "Konnte kein Projekt in \"%1\" anlegen"
-
-#: ardour_ui.cc:3292
-msgid "No files were ready for clean-up"
-msgstr "Keine Audiodateien zum Aufräumen vorhanden"
-
-#: ardour_ui.cc:3296 ardour_ui.cc:3306 ardour_ui.cc:3439 ardour_ui.cc:3446
-#: ardour_ui_ed.cc:103
-msgid "Clean-up"
-msgstr "Aufräumen"
-
-#: ardour_ui.cc:3297
-msgid ""
-"If this seems suprising, \n"
-"check for any existing snapshots.\n"
-"These may still include regions that\n"
-"require some unused files to continue to exist."
-msgstr ""
-"Falls trotzdem nicht benötigte Dateien\n"
-"existieren, welche hier nicht erkannt werden,\n"
-"sind sie wahrscheinlich noch in einem\n"
-"älteren Schnappschuss als Region eingebunden."
-
-#: ardour_ui.cc:3356
-msgid "kilo"
-msgstr "kilo"
-
-#: ardour_ui.cc:3359
-msgid "mega"
-msgstr "mega"
-
-#: ardour_ui.cc:3362
-msgid "giga"
-msgstr "giga"
-
-#: ardour_ui.cc:3367
-msgid ""
-"The following file was deleted from %2,\n"
-"releasing %3 %4bytes of disk space"
-msgid_plural ""
-"The following %1 files were deleted from %2,\n"
-"releasing %3 %4bytes of disk space"
-msgstr[0] ""
-"Die folgende Datei wurde von %2\n"
-"gelöscht und gab %3 %4bytes Speicherplatz frei"
-msgstr[1] ""
-"Die folgenden %1 Dateien wurden von %2\n"
-"gelöscht und gaben %3 %4bytes Speicherplatz frei"
-
-#: ardour_ui.cc:3374
-msgid ""
-"The following file was not in use and \n"
-"has been moved to: %2\n"
-"\n"
-"After a restart of %5\n"
-"\n"
-"<span face=\"mono\">Session -> Clean-up -> Flush Wastebasket</span>\n"
-"\n"
-"will release an additional %3 %4bytes of disk space.\n"
-msgid_plural ""
-"The following %1 files were not in use and \n"
-"have been moved to: %2\n"
-"\n"
-"After a restart of %5\n"
-"\n"
-"<span face=\"mono\">Session -> Clean-up -> Flush Wastebasket</span>\n"
-"\n"
-"will release an additional %3 %4bytes of disk space.\n"
-msgstr[0] ""
-"Die folgende Datei wurde nicht benutzt\n"
-"und wurde nach %2 verschoben.\n"
-"\n"
-"Nach einem Neustart von %5 kann über\n"
-"\n"
-"<span face=\"mono\">Projekt -> Aufräumen -> Mülleimer leeren</span>\n"
-"\n"
-"%3 %4bytes Speicherplatz freigegeben werden.\n"
-msgstr[1] ""
-"Die folgenden %1 Dateien waren unbenutzt\n"
-"und wurden nach %2 verschoben.\n"
-"\n"
-"Nach einem Neustart von %5 kann über\n"
-"\n"
-"<span face=\"mono\">Projekt -> Aufräumen -> Mülleimer leeren</span>\n"
-"\n"
-"%3 %4bytes Speicherplatz freigegeben werden.\n"
-
-#: ardour_ui.cc:3434
-msgid "Are you sure you want to clean-up?"
-msgstr "Wollen Sie wirklich aufräumen?"
-
-#: ardour_ui.cc:3441
-msgid ""
-"Clean-up is a destructive operation.\n"
-"ALL undo/redo information will be lost if you clean-up.\n"
-"Clean-up will move all unused files to a \"dead\" location."
-msgstr ""
-"Das Aufräumen ist eine destruktive Operation.\n"
-"SÄMTLICHE Wiederherstellungsinformationen gehen verloren, wenn Sie "
-"aufräumen.\n"
-"Nach dem Aufräumen werden alle nicht benötigten Audiodateien in den \"dead "
-"sounds\" Ordner verschoben."
-
-#: ardour_ui.cc:3449
-msgid "CleanupDialog"
-msgstr "Aufräumdialog"
-
-#: ardour_ui.cc:3479
-msgid "Cleaned Files"
-msgstr "Aufgeräumte Dateien"
-
-#: ardour_ui.cc:3496
-msgid "deleted file"
-msgstr "gelöschte Datei"
-
-#: ardour_ui.cc:3641
-msgid "Video-Server was not launched by %1. The request to stop it is ignored."
-msgstr ""
-"Der Video-Server wurde nicht von %1 gestartet. Die Aufforderung ihn zu "
-"beenden wird ignoriert."
-
-#: ardour_ui.cc:3645
-msgid "Stop Video-Server"
-msgstr "Video-Server anhalten"
-
-#: ardour_ui.cc:3646
-msgid "Do you really want to stop the Video Server?"
-msgstr "Wollen Sie den Video-Server wirklich anhalten?"
-
-#: ardour_ui.cc:3649
-msgid "Yes, Stop It"
-msgstr "Ja, anhalten."
-
-#: ardour_ui.cc:3675
-msgid "The Video Server is already started."
-msgstr "Der Video-Server läuft bereits"
-
-#: ardour_ui.cc:3677
-msgid ""
-"An external Video Server is configured and can be reached. Not starting a "
-"new instance."
-msgstr ""
-"Ein externer Video-Server wurde konfiguriert, ist aber nicht erreichbar. Es "
-"wird keine neue Instanz gestartet."
-
-#: ardour_ui.cc:3685 ardour_ui.cc:3790
-msgid ""
-"Could not connect to the Video Server. Start it or configure its access URL "
-"in Preferences."
-msgstr ""
-"Es konnte keine Verbindung zum Video-Server hergestellt werden.Sie müssen "
-"ihn vorher starten oder die URL für den Zugriff in den Einstellungen "
-"anpassen."
-
-#: ardour_ui.cc:3715
-msgid "Specified docroot is not an existing directory."
-msgstr "Das eingestellte Dokumentenverzeichnis existiert nicht."
-
-#: ardour_ui.cc:3721 ardour_ui.cc:3727
-msgid "Given Video Server is not an executable file."
-msgstr "Der eingestellte Video-Server ist keine ausführbare Datei."
-
-#: ardour_ui.cc:3761
-msgid "Cannot launch the video-server"
-msgstr "Kann den Videoserver nicht starten "
-
-#: ardour_ui.cc:3771
-msgid "Video-server was started but does not respond to requests..."
-msgstr "Viideoserver wurde gestartet, reagiert aber nicht auf Anfragen..."
-
-#: ardour_ui.cc:3816 editor_audio_import.cc:641
-msgid "could not open %1"
-msgstr "Konnte %1 nicht öffnen"
-
-#: ardour_ui.cc:3820
-msgid "no video-file selected"
-msgstr "Es wurde keine Videodatei ausgewählt."
-
-#: ardour_ui.cc:4018
-msgid "Recording was stopped because your system could not keep up."
-msgstr ""
-"Die Aufnahme wurde gestoppt, da Ihr System nicht schnell genug folgen konnte."
-
-#: ardour_ui.cc:4047
-msgid ""
-"The disk system on your computer\n"
-"was not able to keep up with %1.\n"
-"\n"
-"Specifically, it failed to write data to disk\n"
-"quickly enough to keep up with recording.\n"
-msgstr ""
-"Ihre Festplatte war nicht schnell genug,\n"
-"um %1 zu folgen.\n"
-"\n"
-"Die Daten konnten nicht schnell genug geschrieben\n"
-"werden, um die Aufnahme fortzuführen.\n"
-
-#: ardour_ui.cc:4117
-msgid "Scanning for plugins"
-msgstr "Suche nach Plugins"
-
-#: ardour_ui.cc:4119
-msgid "Cancel plugin scan"
-msgstr "Plugin-Suche abbrechen"
-
-#: ardour_ui.cc:4128
-msgid "Stop Timeout"
-msgstr "Stopp-Timeout"
-
-#: ardour_ui.cc:4135
-msgid "Scan Timeout"
-msgstr "Such-Timeout"
-
-#: ardour_ui.cc:4178
-msgid ""
-"The disk system on your computer\n"
-"was not able to keep up with %1.\n"
-"\n"
-"Specifically, it failed to read data from disk\n"
-"quickly enough to keep up with playback.\n"
-msgstr ""
-"Ihre Festplatte war nicht schnell genug,\n"
-"um %1 zu folgen.\n"
-"\n"
-"Die Daten konnten nicht schnell genug gelesen\n"
-"werden, um die Wiedergabe aufrechtzuerhalten.\n"
-
-#: ardour_ui.cc:4218
-msgid "Crash Recovery"
-msgstr "Absturz-Wiederherstellung"
-
-#: ardour_ui.cc:4219
-msgid ""
-"This session appears to have been in the\n"
-"middle of recording when %1 or\n"
-"the computer was shutdown.\n"
-"\n"
-"%1 can recover any captured audio for\n"
-"you, or it can ignore it. Please decide\n"
-"what you would like to do.\n"
-msgstr ""
-"Es scheint, dass dieses Projekt während\n"
-"einer Aufnahme abgebrochen oder\n"
-"geschlossen wurde.\n"
-"\n"
-"%1 kann die aufgenommenen Audiodaten\n"
-"für Sie wiederherstellen oder sie verwerfen.\n"
-"Bitte entscheiden Sie, wie Sie vorgehen möchten.\n"
-
-#: ardour_ui.cc:4231
-msgid "Ignore crash data"
-msgstr "Daten verwerfen"
-
-#: ardour_ui.cc:4232
-msgid "Recover from crash"
-msgstr "Daten wiederherstellen"
-
-#: ardour_ui.cc:4252
-msgid "Sample Rate Mismatch"
-msgstr "Samplerate passt nicht"
-
-#: ardour_ui.cc:4253
-msgid ""
-"This session was created with a sample rate of %1 Hz, but\n"
-"%2 is currently running at %3 Hz.  If you load this session,\n"
-"audio may be played at the wrong sample rate.\n"
-msgstr ""
-"Dieses Projekt wurde mit einer Samplerate von %1 Hz erstellt.\n"
-"\n"
-"%2 läuft derzeit mit %3 Hz. Wenn Sie dieses Projekt laden, \n"
-"wird Ihr Audiomaterial mit der falschen Samplerate abgespielt.\n"
-
-#: ardour_ui.cc:4262
-msgid "Do not load session"
-msgstr "Projekt nicht laden"
-
-#: ardour_ui.cc:4263
-msgid "Load session anyway"
-msgstr "Projekt trotzdem laden"
-
-#: ardour_ui.cc:4290
-msgid "Could not disconnect from Audio/MIDI engine"
-msgstr "Konnte Verbindung mit der Audio/MIDI Engine nicht trennen"
-
-#: ardour_ui.cc:4307 ardour_ui.cc:4310
-msgid "Could not reconnect to the Audio/MIDI engine"
-msgstr "Konnte nicht zur Audio/MIDI Engine wiederverbinden"
-
-#: ardour_ui.cc:4594
-msgid ""
-"%4This is a session from an older version of %3%5\n"
-"\n"
-"%3 has copied the old session file\n"
-"\n"
-"%6%1%7\n"
-"\n"
-"to\n"
-"\n"
-"%6%2%7\n"
-"\n"
-"From now on, use the -2000 version with older versions of %3"
-msgstr ""
-"%4Dies ist ein Projekt, das mit einer älteren Version von %3 erstellt wurde"
-"%5\n"
-"\n"
-"%3 hat die alte Projektdatei\n"
-"\n"
-"%6%1%7\n"
-"\n"
-"nach\n"
-"\n"
-"%6%2%7 kopiert.\n"
-"\n"
-"Benutzen Sie von nun an die -2000 Version mit älteren Versionen von %3"
-
-#: ardour_ui.cc:4703
-msgid "This is a free/demo copy of %1. It has just switched to silent mode."
-msgstr ""
-"Dies ist eine freie Demoversion von %1. Sie hat sich gerade stummgeschaltet."
-
-#: ardour_ui.cc:4709
-msgid "%1 is now silent"
-msgstr "%1 ist nun stumm"
-
-#: ardour_ui.cc:4711
-msgid ""
-"Please consider paying for a copy of %1 - you can pay whatever you want."
-msgstr ""
-"Bitte ziehen Sie in Erwägung, für eine Kopie von %1 einen Geldbetrag - in "
-"beliebiger Höhe - zu zahlen."
-
-#: ardour_ui.cc:4712
-msgid "Better yet become a subscriber - subscriptions start at US$1 per month."
-msgstr ""
-"Besser noch, werden Sie ein Abonnent - Abonnements beginnen bei US$1 pro "
-"Monat."
-
-#: ardour_ui.cc:4713
-msgid "Pay for a copy (via the web)"
-msgstr "Für eine Kopie zahlen (über das WWW)"
-
-#: ardour_ui.cc:4714
-msgid "Become a subscriber (via the web)"
-msgstr "Abonnent werden (über das Web)"
-
-#: ardour_ui.cc:4733
-msgid "Remain silent"
-msgstr "Stumm bleiben"
-
-#: ardour_ui.cc:4735
-msgid "Give me more time"
-msgstr "Ich möchte mehr Zeit haben"
-
-#: ardour_ui2.cc:73
-msgid "UI: cannot setup editor"
-msgstr "Der Editor konnte nicht initialisiert werden."
-
-#: ardour_ui2.cc:78
-msgid "UI: cannot setup mixer"
-msgstr "Der Mixer konnte nicht initialisiert werden."
-
-#: ardour_ui2.cc:83
-msgid "UI: cannot setup meterbridge"
-msgstr "UI: konnte Meterbridge nicht einrichten."
-
-#: ardour_ui2.cc:128
-msgid "Play from playhead"
-msgstr "Wiedergabe ab Positionszeiger"
-
-#: ardour_ui2.cc:129
-msgid "Stop playback"
-msgstr "Wiedergabe anhalten"
-
-#: ardour_ui2.cc:130
-msgid "Toggle record"
-msgstr "Aufnahme aktivieren"
-
-#: ardour_ui2.cc:131
-msgid "Play range/selection"
-msgstr "Bereich/Auswahl wiedergeben"
-
-#: ardour_ui2.cc:132
-msgid "Go to start of session"
-msgstr "Zum Anfang des Projekts springen"
-
-#: ardour_ui2.cc:133
-msgid "Go to end of session"
-msgstr "Zum Ende des Projekts springen"
-
-#: ardour_ui2.cc:134
-msgid "Play loop range"
-msgstr "Schleife wiedergeben"
-
-#: ardour_ui2.cc:135
-msgid ""
-"MIDI Panic\n"
-"Send note off and reset controller messages on all MIDI channels"
-msgstr ""
-"MIDI Panic\n"
-"Schalte auf allen Midikanälen die Notensignale aus und setzte alle MIDI-"
-"Controller zurück"
-
-#: ardour_ui2.cc:136
-msgid "Return to last playback start when stopped"
-msgstr "Bei Stopp zum letzten Wiedergabepunkt springen"
-
-#: ardour_ui2.cc:137
-msgid "Playhead follows Range Selections and Edits"
-msgstr "Positionszeiger folgt Auswahl und Editierungen"
-
-#: ardour_ui2.cc:138
-msgid "Be sensible about input monitoring"
-msgstr "Automatisches Input Monitoring aktivieren"
-
-#: ardour_ui2.cc:139
-msgid "Enable/Disable audio click"
-msgstr "Aktiviert/Deaktiviert Klick"
-
-#: ardour_ui2.cc:140 monitor_section.cc:111
-msgid ""
-"When active, something is soloed.\n"
-"Click to de-solo everything"
-msgstr ""
-"Wenn aktiv, ist etwas auf Solo geschalten.\n"
-"Klick schaltet Solo überall aus."
-
-#: ardour_ui2.cc:141
-msgid ""
-"When active, auditioning is taking place\n"
-"Click to stop the audition"
-msgstr ""
-"Wird beim Vorhören aktiv.\n"
-"Klicken stoppt das Vorhören."
-
-#: ardour_ui2.cc:142
-msgid "When active, there is a feedback loop."
-msgstr "Wenn aktiv, gibt es eine Rückkopplungsschleife."
-
-#: ardour_ui2.cc:143
-msgid ""
-"<b>Primary Clock</b> right-click to set display mode. Click to edit, click"
-"+drag a digit or mouse-over+scroll wheel to modify.\n"
-"Text edits: right-to-left overwrite <tt>Esc</tt>: cancel; <tt>Enter</tt>: "
-"confirm; postfix the edit with '+' or '-' to enter delta times.\n"
-msgstr ""
-"<b>Primäre Uhr</b> Rechtsklick um Anzeigemodus zu setzen. Klick zum "
-"Bearbeiten, Klick+Mausbewegung auf eine Ziffer oder Maus-Über+Scrollrad zum "
-"Ändern.\n"
-"Text editieren: überschreibt von rechts nach links <tt>Esc</tt>: Abbruch; "
-"<tt>Eingabe</tt>: Bestätige; hänge '+' or '-' an, um Deltazeiten "
-"einzugeben.\n"
-
-#: ardour_ui2.cc:144
-msgid ""
-"<b>Secondary Clock</b> right-click to set display mode. Click to edit, click"
-"+drag a digit or mouse-over+scroll wheel to modify.\n"
-"Text edits: right-to-left overwrite <tt>Esc</tt>: cancel; <tt>Enter</tt>: "
-"confirm; postfix the edit with '+' or '-' to enter delta times.\n"
-msgstr ""
-"<b>Sekundäre Uhr</b> Rechtsklick um Anzeigemodus zu setzen. Klick zum "
-"Bearbeiten, Klick+Mausbewegung auf eine Ziffer oder Maus-Über+Scrollrad zum "
-"Ändern.\n"
-"Text editieren: überschreibt von rechts nach links <tt>Esc</tt>: Abbruch; "
-"<tt>Eingabe</tt>: Bestätige; hänge '+' or '-' an, um Deltazeiten "
-"einzugeben.\n"
-
-#: ardour_ui2.cc:145
-msgid "Reset All Peak Indicators"
-msgstr "Alle Spitzenwertanzeigen zurücksetzen"
-
-#: ardour_ui2.cc:146
-msgid "Show Error Log and acknowledge warnings"
-msgstr "Zeige Fehlermeldungen und bestätige Warnungen"
-
-#: ardour_ui2.cc:179
-msgid "[ERROR]: "
-msgstr "[FEHLER]:"
-
-#: ardour_ui2.cc:182
-msgid "[WARNING]: "
-msgstr "[WARNUNG]:"
-
-#: ardour_ui2.cc:185
-msgid "[INFO]: "
-msgstr "[INFO]: "
-
-#: ardour_ui2.cc:253 ardour_ui_ed.cc:403
-msgid "Auto Return"
-msgstr "Auto Return"
-
-#: ardour_ui2.cc:255 ardour_ui_ed.cc:406
-msgid "Follow Edits"
-msgstr "Folge Bearbeitungen"
-
-#: ardour_ui2.cc:728 rc_option_editor.cc:2300
-msgid "GUI"
-msgstr "GUI"
-
-#: ardour_ui2.cc:745 rc_option_editor.cc:1309 rc_option_editor.cc:1327
-#: rc_option_editor.cc:1330 rc_option_editor.cc:1332 rc_option_editor.cc:1334
-#: rc_option_editor.cc:1342 rc_option_editor.cc:1350 rc_option_editor.cc:1352
-#: rc_option_editor.cc:1360 rc_option_editor.cc:1367 rc_option_editor.cc:1376
-#: rc_option_editor.cc:1378 rc_option_editor.cc:1380 rc_option_editor.cc:1388
-#: rc_option_editor.cc:1390 rc_option_editor.cc:1399
-#: session_option_editor.cc:321 session_option_editor.cc:323
-#: session_option_editor.cc:344 session_option_editor.cc:346
-#: session_option_editor.cc:348 session_option_editor.cc:355
-#: session_option_editor.cc:362 session_option_editor.cc:366
-msgid "Misc"
-msgstr "Allgemein"
-
-#: ardour_ui_dependents.cc:76
-msgid "Setup Editor"
-msgstr "Editor laden"
-
-#: ardour_ui_dependents.cc:78
-msgid "Setup Mixer"
-msgstr "Mixer laden"
-
-#: ardour_ui_dependents.cc:84
-msgid "Reload Session History"
-msgstr "Projekt-Aktionsverlauf laden"
-
-#: ardour_ui_dialogs.cc:250
-msgid "Don't close"
-msgstr "Abbrechen"
-
-#: ardour_ui_dialogs.cc:251
-msgid "Just close"
-msgstr "Ohne speichern schließen"
-
-#: ardour_ui_dialogs.cc:252
-msgid "Save and close"
-msgstr "Speichern und schließen"
-
-#: ardour_ui_dialogs.cc:362
-msgid "This screen is not tall enough to display the mixer window"
-msgstr ""
-"Dieser Bildschirm ist nicht hoch genug, um das Mixerfenster darzustellen"
-
-#: ardour_ui_ed.cc:102
-msgid "Session"
-msgstr "Projekt"
-
-#: ardour_ui_ed.cc:105 editor_actions.cc:138 editor_regions.cc:116
-#: port_group.cc:458 session_option_editor.cc:82 session_option_editor.cc:89
-msgid "Sync"
-msgstr "Sync"
-
-#: ardour_ui_ed.cc:106
-msgid "Options"
-msgstr "Optionen"
-
-#: ardour_ui_ed.cc:107
-msgid "Window"
-msgstr "Fenster"
-
-#: ardour_ui_ed.cc:108
-msgid "Help"
-msgstr "Hilfe"
-
-#: ardour_ui_ed.cc:109
-msgid "Misc. Shortcuts"
-msgstr "Verschiedenes"
-
-#: ardour_ui_ed.cc:110
-msgid "Audio File Format"
-msgstr "Audio-Dateiformat"
-
-#: ardour_ui_ed.cc:111
-msgid "File Type"
-msgstr "Dateiformat"
-
-#: ardour_ui_ed.cc:112 export_format_dialog.cc:67
-msgid "Sample Format"
-msgstr "Sampleformat"
-
-#: ardour_ui_ed.cc:113 rc_option_editor.cc:2245 rc_option_editor.cc:2257
-msgid "Control Surfaces"
-msgstr "Eingabegeräte / Controller"
-
-#: ardour_ui_ed.cc:114 rc_option_editor.cc:1921 rc_option_editor.cc:2264
-msgid "Plugins"
-msgstr "Plugins"
-
-#: ardour_ui_ed.cc:115 rc_option_editor.cc:2351
-msgid "Metering"
-msgstr "Pegelanzeige"
-
-#: ardour_ui_ed.cc:116
-msgid "Fall Off Rate"
-msgstr "Abfall der Pegelanzeige"
-
-#: ardour_ui_ed.cc:117
-msgid "Hold Time"
-msgstr "Pegelanzeige halten"
-
-#: ardour_ui_ed.cc:118
-msgid "Denormal Handling"
-msgstr "Umgang mit Denormals"
-
-#: ardour_ui_ed.cc:122 route_time_axis.cc:1673
-msgid "New..."
-msgstr "Neu..."
-
-#: ardour_ui_ed.cc:124
-msgid "Open..."
-msgstr "Öffnen..."
-
-#: ardour_ui_ed.cc:125
-msgid "Recent..."
-msgstr "Zuletzt verwendet..."
-
-#: ardour_ui_ed.cc:126 panner_editor.cc:29 playlist_selector.cc:64
-msgid "Close"
-msgstr "Schließen"
-
-#: ardour_ui_ed.cc:129
-msgid "Add Track or Bus..."
-msgstr "Spur/Bus hinzufügen..."
-
-#: ardour_ui_ed.cc:134
-msgid "Open Video"
-msgstr "Video öffnen"
-
-#: ardour_ui_ed.cc:137
-msgid "Remove Video"
-msgstr "Video entfernen"
-
-#: ardour_ui_ed.cc:140
-msgid "Export To Video File"
-msgstr "Exportiere Videodatei"
-
-#: ardour_ui_ed.cc:144
-msgid "Snapshot..."
-msgstr "Schnappschuss..."
-
-#: ardour_ui_ed.cc:148
-msgid "Save As..."
-msgstr "Speichern unter..."
-
-#: ardour_ui_ed.cc:152 editor_actions.cc:1769 editor_markers.cc:903
-#: editor_snapshots.cc:124 mixer_strip.cc:1521 route_time_axis.cc:1669
-msgid "Rename..."
-msgstr "Umbenennen..."
-
-#: ardour_ui_ed.cc:156
-msgid "Save Template..."
-msgstr "Als Vorlage Speichern..."
-
-#: ardour_ui_ed.cc:159
-msgid "Metadata"
-msgstr "Metadaten"
-
-#: ardour_ui_ed.cc:162
-msgid "Edit Metadata..."
-msgstr "Metadaten bearbeiten..."
-
-#: ardour_ui_ed.cc:165
-msgid "Import Metadata..."
-msgstr "Metadaten importieren..."
-
-#: ardour_ui_ed.cc:168
-msgid "Export To Audio File(s)..."
-msgstr "Exportiere Audiodatei(en)..."
-
-#: ardour_ui_ed.cc:171
-msgid "Stem export..."
-msgstr "Stems exportieren..."
-
-#: ardour_ui_ed.cc:174 editor_export_audio.cc:65
-#: export_channel_selector.cc:182 export_channel_selector.cc:564
-#: export_dialog.cc:129 export_video_dialog.cc:84
-msgid "Export"
-msgstr "Exportieren"
-
-#: ardour_ui_ed.cc:177
-msgid "Clean-up Unused Sources..."
-msgstr "Nicht benutzte Dateien entfernen..."
-
-#: ardour_ui_ed.cc:181
-msgid "Flush Wastebasket"
-msgstr "Müll leeren"
-
-#: ardour_ui_ed.cc:188
-msgid "Quit"
-msgstr "Beenden"
-
-#: ardour_ui_ed.cc:192
-msgid "Maximise Editor Space"
-msgstr "Editor maximieren"
-
-#: ardour_ui_ed.cc:193
-msgid "Maximise Mixer Space"
-msgstr "Mixerfenster maximieren"
-
-#: ardour_ui_ed.cc:194
-msgid "Show Toolbars"
-msgstr "Zeige Werkzeugleisten"
-
-#: ardour_ui_ed.cc:198
-msgid "Show more UI preferences"
-msgstr "Mehr UI-Einstellungen anzeigen"
-
-#: ardour_ui_ed.cc:200 mixer_ui.cc:1925 mixer_ui.cc:1931
-msgid "Window|Mixer"
-msgstr "Mixer"
-
-#: ardour_ui_ed.cc:201
-msgid "Toggle Editor+Mixer"
-msgstr "Editor+Mixer umschalten"
-
-#: ardour_ui_ed.cc:202 meterbridge.cc:218 meterbridge.cc:224
-msgid "Window|Meterbridge"
-msgstr "Meterbridge"
-
-#: ardour_ui_ed.cc:204
-msgid "Reattach All Tearoffs"
-msgstr "Alle Abreißmenüs wieder anheften"
-
-#: ardour_ui_ed.cc:206 midi_tracer.cc:45
-msgid "MIDI Tracer"
-msgstr "Midisignale verfolgen"
-
-#: ardour_ui_ed.cc:208
-msgid "Chat"
-msgstr "Chat"
-
-#: ardour_ui_ed.cc:210
-msgid "Help|Manual"
-msgstr "Handbuch"
-
-#: ardour_ui_ed.cc:211
-msgid "Reference"
-msgstr "Referenz"
-
-#: ardour_ui_ed.cc:212
-msgid "Report A Bug"
-msgstr "Einen Fehler melden"
-
-#: ardour_ui_ed.cc:213
-msgid "Cheat Sheet"
-msgstr "Cheat Sheet"
-
-#: ardour_ui_ed.cc:214
-msgid "Ardour Website"
-msgstr "Ardour Website"
-
-#: ardour_ui_ed.cc:215
-msgid "Ardour Development"
-msgstr "Ardour Entwicklung"
-
-#: ardour_ui_ed.cc:216
-msgid "User Forums"
-msgstr "Userforen"
-
-#: ardour_ui_ed.cc:217
-msgid "How to report a bug"
-msgstr "Wie man einen Fehler meldet"
-
-#: ardour_ui_ed.cc:219 plugin_ui.cc:419
-msgid "Save"
-msgstr "Speichern"
-
-#: ardour_ui_ed.cc:227 rc_option_editor.cc:1419 rc_option_editor.cc:1430
-#: rc_option_editor.cc:1441 rc_option_editor.cc:1450 rc_option_editor.cc:1463
-#: rc_option_editor.cc:1476 rc_option_editor.cc:1485 rc_option_editor.cc:1495
-#: rc_option_editor.cc:1497 rc_option_editor.cc:1506 rc_option_editor.cc:1522
-#: rc_option_editor.cc:1543 rc_option_editor.cc:1561 rc_option_editor.cc:1563
-#: rc_option_editor.cc:1579 rc_option_editor.cc:1582 rc_option_editor.cc:1584
-#: rc_option_editor.cc:1601 rc_option_editor.cc:1612
-msgid "Transport"
-msgstr "Transport"
-
-#: ardour_ui_ed.cc:233
-msgid "Stop"
-msgstr "Stopp"
-
-#: ardour_ui_ed.cc:236
-msgid "Roll"
-msgstr "Wiedergabe"
-
-#: ardour_ui_ed.cc:240 ardour_ui_ed.cc:243
-msgid "Start/Stop"
-msgstr "Start/Stopp"
-
-#: ardour_ui_ed.cc:246
-msgid "Start/Continue/Stop"
-msgstr "Start/Stopp"
-
-#: ardour_ui_ed.cc:249
-msgid "Stop and Forget Capture"
-msgstr "Stopp + Aufnahme verwerfen"
-
-#: ardour_ui_ed.cc:259
-msgid "Transition To Roll"
-msgstr "Vorwärts (normal)"
-
-#: ardour_ui_ed.cc:263
-msgid "Transition To Reverse"
-msgstr "Rückwärts (normal)"
-
-#: ardour_ui_ed.cc:267
-msgid "Play Loop Range"
-msgstr "Schleife wiedergeben"
-
-#: ardour_ui_ed.cc:270
-msgid "Play Selection"
-msgstr "Auswahl abspielen"
-
-#: ardour_ui_ed.cc:273
-msgid "Play Selection w/Preroll"
-msgstr "Ausgewählten Bereich mit Vorlauf wiedergeben"
-
-#: ardour_ui_ed.cc:277
-msgid "Enable Record"
-msgstr "Aufnahme aktivieren"
-
-#: ardour_ui_ed.cc:280 ardour_ui_ed.cc:284
-msgid "Start Recording"
-msgstr "Aufnahme starten"
-
-#: ardour_ui_ed.cc:288
-msgid "Rewind"
-msgstr "Rückwärts (beschleunigen)"
-
-#: ardour_ui_ed.cc:291
-msgid "Rewind (Slow)"
-msgstr "Rückwärts (langsam)"
-
-#: ardour_ui_ed.cc:294
-msgid "Rewind (Fast)"
-msgstr "Rückwärts (schnell)"
-
-#: ardour_ui_ed.cc:297
-msgid "Forward"
-msgstr "Vorwärts (beschleunigen)"
-
-#: ardour_ui_ed.cc:300
-msgid "Forward (Slow)"
-msgstr "Vorwärts (langsam)"
-
-#: ardour_ui_ed.cc:303
-msgid "Forward (Fast)"
-msgstr "Vorwärts (schnell)"
-
-#: ardour_ui_ed.cc:306
-msgid "Go to Zero"
-msgstr "Zum Nullpunkt springen"
-
-#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
-msgid "Go to Start"
-msgstr "Zum Anfang springen"
-
-#: ardour_ui_ed.cc:315
-msgid "Go to End"
-msgstr "Zum Ende springen"
-
-#: ardour_ui_ed.cc:318
-msgid "Go to Wall Clock"
-msgstr "Zur lokalen Uhrzeit springen"
-
-#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
-msgid "Numpad Decimal"
-msgstr "Nummernblock Dezimalpunkt"
-
-#: ardour_ui_ed.cc:329
-msgid "Numpad 0"
-msgstr "Nummernblock 0"
-
-#: ardour_ui_ed.cc:332
-msgid "Numpad 1"
-msgstr "Nummernblock 1"
-
-#: ardour_ui_ed.cc:335
-msgid "Numpad 2"
-msgstr "Nummernblock 2"
-
-#: ardour_ui_ed.cc:338
-msgid "Numpad 3"
-msgstr "Nummernblock 3"
-
-#: ardour_ui_ed.cc:341
-msgid "Numpad 4"
-msgstr "Nummernblock 4"
-
-#: ardour_ui_ed.cc:344
-msgid "Numpad 5"
-msgstr "Nummernblock 5"
-
-#: ardour_ui_ed.cc:347
-msgid "Numpad 6"
-msgstr "Nummernblock 6"
-
-#: ardour_ui_ed.cc:350
-msgid "Numpad 7"
-msgstr "Nummernblock 7"
-
-#: ardour_ui_ed.cc:353
-msgid "Numpad 8"
-msgstr "Nummernblock 8"
-
-#: ardour_ui_ed.cc:356
-msgid "Numpad 9"
-msgstr "Nummernblock 9"
-
-#: ardour_ui_ed.cc:360
-msgid "Focus On Clock"
-msgstr "Fokus auf Zeitanzeige setzen"
-
-#: ardour_ui_ed.cc:364 ardour_ui_ed.cc:373 audio_clock.cc:2091 editor.cc:258
-#: editor_actions.cc:567 editor_actions.cc:576 export_timespan_selector.cc:88
-#: session_option_editor.cc:41 session_option_editor.cc:61
-#: session_option_editor.cc:80 session_option_editor.cc:96
-#: session_option_editor.cc:109 session_option_editor.cc:122
-#: session_option_editor.cc:124 session_option_editor.cc:126
-msgid "Timecode"
-msgstr "Timecode"
-
-#: ardour_ui_ed.cc:366 ardour_ui_ed.cc:375 editor_actions.cc:565
-msgid "Bars & Beats"
-msgstr "Takte & Schläge"
-
-#: ardour_ui_ed.cc:368 ardour_ui_ed.cc:377
-msgid "Minutes & Seconds"
-msgstr "Minuten & Sekunden"
-
-#: ardour_ui_ed.cc:370 ardour_ui_ed.cc:379 audio_clock.cc:2095 editor.cc:259
-#: editor_actions.cc:566
-msgid "Samples"
-msgstr "Samples"
-
-#: ardour_ui_ed.cc:382
-msgid "Punch In"
-msgstr "Punch In"
-
-#: ardour_ui_ed.cc:383 mixer_strip.cc:1826 mixer_strip.cc:2014 route_ui.cc:165
-#: time_info_box.cc:116
-msgid "In"
-msgstr "In"
-
-#: ardour_ui_ed.cc:386
-msgid "Punch Out"
-msgstr "Punch Out"
-
-#: ardour_ui_ed.cc:387 mixer_strip.cc:1838 time_info_box.cc:117
-msgid "Out"
-msgstr "Out"
-
-#: ardour_ui_ed.cc:390
-msgid "Punch In/Out"
-msgstr "Punch In/Out"
-
-#: ardour_ui_ed.cc:391
-msgid "In/Out"
-msgstr "In/Out"
-
-#: ardour_ui_ed.cc:394 rc_option_editor.cc:1376
-msgid "Click"
-msgstr "Klick"
-
-#: ardour_ui_ed.cc:397
-msgid "Auto Input"
-msgstr "Auto Input"
-
-#: ardour_ui_ed.cc:400
-msgid "Auto Play"
-msgstr "Auto Play"
-
-#: ardour_ui_ed.cc:411
-msgid "Sync Startup to Video"
-msgstr "Start mit Video synchronisieren"
-
-#: ardour_ui_ed.cc:413
-msgid "Time Master"
-msgstr "Time Master"
-
-#: ardour_ui_ed.cc:420
-msgid "Toggle Record Enable Track %1"
-msgstr "Aufnahme auf Spur %1 aktivieren"
-
-#: ardour_ui_ed.cc:427
-msgid "Percentage"
-msgstr "Prozent"
-
-#: ardour_ui_ed.cc:428 shuttle_control.cc:178
-msgid "Semitones"
-msgstr "Halbtöne"
-
-#: ardour_ui_ed.cc:432
-msgid "Send MTC"
-msgstr "MTC senden"
-
-#: ardour_ui_ed.cc:434
-msgid "Send MMC"
-msgstr "MMC senden"
-
-#: ardour_ui_ed.cc:436
-msgid "Use MMC"
-msgstr "Benutze MMC"
-
-#: ardour_ui_ed.cc:438 rc_option_editor.cc:2097
-msgid "Send MIDI Clock"
-msgstr "MIDI Clock senden"
-
-#: ardour_ui_ed.cc:440
-msgid "Send MIDI Feedback"
-msgstr "MIDI Feedback senden"
-
-#: ardour_ui_ed.cc:446
-msgid "Panic"
-msgstr "Panic"
-
-#: ardour_ui_ed.cc:534
-msgid "Wall Clock"
-msgstr "Uhrzeit"
-
-#: ardour_ui_ed.cc:536
-msgid "Disk Space"
-msgstr "Speicherplatz"
-
-#: ardour_ui_ed.cc:537
-msgid "DSP"
-msgstr "DSP"
-
-#: ardour_ui_ed.cc:538
-msgid "Buffers"
-msgstr "Puffer"
-
-#: ardour_ui_ed.cc:540
-msgid "Timecode Format"
-msgstr "Timecode-Format"
-
-#: ardour_ui_ed.cc:541
-msgid "File Format"
-msgstr "Dateiformat"
-
-#: ardour_ui_options.cc:63
-msgid ""
-"It is not possible to use JACK as the the sync source\n"
-"when the pull up/down setting is non-zero."
-msgstr ""
-"Es ist nicht möglich, JACK als Synchronisationsquelle zu verwenden,\n"
-"wenn die Pull-up/down Einstellung nicht 0 ist."
-
-#: ardour_ui_options.cc:317
-msgid "Internal"
-msgstr "Intern"
-
-#: ardour_ui_options.cc:498
-msgid "Enable/Disable external positional sync"
-msgstr "Aktiviere/Deaktiviere externe Positionssynchronisierung"
-
-#: ardour_ui_options.cc:500
-msgid "Sync to JACK is not possible: video pull up/down is set"
-msgstr "Synchronisation ist nicht möglich: Video pull-up/down ist aktiviert"
-
-#: audio_clock.cc:1047 audio_clock.cc:1066
-msgid "--pending--"
-msgstr "--wartend--"
-
-#: audio_clock.cc:1118
-msgid "SR"
-msgstr "SR"
-
-#: audio_clock.cc:1124 audio_clock.cc:1128
-msgid "Pull"
-msgstr "Ziehen"
-
-#: audio_clock.cc:1126
-#, c-format
-msgid "%+.4f%%"
-msgstr "%+.4f%%"
-
-#: audio_clock.cc:1282 editor.cc:260 editor_actions.cc:139
-#: editor_actions.cc:559
-msgid "Tempo"
-msgstr "Tempo"
-
-#: audio_clock.cc:1286 editor.cc:261 editor_actions.cc:560
-msgid "Meter"
-msgstr "Taktart"
-
-#: audio_clock.cc:1864 audio_streamview.cc:115 editor_actions.cc:1087
-#: session_metadata_dialog.cc:452 session_metadata_dialog.cc:500
-#: session_metadata_dialog.cc:556 session_metadata_dialog.cc:845
-#: streamview.cc:470
-msgid "programming error: %1"
-msgstr "Programmierfehler: %1"
-
-#: audio_clock.cc:1997 audio_clock.cc:2025
-msgid "programming error: %1 %2"
-msgstr "Programmierfehler: %1 %2"
-
-#: audio_clock.cc:2093 editor.cc:257 export_timespan_selector.cc:98
-msgid "Bars:Beats"
-msgstr "Takte:Schläge"
-
-#: audio_clock.cc:2094 export_timespan_selector.cc:93
-msgid "Minutes:Seconds"
-msgstr "Minuten:Sekunden"
-
-#: audio_clock.cc:2099
-msgid "Set From Playhead"
-msgstr "Ab Positionszeiger"
-
-#: audio_clock.cc:2100
-msgid "Locate to This Time"
-msgstr "Positionszeiger hierhin setzen"
-
-#: audio_region_editor.cc:64 control_point_dialog.cc:49 rhythm_ferret.cc:124
-#: rhythm_ferret.cc:129 rhythm_ferret.cc:134
-msgid "dB"
-msgstr "dB"
-
-#: audio_region_editor.cc:67
-msgid "Region gain:"
-msgstr "Regionen-Lautstärke:"
-
-#: audio_region_editor.cc:77 export_format_dialog.cc:43
-msgid "dBFS"
-msgstr "dBFS"
-
-#: audio_region_editor.cc:80
-msgid "Peak amplitude:"
-msgstr "Spitzenamplitude"
-
-#: audio_region_editor.cc:91
-msgid "Calculating..."
-msgstr "Berechne..."
-
-#: audio_region_view.cc:1243
-msgid "add gain control point"
-msgstr "Lautstärkekurve bearbeiten"
-
-#: automation_controller.cc:287 automation_controller.cc:303
-msgid "Select Note..."
-msgstr "Note selektieren..."
-
-#: automation_controller.cc:294
-msgid "Halve"
-msgstr "Halbiere"
-
-#: automation_controller.cc:297
-msgid "Double"
-msgstr "Verdopple"
-
-#: automation_controller.cc:308
-msgid "Set to %1 beat"
-msgid_plural "Set to %1 beats"
-msgstr[0] "Setze auf %1 Schlag"
-msgstr[1] "Setze auf %1 Schläge"
-
-#: automation_line.cc:286 automation_line.cc:462
-msgid "automation event move"
-msgstr "Automationspunkt bewegen"
-
-#: automation_line.cc:488 automation_line.cc:508
-msgid "automation range move"
-msgstr "Automationsbereich bewegen"
-
-#: automation_line.cc:880 region_gain_line.cc:72
-msgid "remove control point"
-msgstr "Automationspunkt entfernen"
-
-#: automation_line.cc:1003
-msgid "Ignoring illegal points on AutomationLine \"%1\""
-msgstr "Unzulässige Automationspunkte werden ignoriert: \"%1\""
-
-#: automation_region_view.cc:190 automation_time_axis.cc:645
-msgid "add automation event"
-msgstr "Automationspunkt einfügen"
-
-#: automation_streamview.cc:95
-msgid "unable to display automation region for control without list"
-msgstr ""
-"die Automationsspur für diesen Parameter kann ohne Liste nicht dargestellt "
-"werden"
-
-#: automation_time_axis.cc:164
-msgid "automation state"
-msgstr "Automationsmodus"
-
-#: automation_time_axis.cc:165
-msgid "hide track"
-msgstr "Diese Spur verbergen"
-
-#: automation_time_axis.cc:309 automation_time_axis.cc:361
-#: automation_time_axis.cc:555 gain_meter.cc:220 generic_pluginui.cc:523
-#: generic_pluginui.cc:817 panner_ui.cc:151
-msgid "Automation|Manual"
-msgstr "Manuell"
-
-#: automation_time_axis.cc:311 automation_time_axis.cc:372
-#: automation_time_axis.cc:560 editor.cc:1904 editor.cc:1981
-#: editor_actions.cc:122 editor_actions.cc:1918 gain_meter.cc:223
-#: generic_pluginui.cc:99 generic_pluginui.cc:526 generic_pluginui.cc:819
-#: midi_time_axis.cc:1606 midi_time_axis.cc:1609 midi_time_axis.cc:1612
-#: panner_ui.cc:154
-msgid "Play"
-msgstr "Wiedergabe"
-
-#: automation_time_axis.cc:313 automation_time_axis.cc:383
-#: automation_time_axis.cc:565 gain_meter.cc:226 generic_pluginui.cc:101
-#: generic_pluginui.cc:529 generic_pluginui.cc:821 panner_ui.cc:157
-msgid "Write"
-msgstr "Schreiben"
-
-#: automation_time_axis.cc:315 automation_time_axis.cc:394
-#: automation_time_axis.cc:570 gain_meter.cc:229 generic_pluginui.cc:103
-#: generic_pluginui.cc:532 generic_pluginui.cc:823 panner_ui.cc:160
-msgid "Touch"
-msgstr "Ändern"
-
-#: automation_time_axis.cc:405 generic_pluginui.cc:535 meter_patterns.cc:112
-msgid "???"
-msgstr "???"
-
-#: automation_time_axis.cc:446
-msgid "clear automation"
-msgstr "Automation zurücksetzen"
-
-#: automation_time_axis.cc:544 editor_actions.cc:643 editor_markers.cc:902
-#: location_ui.cc:57 plugin_selector.cc:86 route_time_axis.cc:854
-msgid "Hide"
-msgstr "Verbergen"
-
-#: automation_time_axis.cc:546
-msgid "Clear"
-msgstr "Leeren"
-
-#: automation_time_axis.cc:577
-msgid "State"
-msgstr "Automationssmodus"
-
-#: automation_time_axis.cc:593
-msgid "Discrete"
-msgstr "Diskret"
-
-#: automation_time_axis.cc:599 export_format_dialog.cc:485
-msgid "Linear"
-msgstr "Linear"
-
-#: automation_time_axis.cc:605 rhythm_ferret.cc:109 shuttle_control.cc:197
-msgid "Mode"
-msgstr "Modus"
-
-#: bundle_manager.cc:182
-msgid "Disassociate"
-msgstr "Trenne"
-
-#: bundle_manager.cc:186
-msgid "Edit Bundle"
-msgstr "Bundle editieren"
-
-#: bundle_manager.cc:201
-msgid "Direction:"
-msgstr "Richtung:"
-
-#: bundle_manager.cc:206 bundle_manager.cc:210 engine_dialog.cc:666
-#: mixer_strip.cc:164 mixer_strip.cc:369 mixer_strip.cc:2247
-#: rc_option_editor.cc:2326
-msgid "Input"
-msgstr "Eingang"
-
-#: bundle_manager.cc:207 bundle_manager.cc:212 bundle_manager.cc:246
-#: engine_dialog.cc:668 mixer_strip.cc:168 mixer_strip.cc:373
-#: mixer_strip.cc:2250 rc_option_editor.cc:2330
-msgid "Output"
-msgstr "Ausgang"
-
-#: bundle_manager.cc:265 editor.cc:1945 editor_actions.cc:94
-#: editor_actions.cc:104 rc_option_editor.cc:1087 rc_option_editor.cc:1094
-msgid "Edit"
-msgstr "Bearbeiten"
-
-#: bundle_manager.cc:266 editor.cc:5902 editor.cc:5930 editor_actions.cc:338
-#: editor_actions.cc:339 plugin_ui.cc:420 processor_box.cc:2458
-msgid "Delete"
-msgstr "Löschen"
-
-#: bundle_manager.cc:272 bundle_manager.cc:439 editor_route_groups.cc:97
-#: editor_routes.cc:206 midi_list_editor.cc:107 session_metadata_dialog.cc:646
-msgid "Name"
-msgstr "Name"
-
-#: bundle_manager.cc:283
-msgid "New"
-msgstr "Neu"
-
-#: bundle_manager.cc:333
-msgid "Bundle"
-msgstr "Bundle"
-
-#: bundle_manager.cc:418
-msgid "Add Channel"
-msgstr "Kanal hinzufügen"
-
-#: bundle_manager.cc:425
-msgid "Rename Channel"
-msgstr "Kanal umbenennen"
-
-#: configinfo.cc:28
-msgid "Build Configuration"
-msgstr "Build Configuration"
-
-#: control_point_dialog.cc:33
-msgid "Control point"
-msgstr "Automationspunkt"
-
-#: control_point_dialog.cc:45
-msgid "Value"
-msgstr "Wert"
-
-#: edit_note_dialog.cc:42
-msgid "Note"
-msgstr "Note"
-
-#: edit_note_dialog.cc:45
-msgid "Set selected notes to this channel"
-msgstr "Ausgewählte Noten auf diesen Kanal setzen"
-
-#: edit_note_dialog.cc:46
-msgid "Set selected notes to this pitch"
-msgstr "Ausgewählte Noten auf diese Tonhöhe setzen"
-
-#: edit_note_dialog.cc:47
-msgid "Set selected notes to this velocity"
-msgstr "Ausgewählte Noten auf diese Velocity setzen"
-
-#: edit_note_dialog.cc:49
-msgid "Set selected notes to this time"
-msgstr "Ausgewählte Noten auf diesen Zeitpunkt setzen"
-
-#: edit_note_dialog.cc:51
-msgid "Set selected notes to this length"
-msgstr "Ausgewählte Noten auf diese Notenlänge setzen"
-
-#: edit_note_dialog.cc:58 midi_list_editor.cc:105 patch_change_dialog.cc:90
-#: step_entry.cc:394
-msgid "Channel"
-msgstr "Kanal"
-
-#: edit_note_dialog.cc:68
-msgid "Pitch"
-msgstr "Tonhöhe"
-
-#: edit_note_dialog.cc:78 step_entry.cc:408
-msgid "Velocity"
-msgstr "Velocity"
-
-#: edit_note_dialog.cc:88 patch_change_dialog.cc:66
-msgid "Time"
-msgstr "Zeitpunkt"
-
-#: edit_note_dialog.cc:98 editor_regions.cc:115
-#: export_timespan_selector.cc:378 export_timespan_selector.cc:440
-#: location_ui.cc:320 midi_list_editor.cc:115 time_info_box.cc:108
-msgid "Length"
-msgstr "Länge"
-
-#: edit_note_dialog.cc:165
-msgid "edit note"
-msgstr "Note bearbeiten"
-
-#: editor.cc:147
-msgid "CD Frames"
-msgstr "CD-Frames"
-
-#: editor.cc:148
-msgid "TC Frames"
-msgstr "TC Frames"
-
-#: editor.cc:149
-msgid "TC Seconds"
-msgstr "TC Sekunden"
-
-#: editor.cc:150
-msgid "TC Minutes"
-msgstr "TC Minuten"
-
-#: editor.cc:151
-msgid "Seconds"
-msgstr "Sekunden"
-
-#: editor.cc:152
-msgid "Minutes"
-msgstr "Minuten"
-
-#: editor.cc:153 quantize_dialog.cc:37 quantize_dialog.cc:141
-msgid "Beats/128"
-msgstr "Schläge/128"
-
-#: editor.cc:154 quantize_dialog.cc:38 quantize_dialog.cc:143
-msgid "Beats/64"
-msgstr "Schläge/64"
-
-#: editor.cc:155 quantize_dialog.cc:39 quantize_dialog.cc:145
-msgid "Beats/32"
-msgstr "Schläge/32"
-
-#: editor.cc:156
-msgid "Beats/28"
-msgstr "Schläge/28"
-
-#: editor.cc:157
-msgid "Beats/24"
-msgstr "Schläge/24"
-
-#: editor.cc:158
-msgid "Beats/20"
-msgstr "Schläge/20"
-
-#: editor.cc:159 quantize_dialog.cc:40 quantize_dialog.cc:147
-msgid "Beats/16"
-msgstr "Schläge/16"
-
-#: editor.cc:160
-msgid "Beats/14"
-msgstr "Schläge/14"
-
-#: editor.cc:161
-msgid "Beats/12"
-msgstr "Schläge/12"
-
-#: editor.cc:162
-msgid "Beats/10"
-msgstr "Schläge/10"
-
-#: editor.cc:163 quantize_dialog.cc:41 quantize_dialog.cc:149
-msgid "Beats/8"
-msgstr "Schläge/8"
-
-#: editor.cc:164
-msgid "Beats/7"
-msgstr "Schläge/7"
-
-#: editor.cc:165
-msgid "Beats/6"
-msgstr "Schläge/6"
-
-#: editor.cc:166
-msgid "Beats/5"
-msgstr "Schläge/5"
-
-#: editor.cc:167 quantize_dialog.cc:42 quantize_dialog.cc:151
-msgid "Beats/4"
-msgstr "Schläge/4"
-
-#: editor.cc:168 quantize_dialog.cc:43 quantize_dialog.cc:153
-msgid "Beats/3"
-msgstr "Schläge/3"
-
-#: editor.cc:169 quantize_dialog.cc:44 quantize_dialog.cc:155
-msgid "Beats/2"
-msgstr "Schläge/2"
-
-#: editor.cc:170 quantize_dialog.cc:45 quantize_dialog.cc:157
-msgid "Beats"
-msgstr "Schläge"
-
-#: editor.cc:171
-msgid "Bars"
-msgstr "Takte"
-
-#: editor.cc:172
-msgid "Marks"
-msgstr "Marker"
-
-#: editor.cc:173
-msgid "Region starts"
-msgstr "Regionen-Anfang"
-
-#: editor.cc:174
-msgid "Region ends"
-msgstr "Regionen-Ende"
-
-#: editor.cc:175
-msgid "Region syncs"
-msgstr "Regionen-Sync"
-
-#: editor.cc:176
-msgid "Region bounds"
-msgstr "Regionengrenzen"
-
-#: editor.cc:181 editor_actions.cc:508
-msgid "No Grid"
-msgstr "Raster aus"
-
-#: editor.cc:182 editor_actions.cc:509
-msgid "Grid"
-msgstr "Einrasten"
-
-#: editor.cc:183 editor_actions.cc:510
-msgid "Magnetic"
-msgstr "Magnetisch"
-
-#: editor.cc:188 editor.cc:206 editor_actions.cc:121 editor_actions.cc:491
-msgid "Playhead"
-msgstr "Positionszeiger"
-
-#: editor.cc:189 editor_actions.cc:493
-msgid "Marker"
-msgstr "Marker"
-
-#: editor.cc:190 editor.cc:207 editor_actions.cc:492
-msgid "Mouse"
-msgstr "Maus"
-
-#: editor.cc:195 editor_actions.cc:500
-msgid "Slide"
-msgstr "Slide"
-
-#: editor.cc:196
-msgid "Splice"
-msgstr "Splice"
-
-#: editor.cc:197 editor_actions.cc:499
-msgid "Ripple"
-msgstr "Ripple"
-
-#: editor.cc:198 editor_actions.cc:1787 editor_markers.cc:905
-#: editor_rulers.cc:260 location_ui.cc:58
-msgid "Lock"
-msgstr "Lock"
-
-#: editor.cc:203 mono_panner_editor.cc:42
-msgid "Left"
-msgstr "Links"
-
-#: editor.cc:204 mono_panner_editor.cc:47
-msgid "Right"
-msgstr "Rechts"
-
-#: editor.cc:205
-msgid "Center"
-msgstr "Mitte"
-
-#: editor.cc:208 editor.cc:3231
-msgid "Edit point"
-msgstr "Arbeitspunkt"
-
-#: editor.cc:214
-msgid "Mushy"
-msgstr "Matschig"
-
-#: editor.cc:215
-msgid "Smooth"
-msgstr "Klar"
-
-#: editor.cc:216
-msgid "Balanced multitimbral mixture"
-msgstr "Ausgewogene multitimbrale Mischung"
-
-#: editor.cc:217
-msgid "Unpitched percussion with stable notes"
-msgstr "Ungestimmte Perkussion mit stabilen Tönen"
-
-#: editor.cc:218
-msgid "Crisp monophonic instrumental"
-msgstr "Klare monophone Instrumentalmusik"
-
-#: editor.cc:219
-msgid "Unpitched solo percussion"
-msgstr "Ungestimmte Perkussion (solo)"
-
-#: editor.cc:220
-msgid "Resample without preserving pitch"
-msgstr "Resampeln, ohne die Tonhöhe zu erhalten"
-
-#: editor.cc:256
-msgid "Mins:Secs"
-msgstr "Min:Sek"
-
-#: editor.cc:262
-msgid "Location Markers"
-msgstr "Positionsmarker"
-
-#: editor.cc:263
-msgid "Range Markers"
-msgstr "Bereiche"
-
-#: editor.cc:264
-msgid "Loop/Punch Ranges"
-msgstr "Schleifen/Punchbereiche"
-
-#: editor.cc:265 editor_actions.cc:563
-msgid "CD Markers"
-msgstr "CD-Marker"
-
-#: editor.cc:266
-msgid "Video Timeline"
-msgstr "Video Zeitleiste"
-
-#: editor.cc:283
-msgid "mode"
-msgstr "Modus"
-
-#: editor.cc:459 editor_actions.cc:114 editor_actions.cc:562
-msgid "Markers"
-msgstr "Marker"
-
-#: editor.cc:577 rc_option_editor.cc:1939
-msgid "Regions"
-msgstr "Regionen"
-
-#: editor.cc:578
-msgid "Tracks & Busses"
-msgstr "Spuren & Busse"
-
-#: editor.cc:579
-msgid "Snapshots"
-msgstr "Schnappschüsse"
-
-#: editor.cc:580
-msgid "Track & Bus Groups"
-msgstr "Spuren & Bus-Gruppen"
-
-#: editor.cc:581
-msgid "Ranges & Marks"
-msgstr "Bereiche & Marker"
-
-#: editor.cc:728 editor.cc:5754 rc_option_editor.cc:1619
-#: rc_option_editor.cc:1627 rc_option_editor.cc:1635 rc_option_editor.cc:1643
-#: rc_option_editor.cc:1667 rc_option_editor.cc:1679 rc_option_editor.cc:1681
-#: rc_option_editor.cc:1689 rc_option_editor.cc:1697 rc_option_editor.cc:1717
-#: rc_option_editor.cc:1729 rc_option_editor.cc:1731 rc_option_editor.cc:1733
-#: rc_option_editor.cc:1741 rc_option_editor.cc:1749 rc_option_editor.cc:1757
-#: rc_option_editor.cc:1772 rc_option_editor.cc:1776 rc_option_editor.cc:1800
-msgid "Editor"
-msgstr "Editor"
-
-#: editor.cc:1331 editor.cc:4735 editor_actions.cc:134 editor_actions.cc:1863
-msgid "Loop"
-msgstr "Schleife"
-
-#: editor.cc:1337 editor.cc:4762 editor_actions.cc:135 time_info_box.cc:68
-msgid "Punch"
-msgstr "Punch"
-
-#: editor.cc:1449 rc_option_editor.cc:1661
-msgid "Linear (for highly correlated material)"
-msgstr "Linear (für stark korreliertes Material)"
-
-#: editor.cc:1459 rc_option_editor.cc:1662
-msgid "Constant power"
-msgstr "Konstante Energie"
-
-#: editor.cc:1468 rc_option_editor.cc:1663
-msgid "Symmetric"
-msgstr "Symmetrisch"
-
-#: editor.cc:1478 rc_option_editor.cc:1664
-msgid "Slow"
-msgstr "Langsam"
-
-#: editor.cc:1487 rc_option_editor.cc:1665 sfdb_ui.cc:1771 sfdb_ui.cc:1881
-msgid "Fast"
-msgstr "Schnell"
-
-#: editor.cc:1509 editor.cc:1534
-msgid "Deactivate"
-msgstr "Deaktivieren"
-
-#: editor.cc:1511 editor.cc:1536
-msgid "Activate"
-msgstr "Aktivieren"
-
-#: editor.cc:1637 editor.cc:1645 editor_ops.cc:3824
-msgid "Freeze"
-msgstr "Einfrieren"
-
-#: editor.cc:1641
-msgid "Unfreeze"
-msgstr "Auftauen"
-
-#: editor.cc:1780
-msgid "Selected Regions"
-msgstr "Ausgewählte Regionen"
-
-#: editor.cc:1816 editor_markers.cc:940
-msgid "Play Range"
-msgstr "Bereich wiedergeben"
-
-#: editor.cc:1817 editor_markers.cc:943
-msgid "Loop Range"
-msgstr "Bereich in Schleife wiedergeben"
-
-#: editor.cc:1820 editor_markers.cc:950
-msgid "Zoom to Range"
-msgstr "Auf Bereich zoomen"
-
-#: editor.cc:1829 editor_actions.cc:369
-msgid "Move Range Start to Previous Region Boundary"
-msgstr "Anfang des Bereiches zur vorherigen Regiongrenze verschieben"
-
-#: editor.cc:1836 editor_actions.cc:376
-msgid "Move Range Start to Next Region Boundary"
-msgstr "Anfang des Bereiches zur nächsten Regiongrenze verschieben"
-
-#: editor.cc:1843 editor_actions.cc:383
-msgid "Move Range End to Previous Region Boundary"
-msgstr "Ende des Bereiches zur vorherigen Regiongrenze verschieben"
-
-#: editor.cc:1850 editor_actions.cc:390
-msgid "Move Range End to Next Region Boundary"
-msgstr "Ende des Bereiches zur nächsten Regiongrenze verschieben"
-
-#: editor.cc:1856 editor_actions.cc:133 editor_actions.cc:325
-msgid "Separate"
-msgstr "Teilen"
-
-#: editor.cc:1857
-msgid "Convert to Region in Region List"
-msgstr "In Region umwanden (in Regionenliste hinzufügen)"
-
-#: editor.cc:1860 editor_markers.cc:970
-msgid "Select All in Range"
-msgstr "Alles im Bereich auswählen"
-
-#: editor.cc:1863 editor_actions.cc:297
-msgid "Set Loop from Selection"
-msgstr "Schleife aus Auswahl bilden"
-
-#: editor.cc:1864 editor_actions.cc:298
-msgid "Set Punch from Selection"
-msgstr "Punch aus Auswahl bilden"
-
-#: editor.cc:1865 editor_actions.cc:299
-msgid "Set Session Start/End from Selection"
-msgstr "Projektstart/ende auf Auswahl setzen"
-
-#: editor.cc:1868
-msgid "Add Range Markers"
-msgstr "Bereichsmarker einfügen"
-
-#: editor.cc:1871
-msgid "Crop Region to Range"
-msgstr "Region auf Bereich kürzen"
-
-#: editor.cc:1872
-msgid "Fill Range with Region"
-msgstr "Bereich mit Region füllen"
-
-#: editor.cc:1873 editor_actions.cc:311
-msgid "Duplicate Range"
-msgstr "Bereich duplizieren"
-
-#: editor.cc:1876
-msgid "Consolidate Range"
-msgstr "Bereich als neue Region pre-Mixer"
-
-#: editor.cc:1877
-msgid "Consolidate Range With Processing"
-msgstr "Bereich als neue Region post-mixer"
-
-#: editor.cc:1878
-msgid "Bounce Range to Region List"
-msgstr "Auswahl zur Regionenliste bouncen"
-
-#: editor.cc:1879
-msgid "Bounce Range to Region List With Processing"
-msgstr "Auswahl zur Regionenliste bouncen (Post-Fader)"
-
-#: editor.cc:1880 editor_markers.cc:953
-msgid "Export Range..."
-msgstr "Bereich exportieren..."
-
-#: editor.cc:1882
-msgid "Export Video Range..."
-msgstr "Videobereich exportieren..."
-
-#: editor.cc:1898 editor.cc:1979 editor_actions.cc:303
-msgid "Play From Edit Point"
-msgstr "Wiedergabe ab Arbeitspunkt"
-
-#: editor.cc:1899 editor.cc:1980
-msgid "Play From Start"
-msgstr "Wiedergabe ab Anfang"
-
-#: editor.cc:1900
-msgid "Play Region"
-msgstr "Region wiedergeben"
-
-#: editor.cc:1902
-msgid "Loop Region"
-msgstr "Region in Schleife wiedergeben"
-
-#: editor.cc:1912 editor.cc:1989
-msgid "Select All in Track"
-msgstr "Alles in der Spur auswählen"
-
-#: editor.cc:1913 editor.cc:1990 editor_actions.cc:194
-msgid "Select All Objects"
-msgstr "Alle Objekte auswählen"
-
-#: editor.cc:1914 editor.cc:1991
-msgid "Invert Selection in Track"
-msgstr "Auswahl in der Spur umkehren"
-
-#: editor.cc:1915 editor.cc:1992 editor_actions.cc:197
-msgid "Invert Selection"
-msgstr "Auswahl umkehren"
-
-#: editor.cc:1917
-msgid "Set Range to Loop Range"
-msgstr "Bereich als Schleife auswählen"
-
-#: editor.cc:1918
-msgid "Set Range to Punch Range"
-msgstr "Bereich als Punchbereich"
-
-#: editor.cc:1920 editor.cc:1994 editor_actions.cc:199 editor_actions.cc:200
-msgid "Select All After Edit Point"
-msgstr "Alle Regionen nach dem Arbeitspunkt auswählen"
-
-#: editor.cc:1921 editor.cc:1995 editor_actions.cc:201 editor_actions.cc:202
-msgid "Select All Before Edit Point"
-msgstr "Alle Regionen vor dem Arbeitspunkt auswählen"
-
-#: editor.cc:1922 editor.cc:1996
-msgid "Select All After Playhead"
-msgstr "Alle Regionen nach dem Positionszeiger auswählen"
-
-#: editor.cc:1923 editor.cc:1997
-msgid "Select All Before Playhead"
-msgstr "Alle Regionen vor dem Positionszeiger auswählen"
-
-#: editor.cc:1924
-msgid "Select All Between Playhead and Edit Point"
-msgstr "Alle zwischen Positionszeiger und Arbeitspunkt auswählen"
-
-#: editor.cc:1925
-msgid "Select All Within Playhead and Edit Point"
-msgstr "Alles zwischen Positionszeiger und Arbeitspunkt auswählen"
-
-#: editor.cc:1926
-msgid "Select Range Between Playhead and Edit Point"
-msgstr "Wähle Bereich zwischen Positionszeiger und Arbeitspunkt aus"
-
-#: editor.cc:1928 editor.cc:1999 editor_actions.cc:131 editor_actions.cc:132
-msgid "Select"
-msgstr "Auswahl"
-
-#: editor.cc:1936 editor.cc:2007 editor_actions.cc:337 processor_box.cc:2451
-msgid "Cut"
-msgstr "Ausschneiden"
-
-#: editor.cc:1937 editor.cc:2008 editor_actions.cc:341 processor_box.cc:2454
-msgid "Copy"
-msgstr "Kopieren"
-
-#: editor.cc:1938 editor.cc:2009 editor_actions.cc:342 processor_box.cc:2462
-msgid "Paste"
-msgstr "Einfügen"
-
-#: editor.cc:1942 editor_actions.cc:91
-msgid "Align"
-msgstr "Ausrichten"
-
-#: editor.cc:1943
-msgid "Align Relative"
-msgstr "Relativ ausrichten"
-
-#: editor.cc:1950
-msgid "Insert Selected Region"
-msgstr "Ausgewählte Region einfügen"
-
-#: editor.cc:1951
-msgid "Insert Existing Media"
-msgstr "Vorhandenes Material importieren"
-
-#: editor.cc:1960 editor.cc:2016
-msgid "Nudge Entire Track Later"
-msgstr "Gesamte Spur schrittweise nach hinten"
-
-#: editor.cc:1961 editor.cc:2017
-msgid "Nudge Track After Edit Point Later"
-msgstr "Spur nach Arbeitspunkt schrittweise nach hinten"
-
-#: editor.cc:1962 editor.cc:2018
-msgid "Nudge Entire Track Earlier"
-msgstr "Gesamte Spur schrittweise nach vorne"
-
-#: editor.cc:1963 editor.cc:2019
-msgid "Nudge Track After Edit Point Earlier"
-msgstr "Spur nach Arbeitspunkt schrittweise nach vorne"
-
-#: editor.cc:1965 editor.cc:2021
-msgid "Nudge"
-msgstr "Verschieben"
-
-#: editor.cc:2235
-msgid ""
-"Playhead position stored with a negative value - ignored (use zero instead)"
-msgstr ""
-"Positionzeiger mit negativer Position - ignoriert (benutze stattdessen Null)"
-
-#: editor.cc:3006 editor.cc:3707 editor.cc:3778 midi_channel_selector.cc:157
-#: midi_channel_selector.cc:395 midi_channel_selector.cc:431
-msgid "All"
-msgstr "Alle"
-
-#: editor.cc:3210
-msgid "Smart Mode (add Range functions to Grab mode)"
-msgstr "Smart-Modus (zusätzliche Bereichsfunktionen im Greifmodus)"
-
-#: editor.cc:3211
-msgid "Grab Mode (select/move objects)"
-msgstr "Greifmodus (Objekte auswählen/bewegen)"
-
-#: editor.cc:3212
-msgid "Cut Mode (split regions)"
-msgstr "Schneidemodus (Regionen teilen)"
-
-#: editor.cc:3213
-msgid "Range Mode (select time ranges)"
-msgstr "Bereichsmodus (Zeitbereiche auswählen)"
-
-#: editor.cc:3214
-msgid "Draw Mode (draw and edit gain/notes/automation)"
-msgstr "Zeichenmodus (zeichne und editiere Lautstärken/Noten/Automationen)"
-
-#: editor.cc:3215
-msgid "Stretch Mode (time-stretch audio and midi regions, preserving pitch)"
-msgstr ""
-"Streckmodus (Audio- und MIDI-Regionen zeitstrecken, ohne die Tonhöhe zu "
-"ändern)"
-
-#: editor.cc:3216
-msgid "Audition Mode (listen to regions)"
-msgstr "Vorhörmodus (Regionen anhören)"
-
-#: editor.cc:3217
-msgid "Internal Edit Mode (edit notes and gain curves inside regions)"
-msgstr ""
-"Interner Editiermodus (Noten und Lautstärkekurven innerhalb der Regionen "
-"editieren)"
-
-#: editor.cc:3218
-msgid ""
-"Groups: click to (de)activate\n"
-"Context-click for other operations"
-msgstr ""
-"Gruppen: Klicken zum (De)aktivieren\n"
-"Rechtsklick für Optionen"
-
-#: editor.cc:3219
-msgid "Nudge Region/Selection Later"
-msgstr "Region/Auswahl schrittweise nach hinten"
-
-#: editor.cc:3220
-msgid "Nudge Region/Selection Earlier"
-msgstr "Region/Auswahl schrittweise nach vorne"
-
-#: editor.cc:3221 editor_actions.cc:262
-msgid "Zoom In"
-msgstr "Vergrößern"
-
-#: editor.cc:3222 editor_actions.cc:261
-msgid "Zoom Out"
-msgstr "Verkleinern"
-
-#: editor.cc:3223
-msgid "Zoom to Time Scale"
-msgstr "Zu einer Zeitspanne zoomen"
-
-#: editor.cc:3224 editor.cc:3729 editor_actions.cc:263
-msgid "Zoom to Session"
-msgstr "Auf ganzes Projekt zoomen"
-
-#: editor.cc:3225
-msgid "Zoom focus"
-msgstr "Zoom-Mittelpunkt"
-
-#: editor.cc:3226
-msgid "Expand Tracks"
-msgstr "Spuren vergrößern"
-
-#: editor.cc:3227
-msgid "Shrink Tracks"
-msgstr "Spuren verkleinern"
-
-#: editor.cc:3228
-msgid "Number of visible tracks"
-msgstr "Anzahl der sichtbaren Spuren"
-
-#: editor.cc:3229
-msgid "Snap/Grid Units"
-msgstr "Rastereinheiten"
-
-#: editor.cc:3230
-msgid "Snap/Grid Mode"
-msgstr "Einrastmodus"
-
-#: editor.cc:3232
-msgid "Edit Mode"
-msgstr "Bearbeitungsmodus"
-
-#: editor.cc:3233
-msgid ""
-"Nudge Clock\n"
-"(controls distance used to nudge regions and selections)"
-msgstr ""
-"Uhr für Schrittweite\n"
-"(bestimmt den Abstand für das schrittweise Verschieben von Regionen und "
-"Bereichen)"
-
-#: editor.cc:3501 editor_actions.cc:313
-msgid "Command|Undo"
-msgstr "Rückgängig"
-
-#: editor.cc:3503
-msgid "Command|Undo (%1)"
-msgstr "Rückgängig (%1)"
-
-#: editor.cc:3510 editor_actions.cc:315 editor_actions.cc:316
-#: editor_actions.cc:317
-msgid "Redo"
-msgstr "Wiederherstellen"
-
-#: editor.cc:3512
-msgid "Redo (%1)"
-msgstr "Wiederherstellen (%1)"
-
-#: editor.cc:3531 editor.cc:3555 editor_actions.cc:110 editor_actions.cc:1844
-msgid "Duplicate"
-msgstr "Duplizieren"
-
-#: editor.cc:3532
-msgid "Number of duplications:"
-msgstr "Anzahl der Duplikate:"
-
-#: editor.cc:3706 route_group_dialog.cc:51 time_info_box.cc:67
-msgid "Selection"
-msgstr "Auswahl"
-
-#: editor.cc:3709
-msgid "Fit 1 track"
-msgstr "1 Spur einpassen"
-
-#: editor.cc:3710
-msgid "Fit 2 tracks"
-msgstr "2 Spuren einpassen"
-
-#: editor.cc:3711
-msgid "Fit 4 tracks"
-msgstr "4 Spuren einpassen"
-
-#: editor.cc:3712
-msgid "Fit 8 tracks"
-msgstr "8 Spuren einpassen"
-
-#: editor.cc:3713
-msgid "Fit 16 tracks"
-msgstr "16 Spuren einpassen"
-
-#: editor.cc:3714
-msgid "Fit 24 tracks"
-msgstr "24 Spuren einpassen"
-
-#: editor.cc:3715
-msgid "Fit 32 tracks"
-msgstr "32 Spuren einpassen"
-
-#: editor.cc:3716
-msgid "Fit 48 tracks"
-msgstr "48 Spuren einpassen"
-
-#: editor.cc:3717
-msgid "Fit All tracks"
-msgstr "Alle Spuren einpassen"
-
-#: editor.cc:3718
-msgid "Fit Selection"
-msgstr "Passe Auswahl ein"
-
-#: editor.cc:3720
-msgid "Zoom to 10 ms"
-msgstr "Zoome auf 10 ms"
-
-#: editor.cc:3721
-msgid "Zoom to 100 ms"
-msgstr "Zoome auf 100 ms"
-
-#: editor.cc:3722
-msgid "Zoom to 1 sec"
-msgstr "Zoome auf 1 Sek."
-
-#: editor.cc:3723
-msgid "Zoom to 10 sec"
-msgstr "Zoome auf 10 Sek."
-
-#: editor.cc:3724
-msgid "Zoom to 1 min"
-msgstr "Zoome auf 1 Min."
-
-#: editor.cc:3725
-msgid "Zoom to 10 min"
-msgstr "Zoome auf 10 Min."
-
-#: editor.cc:3726
-msgid "Zoom to 1 hour"
-msgstr "Zoome auf 1 Stunde"
-
-#: editor.cc:3727
-msgid "Zoom to 8 hours"
-msgstr "Zoome auf 8 Stunden"
-
-#: editor.cc:3728
-msgid "Zoom to 24 hours"
-msgstr "Zoome auf 24 Stunden"
-
-#: editor.cc:3730
-msgid "Zoom to Range/Region Selection"
-msgstr "Zoome auf Bereichs-/Regionenauswahl"
-
-#: editor.cc:3800
-msgid "*"
-msgstr "*"
-
-#: editor.cc:4120
-msgid "Playlist Deletion"
-msgstr "Löschen von Wiedergabelisten"
-
-#: editor.cc:4121
-msgid ""
-"Playlist %1 is currently unused.\n"
-"If it is kept, its audio files will not be cleaned.\n"
-"If it is deleted, audio files used by it alone will be cleaned."
-msgstr ""
-"Die Wiedergabeliste %1 wird momentan nicht verwendet.\n"
-"Wenn sie nicht gelöscht wird, können keine Audiodateien aufgeräumt werden, "
-"die von ihr verwendet werden.\n"
-"Falls sie gelöscht wird, werden die ausschließlich von ihr verwendeten "
-"Audiodateien gelöscht."
-
-#: editor.cc:4131
-msgid "Delete Playlist"
-msgstr "Wiedergabeliste löschen"
-
-#: editor.cc:4132
-msgid "Keep Playlist"
-msgstr "Wiedergabeliste behalten"
-
-#: editor.cc:4133 editor_audio_import.cc:594 editor_ops.cc:6174
-#: engine_dialog.cc:2087 sfdb_freesound_mootcher.cc:69 processor_box.cc:2219
-#: processor_box.cc:2244
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: editor.cc:4275
-msgid "new playlists"
-msgstr "Neue Wiedergabelisten"
-
-#: editor.cc:4291
-msgid "copy playlists"
-msgstr "Wiedergabelisten kopieren"
-
-#: editor.cc:4306
-msgid "clear playlists"
-msgstr "Wiedergabelisten zurücksetzen"
-
-#: editor.cc:5046
-msgid "Please wait while %1 loads visual data."
-msgstr "Bitte warten Sie, während %1 die Daten zur Anzeige des Projekts lädt."
-
-#: editor.cc:5901 editor.cc:5932 editor_markers.cc:985 panner_ui.cc:410
-#: processor_box.cc:2482
-msgid "Edit..."
-msgstr "Bearbeiten..."
-
-#: editor.cc:5934 editor_actions.cc:1939
-msgid "Legatize"
-msgstr "überbinden (Legato)"
-
-#: editor.cc:5936 editor_actions.cc:1938
-msgid "Quantize..."
-msgstr "Quantisieren.."
-
-#: editor.cc:5938 editor_actions.cc:1941
-msgid "Remove Overlap"
-msgstr "Überlappung entfernen (Legato)"
-
-#: editor.cc:5940 editor_actions.cc:1940
-msgid "Transform..."
-msgstr "Transformiere..."
-
-#: editor_actions.cc:92
-msgid "Autoconnect"
-msgstr "Automatisch verbinden"
-
-#: editor_actions.cc:93
-msgid "Crossfades"
-msgstr "Crossfades"
-
-#: editor_actions.cc:95
-msgid "Move Selected Marker"
-msgstr "Ausgewählten Positionsmarker verschieben"
-
-#: editor_actions.cc:96
-msgid "Select Range Operations"
-msgstr "Bereichs"
-
-#: editor_actions.cc:97
-msgid "Select Regions"
-msgstr "Region auswählen"
-
-#: editor_actions.cc:98
-msgid "Edit Point"
-msgstr "Arbeitspunkt"
-
-#: editor_actions.cc:99
-msgid "Fade"
-msgstr "Fade"
-
-#: editor_actions.cc:100
-msgid "Latch"
-msgstr "Latch"
-
-#: editor_actions.cc:101 editor_regions.cc:112 region_editor.cc:46
-msgid "Region"
-msgstr "Region"
-
-#: editor_actions.cc:102
-msgid "Layering"
-msgstr "Layering"
-
-#: editor_actions.cc:103 editor_regions.cc:113 stereo_panner_editor.cc:44
-msgid "Position"
-msgstr "Position"
-
-#: editor_actions.cc:105 gain_meter.cc:156 gain_meter.cc:825 panner_ui.cc:178
-#: panner_ui.cc:635
-msgid "Trim"
-msgstr "Anpassen"
-
-#: editor_actions.cc:106 editor_actions.cc:126 route_group_dialog.cc:46
-msgid "Gain"
-msgstr "Lautstärke"
-
-#: editor_actions.cc:107 editor_actions.cc:561
-msgid "Ranges"
-msgstr "Bereiche"
-
-#: editor_actions.cc:108 editor_actions.cc:1840 session_option_editor.cc:135
-#: session_option_editor.cc:144 session_option_editor.cc:151
-msgid "Fades"
-msgstr "Fades"
-
-#: editor_actions.cc:111
-msgid "Link"
-msgstr "Verknüpfen"
-
-#: editor_actions.cc:112 editor_actions.cc:145
-msgid "Zoom Focus"
-msgstr "Zoom Fokus"
-
-#: editor_actions.cc:113
-msgid "Locate to Markers"
-msgstr "Positionszeiger zu Marker setzen"
-
-#: editor_actions.cc:115
-msgid "Meter falloff"
-msgstr "Abfall der Pegelanzeigen"
-
-#: editor_actions.cc:116
-msgid "Meter hold"
-msgstr "Pegelanzeige halten"
-
-#: editor_actions.cc:117 session_option_editor.cc:321
-msgid "MIDI Options"
-msgstr "MIDI Optionen"
-
-#: editor_actions.cc:118
-msgid "Misc Options"
-msgstr "Sonstiges"
-
-#: editor_actions.cc:119 rc_option_editor.cc:1809 route_group_dialog.cc:54
-#: session_option_editor.cc:243 session_option_editor.cc:250
-msgid "Monitoring"
-msgstr "Monitoring"
-
-#: editor_actions.cc:120
-msgid "Active Mark"
-msgstr "Aktiver Marker"
-
-#: editor_actions.cc:123
-msgid "Primary Clock"
-msgstr "Erste Zeitanzeige"
-
-#: editor_actions.cc:124
-msgid "Pullup / Pulldown"
-msgstr "Pull-Up / Pull-Down"
-
-#: editor_actions.cc:125
-msgid "Region operations"
-msgstr "Region(en)"
-
-#: editor_actions.cc:127 ruler_dialog.cc:28
-msgid "Rulers"
-msgstr "Markierungsleisten"
-
-#: editor_actions.cc:128
-msgid "Views"
-msgstr "Ansichten"
-
-#: editor_actions.cc:129
-msgid "Scroll"
-msgstr "Scrollen"
-
-#: editor_actions.cc:130
-msgid "Secondary Clock"
-msgstr "Zweite Zeitanzeige"
-
-#: editor_actions.cc:137
-msgid "Subframes"
-msgstr "Subframes"
-
-#: editor_actions.cc:140
-msgid "Timecode fps"
-msgstr "Timecode FPS"
-
-#: editor_actions.cc:141 route_time_axis.cc:575
-msgid "Height"
-msgstr "Höhe"
-
-#: editor_actions.cc:143
-msgid "Tools"
-msgstr "Werkzeuge"
-
-#: editor_actions.cc:144
-msgid "View"
-msgstr "Ansicht"
-
-#: editor_actions.cc:146
-msgid "Zoom"
-msgstr "Zoom"
-
-#: editor_actions.cc:152
-msgid "Break drag or deselect all"
-msgstr "Ziehen abbrechen oder alles deselektieren"
-
-#: editor_actions.cc:157
-msgid "Session|Lock"
-msgstr "Sperren"
-
-#: editor_actions.cc:159
-msgid "Show Editor Mixer"
-msgstr "Mixer-Panel zeigen"
-
-#: editor_actions.cc:160
-msgid "Show Editor List"
-msgstr "Seitenleiste anzeigen"
-
-#: editor_actions.cc:162
-msgid "Playhead to Next Region Boundary"
-msgstr "Positionszeiger zur nächsten Regiongrenze"
-
-#: editor_actions.cc:163
-msgid "Playhead to Next Region Boundary (No Track Selection)"
-msgstr "Positionszeiger zur nächsten Regiongrenze (ohne Spurauswahl)"
-
-#: editor_actions.cc:164
-msgid "Playhead to Previous Region Boundary"
-msgstr "Positionszeiger zur vorherigen Regiongrenze"
-
-#: editor_actions.cc:165
-msgid "Playhead to Previous Region Boundary (No Track Selection)"
-msgstr "Positionszeiger zur vorherigen Regiongrenze (ohne Spurauswahl)"
-
-#: editor_actions.cc:167
-msgid "Playhead to Next Region Start"
-msgstr "Positionszeiger zum Anfang der nächsten Region"
-
-#: editor_actions.cc:168
-msgid "Playhead to Next Region End"
-msgstr "Positionszeiger zum Ende der nächsten Region"
-
-#: editor_actions.cc:169
-msgid "Playhead to Next Region Sync"
-msgstr "Positionszeiger zum Einrastpunkt der nächsten Region"
-
-#: editor_actions.cc:171
-msgid "Playhead to Previous Region Start"
-msgstr "Positionszeiger zum Anfang der vorherigen Region"
-
-#: editor_actions.cc:172
-msgid "Playhead to Previous Region End"
-msgstr "Positionszeiger zum Ende der vorherigen Region"
-
-#: editor_actions.cc:173
-msgid "Playhead to Previous Region Sync"
-msgstr "Positionszeiger zum Einrastpunkt der vorherigen Region"
-
-#: editor_actions.cc:175
-msgid "To Next Region Boundary"
-msgstr "Zur nächsten Regiongrenze"
-
-#: editor_actions.cc:176
-msgid "To Next Region Boundary (No Track Selection)"
-msgstr "Zur nächsten Regiongrenze (ohne Spurauswahl)"
-
-#: editor_actions.cc:177
-msgid "To Previous Region Boundary"
-msgstr "Zur vorherigen Regiongrenze"
-
-#: editor_actions.cc:178
-msgid "To Previous Region Boundary (No Track Selection)"
-msgstr "Zur vorherigen Regiongrenze  (ohne Spurauswahl)"
-
-#: editor_actions.cc:180
-msgid "To Next Region Start"
-msgstr "Zum nächsten Regionen-Anfang"
-
-#: editor_actions.cc:181
-msgid "To Next Region End"
-msgstr "Zum nächsten Regionen-Ende"
-
-#: editor_actions.cc:182
-msgid "To Next Region Sync"
-msgstr "Zum nächsten Regionen-Synchronisationspunkt"
-
-#: editor_actions.cc:184
-msgid "To Previous Region Start"
-msgstr "Zum vorherigen Anfang einer Region"
-
-#: editor_actions.cc:185
-msgid "To Previous Region End"
-msgstr "Zum vorherigen Ende einer Region"
-
-#: editor_actions.cc:186
-msgid "To Previous Region Sync"
-msgstr "Zum vorherigen Synchronisationspunkt einer Region"
-
-#: editor_actions.cc:188
-msgid "To Range Start"
-msgstr "Zum Anfang des Auswahlbereichs"
-
-#: editor_actions.cc:189
-msgid "To Range End"
-msgstr "Zum Ende des Auswahlbereichs"
-
-#: editor_actions.cc:191
-msgid "Playhead to Range Start"
-msgstr "Positionszeiger zum Anfang des Auswahlbereichs"
-
-#: editor_actions.cc:192
-msgid "Playhead to Range End"
-msgstr "Positionszeiger zum Ende des Auswahlbereichs"
-
-#: editor_actions.cc:195
-msgid "Select All Tracks"
-msgstr "Alle Spuren auswählen"
-
-#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2468
-msgid "Deselect All"
-msgstr "Nichts auswählen"
-
-#: editor_actions.cc:204
-msgid "Select All Overlapping Edit Range"
-msgstr "Alle Regionen des Bearbeitungsbereichs auswählen "
-
-#: editor_actions.cc:205
-msgid "Select All Inside Edit Range"
-msgstr "Alles inerhalb des Bearbeitungsbereichs auswählen"
-
-#: editor_actions.cc:207
-msgid "Select Edit Range"
-msgstr "Editierbereich auswählen"
-
-#: editor_actions.cc:209
-msgid "Select All in Punch Range"
-msgstr "Alle Regionen im Punchbereich auswählen"
-
-#: editor_actions.cc:210
-msgid "Select All in Loop Range"
-msgstr "Alle Regionen innerhalb der Schleife auswählen"
-
-#: editor_actions.cc:212
-msgid "Select Next Track or Bus"
-msgstr "Nächste Spur/Bus auswählen"
-
-#: editor_actions.cc:213
-msgid "Select Previous Track or Bus"
-msgstr "Vorherige Spur/Bus auswählen"
-
-#: editor_actions.cc:215
-msgid "Toggle Record Enable"
-msgstr "Aufnahme aktivieren"
-
-#: editor_actions.cc:217
-msgid "Toggle Solo"
-msgstr "Solo umschalten"
-
-#: editor_actions.cc:219
-msgid "Toggle Mute"
-msgstr "Mute umschalten"
-
-#: editor_actions.cc:221
-msgid "Toggle Solo Isolate"
-msgstr "Isoliertes Solo umschalten"
-
-#: editor_actions.cc:226
-msgid "Save View %1"
-msgstr "Ansicht %1 speichern"
-
-#: editor_actions.cc:232
-msgid "Go to View %1"
-msgstr "Ansicht %1 aufrufen"
-
-#: editor_actions.cc:238
-msgid "Locate to Mark %1"
-msgstr "Positionszeiger zu Marker %1 setzen"
-
-#: editor_actions.cc:242 editor_actions.cc:243
-msgid "Jump to Next Mark"
-msgstr "Zu nächstem Marker springen"
-
-#: editor_actions.cc:244 editor_actions.cc:245
-msgid "Jump to Previous Mark"
-msgstr "Zur vorherigen Marker springen"
-
-#: editor_actions.cc:247 editor_actions.cc:248
-msgid "Add Mark from Playhead"
-msgstr "Marker am Positionszeiger setzen"
-
-#: editor_actions.cc:250 editor_actions.cc:251
-msgid "Remove Mark at Playhead"
-msgstr "Marker beim Positionszeiger entfernen"
-
-#: editor_actions.cc:253
-msgid "Nudge Next Later"
-msgstr "Nächste Region schrittweise nach hinten"
-
-#: editor_actions.cc:254
-msgid "Nudge Next Earlier"
-msgstr "Nächste Region schrittweise nach vorne"
-
-#: editor_actions.cc:256
-msgid "Nudge Playhead Forward"
-msgstr "Positionszeiger vorwärts"
-
-#: editor_actions.cc:257
-msgid "Nudge Playhead Backward"
-msgstr "Positionszeiger rückwärts"
-
-#: editor_actions.cc:258
-msgid "Playhead To Next Grid"
-msgstr "Positionszeiger zum nächsten Rasterpunkt"
-
-#: editor_actions.cc:259
-msgid "Playhead To Previous Grid"
-msgstr "Positionszeiger zum vorherigen Rasterpunkt"
-
-#: editor_actions.cc:264
-msgid "Zoom to Selection"
-msgstr "Zoome zu Auswahl"
-
-#: editor_actions.cc:265
-msgid "Toggle Zoom State"
-msgstr "Letzten Zoom wählen"
-
-#: editor_actions.cc:267
-msgid "Expand Track Height"
-msgstr "Spurhöhe vergrößern"
-
-#: editor_actions.cc:268
-msgid "Shrink Track Height"
-msgstr "Spurhöhe verkleinern"
-
-#: editor_actions.cc:270
-msgid "Move Selected Tracks Up"
-msgstr "Ausgewählte Spuren nach oben verschieben"
-
-#: editor_actions.cc:272
-msgid "Move Selected Tracks Down"
-msgstr "Ausgewählte Spuren nach unten verschieben"
-
-#: editor_actions.cc:275
-msgid "Scroll Tracks Up"
-msgstr "Spuren nach oben scrollen"
-
-#: editor_actions.cc:277
-msgid "Scroll Tracks Down"
-msgstr "Spuren nach unten scrollen"
-
-#: editor_actions.cc:279
-msgid "Step Tracks Up"
-msgstr "Spuren langsam nach oben scrollen"
-
-#: editor_actions.cc:281
-msgid "Step Tracks Down"
-msgstr "Spuren langsam nach unten scrollen"
-
-#: editor_actions.cc:284
-msgid "Scroll Backward"
-msgstr "Nach rechts scrollen"
-
-#: editor_actions.cc:285
-msgid "Scroll Forward"
-msgstr "Nach links scrollen"
-
-#: editor_actions.cc:286
-msgid "Center Playhead"
-msgstr "Positionszeiger zentrieren"
-
-#: editor_actions.cc:287
-msgid "Center Edit Point"
-msgstr "Arbeitspunkt zentrieren"
-
-#: editor_actions.cc:289
-msgid "Playhead Forward"
-msgstr "Positionszeiger vorwärts"
-
-#: editor_actions.cc:290
-msgid "Playhead Backward"
-msgstr "Positionszeiger rückwärts"
-
-#: editor_actions.cc:292
-msgid "Playhead to Active Mark"
-msgstr "Positionszeiger zur aktiven Markierung"
-
-#: editor_actions.cc:293
-msgid "Active Mark to Playhead"
-msgstr "Aktiven Marker zum Positionszeiger verschieben"
-
-#: editor_actions.cc:295
-msgid "Use Skip Ranges"
-msgstr "Benutze Sprungbereiche"
-
-#: editor_actions.cc:302
-msgid "Play Selected Regions"
-msgstr "Ausgewählte Regionen wiedergeben"
-
-#: editor_actions.cc:304
-msgid "Play from Edit Point and Return"
-msgstr "Wiedergabe ab Arbeitspunkt & Zurück"
-
-#: editor_actions.cc:306
-msgid "Play Edit Range"
-msgstr "Editierbereich wiedergeben"
-
-#: editor_actions.cc:308
-msgid "Playhead to Mouse"
-msgstr "Positionszeiger zur Mausposition"
-
-#: editor_actions.cc:309
-msgid "Active Marker to Mouse"
-msgstr "Aktiven Marker zur Mausposition"
-
-#: editor_actions.cc:319
-msgid "Undo Selection Change"
-msgstr "Auswahländerung rückgängig machen"
-
-#: editor_actions.cc:320
-msgid "Redo Selection Change"
-msgstr "Auswahländerung wiederherstellen"
-
-#: editor_actions.cc:322
-msgid "Export Audio"
-msgstr "Audio exportieren"
-
-#: editor_actions.cc:323 export_dialog.cc:396
-msgid "Export Range"
-msgstr "Bereich exportieren"
-
-#: editor_actions.cc:328
-msgid "Separate Using Punch Range"
-msgstr "an Punch-Bereichsgrenzen teilen"
-
-#: editor_actions.cc:331
-msgid "Separate Using Loop Range"
-msgstr "an Schleifengrenzen teilen"
-
-#: editor_actions.cc:334 editor_actions.cc:356
-msgid "Crop"
-msgstr "Auf Bereich zuschneiden"
-
-#: editor_actions.cc:344
-msgid "Fade Range Selection"
-msgstr "Bereichsauswahl faden"
-
-#: editor_actions.cc:346
-msgid "Set Tempo from Edit Range = Bar"
-msgstr "Editierbereich = Taktlänge setzen"
-
-#: editor_actions.cc:348
-msgid "Log"
-msgstr "Log"
-
-#: editor_actions.cc:351 editor_actions.cc:353
-msgid "Move to Next Transient"
-msgstr "Zum nächsten Transienten bewegen"
-
-#: editor_actions.cc:352 editor_actions.cc:354
-msgid "Move to Previous Transient"
-msgstr "Zum vorigen Transienten bewegen"
-
-#: editor_actions.cc:358 editor_actions.cc:361
-msgid "Start Range"
-msgstr "Bereich beginnen"
-
-#: editor_actions.cc:359 editor_actions.cc:362
-msgid "Finish Range"
-msgstr "Bereich beenden"
-
-#: editor_actions.cc:394
-msgid "Follow Playhead"
-msgstr "Positionszeiger folgen"
-
-#: editor_actions.cc:395
-msgid "Remove Last Capture"
-msgstr "Letzte Aufnahme entfernen"
-
-#: editor_actions.cc:397
-msgid "Stationary Playhead"
-msgstr "stehender Positionszeiger"
-
-#: editor_actions.cc:399 insert_time_dialog.cc:32
-msgid "Insert Time"
-msgstr "Stille Einfügen"
-
-#: editor_actions.cc:402
-msgid "Toggle Active"
-msgstr "Spur Aktivieren / Deaktivieren"
-
-#: editor_actions.cc:404 editor_actions.cc:1766 editor_markers.cc:921
-#: editor_markers.cc:986 editor_snapshots.cc:122 mixer_strip.cc:1550
-#: route_time_axis.cc:856
-msgid "Remove"
-msgstr "Löschen"
-
-#: editor_actions.cc:409
-msgid "Fit Selection (Vertical)"
-msgstr "Auswahl einpassen (vertikal)"
-
-#: editor_actions.cc:411 time_axis_view.cc:1371
-msgid "Largest"
-msgstr "Am größten"
-
-#: editor_actions.cc:414 time_axis_view.cc:1372
-msgid "Larger"
-msgstr "Größer"
-
-#: editor_actions.cc:417 editor_rulers.cc:249 time_axis_view.cc:1373
-msgid "Large"
-msgstr "Groß"
-
-#: editor_actions.cc:423 editor_rulers.cc:253 time_axis_view.cc:1375
-msgid "Small"
-msgstr "Klein"
-
-#: editor_actions.cc:427
-msgid "Sound Selected MIDI Notes"
-msgstr "ausgewählte Noten abspielen"
-
-#: editor_actions.cc:432
-msgid "Zoom Focus Left"
-msgstr "Am linken Rand ausrichten"
-
-#: editor_actions.cc:433
-msgid "Zoom Focus Right"
-msgstr "Am rechten Rand ausrichten"
-
-#: editor_actions.cc:434
-msgid "Zoom Focus Center"
-msgstr "Zentriert ausrichten"
-
-#: editor_actions.cc:435
-msgid "Zoom Focus Playhead"
-msgstr "Am Positionszeiger ausrichten"
-
-#: editor_actions.cc:436
-msgid "Zoom Focus Mouse"
-msgstr "Zoom Fokus zur Maus"
-
-#: editor_actions.cc:437
-msgid "Zoom Focus Edit Point"
-msgstr "Zoom Fokus zu Arbeitspunkt"
-
-#: editor_actions.cc:439
-msgid "Next Zoom Focus"
-msgstr "Zoom FokusNächster "
-
-#: editor_actions.cc:445
-msgid "Smart Object Mode"
-msgstr "Smarter Objektmodus"
-
-#: editor_actions.cc:448
-msgid "Smart"
-msgstr "Smart"
-
-#: editor_actions.cc:451
-msgid "Object Tool"
-msgstr "Objektwerkzeug"
-
-#: editor_actions.cc:456
-msgid "Range Tool"
-msgstr "Bereich-Werkzeug (Range)"
-
-#: editor_actions.cc:461
-msgid "Note Drawing Tool"
-msgstr "Noten-Malwerkzeug"
-
-#: editor_actions.cc:466
-msgid "Audition Tool"
-msgstr "Vorhör-Werkzeug"
-
-#: editor_actions.cc:471
-msgid "Time FX Tool"
-msgstr "TimeFX-Werkzeug"
-
-#: editor_actions.cc:476
-msgid "Content Tool"
-msgstr "Inhaltswerkzeug"
-
-#: editor_actions.cc:482
-msgid "Cut Tool"
-msgstr "Schneidewerkzeug"
-
-#: editor_actions.cc:488
-msgid "Step Mouse Mode"
-msgstr "Schritt-Mausmodus"
-
-#: editor_actions.cc:495
-msgid "Change Edit Point"
-msgstr "Arbeitspunkt ändern"
-
-#: editor_actions.cc:496
-msgid "Change Edit Point Including Marker"
-msgstr "Arbeitspunkt ändern (auch auf Marker wechseln)"
-
-#: editor_actions.cc:501
-msgid "EditMode|Lock"
-msgstr "Sperren"
-
-#: editor_actions.cc:502
-msgid "Cycle Edit Mode"
-msgstr "Editiermodus weiterschalten"
-
-#: editor_actions.cc:504
-msgid "Snap to"
-msgstr "Einrasten"
-
-#: editor_actions.cc:505
-msgid "Snap Mode"
-msgstr "Einrastmodus"
-
-#: editor_actions.cc:512
-msgid "Next Snap Mode"
-msgstr "Nächster Einrastmodus"
-
-#: editor_actions.cc:513
-msgid "Next Snap Choice"
-msgstr "Nächste Einrastmöglichkeit"
-
-#: editor_actions.cc:514
-msgid "Next Musical Snap Choice"
-msgstr "Nächster Einrastmöglichkeit (musikalisch)"
-
-#: editor_actions.cc:515
-msgid "Previous Snap Choice"
-msgstr "Vorige Einrastmöglichkeit"
-
-#: editor_actions.cc:516
-msgid "Previous Musical Snap Choice"
-msgstr " Vorige Einrastmöglichkeit (musikalisch)"
-
-#: editor_actions.cc:521
-msgid "Snap to CD Frame"
-msgstr "An CD-Frames einrasten"
-
-#: editor_actions.cc:522
-msgid "Snap to Timecode Frame"
-msgstr "An Timecode-Frames einrasten"
-
-#: editor_actions.cc:523
-msgid "Snap to Timecode Seconds"
-msgstr "An Timecode-Sekunden einrasten"
-
-#: editor_actions.cc:524
-msgid "Snap to Timecode Minutes"
-msgstr "An Timecode-Minuten einrasten"
-
-#: editor_actions.cc:525
-msgid "Snap to Seconds"
-msgstr "An Sekunden einrasten"
-
-#: editor_actions.cc:526
-msgid "Snap to Minutes"
-msgstr "An Minuten einrasten"
-
-#: editor_actions.cc:528
-msgid "Snap to One Twenty Eighths"
-msgstr "An Schläge/28 einrasten"
-
-#: editor_actions.cc:529
-msgid "Snap to Sixty Fourths"
-msgstr "An Schläge/128 einrasten"
-
-#: editor_actions.cc:530
-msgid "Snap to Thirty Seconds"
-msgstr "An Schläge/32 einrasten"
-
-#: editor_actions.cc:531
-msgid "Snap to Twenty Eighths"
-msgstr "An Schläge/28 einrasten"
-
-#: editor_actions.cc:532
-msgid "Snap to Twenty Fourths"
-msgstr "An Schläge/24 einrasten"
-
-#: editor_actions.cc:533
-msgid "Snap to Twentieths"
-msgstr "An Schläge/20 einrasten"
-
-#: editor_actions.cc:534
-msgid "Snap to Sixteenths"
-msgstr "An Schläge/16 einrasten"
-
-#: editor_actions.cc:535
-msgid "Snap to Fourteenths"
-msgstr "An Schläge/14 einrasten"
-
-#: editor_actions.cc:536
-msgid "Snap to Twelfths"
-msgstr "An Schläge/12 einrasten"
-
-#: editor_actions.cc:537
-msgid "Snap to Tenths"
-msgstr "An Schläge/10 einrasten"
-
-#: editor_actions.cc:538
-msgid "Snap to Eighths"
-msgstr "An Schläge/8 einrasten"
-
-#: editor_actions.cc:539
-msgid "Snap to Sevenths"
-msgstr "An Schläge/7 einrasten"
-
-#: editor_actions.cc:540
-msgid "Snap to Sixths"
-msgstr "An Schläge/6 einrasten"
-
-#: editor_actions.cc:541
-msgid "Snap to Fifths"
-msgstr "An Schläge/5 einrasten"
-
-#: editor_actions.cc:542
-msgid "Snap to Quarters"
-msgstr "An Schläge/4 einrasten"
-
-#: editor_actions.cc:543
-msgid "Snap to Thirds"
-msgstr "An Triolen einrasten"
-
-#: editor_actions.cc:544
-msgid "Snap to Halves"
-msgstr "An Schläge/2 einrasten"
-
-#: editor_actions.cc:546
-msgid "Snap to Beat"
-msgstr "An Schlägen einrasten"
-
-#: editor_actions.cc:547
-msgid "Snap to Bar"
-msgstr "An Takten einrasten"
-
-#: editor_actions.cc:548
-msgid "Snap to Mark"
-msgstr "An Markern einrasten"
-
-#: editor_actions.cc:549
-msgid "Snap to Region Start"
-msgstr "An Regionenanfang einrasten"
-
-#: editor_actions.cc:550
-msgid "Snap to Region End"
-msgstr "An Regionenende einrasten"
-
-#: editor_actions.cc:551
-msgid "Snap to Region Sync"
-msgstr "An Regionen-Synchronisationspunkt einrasten"
-
-#: editor_actions.cc:552
-msgid "Snap to Region Boundary"
-msgstr "An Regionengrenzen einrasten"
-
-#: editor_actions.cc:554
-msgid "Show Marker Lines"
-msgstr "Markerlinien anzeigen"
-
-#: editor_actions.cc:564
-msgid "Loop/Punch"
-msgstr "Schleifen/Punchbereiche"
-
-#: editor_actions.cc:568
-msgid "Min:Sec"
-msgstr "Min:Sek"
-
-#: editor_actions.cc:570 editor_actions.cc:573 editor_rulers.cc:271
-msgid "Video Monitor"
-msgstr "Videomonitor"
-
-#: editor_actions.cc:572 rc_option_editor.cc:2260
-msgid "Video"
-msgstr "Video"
-
-#: editor_actions.cc:575
-msgid "Always on Top"
-msgstr "Immer oben"
-
-#: editor_actions.cc:577
-msgid "Frame number"
-msgstr "Framenummer"
-
-#: editor_actions.cc:578
-msgid "Timecode Background"
-msgstr "Timecode-Hintergrund"
-
-#: editor_actions.cc:579
-msgid "Fullscreen"
-msgstr "Vollbild"
-
-#: editor_actions.cc:580
-msgid "Letterbox"
-msgstr "Letterbox"
-
-#: editor_actions.cc:581
-msgid "Original Size"
-msgstr "Originalgröße"
-
-#: editor_actions.cc:638
-msgid "Sort"
-msgstr "Sortieren"
-
-#: editor_actions.cc:649 editor_routes.cc:476 mixer_ui.cc:1196
-msgid "Show All"
-msgstr "Alles anzeigen"
-
-#: editor_actions.cc:650
-msgid "Show Automatic Regions"
-msgstr "Automatische Regionen anzeigen"
-
-#: editor_actions.cc:652
-msgid "Ascending"
-msgstr "aufsteigend"
-
-#: editor_actions.cc:654
-msgid "Descending"
-msgstr "absteigend"
-
-#: editor_actions.cc:657
-msgid "By Region Name"
-msgstr "nach Name der Region"
-
-#: editor_actions.cc:659
-msgid "By Region Length"
-msgstr "nach Länge der Region"
-
-#: editor_actions.cc:661
-msgid "By Region Position"
-msgstr "nach Position der Region"
-
-#: editor_actions.cc:663
-msgid "By Region Timestamp"
-msgstr "nach Zeitstempel der Region"
-
-#: editor_actions.cc:665
-msgid "By Region Start in File"
-msgstr "nach Anfang der Region in der Datei"
-
-#: editor_actions.cc:667
-msgid "By Region End in File"
-msgstr "nach Ende der Region in der Datei"
-
-#: editor_actions.cc:669
-msgid "By Source File Name"
-msgstr "nach Namen der Quelldatei"
-
-#: editor_actions.cc:671
-msgid "By Source File Length"
-msgstr "nach Länge der Quelldatei"
-
-#: editor_actions.cc:673
-msgid "By Source File Creation Date"
-msgstr "nach Erstellungsdatum der Quelldatei"
-
-#: editor_actions.cc:675
-msgid "By Source Filesystem"
-msgstr "nach Dateisystem der Quelle"
-
-#: editor_actions.cc:678
-msgid "Remove Unused"
-msgstr "Ungenutzte entfernen"
-
-#: editor_actions.cc:682 editor_audio_import.cc:282
-#: session_import_dialog.cc:75 session_import_dialog.cc:95
-#: session_metadata_dialog.cc:418 editor_videotimeline.cc:91
-msgid "Import"
-msgstr "Importieren"
-
-#: editor_actions.cc:685
-msgid "Import to Region List..."
-msgstr "In Regionenliste importieren"
-
-#: editor_actions.cc:688 session_import_dialog.cc:44
-msgid "Import From Session"
-msgstr "Aus Projekt importieren"
-
-#: editor_actions.cc:692
-msgid "Bring all media into session folder"
-msgstr "Alle Medien in Projektordner kopieren"
-
-#: editor_actions.cc:695
-msgid "Show Summary"
-msgstr "Projektübersicht anzeigen"
-
-#: editor_actions.cc:697
-msgid "Show Group Tabs"
-msgstr "Gruppierungsleiste anzeigen"
-
-#: editor_actions.cc:699
-msgid "Show Measure Lines"
-msgstr "Zeige Taktlinien"
-
-#: editor_actions.cc:703
-msgid "Show Logo"
-msgstr "Zeige Logo"
-
-#: editor_actions.cc:707
-msgid "Toggle MIDI Input Active for Editor-Selected Tracks/Busses"
-msgstr "MIDI Eingang für im Editor ausgewählte Spuren/Busse de/aktivieren"
-
-#: editor_actions.cc:730
-msgid "Loaded editor bindings from %1"
-msgstr "Editor-Tastenkürzel aus %1 geladen"
-
-#: editor_actions.cc:732
-msgid "Could not find editor.bindings in search path %1"
-msgstr "Konnte editor.bindings im Suchpfad %1 nicht finden"
-
-#: editor_actions.cc:1076 editor_actions.cc:1472 editor_actions.cc:1483
-#: editor_actions.cc:1536 editor_actions.cc:1547 editor_actions.cc:1594
-#: editor_actions.cc:1604 editor_regions.cc:1563
-msgid "programming error: %1: %2"
-msgstr "Programmierfehler: %1: %2"
-
-#: editor_actions.cc:1772
-msgid "Raise"
-msgstr "Nach oben"
-
-#: editor_actions.cc:1775
-msgid "Raise to Top"
-msgstr "Ganz nach oben"
-
-#: editor_actions.cc:1778
-msgid "Lower"
-msgstr "Nach unten"
-
-#: editor_actions.cc:1781
-msgid "Lower to Bottom"
-msgstr "Ganz nach unten"
-
-#: editor_actions.cc:1784
-msgid "Move to Original Position"
-msgstr "Zur Ursprungsposition verschieben"
-
-#: editor_actions.cc:1789
-msgid "Lock to Video"
-msgstr "an Video koppeln"
-
-#: editor_actions.cc:1794 editor_markers.cc:912
-msgid "Glue to Bars and Beats"
-msgstr "An Takte und Schläge binden"
-
-#: editor_actions.cc:1799
-msgid "Remove Sync"
-msgstr "Synchronisationspunkt entfernen"
-
-#: editor_actions.cc:1802 mixer_strip.cc:2013 monitor_section.cc:272
-#: monitor_section.cc:349 route_time_axis.cc:253 route_time_axis.cc:526
-msgid "Mute"
-msgstr "Mute"
-
-#: editor_actions.cc:1805
-msgid "Normalize..."
-msgstr "Normalisieren..."
-
-#: editor_actions.cc:1808
-msgid "Reverse"
-msgstr "Umkehren"
-
-#: editor_actions.cc:1811
-msgid "Make Mono Regions"
-msgstr "In Mono-Regionen umwandeln"
-
-#: editor_actions.cc:1814
-msgid "Boost Gain"
-msgstr "Lautstärke erhöhen"
-
-#: editor_actions.cc:1817
-msgid "Cut Gain"
-msgstr "Lautstärke reduzieren"
-
-#: editor_actions.cc:1820
-msgid "Pitch Shift..."
-msgstr "Tonhöhe ändern..."
-
-#: editor_actions.cc:1823
-msgid "Transpose..."
-msgstr "Transponieren..."
-
-#: editor_actions.cc:1826
-msgid "Opaque"
-msgstr "Deckend"
-
-#: editor_actions.cc:1830 editor_regions.cc:117
-msgid "Fade In"
-msgstr "Fade In"
-
-#: editor_actions.cc:1835 editor_regions.cc:118
-msgid "Fade Out"
-msgstr "Fade Out"
-
-#: editor_actions.cc:1850
-msgid "Multi-Duplicate..."
-msgstr "Mehrfach duplizieren..."
-
-#: editor_actions.cc:1855
-msgid "Fill Track"
-msgstr "Spur auffüllen"
-
-#: editor_actions.cc:1859 editor_markers.cc:1000
-msgid "Set Loop Range"
-msgstr "Schleife erstellen"
-
-#: editor_actions.cc:1866
-msgid "Set Punch"
-msgstr "Punchbereich erstellen"
-
-#: editor_actions.cc:1870
-msgid "Add Single Range Marker"
-msgstr "Einzelnen Bereichsmarker einfügen"
-
-#: editor_actions.cc:1875
-msgid "Add Range Marker Per Region"
-msgstr "Einen Bereichsmarker pro Region einfügen"
-
-#: editor_actions.cc:1879
-msgid "Snap Position To Grid"
-msgstr "Positionszeiger einrasten"
-
-#: editor_actions.cc:1882
-msgid "Close Gaps"
-msgstr "Lücken schließen"
-
-#: editor_actions.cc:1885
-msgid "Rhythm Ferret..."
-msgstr "Rhythm Ferret..."
-
-#: editor_actions.cc:1888
-msgid "Export..."
-msgstr "Exportieren..."
-
-#: editor_actions.cc:1894
-msgid "Separate Under"
-msgstr "Bereich unter aktueller Region entfernen"
-
-#: editor_actions.cc:1898 editor_actions.cc:1899
-msgid "Set Fade In Length"
-msgstr "Fade-In bis Positionszeiger"
-
-#: editor_actions.cc:1900 editor_actions.cc:1901
-msgid "Set Fade Out Length"
-msgstr "Fade-Out ab Positionszeiger"
-
-#: editor_actions.cc:1903
-msgid "Set Tempo from Region = Bar"
-msgstr "Regionlänge = Taktlänge setzen"
-
-#: editor_actions.cc:1908
-msgid "Split at Percussion Onsets"
-msgstr "Regionen an perkussiven Schlägen teilen"
-
-#: editor_actions.cc:1913
-msgid "List Editor..."
-msgstr "Eventlisteneditor..."
-
-#: editor_actions.cc:1916
-msgid "Properties..."
-msgstr "Eigenschaften..."
-
-#: editor_actions.cc:1920
-msgid "Bounce (with processing)"
-msgstr "Bounce (Post-Mixer)"
-
-#: editor_actions.cc:1921
-msgid "Bounce (without processing)"
-msgstr "Bounce (Pre-Mixer)"
-
-#: editor_actions.cc:1922
-msgid "Combine"
-msgstr "Verbinden (combine)"
-
-#: editor_actions.cc:1923
-msgid "Uncombine"
-msgstr "Trennen (uncombine)"
-
-#: editor_actions.cc:1925
-msgid "Spectral Analysis..."
-msgstr "FFT-Analyse"
-
-#: editor_actions.cc:1927
-msgid "Reset Envelope"
-msgstr "Lautstärkekurve zurücksetzen"
-
-#: editor_actions.cc:1929
-msgid "Reset Gain"
-msgstr "Lautstärke zurücksetzen"
-
-#: editor_actions.cc:1934
-msgid "Envelope Active"
-msgstr "Lautstärkekurve ist aktiv"
-
-#: editor_actions.cc:1942 editor_actions.cc:1943
-msgid "Insert Patch Change..."
-msgstr "Patch Change einfügen..."
-
-#: editor_actions.cc:1944
-msgid "Unlink from other copies"
-msgstr "Von anderen Kopien entkoppeln"
-
-#: editor_actions.cc:1945
-msgid "Strip Silence..."
-msgstr "Stille entfernen..."
-
-#: editor_actions.cc:1946
-msgid "Set Range Selection"
-msgstr "Bereich auswählen"
-
-#: editor_actions.cc:1948 editor_actions.cc:1949
-msgid "Nudge Later"
-msgstr "Schritt nach hinten"
-
-#: editor_actions.cc:1950 editor_actions.cc:1951
-msgid "Nudge Earlier"
-msgstr "Schritt nach vorne"
-
-#: editor_actions.cc:1953
-msgid "Sequence Regions"
-msgstr "Regionen aneinanderreihen"
-
-#: editor_actions.cc:1958
-msgid "Nudge Later by Capture Offset"
-msgstr "Schritt nach hinten um Aufnahme-Offset"
-
-#: editor_actions.cc:1965
-msgid "Nudge Earlier by Capture Offset"
-msgstr "Schritt nach vorne um Aufnahme-Offset"
-
-#: editor_actions.cc:1969
-msgid "Trim to Loop"
-msgstr "Auf Schleife kürzen"
-
-#: editor_actions.cc:1970
-msgid "Trim to Punch"
-msgstr "Auf Punchbereich kürzen"
-
-#: editor_actions.cc:1972
-msgid "Trim to Previous"
-msgstr "Zur vorherigen Region aufschließen"
-
-#: editor_actions.cc:1973
-msgid "Trim to Next"
-msgstr "Zur nächsten Region aufschließen"
-
-#: editor_actions.cc:1980
-msgid "Insert Region From Region List"
-msgstr "Region von Regionenliste hinzufügen"
-
-#: editor_actions.cc:1986
-msgid "Set Sync Position"
-msgstr "Synchronisationspunkt setzen"
-
-#: editor_actions.cc:1987
-msgid "Place Transient"
-msgstr "Transienten setzen"
-
-#: editor_actions.cc:1988
-msgid "Split/Separate"
-msgstr "Teilen/Auftrennen"
-
-#: editor_actions.cc:1989
-msgid "Trim Start at Edit Point"
-msgstr "Anfang der Region am Arbeitspunkt abschneiden"
-
-#: editor_actions.cc:1990
-msgid "Trim End at Edit Point"
-msgstr "Ende der Region am Arbeitspunkt abschneiden"
-
-#: editor_actions.cc:1995
-msgid "Align Start"
-msgstr "Anfang ausrichten"
-
-#: editor_actions.cc:2002
-msgid "Align Start Relative"
-msgstr "Anfang relativ ausrichten"
-
-#: editor_actions.cc:2006
-msgid "Align End"
-msgstr "Ende ausrichten"
-
-#: editor_actions.cc:2011
-msgid "Align End Relative"
-msgstr "Ende relativ ausrichten"
-
-#: editor_actions.cc:2018
-msgid "Align Sync"
-msgstr "Synchronisationspunkt ausrichten"
-
-#: editor_actions.cc:2025
-msgid "Align Sync Relative"
-msgstr "Synchronisationspunkt relativ ausrichten"
-
-#: editor_actions.cc:2029 editor_actions.cc:2032
-msgid "Choose Top..."
-msgstr "Oberste Region auswählen..."
-
-#: editor_audio_import.cc:77 editor_audio_import.cc:99
-msgid "You can't import or embed an audiofile until you have a session loaded."
-msgstr ""
-"Sie können keine Audiodatei importieren, solange kein Projekt geladen ist."
-
-#: editor_audio_import.cc:83 editor_audio_import.cc:127
-msgid "Add Existing Media"
-msgstr "Vorhandenes Material importieren"
-
-#: editor_audio_import.cc:175
-msgid ""
-"The session already contains a source file named %1.  Do you want to import "
-"%1 as a new file, or skip it?"
-msgstr ""
-"Das Projekt enthält bereits eine Datei namens %1. Wollen Sie %1 als neue "
-"Datei importieren, oder überspringen?"
-
-#: editor_audio_import.cc:177
-msgid ""
-"The session already contains a source file named %1.  Do you want to import "
-"%2 as a new source, or skip it?"
-msgstr ""
-"Das Projekt enthält bereits eine Datei namens %1. Wollen Sie %2 als neue "
-"Quelle importieren, oder überspringen?"
-
-#: editor_audio_import.cc:282 editor_videotimeline.cc:91
-msgid "Cancel Import"
-msgstr "Importieren Abbrechen"
-
-#: editor_audio_import.cc:559
-msgid "Editor: cannot open file \"%1\", (%2)"
-msgstr "Editor: kann die Datei \"%1\" nicht öffnen (%2)"
-
-#: editor_audio_import.cc:567
-msgid "Cancel entire import"
-msgstr "Importieren Abbrechen"
-
-#: editor_audio_import.cc:568
-msgid "Don't embed it"
-msgstr "Nicht einbetten"
-
-#: editor_audio_import.cc:569
-msgid "Embed all without questions"
-msgstr "Alle Importieren ohne nachzufragen"
-
-#: editor_audio_import.cc:572 editor_audio_import.cc:598
-#: export_format_dialog.cc:60
-msgid "Sample rate"
-msgstr "Samplerate"
-
-#: editor_audio_import.cc:573 editor_audio_import.cc:599
-msgid ""
-"%1\n"
-"This audiofile's sample rate doesn't match the session sample rate!"
-msgstr ""
-"%1\n"
-"Die Samplerate dieser Audiodatei unterscheidet sich von der Samplerate "
-"dieses Projekts."
-
-#: editor_audio_import.cc:595
-msgid "Embed it anyway"
-msgstr "Trotzdem importieren"
-
-#: editor_canvas_events.cc:1306 editor_drag.cc:1381
-msgid "Could not create new track after region placed in the drop zone"
-msgstr ""
-"Konnte keine neue Spur erzeugen, nachdem die Region in der Drop Zone "
-"platziert wurde"
-
-#: editor_drag.cc:1266
-msgid "fixed time region drag"
-msgstr "Region zeitgleich verschieben"
-
-#: editor_drag.cc:2214
-msgid "Ripple drag"
-msgstr "Wellenmodus-Ziehen"
-
-#: editor_drag.cc:2365 midi_region_view.cc:2813
-msgid "resize notes"
-msgstr "Notenlänge ändern"
-
-#: editor_drag.cc:2517
-msgid "Video Start:"
-msgstr "Videostart"
-
-#: editor_drag.cc:2519
-msgid "Diff:"
-msgstr "Diff:"
-
-#: editor_drag.cc:2538
-msgid "Move Video"
-msgstr "Bewege Video"
-
-#: editor_drag.cc:3046
-msgid "copy meter mark"
-msgstr "Taktmarker kopieren"
-
-#: editor_drag.cc:3054
-msgid "move meter mark"
-msgstr "Taktwechsel bewegen"
-
-#: editor_drag.cc:3177
-msgid "copy tempo mark"
-msgstr "Tempomarker kopieren"
-
-#: editor_drag.cc:3185
-msgid "move tempo mark"
-msgstr "Tempowechsel bewegen"
-
-#: editor_drag.cc:3412
-msgid "change fade in length"
-msgstr "Ändere Fade-In Länge"
-
-#: editor_drag.cc:3526
-msgid "change fade out length"
-msgstr "Fade-Out verändern"
-
-#: editor_drag.cc:3880
-msgid "move marker"
-msgstr "Marker bewegen"
-
-#: editor_drag.cc:4490
-msgid "An error occurred while executing time stretch operation"
-msgstr "Beim Ausführen der Timestretch-Operation trat ein Fehler auf"
-
-#: editor_drag.cc:4947
-msgid "programming_error: %1"
-msgstr "Programmierfehler: %1"
-
-#: editor_drag.cc:5016 editor_drag.cc:5026
-msgid "new skip marker"
-msgstr "neuer Sprungmarker"
-
-#: editor_drag.cc:5017
-msgid "skip"
-msgstr "Sprung"
-
-#: editor_drag.cc:5021 location_ui.cc:56
-msgid "CD"
-msgstr "CD"
-
-#: editor_drag.cc:5022
-msgid "new CD marker"
-msgstr "neuer CD Marker"
-
-#: editor_drag.cc:5027 editor_route_groups.cc:437 mixer_ui.cc:1493
-msgid "unnamed"
-msgstr "unbenannt"
-
-#: editor_drag.cc:5309
-msgid "Automation range drag created for invalid region type"
-msgstr "Automationsbereichs-Ziehen für ungültigen Regionstyp erzeugt"
-
-#: editor_route_groups.cc:96
-msgid "Col"
-msgstr "Spalte"
-
-#: editor_route_groups.cc:96
-msgid "Group Tab Color"
-msgstr "Farbe des Gruppen-Reiters"
-
-#: editor_route_groups.cc:97
-msgid "Name of Group"
-msgstr "Gruppenname"
-
-#: editor_route_groups.cc:98 editor_routes.cc:207
-msgid "Visible|V"
-msgstr "V"
-
-#: editor_route_groups.cc:98
-msgid "Group is visible?"
-msgstr "Gruppe sichtbar?"
-
-#: editor_route_groups.cc:99
-msgid "On"
-msgstr "An"
-
-#: editor_route_groups.cc:99
-msgid "Group is enabled?"
-msgstr "Ist die Gruppe aktiviert?"
-
-#: editor_route_groups.cc:100
-msgid "Group|G"
-msgstr "G"
-
-#: editor_route_groups.cc:100
-msgid "Sharing Gain?"
-msgstr "Lautstärke teilen?"
-
-#: editor_route_groups.cc:101
-msgid "Relative|Rel"
-msgstr "Rel"
-
-#: editor_route_groups.cc:101
-msgid "Relative Gain Changes?"
-msgstr "Relative Lautstärke-Änderungen"
-
-#: editor_route_groups.cc:102 editor_regions.cc:121 editor_routes.cc:211
-#: mixer_strip.cc:2039 meter_strip.cc:363 route_time_axis.cc:2709
-#: time_axis_view.cc:1190
-msgid "Mute|M"
-msgstr "M"
-
-#: editor_route_groups.cc:102
-msgid "Sharing Mute?"
-msgstr "Stummschaltung teilen?"
-
-#: editor_route_groups.cc:103 editor_routes.cc:212 mixer_strip.cc:2049
-#: meter_strip.cc:371 route_time_axis.cc:2706
-msgid "Solo|S"
-msgstr "S"
-
-#: editor_route_groups.cc:103
-msgid "Sharing Solo?"
-msgstr "Solo teilen?"
-
-#: editor_route_groups.cc:104 midi_time_axis.cc:1622 midi_time_axis.cc:1625
-#: midi_time_axis.cc:1628
-msgid "Rec"
-msgstr "Rec"
-
-#: editor_route_groups.cc:104
-msgid "Sharing Record-enable Status?"
-msgstr "Aufnahmebereitschaft teilen?"
-
-#: editor_route_groups.cc:105
-msgid "Monitoring|Mon"
-msgstr "Mon"
-
-#: editor_route_groups.cc:105
-msgid "Sharing Monitoring Choice?"
-msgstr "Monitoring-Wahl teilen?"
-
-#: editor_route_groups.cc:106
-msgid "Selection|Sel"
-msgstr "Sel"
-
-#: editor_route_groups.cc:106
-msgid "Sharing Selected/Editing Status?"
-msgstr "Auswahl-/Editierzustand teilen?"
-
-#: editor_route_groups.cc:107 editor_routes.cc:208
-msgid "Active|A"
-msgstr "A"
-
-#: editor_route_groups.cc:107
-msgid "Sharing Active Status?"
-msgstr "Einschaltzustand teilen?"
-
-#: editor_export_audio.cc:92 editor_markers.cc:740 editor_markers.cc:827
-#: editor_markers.cc:1012 editor_markers.cc:1030 editor_markers.cc:1048
-#: editor_markers.cc:1067 editor_markers.cc:1086 editor_markers.cc:1116
-#: editor_markers.cc:1147 editor_markers.cc:1177 editor_markers.cc:1205
-#: editor_markers.cc:1236 editor_markers.cc:1261 editor_markers.cc:1312
-#: editor_markers.cc:1356 editor_markers.cc:1382 editor_markers.cc:1576
-#: editor_mouse.cc:2120
-msgid "programming error: marker canvas item has no marker object pointer!"
-msgstr "Programmierfehler: marker canvas item has no marker object pointer!"
-
-#: editor_export_audio.cc:145 editor_export_audio.cc:150
-msgid "File Exists!"
-msgstr "Datei existiert!"
-
-#: editor_export_audio.cc:153
-msgid "Overwrite Existing File"
-msgstr "Vorhandenes Material überschreiben"
-
-#: editor_group_tabs.cc:176
-msgid "Fit to Window"
-msgstr "An Fenster anpassen"
-
-#: editor_markers.cc:139
-msgid "start"
-msgstr "Start"
-
-#: editor_markers.cc:140
-msgid "end"
-msgstr "Ende"
-
-#: editor_markers.cc:657 editor_ops.cc:2085 editor_ops.cc:2107
-#: editor_ops.cc:2164 editor_ops.cc:2193 location_ui.cc:1023
-msgid "add marker"
-msgstr "Marker hinzufügen"
-
-#: editor_markers.cc:689 editor_markers.cc:1456
-msgid "set loop range"
-msgstr "Loopbereich festlegen"
-
-#: editor_markers.cc:705 editor_markers.cc:1462
-msgid "set punch range"
-msgstr "Punchbereich festlegen"
-
-#: editor_markers.cc:722 editor_ops.cc:4055
-msgid "range"
-msgstr "Bereich"
-
-#: editor_markers.cc:725
-msgid "new range marker"
-msgstr "Neuer Bereich"
-
-#: editor_markers.cc:758 editor_ops.cc:2129 location_ui.cc:859
-msgid "remove marker"
-msgstr "Marker entfernen"
-
-#: editor_markers.cc:894
-msgid "Locate to Here"
-msgstr "Hierhin setzen"
-
-#: editor_markers.cc:895
-msgid "Play from Here"
-msgstr "Wiedergabe ab hier"
-
-#: editor_markers.cc:896
-msgid "Move Mark to Playhead"
-msgstr "Marker zum Positionszeiger verschieben"
-
-#: editor_markers.cc:900
-msgid "Create Range to Next Marker"
-msgstr "Bereich bis zum nächsten Marker erstellen"
-
-#: editor_markers.cc:941
-msgid "Locate to Marker"
-msgstr "Positionszeiger zu Marker setzen"
-
-#: editor_markers.cc:942
-msgid "Play from Marker"
-msgstr "Wiedergabe ab Marker"
-
-#: editor_markers.cc:945
-msgid "Set Marker from Playhead"
-msgstr "Marker beim Positionszeiger erzeugen"
-
-#: editor_markers.cc:947
-msgid "Set Range from Selection"
-msgstr "Bereich aus Auswahl bilden"
-
-#: editor_markers.cc:957
-msgid "Hide Range"
-msgstr "Bereich verbergen"
-
-#: editor_markers.cc:958
-msgid "Rename Range..."
-msgstr "Bereich umbenennen..."
-
-#: editor_markers.cc:962
-msgid "Remove Range"
-msgstr "Bereich entfernen"
-
-#: editor_markers.cc:969
-msgid "Separate Regions in Range"
-msgstr "Regionen an Bereichsgrenzen teilen"
-
-#: editor_markers.cc:972
-msgid "Select Range"
-msgstr "Bereich auswählen"
-
-#: editor_markers.cc:1001
-msgid "Set Punch Range"
-msgstr "Punchbereich erstellen"
-
-#: editor_markers.cc:1407 editor_ops.cc:2040
-msgid "New Name:"
-msgstr "Neuer Name: "
-
-#: editor_markers.cc:1410
-msgid "Rename Mark"
-msgstr "Marker umbenennen"
-
-#: editor_markers.cc:1412
-msgid "Rename Range"
-msgstr "Bereich umbenennen"
-
-#: editor_markers.cc:1419 editor_mouse.cc:2137 processor_box.cc:1994
-#: processor_box.cc:2464 route_time_axis.cc:1096 route_ui.cc:1571
-msgid "Rename"
-msgstr "Umbenennen"
-
-#: editor_markers.cc:1432
-msgid "rename marker"
-msgstr "Marker umbenennen"
-
-#: editor_mixer.cc:90
-msgid "This screen is not tall enough to display the editor mixer"
-msgstr ""
-"Dieser Bildschirm ist nicht hoch genug, um den Editor-Mixer darzustellen"
-
-#: editor_mouse.cc:1223 editor_mouse.cc:1241 editor_tempodisplay.cc:270
-msgid ""
-"programming error: tempo marker canvas item has no marker object pointer!"
-msgstr ""
-"Programmierfehler: tempo marker canvas item has no marker object pointer!"
-
-#: editor_mouse.cc:1228 editor_tempodisplay.cc:275
-msgid "programming error: marker for tempo is not a tempo marker!"
-msgstr "Programmierfehler: marker for tempo is not a tempo marker!"
-
-#: editor_mouse.cc:1246 editor_tempodisplay.cc:375
-msgid "programming error: marker for meter is not a meter marker!"
-msgstr "Programmierfehler: marker for meter is not a meter marker!"
-
-#: editor_mouse.cc:1885 editor_mouse.cc:1910 editor_mouse.cc:1923
-msgid ""
-"programming error: control point canvas item has no control point object "
-"pointer!"
-msgstr ""
-"Programmierfehler: control point canvas item has no control point object "
-"pointer!"
-
-#: editor_mouse.cc:2058
-msgid "start point trim"
-msgstr "Startpunkt ändern"
-
-#: editor_mouse.cc:2083
-msgid "End point trim"
-msgstr "Endpunkt verändern"
-
-#: editor_mouse.cc:2135
-msgid "Name for region:"
-msgstr "Name für Region:"
-
-#: editor_ops.cc:165
-msgid "split"
-msgstr "teile"
-
-#: editor_ops.cc:339
-msgid "alter selection"
-msgstr "Auswahl ändern"
-
-#: editor_ops.cc:381
-msgid "nudge regions forward"
-msgstr "Regionen Schritt vorwärts"
-
-#: editor_ops.cc:404 editor_ops.cc:489
-msgid "nudge location forward"
-msgstr "Position Schritt vorwärts"
-
-#: editor_ops.cc:462
-msgid "nudge regions backward"
-msgstr "Regionen Schritt nach hinten"
-
-#: editor_ops.cc:551
-msgid "nudge forward"
-msgstr "Schritt vorwärts"
-
-#: editor_ops.cc:575
-msgid "nudge backward"
-msgstr "Schritt nach hinten"
-
-#: editor_ops.cc:618
-msgid "sequence regions"
-msgstr "Regionen aneinanderreihen"
-
-#: editor_ops.cc:694
-msgid "build_region_boundary_cache called with snap_type = %1"
-msgstr "build_region_boundary_cache wurde mit snap_type = %1 aufgerufen"
-
-#: editor_ops.cc:2042
-msgid "New Location Marker"
-msgstr "Neuer Positionsmarker"
-
-#: editor_ops.cc:2164
-msgid "add markers"
-msgstr "Marker hinzufügen"
-
-#: editor_ops.cc:2274
-msgid "clear markers"
-msgstr "Marker zurücksetzen"
-
-#: editor_ops.cc:2289
-msgid "clear ranges"
-msgstr "Bereiche zurücksetzen"
-
-#: editor_ops.cc:2305
-msgid "clear locations"
-msgstr "Positionen zurücksetzen"
-
-#: editor_ops.cc:2368
-msgid "insert region"
-msgstr "Region einfügen"
-
-#: editor_ops.cc:2559
-msgid "raise regions"
-msgstr "Regionen weiter nach oben"
-
-#: editor_ops.cc:2561
-msgid "raise region"
-msgstr "Region weiter nach oben"
-
-#: editor_ops.cc:2567
-msgid "raise regions to top"
-msgstr "Regionen ganz nach oben"
-
-#: editor_ops.cc:2569
-msgid "raise region to top"
-msgstr "Region ganz nach oben"
-
-#: editor_ops.cc:2575
-msgid "lower regions"
-msgstr "Regionen weiter nach unten"
-
-#: editor_ops.cc:2577 editor_ops.cc:2585
-msgid "lower region"
-msgstr "Region weiter nach unten"
-
-#: editor_ops.cc:2583
-msgid "lower regions to bottom"
-msgstr "Regionen ganz nach unten"
-
-#: editor_ops.cc:2668
-msgid "Rename Region"
-msgstr "Region umbenennen"
-
-#: editor_ops.cc:2670 processor_box.cc:1992 route_ui.cc:1569
-msgid "New name:"
-msgstr "Neuer Name: "
-
-#: editor_ops.cc:2987
-msgid "separate"
-msgstr "Teilen"
-
-#: editor_ops.cc:3099
-msgid "separate region under"
-msgstr "Bereich unter aktueller Region entfernen"
-
-#: editor_ops.cc:3220
-msgid "trim to selection"
-msgstr "Auf Auswahl kürzen"
-
-#: editor_ops.cc:3356
-msgid "set sync point"
-msgstr "Einrastpunkt definieren"
-
-#: editor_ops.cc:3380
-msgid "remove region sync"
-msgstr "Synchronisationspunkt löschen"
-
-#: editor_ops.cc:3402
-msgid "move regions to original position"
-msgstr "Regionen zu ihrer Ursprungsposition verschieben"
-
-#: editor_ops.cc:3404
-msgid "move region to original position"
-msgstr "Region zu ihrer Ursprungsposition verschieben"
-
-#: editor_ops.cc:3425
-msgid "align selection"
-msgstr "Auswahl ausrichten"
-
-#: editor_ops.cc:3499
-msgid "align selection (relative)"
-msgstr "Auswahl relativ ausrichten"
-
-#: editor_ops.cc:3533
-msgid "align region"
-msgstr "Region ausrichten"
-
-#: editor_ops.cc:3584
-msgid "trim front"
-msgstr "vorne abschneiden"
-
-#: editor_ops.cc:3584
-msgid "trim back"
-msgstr "hinten Abschneiden"
-
-#: editor_ops.cc:3614
-msgid "trim to loop"
-msgstr "Auf Schleife kürzen"
-
-#: editor_ops.cc:3624
-msgid "trim to punch"
-msgstr "Auf Punchbereich kürzen"
-
-#: editor_ops.cc:3686
-msgid "trim to region"
-msgstr "Auf Region kürzen"
-
-#: editor_ops.cc:3794
-msgid ""
-"This track/bus cannot be frozen because the signal adds or loses channels "
-"before reaching the outputs.\n"
-"This is typically caused by plugins that generate stereo output from mono "
-"input or vice versa."
-msgstr ""
-"Diese Spur/dieser Bus kann nicht eingefroren werden, da sich die Kanalanzahl "
-"des Signals vor dem Ausgang ändert.\n"
-"Typischerweise wird dies durch ein Plugin verursacht, das Stereo aus einer "
-"Monoquelle oder umgekehrt erzeugt."
-
-#: editor_ops.cc:3797
-msgid "Cannot freeze"
-msgstr "Einfrieren nicht möglich"
-
-#: editor_ops.cc:3803
-msgid ""
-"<b>%1</b>\n"
-"\n"
-"This track has at least one send/insert/return as part of its signal flow.\n"
-"\n"
-"Freezing will only process the signal as far as the first send/insert/return."
-msgstr ""
-"<b>%1</b>\n"
-"\n"
-"Der Signalfluss dieser Spur hat mindestens ein Send/Insert/Return.\n"
-"\n"
-"Einfrieren wird das Signal nur bis zum ersten Send/Insert/Return verarbeiten."
-
-#: editor_ops.cc:3807
-msgid "Freeze anyway"
-msgstr "Trotzdem einfrieren"
-
-#: editor_ops.cc:3808
-msgid "Don't freeze"
-msgstr "Nicht einfrieren"
-
-#: editor_ops.cc:3809
-msgid "Freeze Limits"
-msgstr "Einfrier-Grenzen"
-
-#: editor_ops.cc:3824
-msgid "Cancel Freeze"
-msgstr "Einfrieren abbrechen"
-
-#: editor_ops.cc:3854
-msgid ""
-"You can't perform this operation because the processing of the signal will "
-"cause one or more of the tracks to end up with a region with more channels "
-"than this track has inputs.\n"
-"\n"
-"You can do this without processing, which is a different operation."
-msgstr ""
-"Diese Operation kann nicht ausgeführt werden, da durch die "
-"Signalverarbeitung eine oder mehrere Spuren eine Region mit mehr Kanälen "
-"bekäme, als die Spur Eingänge hat.\n"
-"Ohne diese Signalverarbeitung können Sie das tun, das ist aber eine andere "
-"Operation."
-
-#: editor_ops.cc:3858
-msgid "Cannot bounce"
-msgstr "Kann nicht bouncen"
-
-#: editor_ops.cc:3869
-msgid "bounce range"
-msgstr "Bereich bouncen"
-
-#: editor_ops.cc:3971
-msgid "delete"
-msgstr "Löschen"
-
-#: editor_ops.cc:3974
-msgid "cut"
-msgstr "Ausschneiden"
-
-#: editor_ops.cc:3977
-msgid "copy"
-msgstr "Kopieren"
-
-#: editor_ops.cc:3980
-msgid "clear"
-msgstr "Leeren"
-
-#: editor_ops.cc:4028
-msgid "objects"
-msgstr "Objekte"
-
-#: editor_ops.cc:4238 editor_ops.cc:4270
-msgid "remove region"
-msgstr "Region(en) löschen"
-
-#: editor_ops.cc:4719
-msgid "duplicate selection"
-msgstr "Auswahl duplizieren"
-
-#: editor_ops.cc:4803
-msgid "nudge track"
-msgstr "Spur verschieben"
-
-#: editor_ops.cc:4840
-msgid ""
-"Do you really want to destroy the last capture?\n"
-"(This is destructive and cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich die letzte Aufnahme rückgängig machen?\n"
-"(Dies kann nicht rückgängig gemacht werden!)"
-
-#: editor_ops.cc:4843 editor_ops.cc:6845 editor_regions.cc:462
-#: editor_snapshots.cc:159
-msgid "No, do nothing."
-msgstr "Nein, nichts machen."
-
-#: editor_ops.cc:4844
-msgid "Yes, destroy it."
-msgstr "Ja, entfernen."
-
-#: editor_ops.cc:4846
-msgid "Destroy last capture"
-msgstr "Lösche letzte Aufnahme"
-
-#: editor_ops.cc:4906
-msgid "normalize"
-msgstr "Normalisieren"
-
-#: editor_ops.cc:5000
-msgid "reverse regions"
-msgstr "Regionen umkehren"
-
-#: editor_ops.cc:5034
-msgid "strip silence"
-msgstr "Stille entfernen"
-
-#: editor_ops.cc:5091
-msgid "Fork Region(s)"
-msgstr "Region(en) abzweigen"
-
-#: editor_ops.cc:5112
-msgid "Could not unlink %1"
-msgstr "Konnte die Bindung von %1 nicht lösen"
-
-#: editor_ops.cc:5326
-msgid "reset region gain"
-msgstr "Lautstärkekurve zurücksetzen"
-
-#: editor_ops.cc:5379
-msgid "region gain envelope active"
-msgstr "Lautstärkekurve aktiv"
-
-#: editor_ops.cc:5406
-msgid "toggle region lock"
-msgstr "Regionensperre umschalten"
-
-#: editor_ops.cc:5430
-msgid "Toggle Video Lock"
-msgstr "Videosperre umschalten"
-
-#: editor_ops.cc:5454
-msgid "region lock style"
-msgstr "Art der Regionensperre"
-
-#: editor_ops.cc:5479
-msgid "change region opacity"
-msgstr "Regionen-Deckkraft ändern"
-
-#: editor_ops.cc:5572
-msgid "fade range"
-msgstr "Bereich faden"
-
-#: editor_ops.cc:5610
-msgid "set fade in length"
-msgstr "Ändere Fade-In Länge"
-
-#: editor_ops.cc:5617
-msgid "set fade out length"
-msgstr "Ändere Fade-Out Länge"
-
-#: editor_ops.cc:5662
-msgid "set fade in shape"
-msgstr "Fade-In Kurve bearbeiten"
-
-#: editor_ops.cc:5693
-msgid "set fade out shape"
-msgstr "Fade-Out Kurve ändern"
-
-#: editor_ops.cc:5723
-msgid "set fade in active"
-msgstr "Fade-In aktivieren"
-
-#: editor_ops.cc:5752
-msgid "set fade out active"
-msgstr "Fade-Out aktivieren"
-
-#: editor_ops.cc:5994
-msgid "set loop range from selection"
-msgstr "Schleife aus Auswahl erstellen"
-
-#: editor_ops.cc:6008
-msgid "set loop range from region"
-msgstr "Schleife aus Region erstellen"
-
-#: editor_ops.cc:6027
-msgid "set punch range from selection"
-msgstr "Punchbereich aus Auswahl erstellen"
-
-#: editor_ops.cc:6041
-msgid "set session start/end from selection"
-msgstr "Projektstart/ende auf Auswahl setzen"
-
-#: editor_ops.cc:6066
-msgid "set punch range from region"
-msgstr "Punchbereich aus Region erstellen"
-
-#: editor_ops.cc:6175
-msgid "Add new marker"
-msgstr "Marker hinzufügen"
-
-#: editor_ops.cc:6176
-msgid "Set global tempo"
-msgstr "Globales tempo setzen"
-
-#: editor_ops.cc:6179
-msgid "Define one bar"
-msgstr "Einen Takt definieren"
-
-#: editor_ops.cc:6180
-msgid "Do you want to set the global tempo or add a new tempo marker?"
-msgstr ""
-"Möchten Sie das globale Tempo ändern oder einen neuen Tempo-Marker setzen?"
-
-#: editor_ops.cc:6206
-msgid "set tempo from region"
-msgstr "Tempo anhand von Region setzen"
-
-#: editor_ops.cc:6236
-msgid "split regions"
-msgstr "Region teilen (Split)"
-
-#: editor_ops.cc:6278
-msgid ""
-"You are about to split\n"
-"%1\n"
-"into %2 pieces.\n"
-"This could take a long time."
-msgstr ""
-"Sie versuchen %1 in %2 Teile zu teilen.\n"
-"Das könnte sehr lange dauern."
-
-#: editor_ops.cc:6285
-msgid "Call for the Ferret!"
-msgstr "Call for the Ferret!"
-
-#: editor_ops.cc:6286
-msgid ""
-"Press OK to continue with this split operation\n"
-"or ask the Ferret dialog to tune the analysis"
-msgstr ""
-"Drücken Sie OK um mit der aufteiloperation (Split) fortzufahren\n"
-"oder versuchen sie im Ferret-Fenster die Analyse zu verbessern."
-
-#: editor_ops.cc:6288
-msgid "Press OK to continue with this split operation"
-msgstr "Drücken Sie OK um mit der aufteiloperation (Split) fortzufahren"
-
-#: editor_ops.cc:6291
-msgid "Excessive split?"
-msgstr "Übermäßige Aufteilung?"
-
-#: editor_ops.cc:6443
-msgid "place transient"
-msgstr "Transienten platzieren"
-
-#: editor_ops.cc:6478
-msgid "snap regions to grid"
-msgstr "Regionen an Raster einrasten"
-
-#: editor_ops.cc:6517
-msgid "Close Region Gaps"
-msgstr "Regionenlücken schließen"
-
-#: editor_ops.cc:6522
-msgid "Crossfade length"
-msgstr "Länge des Crossfades"
-
-#: editor_ops.cc:6531 editor_ops.cc:6542 rhythm_ferret.cc:119
-#: session_option_editor.cc:141
-msgid "ms"
-msgstr "ms"
-
-#: editor_ops.cc:6533
-msgid "Pull-back length"
-msgstr "Öffnungslänge vorne"
-
-#: editor_ops.cc:6546
-msgid "Ok"
-msgstr "Ok"
-
-#: editor_ops.cc:6561
-msgid "close region gaps"
-msgstr "Schließe Lücken zwischen Regionen"
-
-#: editor_ops.cc:6803
-msgid "That would be bad news ...."
-msgstr "Lieber nicht!"
-
-#: editor_ops.cc:6808
-msgid ""
-"Removing the master or monitor bus is such a bad idea\n"
-"that %1 is not going to allow it.\n"
-"\n"
-"If you really want to do this sort of thing\n"
-"edit your ardour.rc file to set the\n"
-"\"allow-special-bus-removal\" option to be \"yes\""
-msgstr ""
-"Den Master- oder Monitorbus zu entfernen ist eine so\n"
-"schlechte Idee, dass %1 es nicht zulässt.\n"
-"\n"
-"Um dies dennoch zu tun, kann die Datei ardour.rc\n"
-"bearbeitet werden. \"allow-special-bus-removal\" muss\n"
-"dazu auf \"yes\" gesetzt werden."
-
-#: editor_ops.cc:6824 route_ui.cc:1935
-msgid "track"
-msgid_plural "tracks"
-msgstr[0] "Spur"
-msgstr[1] "Spuren"
-
-#: editor_ops.cc:6825 route_ui.cc:1935
-msgid "bus"
-msgid_plural "busses"
-msgstr[0] "Bus"
-msgstr[1] "Busse"
-
-#: editor_ops.cc:6829
-msgid ""
-"Do you really want to remove %1 %2 and %3 %4?\n"
-"(You may also lose the playlists associated with the %2)\n"
-"\n"
-"This action cannot be undone, and the session file will be overwritten!"
-msgstr ""
-"Wollen Sie wirklich %1 %2 und %3 %4 entfernen?\n"
-"(Sie werden auch die mit der %2 assoziierten Wiedergabelisten verlieren)\n"
-"\n"
-"Dies kann nicht rückgängig gemacht werden, und die Projektdatei wird "
-"überschrieben werden!"
-
-#: editor_ops.cc:6834
-msgid ""
-"Do you really want to remove %1 %2?\n"
-"(You may also lose the playlists associated with the %2)\n"
-"\n"
-"This action cannot be undone, and the session file will be overwritten!"
-msgstr ""
-"Wollen Sie wirklich %1 %2 entfernen?\n"
-"(Sie werden auch die mit der %2 assoziierten Wiedergabelisten verlieren)\n"
-"\n"
-"Dies kann nicht rückgängig gemacht werden, und die Projektdatei wird "
-"überschrieben werden!"
-
-#: editor_ops.cc:6840
-msgid ""
-"Do you really want to remove %1 %2?\n"
-"\n"
-"This action cannot be undone, and the session file will be overwritten"
-msgstr ""
-"Wollen Sie wirklich %1 %2 entfernen\n"
-"\n"
-"Diese Aktion kann nicht rückgängig gemacht werden, und die Projektdatei wird "
-"überschrieben werden"
-
-#: editor_ops.cc:6847
-msgid "Yes, remove them."
-msgstr "Ja, entfernen."
-
-#: editor_ops.cc:6849 editor_snapshots.cc:160
-msgid "Yes, remove it."
-msgstr "Ja, entfernen."
-
-#: editor_ops.cc:6854 editor_ops.cc:6856
-msgid "Remove %1"
-msgstr "Entferne %1"
-
-#: editor_ops.cc:6919
-msgid "insert time"
-msgstr "Stille einfügen"
-
-#: editor_ops.cc:7083
-msgid "There are too many tracks to fit in the current window"
-msgstr "Es gibt zu viele Spuren, sie in das aktuelle Fenster zu einzupassen"
-
-#: editor_ops.cc:7144
-msgid "Sel"
-msgstr "Sel"
-
-#: editor_ops.cc:7183
-#, c-format
-msgid "Saved view %u"
-msgstr "Ansicht %u gespeichert"
-
-#: editor_ops.cc:7208
-msgid "mute regions"
-msgstr "Regionen stummschalten"
-
-#: editor_ops.cc:7210
-msgid "mute region"
-msgstr "Region stummschalten"
-
-#: editor_ops.cc:7247
-msgid "combine regions"
-msgstr "Regionen verbinden (combine)"
-
-#: editor_ops.cc:7285
-msgid "uncombine regions"
-msgstr "Regionen trennen (uncombine)"
-
-#: editor_ops.cc:7322
-msgid "%1: Locked"
-msgstr "%1: Gesperrt"
-
-#: editor_ops.cc:7329
-msgid "Click to unlock"
-msgstr "Klicken, um Sperre aufzuheben"
-
-#: editor_ops.cc:7383
-msgid "Moving embedded files into session folder"
-msgstr "Verschiebe eingebettete Dateien in den Projektordner"
-
-#: editor_regions.cc:112
-msgid "Region name, with number of channels in []'s"
-msgstr "Name der Region, mit Kanalzahl in []"
-
-#: editor_regions.cc:113
-msgid "Position of start of region"
-msgstr "Position des Regionen-Anfangs"
-
-#: editor_regions.cc:114 editor_regions.cc:851 time_info_box.cc:101
-msgid "End"
-msgstr "Ende"
-
-#: editor_regions.cc:114
-msgid "Position of end of region"
-msgstr "Position des Regionen-Endes"
-
-#: editor_regions.cc:115
-msgid "Length of the region"
-msgstr "Länge der Region"
-
-#: editor_regions.cc:116
-msgid "Position of region sync point, relative to start of the region"
-msgstr ""
-"Position des Regionen-Synchronisationspunktes, relativ zu Regionenanfang"
-
-#: editor_regions.cc:117
-msgid "Length of region fade-in (units: secondary clock), () if disabled"
-msgstr "Länge des Einblendens (Einheiten: sekundäre Uhr), () falls inaktiv"
-
-#: editor_regions.cc:118
-msgid "Length of region fade-out (units: secondary clock), () if disabled"
-msgstr "Länge des Ausblendens (Einheiten: sekundäre Uhr), () falls inaktiv"
-
-#: editor_regions.cc:119
-msgid "Lock|L"
-msgstr "L"
-
-#: editor_regions.cc:119
-msgid "Region position locked?"
-msgstr "Position der Region gesperrt?"
-
-#: editor_regions.cc:120
-msgid "Gain|G"
-msgstr "G"
-
-#: editor_regions.cc:120
-msgid "Region position glued to Bars|Beats time?"
-msgstr "Regionenposition an Takt und Schäge gebunden?"
-
-#: editor_regions.cc:121
-msgid "Region muted?"
-msgstr "Region stummgeschaltet?"
-
-#: editor_regions.cc:122
-msgid "Opaque|O"
-msgstr "O"
-
-#: editor_regions.cc:122
-msgid "Region opaque (blocks regions below it from being heard)?"
-msgstr "Region deckend (hindert darunterliegende Regionen, gehört zu werden)?"
-
-#: editor_regions.cc:311 editor_regions.cc:316 editor_regions.cc:318
-msgid "Hidden"
-msgstr "Versteckt"
-
-#: editor_regions.cc:391
-msgid "(MISSING) "
-msgstr "(FEHLT)"
-
-#: editor_regions.cc:459
-msgid ""
-"Do you really want to remove unused regions?\n"
-"(This is destructive and cannot be undone)"
-msgstr ""
-"Wollen Sie ungenutzte Regionen wirklich entfernen?\n"
-"(Dies ist destruktiv und kann nicht rückgängig gemacht werden)"
-
-#: editor_regions.cc:463
-msgid "Yes, remove."
-msgstr "Ja, entfernen."
-
-#: editor_regions.cc:465
-msgid "Remove unused regions"
-msgstr "Ungenutzte Regionen entfernen"
-
-#: editor_regions.cc:818 editor_regions.cc:832 editor_regions.cc:846
-msgid "Mult."
-msgstr "Viele"
-
-#: editor_regions.cc:849 midi_list_editor.cc:104 time_info_box.cc:94
-msgid "Start"
-msgstr "Start"
-
-#: editor_regions.cc:867 editor_regions.cc:883
-msgid "Multiple"
-msgstr "Viele"
-
-#: editor_regions.cc:952
-msgid "MISSING "
-msgstr "FEHLT"
-
-#: editor_routes.cc:182
-msgid "SS"
-msgstr "SS"
-
-#: editor_routes.cc:206
-msgid "Track/Bus Name"
-msgstr "Spur/Busname"
-
-#: editor_routes.cc:207
-msgid "Track/Bus visible ?"
-msgstr "Spuren/Busse sichtbar?"
-
-#: editor_routes.cc:208
-msgid "Track/Bus active ?"
-msgstr "Spur/Bus aktiv?"
-
-#: editor_routes.cc:209
-msgid "MidiInput|I"
-msgstr "I"
-
-#: editor_routes.cc:209
-msgid "MIDI input enabled"
-msgstr "MIDI Eingänge aktiv"
-
-#: editor_routes.cc:210
-msgid "Rec|R"
-msgstr "R"
-
-#: editor_routes.cc:210
-msgid "Record enabled"
-msgstr "Aufnahme bereit"
-
-#: editor_routes.cc:211
-msgid "Muted"
-msgstr "Stumm"
-
-#: editor_routes.cc:212
-msgid "Soloed"
-msgstr "Solo ein"
-
-#: editor_routes.cc:213
-msgid "SoloIso|SI"
-msgstr "SI"
-
-#: editor_routes.cc:213
-msgid "Solo Isolated"
-msgstr "Isoliertes Solo"
-
-#: editor_routes.cc:214
-msgid "SoloLock|SS"
-msgstr "SS"
-
-#: editor_routes.cc:214
-msgid "Solo Safe (Locked)"
-msgstr "Solo Safe (gesperrt)"
-
-#: editor_routes.cc:477 mixer_ui.cc:1197
-msgid "Hide All"
-msgstr "Alle verbergen"
-
-#: editor_routes.cc:478 mixer_ui.cc:1198
-msgid "Show All Audio Tracks"
-msgstr "Zeige alle Audiospuren"
-
-#: editor_routes.cc:479 mixer_ui.cc:1199
-msgid "Hide All Audio Tracks"
-msgstr "Verberge alle Audiospuren"
-
-#: editor_routes.cc:480 mixer_ui.cc:1200
-msgid "Show All Audio Busses"
-msgstr "Zeige alle Audiobusse"
-
-#: editor_routes.cc:481 mixer_ui.cc:1201
-msgid "Hide All Audio Busses"
-msgstr "Verberge alle Audiobusse"
-
-#: editor_routes.cc:482
-msgid "Show All Midi Tracks"
-msgstr "Zeige alle MIDI-Spuren"
-
-#: editor_routes.cc:483
-msgid "Hide All Midi Tracks"
-msgstr "Verberge alle MIDI-Spuren"
-
-#: editor_routes.cc:484
-msgid "Show Tracks With Regions Under Playhead"
-msgstr "Zeige Spuren mit Regionen unter dem Positionszeiger"
-
-#: editor_rulers.cc:211
-msgid "New location marker"
-msgstr "Neuer Positionsmarker"
-
-#: editor_rulers.cc:212
-msgid "Clear all locations"
-msgstr "Alle Positionsmarker entfernen"
-
-#: editor_rulers.cc:213
-msgid "Unhide locations"
-msgstr "Positionen anzeigen"
-
-#: editor_rulers.cc:217
-msgid "New range"
-msgstr "Neuer Bereich"
-
-#: editor_rulers.cc:218
-msgid "Clear all ranges"
-msgstr "Alle Bereiche entfernen"
-
-#: editor_rulers.cc:219
-msgid "Unhide ranges"
-msgstr "Bereiche anzeigen"
-
-#: editor_rulers.cc:224
-msgid "Make Loop range"
-msgstr "Erzeuge Schleifenbereich"
-
-#: editor_rulers.cc:225
-msgid "Make Punch range"
-msgstr "Erzeuge Punchbereich"
-
-#: editor_rulers.cc:230
-msgid "New CD track marker"
-msgstr "Neuer CD-Track Marker"
-
-#: editor_rulers.cc:235 tempo_dialog.cc:38
-msgid "New Tempo"
-msgstr "Tempowechsel einfügen..."
-
-#: editor_rulers.cc:239 tempo_dialog.cc:296
-msgid "New Meter"
-msgstr "Taktwechsel einfügen..."
-
-#: editor_snapshots.cc:137
-msgid "Rename Snapshot"
-msgstr "Schnappschuss umbenennen"
-
-#: editor_snapshots.cc:139
-msgid "New name of snapshot"
-msgstr "Name für neuen Schnappschuss"
-
-#: editor_snapshots.cc:157
-msgid ""
-"Do you really want to remove snapshot \"%1\" ?\n"
-"(which cannot be undone)"
-msgstr ""
-"Wollen Sie den Schnappschuss \"%1\" wirklich löschen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
-
-#: editor_snapshots.cc:162
-msgid "Remove snapshot"
-msgstr "Schnappschuss entfernen"
-
-#: editor_tempodisplay.cc:194 editor_tempodisplay.cc:234
-msgid "add"
-msgstr "Hinzufügen"
-
-#: editor_tempodisplay.cc:215
-msgid "add tempo mark"
-msgstr "Tempowechsel einfügen"
-
-#: editor_tempodisplay.cc:254
-msgid "add meter mark"
-msgstr "Taktwechsel einfügen"
-
-#: editor_tempodisplay.cc:287 editor_tempodisplay.cc:315
-msgid "done"
-msgstr "Fertig"
-
-#: editor_tempodisplay.cc:304 editor_tempodisplay.cc:330
-msgid "replace tempo mark"
-msgstr "Tempowechsel ersetzen"
-
-#: editor_tempodisplay.cc:353 editor_tempodisplay.cc:387
-msgid "remove tempo mark"
-msgstr "Tempowechsel entfernen"
-
-#: editor_tempodisplay.cc:370
-msgid ""
-"programming error: meter marker canvas item has no marker object pointer!"
-msgstr ""
-"pProgrammierfehler: meter marker canvas item has no marker object pointer!"
-
-#: editor_timefx.cc:68
-msgid "stretch/shrink"
-msgstr "strecken/stauchen"
-
-#: editor_timefx.cc:129
-msgid "pitch shift"
-msgstr "pitch-shift"
-
-#: editor_timefx.cc:301
-msgid "timefx cannot be started - thread creation error"
-msgstr ""
-"Time-Stretch konnte nicht gestartet werden - Fehler beim erstellen des "
-"Threads"
-
-#: engine_dialog.cc:83
-msgid "Device Control Panel"
-msgstr "Gerätekontrollfeld"
-
-#: engine_dialog.cc:84
-msgid "Midi Device Setup"
-msgstr "MIDI Geräteeinstellungen"
-
-#: engine_dialog.cc:85 engine_dialog.cc:2101
-msgid "Measure"
-msgstr "Messen"
-
-#: engine_dialog.cc:86
-msgid "Use results"
-msgstr "Benutze Ergebnisse"
-
-#: engine_dialog.cc:87
-msgid "Back to settings ... (ignore results)"
-msgstr "Zurücksetzen ... (Resultate ignorieren)"
-
-#: engine_dialog.cc:88
-msgid "Calibrate Audio"
-msgstr "AUdio kalibrieren"
-
-#: engine_dialog.cc:92
-msgid "Back to settings"
-msgstr "Zurück zu Einstellungen"
-
-#: engine_dialog.cc:111
-msgid ""
-"No audio/MIDI backends detected. %1 cannot run\n"
-"\n"
-"(This is a build/packaging/system error. It should never happen.)"
-msgstr ""
-"Kein Audio/MIDI backend gefunden. %1 kann nicht laufen\n"
-"\n"
-"(Das ist ein Kompilier-/Paket-/Systemfehler und sollte nie passieren.)"
-
-#: engine_dialog.cc:137
-msgid "Latency Measurement Tool"
-msgstr "Latenzmeßwerkzeug"
-
-#: engine_dialog.cc:149
-msgid ""
-"<span weight=\"bold\">Turn down the volume on your audio equipment to a very "
-"low level.</span>"
-msgstr ""
-"<span weight=\"bold\">Drehen Sie die Lautstärke Ihrer Audioanlage sehr leise."
-"</span>"
-
-#: engine_dialog.cc:158
-msgid "Select two channels below and connect them using a cable."
-msgstr "Wählen Sie unten zwei Kanäle aus und verbinden sie mit einem Kabel."
-
-#: engine_dialog.cc:163
-msgid "Output channel"
-msgstr "Ausgangskanal"
-
-#: engine_dialog.cc:171
-msgid "Input channel"
-msgstr "Eingangskanal"
-
-#: engine_dialog.cc:206
-msgid "Once the channels are connected, click the \"Measure\" button."
-msgstr "Wenn die Kanäle verbunden sind, klicken Sie den \"Messen\"-Knopf."
-
-#: engine_dialog.cc:213
-msgid "When satisfied with the results, click the \"Use results\" button."
-msgstr ""
-"Wenn Sie mit dem Resultat zufrieden sind, klicken Sie den Knopf \"Benutze "
-"Ergebnisse\"."
-
-#: engine_dialog.cc:228 engine_dialog.cc:2221 engine_dialog.cc:2231
-msgid "No measurement results yet"
-msgstr "Noch keine Messergebnisse"
-
-#: engine_dialog.cc:238 route_params_ui.cc:106
-msgid "Latency"
-msgstr "Latenz"
-
-#: engine_dialog.cc:376
-msgid "Audio System:"
-msgstr "Audiosystem:"
-
-#: engine_dialog.cc:413
-msgid "Driver:"
-msgstr "Treiber:"
-
-#: engine_dialog.cc:419
-msgid "Device:"
-msgstr "Gerät:"
-
-#: engine_dialog.cc:424 engine_dialog.cc:523 sfdb_ui.cc:153 sfdb_ui.cc:348
-#: sfdb_ui.cc:353
-msgid "Sample rate:"
-msgstr "Samplerate:"
-
-#: engine_dialog.cc:430 engine_dialog.cc:530
-msgid "Buffer size:"
-msgstr "Puffergröße"
-
-#: engine_dialog.cc:448
-msgid "Input Channels:"
-msgstr "Eingangskanäle:"
-
-#: engine_dialog.cc:461
-msgid "Output Channels:"
-msgstr "Ausgangskanäle:"
-
-#: engine_dialog.cc:473
-msgid "Hardware input latency:"
-msgstr "Hardware Eingangslatenz (Samples)"
-
-#: engine_dialog.cc:476 engine_dialog.cc:489
-msgid "samples"
-msgstr "Samples"
-
-#: engine_dialog.cc:486
-msgid "Hardware output latency:"
-msgstr "Hardware Ausgangslatenz (Samples)"
-
-#: engine_dialog.cc:497
-msgid "MIDI System:"
-msgstr "MIDI System:"
-
-#: engine_dialog.cc:515
-msgid ""
-"The %1 audio backend was configured and started externally.\n"
-"This limits your control over it."
-msgstr ""
-"Das %1 Audiobackend wurde extern konfiguriert und gestartet.\n"
-"Dies beschränkt Ihre Kontrolle darüber."
-
-#: engine_dialog.cc:568
-msgid ""
-"Failed to start or connect to audio-engine.\n"
-"\n"
-"Latency calibration requires a working audio interface."
-msgstr ""
-"Das Starten oder Verbinden mit der Audio-Engine ist fehlgeschlagen.\n"
-"\n"
-"Latenzkalibrierung erfordert ein funktionierendes Audio-Interface."
-
-#: engine_dialog.cc:574
-msgid ""
-"Your selected audio configuration is playback- or capture-only.\n"
-"\n"
-"Latency calibration requires playback and capture"
-msgstr ""
-"Ihre aktuelle Audiokonfiguration erlaubt nur Playback oder Aufnahme "
-"alleine.\n"
-"\n"
-"Latenzkalibrierung verlangt Duplexbetrieb (gleichzeitig Aufnahme und "
-"Wiedergabe)"
-
-#: engine_dialog.cc:655
-msgid "MIDI Devices"
-msgstr "MIDI Geräte"
-
-#: engine_dialog.cc:661
-msgid "Device"
-msgstr "Gerät"
-
-#: engine_dialog.cc:663
-msgid "Hardware Latencies"
-msgstr "Hardware-Latenzen"
-
-#: engine_dialog.cc:704
-msgid "Calibrate"
-msgstr "Kalibrieren"
-
-#: engine_dialog.cc:804
-msgid "all available channels"
-msgstr "alle verfügbaren Kanäle"
-
-#: engine_dialog.cc:1043 latency_gui.cc:39
-msgid "sample"
-msgid_plural "samples"
-msgstr[0] "Sample"
-msgstr[1] "Samples"
-
-#: engine_dialog.cc:1094
-#, c-format
-msgid "(%.1f ms)"
-msgstr "(%.1f ms)"
-
-#: engine_dialog.cc:1597
-msgid "Could not start backend engine %1"
-msgstr "Konnte Backend Engine %1 nicht starten"
-
-#: engine_dialog.cc:1648
-msgid "Cannot set driver to %1"
-msgstr "Kann Treiber nicht auf %1 setzen"
-
-#: engine_dialog.cc:1652
-msgid "Cannot set device name to %1"
-msgstr "Kann Gerät nicht auf %1 setzen"
-
-#: engine_dialog.cc:1656
-msgid "Cannot set sample rate to %1"
-msgstr "Kann Samplerate nicht auf %1 setzen"
-
-#: engine_dialog.cc:1660
-msgid "Cannot set buffer size to %1"
-msgstr "Kann Buffergröße nicht auf %1 setzen"
-
-#: engine_dialog.cc:1666
-msgid "Cannot set input channels to %1"
-msgstr "Kann Eingangskanäle nicht auf %1 setzen"
-
-#: engine_dialog.cc:1670
-msgid "Cannot set output channels to %1"
-msgstr "Kann Ausgangskanäle nicht auf %1 setzen"
-
-#: engine_dialog.cc:1676
-msgid "Cannot set input latency to %1"
-msgstr "Kann Eingangslatenz nicht auf %1 setzen"
-
-#: engine_dialog.cc:1680
-msgid "Cannot set output latency to %1"
-msgstr "Kann Ausgangslatenz nicht auf %1 setzen"
-
-#: engine_dialog.cc:1959 engine_dialog.cc:2018
-msgid "No signal detected "
-msgstr "Kein Signal erkannt"
-
-#: engine_dialog.cc:1972 engine_dialog.cc:2026 port_insert_ui.cc:70
-#: port_insert_ui.cc:98
-msgid "Disconnected from audio engine"
-msgstr "Von Audio-Engine getrennt"
-
-#: engine_dialog.cc:1981 engine_dialog.cc:2034
-msgid "Detected roundtrip latency: "
-msgstr "Entdeckte Roundtrip-Latenz:"
-
-#: engine_dialog.cc:1983 engine_dialog.cc:2036
-msgid "Systemic latency: "
-msgstr "Systemische Latenz:"
-
-#: engine_dialog.cc:1990
-msgid "(signal detection error)"
-msgstr "(Fehler bei der Signalerkennung)"
-
-#: engine_dialog.cc:1996
-msgid "(inverted - bad wiring)"
-msgstr "(invertiert - schlechte Verkabelung)"
-
-#: engine_dialog.cc:2043
-msgid "(averaging)"
-msgstr "(durchschnittlich)"
-
-#: engine_dialog.cc:2049
-msgid "(too large jitter)"
-msgstr "(zu viel Jitter)"
-
-#: engine_dialog.cc:2053
-msgid "(large jitter)"
-msgstr "(viel Jitter)"
-
-#: engine_dialog.cc:2065
-msgid "Timeout - large MIDI jitter."
-msgstr "Timeout - viel MIDI Jitter."
-
-#: engine_dialog.cc:2081 port_insert_ui.cc:134
-msgid "Detecting ..."
-msgstr "Messe..."
-
-#: engine_dialog.cc:2175
-msgid "Disconnect from %1"
-msgstr "Trenne von %1"
-
-#: engine_dialog.cc:2179 mixer_strip.cc:1525 route_group_dialog.cc:45
-#: route_time_axis.cc:841
-msgid "Active"
-msgstr "Aktiv"
-
-#: engine_dialog.cc:2189
-msgid "Connect to %1"
-msgstr "Verbinde zu %1"
-
-#: engine_dialog.cc:2194
-msgid "Inactive"
-msgstr "Inaktiv"
-
-#: export_channel_selector.cc:45 sfdb_ui.cc:151
-msgid "Channels:"
-msgstr "Kanäle:"
-
-#: export_channel_selector.cc:46
-msgid "Split to mono files"
-msgstr "In Monodateien aufteilen"
-
-#: export_channel_selector.cc:189
-msgid "Bus or Track"
-msgstr "Bus oder Spur"
-
-#: export_channel_selector.cc:465
-msgid "Region contents without fades nor region gain (channels: %1)"
-msgstr "Regioneninhalt ohne Fades und Regionenlautstärke (Kanäle: %1)"
-
-#: export_channel_selector.cc:469
-msgid "Region contents with fades and region gain (channels: %1)"
-msgstr "Regioneninhalt mit Fades und Regionenlautstärke (Kanäle: %1)"
-
-#: export_channel_selector.cc:473
-msgid "Track output (channels: %1)"
-msgstr "Spurausgang (%1 Kanäle)"
-
-#: export_channel_selector.cc:542
-msgid "Export region contents"
-msgstr "Regioneninhalte exportieren"
-
-#: export_channel_selector.cc:543
-msgid "Export track output"
-msgstr "Exportiere Spurausgänge"
-
-#: export_channel_selector.cc:575
-msgid "Track name"
-msgstr "Spurname"
-
-#: export_dialog.cc:46
-msgid ""
-"<span color=\"#ffa755\">Some already existing files will be overwritten.</"
-"span>"
-msgstr ""
-"<span color=\"#ffa755\">Einige existierende Dateien werden überschrieben "
-"werden.</span>"
-
-#: export_dialog.cc:47
-msgid "List files"
-msgstr "Dateien auflisten"
-
-#: export_dialog.cc:158 export_format_dialog.cc:59
-msgid "File format"
-msgstr "Dateiformat"
-
-#: export_dialog.cc:159 export_timespan_selector.cc:374
-#: export_timespan_selector.cc:436
-msgid "Time Span"
-msgstr "Zeitspanne"
-
-#: export_dialog.cc:160
-msgid "Channels"
-msgstr "Kanäle"
-
-#: export_dialog.cc:182
-msgid ""
-"Export has been aborted due to an error!\n"
-"See the Log for details."
-msgstr ""
-"Das Exportieren wurde aufgrund eines Fehlers abgebrochen!\n"
-"Details dazu stehen in der Log."
-
-#: export_dialog.cc:251
-msgid "Files that will be overwritten"
-msgstr "Dateien, die überschrieben werden"
-
-#: export_dialog.cc:296
-msgid "Export initialization failed: %1"
-msgstr "Exportinitialisierung gescheitert: %1"
-
-#: export_dialog.cc:306
-msgid "Stop Export"
-msgstr "Export Abbrechen"
-
-#: export_dialog.cc:327
-msgid "export"
-msgstr "Exportieren"
-
-#: export_dialog.cc:346
-msgid "Normalizing '%3' (timespan %1 of %2)"
-msgstr "Normalisiere '%3' (Zeitspanne %1 von %2)"
-
-#: export_dialog.cc:350
-msgid "Exporting '%3' (timespan %1 of %2)"
-msgstr "Exportiere '%3' (Zeitspanne %1 von %2)"
-
-#: export_dialog.cc:373 export_dialog.cc:375
-msgid "<span color=\"#ffa755\">Error: "
-msgstr "<span color=\"#ffa755\">Fehler: "
-
-#: export_dialog.cc:385
-msgid "<span color=\"#ffa755\">Warning: "
-msgstr "<span color=\"#ffa755\">Warnung: "
-
-#: export_dialog.cc:387
-msgid ""
-"\n"
-"<span color=\"#ffa755\">Warning: "
-msgstr ""
-"\n"
-"<span color=\"#ffa755\">Warnung: "
-
-#: export_dialog.cc:411
-msgid "Export Selection"
-msgstr "Auswahl exportieren"
-
-#: export_dialog.cc:425
-msgid "Export Region"
-msgstr "Region exportieren"
-
-#: export_dialog.cc:434
-msgid "Source"
-msgstr "Quelle"
-
-#: export_dialog.cc:450
-msgid "Stem Export"
-msgstr "Stem Export"
-
-#: export_file_notebook.cc:39
-msgid "Add another format"
-msgstr "Ein weiteres Format hinzuzufügen"
-
-#: export_file_notebook.cc:193
-msgid "Format"
-msgstr "Format"
-
-#: export_file_notebook.cc:194
-msgid "Location"
-msgstr "Ort"
-
-#: export_file_notebook.cc:195
-msgid "Upload to Soundcloud"
-msgstr "Zu Soundcloud hochladen"
-
-#: export_file_notebook.cc:273
-msgid "No format!"
-msgstr "Kein Format!"
-
-#: export_file_notebook.cc:291
-msgid "Format %1: %2"
-msgstr "Format: %1: %2"
-
-#: export_filename_selector.cc:32
-msgid "Label:"
-msgstr "Name:"
-
-#: export_filename_selector.cc:33
-msgid "Session Name"
-msgstr "Projektname"
-
-#: export_filename_selector.cc:34
-msgid "Revision:"
-msgstr "Revision:"
-
-#: export_filename_selector.cc:36
-msgid "Folder:"
-msgstr "Ordner:"
-
-#: export_filename_selector.cc:37 session_import_dialog.cc:45
-#: transcode_video_dialog.cc:59 video_server_dialog.cc:54
-#: video_server_dialog.cc:56 export_video_dialog.cc:81
-#: export_video_dialog.cc:83
-msgid "Browse"
-msgstr "Durchsuchen"
-
-#: export_filename_selector.cc:41
-msgid "<i>Build filename(s) from these components:</i>"
-msgstr "<i>Dateiname(n) aus diesen Bestandteilen erzeugen:</i>"
-
-#: export_filename_selector.cc:212
-msgid ""
-"<small><i>Sorry, no example filename can be shown at the moment</i></small>"
-msgstr ""
-"<small><i>Leider kann zur Zeit kein Dateinamen-Beispiel gezeigt werden</i></"
-"small>"
-
-#: export_filename_selector.cc:214
-msgid "<small><i>Current (approximate) filename: \"%1\"</i></small>"
-msgstr "<small><i>Momentaner (ungefährer) Dateiname: \"%1\"</i></small>"
-
-#: export_filename_selector.cc:250 export_filename_selector.cc:336
-msgid ""
-"%1: this is only the directory/folder name, not the filename.\n"
-"The filename will be chosen from the information just above the folder "
-"selector."
-msgstr ""
-"%1: dies ist nur der Verzeichnisname, nicht der Dateiname.\n"
-"Der Dateiname wird aus den Informationen über der "
-"Verzeichnisauswahlgeneriert."
-
-#: export_filename_selector.cc:322
-msgid "Choose export folder"
-msgstr "Wähle den Exportordner"
-
-#: export_format_dialog.cc:31
-msgid "New Export Format Profile"
-msgstr "Neues Exportformat-Profil"
-
-#: export_format_dialog.cc:31
-msgid "Edit Export Format Profile"
-msgstr "Exportformat-Profil bearbeiten"
-
-#: export_format_dialog.cc:38
-msgid "Label: "
-msgstr "Name:"
-
-#: export_format_dialog.cc:41 normalize_dialog.cc:42
-msgid "Normalize to:"
-msgstr "Normalisieren auf:"
-
-#: export_format_dialog.cc:46
-msgid "Trim silence at start"
-msgstr "Stille am Anfang abschneiden"
-
-#: export_format_dialog.cc:47
-msgid "Add silence at start:"
-msgstr "Füge Stille am Anfang hinzu:"
-
-#: export_format_dialog.cc:50
-msgid "Trim silence at end"
-msgstr "Stille am Ende abschneiden"
-
-#: export_format_dialog.cc:51
-msgid "Add silence at end:"
-msgstr "Füge Stille am Ende hinzu:"
-
-#: export_format_dialog.cc:54
-msgid ""
-"Command to run post-export\n"
-"(%f=full path & filename, %d=directory, %b=basename):"
-msgstr ""
-"Kommando, das nach dem Export ausgeführt werden soll\n"
-"(%f=full path & filename, %d=directory, %b=basename):"
-
-#: export_format_dialog.cc:57
-msgid "Compatibility"
-msgstr "Kompatibilität"
-
-#: export_format_dialog.cc:58
-msgid "Quality"
-msgstr "Qualität"
-
-#: export_format_dialog.cc:61
-msgid "Sample rate conversion quality:"
-msgstr "Qualität bei Konvertierung der Samplerate:"
-
-#: export_format_dialog.cc:68
-msgid "Dithering"
-msgstr "Dithering"
-
-#: export_format_dialog.cc:70
-msgid "Create CUE file for disk-at-once CD/DVD creation"
-msgstr "Schreibe CUE-Datei für Disk-at-once CD/DVD Erzeugung"
-
-#: export_format_dialog.cc:71
-msgid "Create TOC file for disk-at-once CD/DVD creation"
-msgstr "Schreibe TOC-Datei für Disk-at-once CD/DVD Erzeugung"
-
-#: export_format_dialog.cc:73
-msgid "Tag file with session's metadata"
-msgstr "Datei mit den Metadaten des Projekt taggen"
-
-#: export_format_dialog.cc:470
-msgid "Best (sinc)"
-msgstr "Beste (sinc)"
-
-#: export_format_dialog.cc:475
-msgid "Medium (sinc)"
-msgstr "Mittel (sinc)"
-
-#: export_format_dialog.cc:480
-msgid "Fast (sinc)"
-msgstr "Schnellste (sinc)"
-
-#: export_format_dialog.cc:490
-msgid "Zero order hold"
-msgstr "Halteglied nullter Ordnung (ZOH)"
-
-#: export_format_dialog.cc:895
-msgid "Linear encoding options"
-msgstr "Optionen für lineare Codierung"
-
-#: export_format_dialog.cc:911
-msgid "Ogg Vorbis options"
-msgstr "Ogg Vorbis Optionen"
-
-#: export_format_dialog.cc:922
-msgid "FLAC options"
-msgstr "FLAC Optionen"
-
-#: export_format_dialog.cc:939
-msgid "Broadcast Wave options"
-msgstr "Broadcast Wave Optionen"
-
-#: export_format_selector.cc:136
-msgid "Do you really want to remove the format?"
-msgstr "Wollen Sie das Format wirklich entfernen?"
-
-#: export_preset_selector.cc:28
-msgid "Preset"
-msgstr "Preset"
-
-#: export_preset_selector.cc:104
-msgid ""
-"The selected preset did not load successfully!\n"
-"Perhaps it references a format that has been removed?"
-msgstr ""
-"Das ausgewählte Preset konnte nicht geladen werden!\n"
-"Möglicherweise verwendet es ein Format, das entfernt wurde."
-
-#: export_preset_selector.cc:156
-msgid "Do you really want to remove this preset?"
-msgstr "Wollen Sie dieses Preset wirklich entfernen?"
-
-#: export_timespan_selector.cc:46
-msgid "Show Times as:"
-msgstr "Zeitanzeige:"
-
-#: export_timespan_selector.cc:53 processor_box.cc:2466
-msgid "Select All"
-msgstr "Alles auswählen"
-
-#: export_timespan_selector.cc:223 transform_dialog.cc:93
-msgid " to "
-msgstr " bis"
-
-#: export_timespan_selector.cc:367 export_timespan_selector.cc:426
-msgid "Range"
-msgstr "Bereiche"
-
-#: sfdb_freesound_mootcher.cc:189 sfdb_freesound_mootcher.cc:324
-msgid "curl error %1 (%2)"
-msgstr "curl Fehler %1 (%2)"
-
-#: sfdb_freesound_mootcher.cc:266
-msgid "getSoundResourceFile: There is no valid root in the xml file"
-msgstr "getSoundResourceFile: Keine gültige Wurzel in der XML-Datei"
-
-#: sfdb_freesound_mootcher.cc:271
-msgid "getSoundResourceFile: root = %1, != response"
-msgstr "getSoundResourceFile: Wurzel = %1, != Antwort"
-
-#: sfdb_freesound_mootcher.cc:410 rc_option_editor.cc:1824
-msgid "%1"
-msgstr "%1"
-
-#: gain_meter.cc:132 gain_meter.cc:400 gain_meter.cc:505 gain_meter.cc:896
-msgid "-inf"
-msgstr "-inf"
-
-#: gain_meter.cc:147 gain_meter.cc:958
-msgid "Fader automation mode"
-msgstr "Fader Automationsmodus"
-
-#: gain_meter.cc:148 gain_meter.cc:959
-msgid "Fader automation type"
-msgstr "Fader-Automationstyp"
-
-#: gain_meter.cc:157 gain_meter.cc:829 panner_ui.cc:179 panner_ui.cc:639
-msgid "Abs"
-msgstr "Abs"
-
-#: gain_meter.cc:793
-msgid "M"
-msgstr "M"
-
-#: gain_meter.cc:796
-msgid "P"
-msgstr "P"
-
-#: gain_meter.cc:799
-msgid "T"
-msgstr "T"
-
-#: gain_meter.cc:802
-msgid "W"
-msgstr "W"
-
-#: generic_pluginui.cc:83
-msgid "<span size=\"large\">Presets</span>"
-msgstr "<span size=\"large\">Voreinstellungen</span>"
-
-#: generic_pluginui.cc:97
-msgid "Manual"
-msgstr "Manuell"
-
-#: generic_pluginui.cc:106
-msgid "All Automation"
-msgstr "Alle Automation"
-
-#: generic_pluginui.cc:250
-msgid "Switches"
-msgstr "Schalter"
-
-#: generic_pluginui.cc:260 generic_pluginui.cc:436 processor_box.cc:2440
-msgid "Controls"
-msgstr "Steuerelemente"
-
-#: generic_pluginui.cc:293
-msgid "Plugin Editor: could not build control element for port %1"
-msgstr "Plugin Editor: konnte kein Steuerelement für Port %1 erzeugen"
-
-#: generic_pluginui.cc:318
-msgid "Plugin Editor: no control for property %1"
-msgstr "Plugin Editor: kein Regler für Eigenschaft %1"
-
-#: generic_pluginui.cc:324
-msgid "Plugin Editor: could not build control element for property %1"
-msgstr "Plugin Editor: konnte kein Kontrollelement für Eigenschaft %1 erzeugen"
-
-#: generic_pluginui.cc:468
-msgid "Meters"
-msgstr "Pegelanzeigen"
-
-#: generic_pluginui.cc:490
-msgid "Automation control"
-msgstr "Automation"
-
-#: generic_pluginui.cc:497
-msgid "Mgnual"
-msgstr "Mgnuell"
-
-#: global_port_matrix.cc:158
-msgid "Audio Connection Manager"
-msgstr "Audio Verbindungsmanager"
-
-#: global_port_matrix.cc:161
-msgid "MIDI Connection Manager"
-msgstr "Midi Verbindungsmanager"
-
-#: global_port_matrix.cc:201 io_selector.cc:211 mixer_strip.cc:796
-#: mixer_strip.cc:897
-msgid "Disconnect"
-msgstr "Trenne"
-
-#: global_port_matrix.cc:207 io_selector.cc:217
-msgid "port"
-msgstr "Port"
-
-#: group_tabs.cc:312
-msgid "Selection..."
-msgstr "Ausgewählten Spuren"
-
-#: group_tabs.cc:313
-msgid "Record Enabled..."
-msgstr "Spuren, deren Aufnahme aktiviert ist"
-
-#: group_tabs.cc:314
-msgid "Soloed..."
-msgstr "Solo-Spuren/Busse"
-
-#: group_tabs.cc:320
-msgid "Create New Group ..."
-msgstr "Neue Gruppe erzeugen ..."
-
-#: group_tabs.cc:321
-msgid "Create New Group From"
-msgstr "Neue Gruppe erzeugen aus"
-
-#: group_tabs.cc:324
-msgid "Edit Group..."
-msgstr "Gruppe bearbeiten..."
-
-#: group_tabs.cc:325
-msgid "Collect Group"
-msgstr "Gruppe sammeln"
-
-#: group_tabs.cc:326
-msgid "Remove Group"
-msgstr "Gruppe entfernen"
-
-#: group_tabs.cc:329
-msgid "Remove Subgroup Bus"
-msgstr "Subgruppen-Bus entfernen"
-
-#: group_tabs.cc:331
-msgid "Add New Subgroup Bus"
-msgstr "Subgruppen-Bus hinzufügen"
-
-#: group_tabs.cc:333
-msgid "Add New Aux Bus (pre-fader)"
-msgstr "Aux-Send zur Subgruppe hinzufügen (Pre-Fader)"
-
-#: group_tabs.cc:334
-msgid "Add New Aux Bus (post-fader)"
-msgstr "Aux-Send zur Subgruppe hinzufügen (Post-Fader)"
-
-#: group_tabs.cc:340
-msgid "Enable All Groups"
-msgstr "Alle Gruppen aktivieren"
-
-#: group_tabs.cc:341
-msgid "Disable All Groups"
-msgstr "Alle Gruppen deaktivieren"
-
-#: insert_time_dialog.cc:46
-msgid "Time to insert:"
-msgstr "Einzufügende Zeit:"
-
-#: insert_time_dialog.cc:54
-msgid "Intersected regions should:"
-msgstr "Regionen am Positionsmarker:"
-
-#: insert_time_dialog.cc:57
-msgid "stay in position"
-msgstr "Unverändert lassen"
-
-#: insert_time_dialog.cc:58
-msgid "move"
-msgstr "Verschieben"
-
-#: insert_time_dialog.cc:59
-msgid "be split"
-msgstr "Aufteilen"
-
-#: insert_time_dialog.cc:65
-msgid "Insert time on all the track's playlists"
-msgstr "Zeit in alle Playlisten der Spur einfügen"
-
-#: insert_time_dialog.cc:68
-msgid "Move glued regions"
-msgstr "Taktgebundene Regionen mitbewegen"
-
-#: insert_time_dialog.cc:70
-msgid "Move markers"
-msgstr "Marker mitbewegen"
-
-#: insert_time_dialog.cc:73
-msgid "Move glued markers"
-msgstr "Taktgebundene Marker mitbewegen"
-
-#: insert_time_dialog.cc:78
-msgid "Move locked markers"
-msgstr "Gesperrte Marker mitbewegen"
-
-#: insert_time_dialog.cc:83
-msgid ""
-"Move tempo and meter changes\n"
-"<i>(may cause oddities in the tempo map)</i>"
-msgstr ""
-"Bewege Tempo- und Taktartänderungen\n"
-"<i>(kann in der Tempo-Tabelle seltsames Verhalten verursachen)</i>"
-
-#: insert_time_dialog.cc:91
-msgid "Insert time"
-msgstr "Stille einfügen"
-
-#: instrument_selector.cc:62
-msgid "-none-"
-msgstr "-keine-"
-
-#: interthread_progress_window.cc:103
-msgid "Importing file: %1 of %2"
-msgstr "Importiere Datei: %1 von %2"
-
-#: io_selector.cc:221
-msgid "I/O selector"
-msgstr "E/A Auswahl"
-
-#: io_selector.cc:266
-msgid "%1 input"
-msgstr "%1 Eingang"
-
-#: io_selector.cc:268
-msgid "%1 output"
-msgstr "%1 Ausgang"
-
-#: keyboard.cc:70
-msgid "your own"
-msgstr "Eigenes"
-
-#: keyboard.cc:133 keyboard.cc:157
-msgid "Default keybindings not found - %1 will be hard to use!"
-msgstr ""
-"Keine Tastatur-Standardbelegung gefunden - %1 wird sich schwer bedienen "
-"lassen!"
-
-#: keyboard.cc:136
-msgid "Key bindings file \"%1\" not found. Default bindings used instead"
-msgstr ""
-"Die Datei  \"%1\" für Tastaturkürzel  wurde nicht gefunden. Stattdessen wird "
-"die Standard-Belegung verwendet."
-
-#: keyeditor.cc:54
-msgid "Remove shortcut"
-msgstr "Tastenkürzel entfernen"
-
-#: keyeditor.cc:63
-msgid "Action"
-msgstr "Aktion"
-
-#: keyeditor.cc:64
-msgid "Shortcut"
-msgstr "Tastenkürzel"
-
-#: keyeditor.cc:84
-msgid "Select an action, then press the key(s) to (re)set its shortcut"
-msgstr ""
-"Wählen Sie eine Aktion und drücken Sie dann die Taste(n) \n"
-"um das Tastaturkürzel zu setzen"
-
-#: keyeditor.cc:98
-msgid "Reset Bindings to Defaults"
-msgstr "Setze Kürzel auf Vorgabewerte zurück"
-
-#: keyeditor.cc:263
-msgid "Main_menu"
-msgstr "Hauptmenü"
-
-#: keyeditor.cc:265
-msgid "redirectmenu"
-msgstr "Umleitungsmenü"
-
-#: keyeditor.cc:267
-msgid "Editor_menus"
-msgstr "Editor-Menü"
-
-#: keyeditor.cc:269
-msgid "RegionList"
-msgstr "Regionenliste"
-
-#: keyeditor.cc:271
-msgid "ProcessorMenu"
-msgstr "Prozessor-Menü"
-
-#: latency_gui.cc:40
-msgid "msec"
-msgstr "ms"
-
-#: latency_gui.cc:41
-msgid "period"
-msgstr "Periode"
-
-#: latency_gui.cc:55
-msgid "%1 sample"
-msgid_plural "%1 samples"
-msgstr[0] "%1 Sample"
-msgstr[1] "%1 Samples"
-
-#: latency_gui.cc:72 panner_ui.cc:409
-msgid "Reset"
-msgstr "Reset"
-
-#: latency_gui.cc:149 rhythm_ferret.cc:273 sfdb_ui.cc:1912
-msgid "programming error: %1 (%2)"
-msgstr "Programmierfehler: %1 (%2)"
-
-#: location_ui.cc:52 location_ui.cc:54
-msgid "Use PH"
-msgstr "zu PZ"
-
-#: location_ui.cc:59
-msgid "Glue"
-msgstr "Bindung"
-
-#: location_ui.cc:87
-msgid "Performer:"
-msgstr "Performer:"
-
-#: location_ui.cc:88
-msgid "Composer:"
-msgstr "Komponist:"
-
-#: location_ui.cc:90
-msgid "Pre-Emphasis"
-msgstr "Präemphase"
-
-#: location_ui.cc:317
-msgid "Remove this range"
-msgstr "Diesen Bereich entfernen"
-
-#: location_ui.cc:318
-msgid "Start time - middle click to locate here"
-msgstr "Startzeit - Mittelklick, um hierher zu positionieren"
-
-#: location_ui.cc:319
-msgid "End time - middle click to locate here"
-msgstr "Endzeit - Mittelklick, um hierher zu positionieren"
-
-#: location_ui.cc:322
-msgid "Set range start from playhead location"
-msgstr "Bereichsbeginn auf Positionszeiger setzen"
-
-#: location_ui.cc:323
-msgid "Set range end from playhead location"
-msgstr "Bereichsende auf Positionszeiger setzen"
-
-#: location_ui.cc:327
-msgid "Remove this marker"
-msgstr "Diesen Marker entfernen"
-
-#: location_ui.cc:328
-msgid "Position - middle click to locate here"
-msgstr "Position - Mittelklick, um hierher zu positionieren"
-
-#: location_ui.cc:330
-msgid "Set marker time from playhead location"
-msgstr "Markerposition auf Positionszeiger setzen"
-
-#: location_ui.cc:499
-msgid "You cannot put a CD marker at the start of the session"
-msgstr "Sie können keinen CD-Marker am Anfang des Projekts erstellen"
-
-#: location_ui.cc:725
-msgid "New Marker"
-msgstr "Neuer Marker"
-
-#: location_ui.cc:726
-msgid "New Range"
-msgstr "Neuer Bereich"
-
-#: location_ui.cc:739
-msgid "<b>Loop/Punch Ranges</b>"
-msgstr "<b>Schleifen/Punchbereiche</b>"
-
-#: location_ui.cc:764
-msgid "<b>Markers (Including CD Index)</b>"
-msgstr "<b>Marker (auch CD-Index)</b>"
-
-#: location_ui.cc:799
-msgid "<b>Ranges (Including CD Track Ranges)</b>"
-msgstr "<b>Bereiche (auch CD-Track-Bereichen)</b>"
-
-#: location_ui.cc:1042
-msgid "add range marker"
-msgstr "Bereich hinzufügen"
-
-#: main.cc:82
-msgid "%1 could not connect to the audio backend."
-msgstr "%1 konnte nicht zum Audiobackend verbinden."
-
-#: main.cc:107 main.cc:123
-msgid "The audio backend (%1) has failed, or terminated"
-msgstr "Das Audiobackend (%1) funktioniert nicht oder wurde beendet"
-
-#: main.cc:110
-msgid ""
-"%2 exited unexpectedly, and without notifying %1.\n"
-"\n"
-"This could be due to misconfiguration or to an error inside %2.\n"
-"\n"
-"Click OK to exit %1."
-msgstr ""
-"%2 wurde unerwartet und ohne %1 zu benachrichtigen beendet .\n"
-"\n"
-"Dies liegt entweder an einer fehlerhaften Konfiguration oder an einem Fehler "
-"in %2.\n"
-"\n"
-"Klicke OK, um %1 zu verlassen."
-
-#: main.cc:124
-msgid "%2 exited unexpectedly, and without notifying %1."
-msgstr "%2 wurde unerwartet und ohne %1 zu benachrichtigen beendet "
-
-#: main.cc:219
-msgid ""
-"\n"
-"   %1 could not understand your command line      "
-msgstr ""
-"\n"
-"   %1 konnte Ihre Kommandozeile nicht verstehen      "
-
-#: main.cc:221
-msgid "An error was encountered while launching %1"
-msgstr "Während des Programmstarts von %1 ist ein Fehler aufgetreten"
-
-#: main.cc:310
-msgid " (built using "
-msgstr " (kompiliert mit Version "
-
-#: main.cc:313
-msgid " and GCC version "
-msgstr " und GCC Version"
-
-#: main.cc:323
-msgid "Copyright (C) 1999-2015 Paul Davis"
-msgstr "Copyright (C) 1999-2015 Paul Davis"
-
-#: main.cc:324
-msgid ""
-"Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
-"Baker, Robin Gareus"
-msgstr ""
-"Einige Teile Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
-"Baker, Robin Gareus"
-
-#: main.cc:326
-msgid "%1 comes with ABSOLUTELY NO WARRANTY"
-msgstr "%1 wird Ihnen ohne jegliche Gewährleistung"
-
-#: main.cc:327
-msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-msgstr ""
-"für allgemeine oder spezielle Gebrauchstauglichkeit zur Verfügung gestellt."
-
-#: main.cc:328
-msgid "This is free software, and you are welcome to redistribute it "
-msgstr "Dies ist freie Software, die Sie gerne weitergeben dürfen,"
-
-#: main.cc:329
-msgid "under certain conditions; see the source for copying conditions."
-msgstr ""
-"solange Sie sich an die Bedingungen, die in der Datei COPYING aufgeführt "
-"sind, halten."
-
-#: main.cc:334
-msgid "could not initialize %1."
-msgstr "Konnte %1 nicht initialisieren."
-
-#: main.cc:344
-msgid "Cannot xinstall SIGPIPE error handler"
-msgstr "Kann die SIGPIPE Fehlerbehandlung nicht installieren"
-
-#: main.cc:351
-msgid "could not create %1 GUI"
-msgstr "konnte das %1 GUI nicht erstellen"
-
-#: main_clock.cc:52
-msgid "Display delta to edit cursor"
-msgstr "Zeige Abstand zu Arbeitspunkt"
-
-#: marker.cc:273
-msgid "MarkerText"
-msgstr "MarkerText"
-
-#: midi_channel_selector.cc:161 midi_channel_selector.cc:400
-#: midi_channel_selector.cc:436 rc_option_editor.cc:1573
-#: rc_option_editor.cc:2203 sfdb_ui.cc:665
-msgid "None"
-msgstr "Kein"
-
-#: midi_channel_selector.cc:165 midi_channel_selector.cc:405
-#: midi_channel_selector.cc:441
-msgid "Invert"
-msgstr "Invert"
-
-#: midi_channel_selector.cc:169
-msgid "Force"
-msgstr "Force"
-
-#: midi_channel_selector.cc:328 midi_channel_selector.cc:370
-msgid "MIDI Channel Control"
-msgstr "MIDI-Kanalkontrolle"
-
-#: midi_channel_selector.cc:330
-msgid "Playback all channels"
-msgstr "Alle Kanäle wiedergeben"
-
-#: midi_channel_selector.cc:331
-msgid "Play only selected channels"
-msgstr "Nur ausgewählte Kanäle abspielen"
-
-#: midi_channel_selector.cc:332
-msgid "Use a single fixed channel for all playback"
-msgstr "Benutze einen einzelnen festen Kanal für gesamte Wiedergabe"
-
-#: midi_channel_selector.cc:333
-msgid "Record all channels"
-msgstr "Alle Kanäle aufnehmen"
-
-#: midi_channel_selector.cc:334
-msgid "Record only selected channels"
-msgstr "Nur ausgewählte Kanäle aufnehmen"
-
-#: midi_channel_selector.cc:335
-msgid "Force all channels to 1 channel"
-msgstr "Alle Kanäle auf einem Kanal wiedergeben"
-
-#: midi_channel_selector.cc:376
-msgid "Inbound"
-msgstr "Eingehend"
-
-#: midi_channel_selector.cc:396
-msgid "Click to enable recording all channels"
-msgstr "Klicke, um Aufnahme aller Kanäle zuzulassen"
-
-#: midi_channel_selector.cc:401
-msgid "Click to disable recording all channels"
-msgstr "Klicke, um Aufnahme für alle Kanäle abzuschalten"
-
-#: midi_channel_selector.cc:406
-msgid "Click to invert currently selected recording channels"
-msgstr ""
-"Klicke, um die gegenwärtige Auswahl der aufnehmenden Kanäle zu invertieren"
-
-#: midi_channel_selector.cc:413
-msgid "Playback"
-msgstr "Wiedergabe"
-
-#: midi_channel_selector.cc:432
-msgid "Click to enable playback of all channels"
-msgstr "Klicke, um Wiedergabe aller Kanäle zuzulassen"
-
-#: midi_channel_selector.cc:437
-msgid "Click to disable playback of all channels"
-msgstr "Klicke, um Wiedergabe aller Kanäle abzuschalten"
-
-#: midi_channel_selector.cc:442
-msgid "Click to invert current selected playback channels"
-msgstr ""
-"Klicke, um die gegenwärtige Auswahl der wiedergebenden Kanäle zu invertieren"
-
-#: midi_channel_selector.cc:620
-msgid "Click to toggle playback of channel %1"
-msgstr "Klicke, um die Wiedergabe von Kanal %1 umzuschalten"
-
-#: midi_channel_selector.cc:628
-msgid "Click to force all MIDI channel messages to channel %1"
-msgstr "Klicke, um alle MIDI Channel Messages auf Kanal %1 auszugeben"
-
-#: midi_channel_selector.cc:718
-msgid "Click to toggle recording of channel %1"
-msgstr "Klicke, um die Aufnahme von Kanal %1 umzuschalten"
-
-#: midi_channel_selector.cc:726
-msgid "Click to force all recorded channels to %1"
-msgstr "Klicke, um alle aufgenommenen Kanäle an %1 zu zwingen"
-
-#: midi_export_dialog.cc:35
-msgid "Export MIDI: %1"
-msgstr "Exportiere MIDI: %1"
-
-#: midi_list_editor.cc:56
-msgid "Whole"
-msgstr "Ganze"
-
-#: midi_list_editor.cc:57
-msgid "Half"
-msgstr "Halbe"
-
-#: midi_list_editor.cc:58
-msgid "Triplet"
-msgstr "Triole"
-
-#: midi_list_editor.cc:59
-msgid "Quarter"
-msgstr "Viertel"
-
-#: midi_list_editor.cc:60
-msgid "Eighth"
-msgstr "Achtel"
-
-#: midi_list_editor.cc:61
-msgid "Sixteenth"
-msgstr "Sechzehntel"
-
-#: midi_list_editor.cc:62
-msgid "Thirty-second"
-msgstr "Zweiunddreissigstel"
-
-#: midi_list_editor.cc:63
-msgid "Sixty-fourth"
-msgstr "Vierundsechzigstel"
-
-#: midi_list_editor.cc:106
-msgid "Num"
-msgstr "Nr."
-
-#: midi_list_editor.cc:108
-msgid "Vel"
-msgstr "Vel"
-
-#: midi_list_editor.cc:216
-msgid "edit note start"
-msgstr "Notenbeginn bearbeiten"
-
-#: midi_list_editor.cc:225
-msgid "edit note channel"
-msgstr "Kanal bearbeiten"
-
-#: midi_list_editor.cc:235
-msgid "edit note number"
-msgstr "Notennummer bearbeiten"
-
-#: midi_list_editor.cc:245
-msgid "edit note velocity"
-msgstr "Velocity bearbeiten"
-
-#: midi_list_editor.cc:259
-msgid "edit note length"
-msgstr "Notenlänge ändern"
-
-#: midi_list_editor.cc:463
-msgid "insert new note"
-msgstr "Neue Note einfügen"
-
-#: midi_list_editor.cc:527
-msgid "delete notes (from list)"
-msgstr "Noten (aus Liste) löschen"
-
-#: midi_list_editor.cc:602
-msgid "change note channel"
-msgstr "Kanal ändern"
-
-#: midi_list_editor.cc:610
-msgid "change note number"
-msgstr "Notennummerändern"
-
-#: midi_list_editor.cc:620
-msgid "change note velocity"
-msgstr "Velocity ändern"
-
-#: midi_list_editor.cc:690
-msgid "change note length"
-msgstr "Notenlänge ändern"
-
-#: midi_port_dialog.cc:39
-msgid "Add MIDI Port"
-msgstr "Neuen MIDI-Port hinzufügen"
-
-#: midi_port_dialog.cc:40
-msgid "Port name:"
-msgstr "Portname:"
-
-#: midi_port_dialog.cc:45
-msgid "MidiPortDialog"
-msgstr "MidiPortDialog"
-
-#: midi_region_view.cc:859
-msgid "channel edit"
-msgstr "Kanal editieren"
-
-#: midi_region_view.cc:895
-msgid "velocity edit"
-msgstr "Velocity bearbeiten"
-
-#: midi_region_view.cc:954
-msgid "add note"
-msgstr "Note hinzufügen"
-
-#: midi_region_view.cc:1885
-msgid "step add"
-msgstr "Schritt hinzufügen"
-
-#: midi_region_view.cc:1979 midi_region_view.cc:2002
-msgid "alter patch change"
-msgstr "Patch Change ändern"
-
-#: midi_region_view.cc:2038
-msgid "add patch change"
-msgstr "Patch Change hinzufügen"
-
-#: midi_region_view.cc:2060 midi_region_view.cc:2061
-msgid "move patch change"
-msgstr "Patch Change verschieben"
-
-#: midi_region_view.cc:2073 midi_region_view.cc:2074
-msgid "delete patch change"
-msgstr "Patch Change löschen"
-
-#: midi_region_view.cc:2112
-msgid "delete selection"
-msgstr "Auswahl löschen"
-
-#: midi_region_view.cc:2128
-msgid "delete note"
-msgstr "Note löschen"
-
-#: midi_region_view.cc:2587
-msgid "move notes"
-msgstr "Noten verschieben"
-
-#: midi_region_view.cc:3070
-msgid "change velocities"
-msgstr "Velocity ändern"
-
-#: midi_region_view.cc:3136
-msgid "transpose"
-msgstr "Transponieren"
-
-#: midi_region_view.cc:3164
-msgid "change note lengths"
-msgstr "Notenlänge ändern"
-
-#: midi_region_view.cc:3240
-msgid "nudge"
-msgstr "Verschieben"
-
-#: midi_region_view.cc:3255
-msgid "change channel"
-msgstr "Kanal ändern"
-
-#: midi_region_view.cc:3295
-msgid "Bank "
-msgstr "Bank"
-
-#: midi_region_view.cc:3296
-msgid "Program "
-msgstr "Programm"
-
-#: midi_region_view.cc:3297
-msgid "Channel "
-msgstr "Kanal"
-
-#: midi_region_view.cc:3484
-msgid "paste"
-msgstr "Einfügen"
-
-#: midi_streamview.cc:185
-msgid "attempt to display MIDI region with no source"
-msgstr "versuche, eine MIDI Region ohne Datenquelle darzustellen"
-
-#: midi_streamview.cc:195
-msgid "attempt to display MIDI region with no model"
-msgstr "versuche, eine MIDI Region ohne Datenmodell darzustellen"
-
-#: midi_streamview.cc:506
-msgid "failed to create MIDI region"
-msgstr "konnte MIDI-Region nicht erzeugen"
-
-#: midi_time_axis.cc:309
-msgid "External MIDI Device"
-msgstr "Externes MIDI-Gerät"
-
-#: midi_time_axis.cc:310
-msgid "External Device Mode"
-msgstr "Modus Externes Gerät"
-
-#: midi_time_axis.cc:318
-msgid "Chns"
-msgstr "Chns"
-
-#: midi_time_axis.cc:320
-msgid "Click to edit channel settings"
-msgstr "Klicke, um Kanaleinstellungen zu bearbeiten"
-
-#: midi_time_axis.cc:519
-msgid "Show Full Range"
-msgstr "Ganzen Bereich anzeigen"
-
-#: midi_time_axis.cc:524
-msgid "Fit Contents"
-msgstr "Auf Inhalt anpassen"
-
-#: midi_time_axis.cc:528
-msgid "Note Range"
-msgstr "Notenbereich"
-
-#: midi_time_axis.cc:529
-msgid "Note Mode"
-msgstr "Noten-Modus"
-
-#: midi_time_axis.cc:530
-msgid "Channel Selector"
-msgstr "Kanalauswahl"
-
-#: midi_time_axis.cc:535
-msgid "Color Mode"
-msgstr "Farbmodus"
-
-#: midi_time_axis.cc:594
-msgid "Bender"
-msgstr "Bender"
-
-#: midi_time_axis.cc:598
-msgid "Pressure"
-msgstr "Druckdaten"
-
-#: midi_time_axis.cc:610
-msgid "Controllers"
-msgstr "Controller"
-
-#: midi_time_axis.cc:615
-msgid "No MIDI Channels selected"
-msgstr "Keine MIDI-Kanäle ausgewählt"
-
-#: midi_time_axis.cc:672 midi_time_axis.cc:801
-msgid "Hide all channels"
-msgstr "Alle Kanäle verbergen"
-
-#: midi_time_axis.cc:676 midi_time_axis.cc:805
-msgid "Show all channels"
-msgstr "Alle Kanäle anzeigen"
-
-#: midi_time_axis.cc:687 midi_time_axis.cc:816
-msgid "Channel %1"
-msgstr "Kanal %1"
-
-#: midi_time_axis.cc:942 midi_time_axis.cc:974
-msgid "Controllers %1-%2"
-msgstr "Controller %1-%2"
-
-#: midi_time_axis.cc:965 midi_time_axis.cc:968
-msgid "Controller %1"
-msgstr "Controller %1"
-
-#: midi_time_axis.cc:991
-msgid "Sustained"
-msgstr "Sustain"
-
-#: midi_time_axis.cc:998
-msgid "Percussive"
-msgstr "Perkussiv"
-
-#: midi_time_axis.cc:1018
-msgid "Meter Colors"
-msgstr "Nach Lautstärke"
-
-#: midi_time_axis.cc:1025
-msgid "Channel Colors"
-msgstr "Kanalfarben"
-
-#: midi_time_axis.cc:1032
-msgid "Track Color"
-msgstr "Spurfarbe"
-
-#: midi_time_axis.cc:1606 midi_time_axis.cc:1612 midi_time_axis.cc:1622
-#: midi_time_axis.cc:1628
-msgid "all"
-msgstr "alle"
-
-#: midi_time_axis.cc:1609 midi_time_axis.cc:1625
-msgid "some"
-msgstr "einige"
-
-#: midi_tracer.cc:48
-msgid "Line history: "
-msgstr "Aktionsliste:"
-
-#: midi_tracer.cc:55
-msgid "Auto-Scroll"
-msgstr "Auto-Scroll"
-
-#: midi_tracer.cc:56
-msgid "Decimal"
-msgstr "Dezimal"
-
-#: midi_tracer.cc:57 rc_option_editor.cc:740
-msgid "Enabled"
-msgstr "Aktiviert"
-
-#: midi_tracer.cc:58
-msgid "Delta times"
-msgstr "Deltazeiten"
-
-#: midi_tracer.cc:71
-msgid "Port:"
-msgstr "Port:"
-
-#: midi_velocity_dialog.cc:31
-msgid "New velocity"
-msgstr "Neue Velocity"
-
-#: missing_file_dialog.cc:35
-msgid "Missing File"
-msgstr "Fehlende Datei"
-
-#: missing_file_dialog.cc:37
-msgid "Select a folder to search"
-msgstr "Ordner zum Suchen auswählen"
-
-#: missing_file_dialog.cc:38
-msgid "Add chosen folder to search path, and try again"
-msgstr "Ausgewählten Ordner zur Suche hinzufügen und es nochmal versuchen"
-
-#: missing_file_dialog.cc:40
-msgid "Stop loading this session"
-msgstr "Laden des Projekts abbrechen"
-
-#: missing_file_dialog.cc:41
-msgid "Skip all missing files"
-msgstr "Alle fehlenden Dateien überspringen"
-
-#: missing_file_dialog.cc:42
-msgid "Skip this file"
-msgstr "Diese Datei überspringen"
-
-#: missing_file_dialog.cc:53
-msgid "audio"
-msgstr "Audio"
-
-#: missing_file_dialog.cc:70
-msgid ""
-"%1 cannot find the %2 file\n"
-"\n"
-"<i>%3</i>\n"
-"\n"
-"in any of these folders:\n"
-"\n"
-"<tt>%4</tt>\n"
-"\n"
-msgstr ""
-"%1 kann die %2datei\n"
-"\n"
-"<i>%3</i>\n"
-"\n"
-"in keinem dieser Ordner finden:\n"
-"\n"
-"<tt>%4</tt>\n"
-"\n"
-
-#: missing_file_dialog.cc:104
-msgid "Click to choose an additional folder"
-msgstr "Einen weiteren Ordner für die Suche auswählen"
-
-#: missing_plugin_dialog.cc:29
-msgid "Missing Plugins"
-msgstr "Fehlende Plugins"
-
-#: missing_plugin_dialog.cc:33 transcode_video_dialog.cc:60
-msgid "OK"
-msgstr "OK"
-
-#: mixer_actor.cc:55
-msgid "Toggle Solo on Mixer-Selected Tracks/Busses"
-msgstr "Im Mixer ausgewählte Spuren/Busse auf Solo schalten"
-
-#: mixer_actor.cc:56
-msgid "Toggle Mute on Mixer-Selected Tracks/Busses"
-msgstr "Stummschaltung der im Mixer ausgewählten Spuren/Busse ändern"
-
-#: mixer_actor.cc:57
-msgid "Toggle Rec-enable on Mixer-Selected Tracks/Busses"
-msgstr "Aufnahme auf im Mixer ausgewählten Spuren aktivieren"
-
-#: mixer_actor.cc:58
-msgid "Decrease Gain on Mixer-Selected Tracks/Busses"
-msgstr "Lautstärke im Mixer ausgewählter Spuren/Busse reduzieren"
-
-#: mixer_actor.cc:59
-msgid "Increase Gain on Mixer-Selected Tracks/Busses"
-msgstr "Lautstärke im Mixer ausgewählter Spuren/Busse erhöhen"
-
-#: mixer_actor.cc:60
-msgid "Set Gain to 0dB on Mixer-Selected Tracks/Busses"
-msgstr "Lautstärke im Mixer ausgewählter Spuren/Busse auf 0dB setzen"
-
-#: mixer_actor.cc:63
-msgid "Copy Selected Processors"
-msgstr "Ausgewählte Prozessoren kopieren"
-
-#: mixer_actor.cc:64
-msgid "Cut Selected Processors"
-msgstr "Ausgewählte Prozessoren ausschneiden"
-
-#: mixer_actor.cc:65
-msgid "Paste Selected Processors"
-msgstr "Ausgewählte Prozessoren einfügen"
-
-#: mixer_actor.cc:66
-msgid "Delete Selected Processors"
-msgstr "Ausgewählte Prozessoren löschen"
-
-#: mixer_actor.cc:67
-msgid "Select All (visible) Processors"
-msgstr "Alle (sichtbaren) Prozessoren auswählen"
-
-#: mixer_actor.cc:68
-msgid "Toggle Selected Processors"
-msgstr "Ausgewählte Prozessoren umschalten"
-
-#: mixer_actor.cc:69
-msgid "Toggle Selected Plugins"
-msgstr "Ausgewählte Plugins umschalten "
-
-#: mixer_actor.cc:70
-msgid "Deselect all strips and processors"
-msgstr "Alle Kanalzüge und Prozessoren deselektieren"
-
-#: mixer_actor.cc:72 mixer_actor.cc:73
-msgid "Scroll Mixer Window to the left"
-msgstr "Mixerfenster nach links scrollen"
-
-#: mixer_actor.cc:75
-msgid "Toggle MIDI Input Active for Mixer-Selected Tracks/Busses"
-msgstr "MIDI Eingang für im Mixer ausgewählte Spuren/Busse de/aktivieren"
-
-#: mixer_actor.cc:90
-msgid "Loaded mixer bindings from %1"
-msgstr "Mixer-Tastenkürzel aus %1 geladen"
-
-#: mixer_actor.cc:92
-msgid "Could not find mixer.bindings in search path %1"
-msgstr "Konnte mixer.bindings im Suchpfad %1 nicht finden"
-
-#: mixer_strip.cc:96 mixer_strip.cc:125
-msgid "pre"
-msgstr "Pre"
-
-#: mixer_strip.cc:98 mixer_strip.cc:127 mixer_strip.cc:374 mixer_strip.cc:1413
-#: rc_option_editor.cc:2331
-msgid "Comments"
-msgstr "Kommentare"
-
-#: mixer_strip.cc:149
-msgid "Click to toggle the width of this mixer strip."
-msgstr "Klicken Sie, um die Breite dieses Kanalzuges umzuschalten"
-
-#: mixer_strip.cc:151
-msgid ""
-"\n"
-"%1-%2-click to toggle the width of all strips."
-msgstr ""
-"\n"
-"%1-%2-Klicken Sie, um die Breite aller Kanalzüge umzuschalten."
-
-#: mixer_strip.cc:160
-msgid "Hide this mixer strip"
-msgstr "Diesen Kanalzug verbergen"
-
-#: mixer_strip.cc:171
-msgid "Click to select metering point"
-msgstr "Abgreifpunkt der Pegelanzeige auswählen"
-
-#: mixer_strip.cc:187
-msgid "Isolate Solo"
-msgstr "Solo isolieren"
-
-#: mixer_strip.cc:195
-msgid "Lock Solo Status"
-msgstr "Solostatus sperren"
-
-#: mixer_strip.cc:197 mixer_strip.cc:2035
-msgid "SoloLock|Lock"
-msgstr "Lock"
-
-#: mixer_strip.cc:198 mixer_strip.cc:2034
-msgid "Iso"
-msgstr "Iso"
-
-#: mixer_strip.cc:252
-msgid "Mix group"
-msgstr "Bearbeitungsgruppe"
-
-#: mixer_strip.cc:370 rc_option_editor.cc:2327
-msgid "Phase Invert"
-msgstr "Phaseninvertierung"
-
-#: mixer_strip.cc:371 rc_option_editor.cc:2328
-msgid "Record & Monitor"
-msgstr "Aufnahme & Monitor..."
-
-#: mixer_strip.cc:372 rc_option_editor.cc:2329
-msgid "Solo Iso / Lock"
-msgstr "Solo Iso / Sperre"
-
-#: mixer_strip.cc:527
-msgid "Enable/Disable MIDI input"
-msgstr "Aktiviert/Deaktiviert MIDI Input"
-
-#: mixer_strip.cc:691
-msgid "Aux"
-msgstr "Aux"
-
-#: mixer_strip.cc:713
-msgid "Snd"
-msgstr "Snd"
-
-#: mixer_strip.cc:779 mixer_strip.cc:882 processor_box.cc:2382
-msgid "Not connected to audio engine - no I/O changes are possible"
-msgstr ""
-"Nicht mit Audioengine verbunden - es sind keine Änderungen an Ein-/Ausgängen "
-"möglich"
-
-#: mixer_strip.cc:836 mixer_strip.cc:938
-msgid "Add %1 port"
-msgstr "%1-Port hinzufügen"
-
-#: mixer_strip.cc:843 mixer_strip.cc:945
-msgid "Routing Grid"
-msgstr "Verbindungsraster"
-
-#: mixer_strip.cc:1174
-msgid "<b>INPUT</b> to %1"
-msgstr "<b>EINGANG</b> zu %1"
-
-#: mixer_strip.cc:1177
-msgid "<b>OUTPUT</b> from %1"
-msgstr "<b>AUSGANG</b> von %1"
-
-#: mixer_strip.cc:1290
-msgid "Disconnected"
-msgstr "Getrennt"
-
-#: mixer_strip.cc:1416
-msgid "*Comments*"
-msgstr "*Kommentare*"
-
-#: mixer_strip.cc:1423
-msgid "Cmt"
-msgstr "Kmt"
-
-#: mixer_strip.cc:1426
-msgid "*Cmt*"
-msgstr "*Kmt*"
-
-#: mixer_strip.cc:1432
-msgid "Click to Add/Edit Comments"
-msgstr "Kommentare hinzufügen/ändern"
-
-#: mixer_strip.cc:1476
-msgid "Grp"
-msgstr "Grp"
-
-#: mixer_strip.cc:1479
-msgid "~G"
-msgstr "~G"
-
-#: mixer_strip.cc:1508 route_time_axis.cc:561
-msgid "Color..."
-msgstr "Farbe..."
-
-#: mixer_strip.cc:1510 route_time_axis.cc:563
-msgid "Comments..."
-msgstr "Kommentare"
-
-#: mixer_strip.cc:1512 route_time_axis.cc:565
-msgid "Inputs..."
-msgstr "Eingänge..."
-
-#: mixer_strip.cc:1514 route_time_axis.cc:567
-msgid "Outputs..."
-msgstr "Ausgänge..."
-
-#: mixer_strip.cc:1519
-msgid "Save As Template..."
-msgstr "Als Vorlage Speichern..."
-
-#: mixer_strip.cc:1533
-msgid "Adjust Latency..."
-msgstr "Latenz einstellen..."
-
-#: mixer_strip.cc:1536
-msgid "Protect Against Denormals"
-msgstr "Schütze vor Denormals"
-
-#: mixer_strip.cc:1542 route_time_axis.cc:580
-msgid "Remote Control ID..."
-msgstr "ID für Fernsteuerung..."
-
-#: mixer_strip.cc:1830
-msgid "Pre"
-msgstr "Pre"
-
-#: mixer_strip.cc:1834
-msgid "Post"
-msgstr "Post"
-
-#: mixer_strip.cc:1850
-msgid "Meter|In"
-msgstr "In"
-
-#: mixer_strip.cc:1854
-msgid "Meter|Pr"
-msgstr "Pr"
-
-#: mixer_strip.cc:1858
-msgid "Meter|Po"
-msgstr "Po"
-
-#: mixer_strip.cc:1862
-msgid "Meter|O"
-msgstr "O"
-
-#: mixer_strip.cc:1867
-msgid "Meter|C"
-msgstr "C"
-
-#: mixer_strip.cc:2015 route_ui.cc:171
-msgid "Disk"
-msgstr "Disk"
-
-#: mixer_strip.cc:2027 monitor_section.cc:70
-msgid "AFL"
-msgstr "AFL"
-
-#: mixer_strip.cc:2030 monitor_section.cc:71
-msgid "PFL"
-msgstr "PFL"
-
-#: mixer_strip.cc:2040 meter_strip.cc:383
-msgid "MonitorInput|I"
-msgstr "I"
-
-#: mixer_strip.cc:2041 meter_strip.cc:384
-msgid "MonitorDisk|D"
-msgstr "D"
-
-#: mixer_strip.cc:2053 meter_strip.cc:375 route_time_axis.cc:2697
-msgid "AfterFader|A"
-msgstr "A"
-
-#: mixer_strip.cc:2056
-msgid "Prefader|P"
-msgstr "P"
-
-#: mixer_strip.cc:2061
-msgid "SoloIso|I"
-msgstr "I"
-
-#: mixer_strip.cc:2062
-msgid "SoloLock|L"
-msgstr "L"
-
-#: mixer_strip.cc:2248
-msgid "Pre Fader"
-msgstr "Pre Fader"
-
-#: mixer_strip.cc:2249
-msgid "Post Fader"
-msgstr "Post Fader"
-
-#: mixer_strip.cc:2293 meter_strip.cc:851
-msgid "Change all in Group to %1"
-msgstr "Alle in Gruppe zu %1 ändern"
-
-#: mixer_strip.cc:2295 meter_strip.cc:853
-msgid "Change all to %1"
-msgstr "Alle zu %1 ändern"
-
-#: mixer_strip.cc:2297 meter_strip.cc:855
-msgid "Change same track-type to %1"
-msgstr "Gleichen Spurtyp zu %1 ändern"
-
-#: mixer_ui.cc:130 route_time_axis.cc:818
-msgid "Group"
-msgstr "Gruppe"
-
-#: mixer_ui.cc:1224
-msgid "track display list item for renamed strip not found!"
-msgstr ""
-"Konnte Bezeichnung für umbenannten Kanalzug nicht in der Spurliste finden!"
-
-#: mixer_ui.cc:1316
-msgid "-all-"
-msgstr "-alle-"
-
-#: mixer_ui.cc:1853
-msgid "Strips"
-msgstr "Kanalzüge"
-
-#: meter_strip.cc:157
-msgid "Reset Peak"
-msgstr "Peaks zurücksetzen"
-
-#: meter_strip.cc:378 route_time_axis.cc:2701
-msgid "PreFader|P"
-msgstr "P"
-
-#: meter_strip.cc:887
-msgid "Variable height"
-msgstr "Variable Höhe"
-
-#: meter_strip.cc:888
-msgid "Short"
-msgstr "Short"
-
-#: meter_strip.cc:889
-msgid "Tall"
-msgstr "Tall"
-
-#: meter_strip.cc:890
-msgid "Grande"
-msgstr "Grande"
-
-#: meter_strip.cc:891
-msgid "Venti"
-msgstr "Venti"
-
-#: meter_patterns.cc:82
-msgid "Peak"
-msgstr "Spitzenwert"
-
-#: meter_patterns.cc:85
-msgid "RMS + Peak"
-msgstr "RMS + Spitzenwert"
-
-#: meter_patterns.cc:88
-msgid "IEC1/DIN"
-msgstr "IEC1/DIN"
-
-#: meter_patterns.cc:91
-msgid "IEC1/Nordic"
-msgstr "IEC1/Nordisch"
-
-#: meter_patterns.cc:94
-msgid "IEC2/BBC"
-msgstr "IEC2/BBC"
-
-#: meter_patterns.cc:97
-msgid "IEC2/EBU"
-msgstr "IEC2/EBU"
-
-#: meter_patterns.cc:100
-msgid "K20"
-msgstr "K20"
-
-#: meter_patterns.cc:103
-msgid "K14"
-msgstr "K14"
-
-#: meter_patterns.cc:106
-msgid "K12"
-msgstr "K12"
-
-#: meter_patterns.cc:109
-msgid "VU"
-msgstr "VU"
-
-#: monitor_section.cc:69
-msgid "SiP"
-msgstr "SiP"
-
-#: monitor_section.cc:96 route_group_dialog.cc:49
-msgid "Soloing"
-msgstr "Soloing"
-
-#: monitor_section.cc:100
-msgid "Isolated"
-msgstr "Isoliert"
-
-#: monitor_section.cc:104
-msgid "Auditioning"
-msgstr "Vorhören"
-
-#: monitor_section.cc:114
-msgid ""
-"When active, something is solo-isolated.\n"
-"Click to de-isolate everything"
-msgstr ""
-"Wenn aktiv, ist etwas auf isoliertes Solo geschalten.\n"
-"Klick, schaltet isoliertes Solo überall aus."
-
-#: monitor_section.cc:117
-msgid ""
-"When active, auditioning is active.\n"
-"Click to stop the audition"
-msgstr ""
-"Wird beim Vorhören aktiv.\n"
-"Klicken stoppt das Vorhören."
-
-#: monitor_section.cc:134
-msgid "Solo controls affect solo-in-place"
-msgstr "Solo-Kontrollelemente beeinflussen solo-in-place"
-
-#: monitor_section.cc:140
-msgid "Solo controls toggle after-fader-listen"
-msgstr "Solo-Kontrollelemente schalten AFL um"
-
-#: monitor_section.cc:146
-msgid "Solo controls toggle pre-fader-listen"
-msgstr "Solo-Kontrollelemente schalten PFL um"
-
-#: monitor_section.cc:156
-msgid "Gain increase for soloed signals (0dB is normal)"
-msgstr "Erhöhung der Lautstärke für Solosignale (0dB ist üblich)"
-
-#: monitor_section.cc:161 monitor_section.cc:190 monitor_section.cc:216
-#: monitor_section.cc:316
-msgid "0 dB"
-msgstr "0 dB"
-
-#: monitor_section.cc:162
-msgid "3 dB"
-msgstr "3 dB"
-
-#: monitor_section.cc:163
-msgid "6 dB"
-msgstr "6 dB"
-
-#: monitor_section.cc:164
-msgid "10 dB"
-msgstr "10 dB"
-
-#: monitor_section.cc:170
-msgid "Solo Boost"
-msgstr "Solo Boost"
-
-#: monitor_section.cc:185
-msgid ""
-"Gain reduction non-soloed signals\n"
-"A value above -inf dB causes \"solo-in-front\""
-msgstr ""
-"Reduzierung der Lautstärke für Signale, die nicht Solo geschalten sind.\n"
-"Ein Wert über -inf dB bedeutet \"solo-in-front\""
-
-#: monitor_section.cc:191 monitor_section.cc:218 monitor_section.cc:318
-msgid "-6 dB"
-msgstr "-6 dB"
-
-#: monitor_section.cc:192 monitor_section.cc:219 monitor_section.cc:319
-msgid "-12 dB"
-msgstr "-12 dB"
-
-#: monitor_section.cc:193 monitor_section.cc:220 monitor_section.cc:320
-msgid "-20 dB"
-msgstr "-20 dB"
-
-#: monitor_section.cc:194
-msgid "OFF"
-msgstr "OFF"
-
-#: monitor_section.cc:196
-msgid "SiP Cut"
-msgstr "SiP Cut"
-
-#: monitor_section.cc:211
-msgid "Gain reduction to use when dimming monitor outputs"
-msgstr "Lautstärkereduzierung beim Abschwächen der Monitorausgänge"
-
-#: monitor_section.cc:217 monitor_section.cc:317
-msgid "-3 dB"
-msgstr "-3 dB"
-
-#: monitor_section.cc:225 monitor_section.cc:283 monitor_section.cc:353
-msgid "Dim"
-msgstr "Dim"
-
-#: monitor_section.cc:235
-msgid "Excl. Solo"
-msgstr "Exkl. Solo"
-
-#: monitor_section.cc:237
-msgid "Exclusive solo means that only 1 solo is active at a time"
-msgstr ""
-"Exklusives Solo bedeutet, daß nur ein Solo zu einem Zeitpunkt aktiv ist"
-
-#: monitor_section.cc:244
-msgid "Solo » Mute"
-msgstr "Solo » Mute"
-
-#: monitor_section.cc:246
-msgid ""
-"If enabled, solo will override mute\n"
-"(a soloed & muted track or bus will be audible)"
-msgstr ""
-"Wenn aktiviert, hat Solo Priorität über Mute\n"
-"(eine Spur mit aktiviertem Mute & Solo ist hörbar)"
-
-#: monitor_section.cc:321
-msgid "-30 dB"
-msgstr "-30 dB"
-
-#: monitor_section.cc:323
-msgid "Monitor"
-msgstr "Monitor"
-
-#: monitor_section.cc:361
-msgid "Inv"
-msgstr "Inv"
-
-#: monitor_section.cc:744
-msgid "Switch monitor to mono"
-msgstr "Monitor auf Mono schalten"
-
-#: monitor_section.cc:747
-msgid "Cut monitor"
-msgstr "Monitor stummschalten"
-
-#: monitor_section.cc:750
-msgid "Dim monitor"
-msgstr "Monitor abschwächen"
-
-#: monitor_section.cc:753
-msgid "Toggle exclusive solo mode"
-msgstr "Exklusives Solo umschalten"
-
-#: monitor_section.cc:759
-msgid "Toggle mute overrides solo mode"
-msgstr "Mute-Status hat höhere Priorität als Solo-Modus"
-
-#: monitor_section.cc:771
-msgid "Cut monitor channel %1"
-msgstr "Monitorkanal %1 stummschalten"
-
-#: monitor_section.cc:776
-msgid "Dim monitor channel %1"
-msgstr "Monitorkanal %1 abschwächen"
-
-#: monitor_section.cc:781
-msgid "Solo monitor channel %1"
-msgstr "Monitorkanal %1 Solo"
-
-#: monitor_section.cc:786
-msgid "Invert monitor channel %1"
-msgstr "Invertiere Monitorkanal %1"
-
-#: monitor_section.cc:796
-msgid "In-place solo"
-msgstr "In-Place Solo"
-
-#: monitor_section.cc:798
-msgid "After Fade Listen (AFL) solo"
-msgstr "Solo nach Fader (AFL) abhören"
-
-#: monitor_section.cc:800
-msgid "Pre Fade Listen (PFL) solo"
-msgstr "Solo vor Fader (PFL) abhören"
-
-#: mono_panner.cc:109 stereo_panner.cc:119
-msgid "bypassed"
-msgstr "überbrückt"
-
-#: mono_panner.cc:123
-#, c-format
-msgid "L:%3d R:%3d"
-msgstr "L:%3d R:%3d"
-
-#: mono_panner.cc:203 panner2d.cc:240 stereo_panner.cc:251
-#: stereo_panner.cc:274
-msgid "Panner|L"
-msgstr "L"
-
-#: mono_panner.cc:220 panner2d.cc:241 stereo_panner.cc:249
-#: stereo_panner.cc:276
-msgid "Panner|R"
-msgstr "R"
-
-#: mono_panner_editor.cc:33
-msgid "Mono Panner"
-msgstr "Mono Panner"
-
-#: mono_panner_editor.cc:44 mono_panner_editor.cc:49
-#: stereo_panner_editor.cc:46 stereo_panner_editor.cc:51
-msgid "%"
-msgstr "%"
-
-#: nag.cc:41
-msgid "Support %1 Development"
-msgstr "Unterstütze die Entwicklung von %1"
-
-#: nag.cc:42
-msgid "I'd like to make a one-time donation"
-msgstr "Ich möchte etwas spenden"
-
-#: nag.cc:43
-msgid "Tell me more about becoming a subscriber"
-msgstr "Ich möchte mehr über eine dauerhafte Unterstützung (Abonnement) wissen"
-
-#: nag.cc:44
-msgid "I'm already a subscriber!"
-msgstr "Ich bin schon Abonnent!"
-
-#: nag.cc:45
-msgid "Ask about this the next time I export"
-msgstr "Frage mich nach dem nächsten Export"
-
-#: nag.cc:46
-msgid "Never ever ask me about this again"
-msgstr "Frage nicht mehr danach"
-
-#: nag.cc:49
-msgid ""
-"Congratulations on your session export.\n"
-"\n"
-"It looks as if you may already be a subscriber. If so, thanks, and sorry\n"
-"to bother you again about this - I'm working on improving our subscriber "
-"system\n"
-"so that I don't have to keep annoying you with this message.\n"
-"\n"
-"If you're not a subscriber, perhaps you might consider supporting my work\n"
-"on Ardour with either a one-time donation or subscription. Nothing will \n"
-"happen if you choose not to do so. However Ardour's continuing development\n"
-"relies on a stable, sustainable income stream. Thanks for using Ardour!"
-msgstr ""
-"Herzlichen Glückwunsch zu Ihrem Projektexport.\n"
-"\n"
-"Es sieht so aus, als wären Sie schon ein Abonnent/eine Abonnentin. Wenn ja,\n"
-"dann vielen Dank und Entschuldigung für die Störung - ich arbeite daran, "
-"das\n"
-"Abo-System zu verbessern, damit ich Sie nicht dauernd störe.\n"
-"\n"
-"Wenn Sie Ardour noch nicht regelmäßig finanziell unterstützen, wäre es "
-"schön\n"
-"wenn Sie sich überlegen würden, meine Arbeit mit einer einmaligen Spende "
-"oder\n"
-"einem Abonnement zu unterstützen. Falls Sie das nicht tun, wird nichts "
-"passieren.\n"
-"Die weitere Entwicklung hängt allerdings von einem stabilen und "
-"verlässlichen Einkommen ab.\n"
-"Danke, dass Sie Ardour verwenden!"
-
-#: nag.cc:58
-msgid ""
-"Congratulations on your session export.\n"
-"\n"
-"I hope you find Ardour a useful tool. I'd like to ask you to consider "
-"supporting\n"
-"its development with either a one-time donation or subscription. Nothing\n"
-"will happen if you choose not to do so. However Ardour's continuing "
-"development\n"
-"relies on a stable, sustainable income stream. Thanks for using Ardour!"
-msgstr ""
-"Herzlichen Glückwunsch zu Ihrem Projektexport.\n"
-"\n"
-"Ich hoffe, dass Ardour ein nützliches Werkzeug für Sie ist. Ich möchte Sie\n"
-"darum bitten, Ardours Entwicklung entweder durch eine einmalige Spende\n"
-"oder ein Abonnement zu unterstützen. Falls Sie das nicht tun, wird nichts\n"
-"passieren. Die weitere Entwicklung hängt allerdings von einem stabilen\n"
-"und verlässlichen Einkommen ab. Danke, dass Sie Ardour verwenden!"
-
-#: new_plugin_preset_dialog.cc:29
-msgid "New Preset"
-msgstr "Neues Preset"
-
-#: new_plugin_preset_dialog.cc:30
-msgid "Replace existing preset with this name"
-msgstr "Ersetze vorhandenes Preset mit diesem Namen"
-
-#: new_plugin_preset_dialog.cc:34
-msgid "Name of new preset"
-msgstr "Name für neues Preset"
-
-#: normalize_dialog.cc:34
-msgid "Normalize regions"
-msgstr "Regionen normalisieren"
-
-#: normalize_dialog.cc:34
-msgid "Normalize region"
-msgstr "Region normalisieren"
-
-#: normalize_dialog.cc:49 strip_silence_dialog.cc:66
-msgid "dbFS"
-msgstr "dbFS"
-
-#: normalize_dialog.cc:56
-msgid "Normalize each region using its own peak value"
-msgstr "Normalisiere jede Region mit ihrem eigenen Spitzenwert"
-
-#: normalize_dialog.cc:58
-msgid "Normalize each region using the peak value of all regions"
-msgstr "Normalisiere jede Region mit dem Spitzenwert aller Regionen"
-
-#: normalize_dialog.cc:73
-msgid "Normalize"
-msgstr "Normalisieren"
-
-#: note_select_dialog.cc:33
-msgid "Select Note"
-msgstr "Note auswählen"
-
-#: opts.cc:57
-msgid "Usage: "
-msgstr "Aufruf:"
-
-#: opts.cc:58
-msgid "  [SESSION_NAME]              Name of session to load\n"
-msgstr "  [PROJEKTNAME]                   Name des zu ladenden Projekts\n"
-
-#: opts.cc:59
-msgid "  -v, --version               Show version information\n"
-msgstr "  -v, --version                    Versionsinformation ausgeben\n"
-
-#: opts.cc:60
-msgid "  -h, --help                  Print this message\n"
-msgstr "  -h, --help                       Diese Hinweise ausgeben\n"
-
-#: opts.cc:61
-msgid ""
-"  -a, --no-announcements      Do not contact website for announcements\n"
-msgstr ""
-"  -a, --no-announcements      Webseite nicht für Neuigkeiten kontaktieren\n"
-
-#: opts.cc:62
-msgid ""
-"  -b, --bindings              Print all possible keyboard binding names\n"
-msgstr ""
-"  -b, --bindings                   Alle möglichen Tastaturkürzelnamen "
-"ausgeben\n"
-
-#: opts.cc:63
-msgid ""
-"  -c, --name <name>           Use a specific backend client name, default is "
-"ardour\n"
-msgstr ""
-"  -c, --name  name                 Benutze speziellen Backend-Clientnamen, "
-"Voreinstellung: ardour\n"
-
-#: opts.cc:64
-msgid ""
-"  -d, --disable-plugins       Disable all plugins in an existing session\n"
-msgstr ""
-"-d, --disable-plugins            Alle Plugins eines bestehenden Projekts "
-"deaktivieren\n"
-
-#: opts.cc:65
-msgid ""
-"  -D, --debug <options>       Set debug flags. Use \"-D list\" to see "
-"available options\n"
-msgstr ""
-"  -D, --debug <options>       Setze Debug-flags. Verwende \"-D list\" um die "
-"verfügbaren Optionen zu sehen\n"
-
-#: opts.cc:66
-msgid "  -n, --no-splash             Do not show splash screen\n"
-msgstr "  -n, --no-splash               Splashscreen nicht anzeigen\n"
-
-#: opts.cc:67
-msgid "  -m, --menus file            Use \"file\" to define menus\n"
-msgstr "  -m, --menus file                 Benutze \"file\" für die Menüs\n"
-
-#: opts.cc:68
-msgid ""
-"  -N, --new session-name      Create a new session from the command line\n"
-msgstr ""
-"  -N, --new session-name           Erstelle neues Projekt aus der "
-"Kommandozeile\n"
-
-#: opts.cc:69
-msgid "  -O, --no-hw-optimizations   Disable h/w specific optimizations\n"
-msgstr ""
-"  -O, --no-hw-optimizations        Hardwarespezifische Optimierungen "
-"deaktivieren\n"
-
-#: opts.cc:70
-msgid "  -P, --no-connect-ports      Do not connect any ports at startup\n"
-msgstr ""
-"  -P, --no-connect-ports      beim Programmstart keine Ports verbinden\n"
-
-#: opts.cc:71
-msgid "  -S, --sync                  Draw the gui synchronously \n"
-msgstr "  -S, --sync\t                      Zeichne die GUI synchron \n"
-
-#: opts.cc:73
-msgid "  -V, --novst                 Do not use VST support\n"
-msgstr "  -V, --novst                      VST-Unterstützung ausschalten\n"
-
-#: opts.cc:75
-msgid ""
-"  -E, --save <file>           Load the specified session, save it to <file> "
-"and then quit\n"
-msgstr ""
-"  -E, --save <file>           Lädt das angegebene Projekt, speichert es "
-"unter <file> und beendet sich\n"
-
-#: opts.cc:76
-msgid "  -C, --curvetest filename    Curve algorithm debugger\n"
-msgstr "  -C, --curvetest filename    Curve algorithm debugger\n"
-
-#: opts.cc:77
-msgid ""
-"  -k, --keybindings filename  Name of key bindings to load (default is ~/."
-"ardour3/ardour.bindings)\n"
-msgstr ""
-"  -k, --keybindings dateiname       Dateiname für die Tastaturbelegungen "
-"(Standard: ~/.config/.ardour3/ardour.bindings)\n"
-
-#: panner2d.cc:854
-msgid "Panner (2D)"
-msgstr "Panner (2D)"
-
-#: panner2d.cc:856 panner_ui.cc:400 plugin_ui.cc:452
-msgid "Bypass"
-msgstr "Bypass"
-
-#: panner2d.cc:862
-msgid "Panner"
-msgstr "Panner"
-
-#: panner_ui.cc:72
-msgid "Pan automation mode"
-msgstr "Pan-Automationsmodus"
-
-#: panner_ui.cc:73
-msgid "Pan automation type"
-msgstr "Pan-Automationstyp"
-
-#: panner_ui.cc:603
-msgid "Manual|M"
-msgstr "M"
-
-#: panner_ui.cc:606
-msgid "Play|P"
-msgstr "P"
-
-#: panner_ui.cc:609
-msgid "Touch|T"
-msgstr "T"
-
-#: panner_ui.cc:612
-msgid "Write|W"
-msgstr "W"
-
-#: playlist_selector.cc:43
-msgid "Playlists"
-msgstr "Wiedergabelisten"
-
-#: playlist_selector.cc:54
-msgid "Playlists grouped by track"
-msgstr "Wiedergabelisten, nach Spur gruppiert"
-
-#: playlist_selector.cc:101
-msgid "Playlist for %1"
-msgstr "Wiedergabeliste für %1"
-
-#: playlist_selector.cc:114
-msgid "Other tracks"
-msgstr "Andere Spuren"
-
-#: playlist_selector.cc:139
-msgid "unassigned"
-msgstr "nicht zugewiesen"
-
-#: playlist_selector.cc:194
-msgid "Imported"
-msgstr "Importierte"
-
-#: plugin_eq_gui.cc:85 plugin_eq_gui.cc:109
-msgid "dB scale"
-msgstr "dB Skala"
-
-#: plugin_eq_gui.cc:116
-msgid "Show phase"
-msgstr "Zeige Phase"
-
-#: plugin_selector.cc:53 plugin_selector.cc:229
-msgid "Name contains"
-msgstr "Name enthält"
-
-#: plugin_selector.cc:54 plugin_selector.cc:233
-msgid "Type contains"
-msgstr "Typ enthält"
-
-#: plugin_selector.cc:55 plugin_selector.cc:231
-msgid "Category contains"
-msgstr "Kategorie enthält"
-
-#: plugin_selector.cc:56 plugin_selector.cc:253
-msgid "Author contains"
-msgstr "Autor enthält"
-
-#: plugin_selector.cc:57 plugin_selector.cc:255
-msgid "Library contains"
-msgstr "Katalog enthält"
-
-#: plugin_selector.cc:58 plugin_selector.cc:219 plugin_selector.cc:537
-msgid "Favorites only"
-msgstr "nur Favoriten"
-
-#: plugin_selector.cc:59 plugin_selector.cc:223 plugin_selector.cc:537
-msgid "Hidden only"
-msgstr "Nur versteckte"
-
-#: plugin_selector.cc:64
-msgid "Plugin Manager"
-msgstr "Alle Plugins ..."
-
-#: plugin_selector.cc:85
-msgid "Fav"
-msgstr "Fav"
-
-#: plugin_selector.cc:87
-msgid "Available Plugins"
-msgstr "Verfügbare Plugins"
-
-#: plugin_selector.cc:88
-msgid "Type"
-msgstr "Typ"
-
-#: plugin_selector.cc:89
-msgid "Category"
-msgstr "Kategorie"
-
-#: plugin_selector.cc:90
-msgid "Creator"
-msgstr "Ersteller"
-
-#: plugin_selector.cc:91
-msgid "# Audio In"
-msgstr "# Audio In"
-
-#: plugin_selector.cc:92
-msgid "# Audio Out"
-msgstr "# Audio Out"
-
-#: plugin_selector.cc:93
-msgid "# MIDI In"
-msgstr "# MIDI In"
-
-#: plugin_selector.cc:94
-msgid "# MIDI Out"
-msgstr "# MIDI Out"
-
-#: plugin_selector.cc:116
-msgid "Plugins to be connected"
-msgstr "Plugins, die verbunden werden"
-
-#: plugin_selector.cc:129
-msgid "Add a plugin to the effect list"
-msgstr "Plugin zur Effektliste hinzufügen"
-
-#: plugin_selector.cc:133
-msgid "Remove a plugin from the effect list"
-msgstr "Plugin aus der Effektliste entfernen"
-
-#: plugin_selector.cc:135
-msgid "Update available plugins"
-msgstr "Verfügbare Plugins auffrischen"
-
-#: plugin_selector.cc:172
-msgid "Insert Plugin(s)"
-msgstr "Plugin(s) einfügen"
-
-#: plugin_selector.cc:337 plugin_selector.cc:338 plugin_selector.cc:339
-#: plugin_selector.cc:340
-msgid "variable"
-msgstr "variabel"
-
-#: plugin_selector.cc:496
-msgid ""
-"The plugin \"%1\" could not be loaded\n"
-"\n"
-"See the Log window for more details (maybe)"
-msgstr ""
-"Das Plugin \"%1\" konnte nicht geladen werden\n"
-"\n"
-"Im Logfenster befinden sich möglicherweise mehr Informationen"
-
-#: plugin_selector.cc:644
-msgid "Favorites"
-msgstr "Favoriten"
-
-#: plugin_selector.cc:646
-msgid "Plugin Manager..."
-msgstr "Plugin Manager..."
-
-#: plugin_selector.cc:650
-msgid "By Creator"
-msgstr "Nach Urheber"
-
-#: plugin_selector.cc:653
-msgid "By Category"
-msgstr "Nach Kategorie"
-
-#: plugin_ui.cc:113
-msgid "Eh? LADSPA plugins don't have editors!"
-msgstr "Merkwürdig... LADSPA-Plugins sollten kein GUI haben!"
-
-#: plugin_ui.cc:122 plugin_ui.cc:227
-msgid ""
-"unknown type of editor-supplying plugin (note: no VST support in this "
-"version of %1)"
-msgstr ""
-"Unbekannter Plugintyp mit eigenem Editor (Hinweis: diese %1-Version "
-"unterstützt keine VST-Plugins)"
-
-#: plugin_ui.cc:125
-msgid "unknown type of editor-supplying plugin"
-msgstr "Unbekannter Plugintyp"
-
-#: plugin_ui.cc:257
-msgid ""
-"unknown type of editor-supplying plugin (note: no linuxVST support in this "
-"version of %1)"
-msgstr ""
-"Unbekannter Plugintyp mit eigenem Editor (Hinweis: diese %1-Version "
-"unterstützt keine linuxVST-Plugins)"
-
-#: plugin_ui.cc:329
-msgid "create_lv2_editor called on non-LV2 plugin"
-msgstr "create_lv2_editor auf nicht-LV2-Plugin angewandt"
-
-#: plugin_ui.cc:418
-msgid "Add"
-msgstr "Hinzufügen"
-
-#: plugin_ui.cc:422
-msgid "Description"
-msgstr "Beschreibung"
-
-#: plugin_ui.cc:423
-msgid "Plugin analysis"
-msgstr "Pluginanalyse"
-
-#: plugin_ui.cc:430
-msgid ""
-"Presets (if any) for this plugin\n"
-"(Both factory and user-created)"
-msgstr ""
-"Presets (falls existent) für dieses Plugin\n"
-"(Hersteller- und Benutzerpresets)"
-
-#: plugin_ui.cc:431
-msgid "Save a new preset"
-msgstr "Neues Preset speichern"
-
-#: plugin_ui.cc:432
-msgid "Save the current preset"
-msgstr "Momentanes Preset speichern"
-
-#: plugin_ui.cc:433
-msgid "Delete the current preset"
-msgstr "Lösche das aktuelle Preset"
-
-#: plugin_ui.cc:434
-msgid "Disable signal processing by the plugin"
-msgstr "Deaktiviere die Signalverarbeitung des Plugins"
-
-#: plugin_ui.cc:467 plugin_ui.cc:663
-msgid ""
-"Click to allow the plugin to receive keyboard events that %1 would normally "
-"use as a shortcut"
-msgstr ""
-"Klicke, damit das Plugin Tastaturbefehle erhält, die %1 sonst als "
-"Tastenkürzel verwenden würde"
-
-#: plugin_ui.cc:468
-msgid "Click to enable/disable this plugin"
-msgstr "Klicke, um dieses Plugin zu ein/auszuschalten"
-
-#: plugin_ui.cc:507
-msgid "latency (%1 sample)"
-msgid_plural "latency (%1 samples)"
-msgstr[0] "Latenz (%1 Sample)"
-msgstr[1] "Latenz (%1 Samples)"
-
-#: plugin_ui.cc:509
-msgid "latency (%1 ms)"
-msgstr "Latenz (%1 ms)"
-
-#: plugin_ui.cc:520
-msgid "Edit Latency"
-msgstr "Latenz bearbeiten"
-
-#: plugin_ui.cc:566
-msgid ""
-"Plugin presets are not supported in this build of %1. Consider paying for a "
-"full version"
-msgstr ""
-"Pluginpresets werden in diesem Version von %1 nicht unterstützt. Erwägen "
-"Sie, für eine Vollversion zu zahlen"
-
-#: plugin_ui.cc:574
-msgid ""
-"Plugin presets are not supported in this build, see the Log window for more "
-"information."
-msgstr ""
-"Pluginpresets werden von dieser Ausgabe des Programms nicht unterstützt, "
-"weitere Informationen sind im Logfenster zu finden."
-
-#: plugin_ui.cc:670
-msgid "Click to allow normal use of %1 keyboard shortcuts"
-msgstr "Klicke, um die normale Verwendung von %1 Tastaturkürzeln zu aktivieren"
-
-#: plugin_ui.cc:767
-msgid "(none)"
-msgstr "(kein)"
-
-#: port_group.cc:337
-msgid "%1 Busses"
-msgstr "%1 Busse"
-
-#: port_group.cc:338
-msgid "%1 Tracks"
-msgstr "%1 Spuren"
-
-#: port_group.cc:339
-msgid "Hardware"
-msgstr "Hardware"
-
-#: port_group.cc:340
-msgid "%1 Misc"
-msgstr "%1 Sonstige"
-
-#: port_group.cc:341
-msgid "Other"
-msgstr "Andere"
-
-#: port_group.cc:432 port_group.cc:433
-msgid "LTC Out"
-msgstr "LTC Out"
-
-#: port_group.cc:436 port_group.cc:437
-msgid "LTC In"
-msgstr "LTC In"
-
-#: port_group.cc:463
-msgid "MTC in"
-msgstr "MTC in"
-
-#: port_group.cc:466
-msgid "MIDI control in"
-msgstr "MIDI control in"
-
-#: port_group.cc:469
-msgid "MIDI clock in"
-msgstr "MIDI clock in"
-
-#: port_group.cc:472
-msgid "MMC in"
-msgstr "MMC in"
-
-#: port_group.cc:476
-msgid "MTC out"
-msgstr "MTC out"
-
-#: port_group.cc:479
-msgid "MIDI control out"
-msgstr "MIDI control out"
-
-#: port_group.cc:482
-msgid "MIDI clock out"
-msgstr "MIDI clock out"
-
-#: port_group.cc:485
-msgid "MMC out"
-msgstr "MMC out"
-
-#: port_group.cc:532
-msgid ":monitor"
-msgstr ":monitor"
-
-#: port_group.cc:544
-msgid "system:"
-msgstr "system:"
-
-#: port_group.cc:545
-msgid "alsa_pcm"
-msgstr "alsa_pcm"
-
-#: port_insert_ui.cc:39
-msgid "Measure Latency"
-msgstr "Latenz messen"
-
-#: port_insert_ui.cc:50
-msgid "Send/Output"
-msgstr "Send/Ausgang"
-
-#: port_insert_ui.cc:51
-msgid "Return/Input"
-msgstr "Return/Input"
-
-#: port_insert_ui.cc:85
-msgid "No signal detected"
-msgstr "Kein Signal erkannt"
-
-#: port_insert_ui.cc:165
-msgid "Port Insert "
-msgstr "Port Insert "
-
-#: port_matrix.cc:340 port_matrix.cc:366
-msgid "<b>Sources</b>"
-msgstr "<b>Quellen</b>"
-
-#: port_matrix.cc:341 port_matrix.cc:367
-msgid "<b>Destinations</b>"
-msgstr "<b>Ziele</b>"
-
-#: port_matrix.cc:449 port_matrix.cc:457
-#, c-format
-msgid "Add %s %s"
-msgstr "Füge %s %s hinzu"
-
-#: port_matrix.cc:465
-#, c-format
-msgid "Rename '%s'..."
-msgstr "Benenne '%s' um..."
-
-#: port_matrix.cc:481
-msgid "Remove all"
-msgstr "Alle löschen"
-
-#: port_matrix.cc:501 port_matrix.cc:513
-#, c-format
-msgid "%s all"
-msgstr "%s alle"
-
-#: port_matrix.cc:536
-msgid "Rescan"
-msgstr "Aktualisieren"
-
-#: port_matrix.cc:538
-msgid "Show individual ports"
-msgstr "Individuelle Ports anzeigen"
-
-#: port_matrix.cc:544
-msgid "Flip"
-msgstr "Drehen"
-
-#: port_matrix.cc:731
-msgid ""
-"It is not possible to add a port here, as the first processor in the track "
-"or buss cannot support the new configuration."
-msgstr ""
-"Hier kann kein Port hinzugefügt werden, da der erste Prozessor der Spur/des "
-"Busses die neue Portanzahl nicht unterstützt."
-
-#: port_matrix.cc:734
-msgid "Cannot add port"
-msgstr "Kann Port nicht hinzufügen"
-
-#: port_matrix.cc:756
-msgid "Port removal not allowed"
-msgstr "Entfernen des Ports nicht erlaubt"
-
-#: port_matrix.cc:757
-msgid ""
-"This port cannot be removed.\n"
-"Either the first plugin in the track or buss cannot accept\n"
-"the new number of inputs or the last plugin has more outputs."
-msgstr ""
-"Dieser Port kann nicht entfernt werden.\n"
-"Entweder kann das erste Plugin auf der Spur oder dem Bus \n"
-"die neue Anzahl an Eingängen nicht verarbeiten, oder das \n"
-"letzte Plugin hat mehr Ausgänge."
-
-#: port_matrix.cc:974
-#, c-format
-msgid "Remove '%s'"
-msgstr "Lösche '%s'"
-
-#: port_matrix.cc:989
-#, c-format
-msgid "%s all from '%s'"
-msgstr "alle von '%s' %s"
-
-#: port_matrix.cc:1055 transform_dialog.cc:62
-msgid "channel"
-msgstr "Kanal"
-
-#: port_matrix_body.cc:82
-msgid "There are no ports to connect."
-msgstr "Es gibt keine Ports, zu denen verbunden werden kann."
-
-#: port_matrix_body.cc:84
-msgid "There are no %1 ports to connect."
-msgstr "Es gibt keine %1 Ports, zu denen verbunden werden kann."
-
-#: processor_box.cc:150
-msgid "Send"
-msgstr "Send"
-
-#: processor_box.cc:152
-msgid "Return"
-msgstr "Return"
-
-#: processor_box.cc:310
-msgid ""
-"\n"
-"This mono plugin has been replicated %1 times."
-msgstr ""
-"\n"
-"Dieses Mono-Plugin wurde %1 mal repliziert."
-
-#: processor_box.cc:314
-msgid ""
-"<b>%1</b>\n"
-"Double-click to show GUI.\n"
-"Alt+double-click to show generic GUI.%2"
-msgstr ""
-"<b>%1</b>\n"
-"Doppelklick, um GUI zu zeigen.\n"
-"Alt+Doppelklick, um einfaches GUI zu zeigen.%2"
-
-#: processor_box.cc:317
-msgid ""
-"<b>%1</b>\n"
-"Double-click to show generic GUI.%2"
-msgstr ""
-"<b>%1</b>\n"
-"Doppelklick, um einfaches GUI zu zeigen.%2"
-
-#: processor_box.cc:361
-#, c-format
-msgid "(%1x1) "
-msgstr "(%1x1) "
-
-#: processor_box.cc:437
-msgid "Show All Controls"
-msgstr "Alle Regler zeigen"
-
-#: processor_box.cc:441
-msgid "Hide All Controls"
-msgstr "Alle Regler verbergen"
-
-#: processor_box.cc:475
-msgid "Link panner controls"
-msgstr "Panner-Elemente verknüpfen"
-
-#: processor_box.cc:575
-msgid "on"
-msgstr "an"
-
-#: processor_box.cc:575 rc_option_editor.cc:2360 rc_option_editor.cc:2374
-msgid "off"
-msgstr "Aus"
-
-#: processor_box.cc:957
-msgid ""
-"Right-click to add/remove/edit\n"
-"plugins,inserts,sends and more"
-msgstr ""
-"Rechtsklick, um Plugins, Inserts, Sends etc.\n"
-"hinzuzufügen/zu editieren/zu löschen"
-
-#: processor_box.cc:1429 processor_box.cc:1804
-msgid "Plugin Incompatibility"
-msgstr "Plugin-Inkompatibilität"
-
-#: processor_box.cc:1432
-msgid "You attempted to add the plugin \"%1\" in slot %2.\n"
-msgstr "Sie haben versucht, das Plugin \"%1\" im Einschub %2 hinzuzufügen.\n"
-
-#: processor_box.cc:1438
-msgid ""
-"\n"
-"This plugin has:\n"
-msgstr ""
-"\n"
-"Dieses Plugin hat:\n"
-
-#: processor_box.cc:1441
-msgid "\t%1 MIDI input\n"
-msgid_plural "\t%1 MIDI inputs\n"
-msgstr[0] "\t%1 MIDI Eingang\n"
-msgstr[1] "\t%1 MIDI Eingänge\n"
-
-#: processor_box.cc:1445
-msgid "\t%1 audio input\n"
-msgid_plural "\t%1 audio inputs\n"
-msgstr[0] "\t%1 Audio-Eingang\n"
-msgstr[1] "\t%1 Audio-Eingänge\n"
-
-#: processor_box.cc:1448
-msgid ""
-"\n"
-"but at the insertion point, there are:\n"
-msgstr ""
-"\n"
-"aber am Einfügepunkt gibt es:\n"
-
-#: processor_box.cc:1451
-msgid "\t%1 MIDI channel\n"
-msgid_plural "\t%1 MIDI channels\n"
-msgstr[0] "\t%1 MIDI-Kanal\n"
-msgstr[1] "\t%1 MIDI-Kanäle\n"
-
-#: processor_box.cc:1455
-msgid "\t%1 audio channel\n"
-msgid_plural "\t%1 audio channels\n"
-msgstr[0] "\t%1 Audio-Kanal\n"
-msgstr[1] "\t%1 Audio-Kanäle\n"
-
-#: processor_box.cc:1458
-msgid ""
-"\n"
-"%1 is unable to insert this plugin here.\n"
-msgstr ""
-"\n"
-"%1 kann dieses Plugin hier nicht einfügen.\n"
-
-#: processor_box.cc:1495
-msgid "Cannot set up new send: %1"
-msgstr "Kann keinen neuen Send erstellen: %1"
-
-#: processor_box.cc:1807
-msgid ""
-"You cannot reorder these plugins/sends/inserts\n"
-"in that way because the inputs and\n"
-"outputs will not work correctly."
-msgstr ""
-"Sie können diese Plugins/Sends/Inserts\n"
-"nicht auf diese Weise verändern, sonst würden\n"
-"die Ein-/Ausgänge nicht mehr richtig funktionieren."
-
-#: processor_box.cc:1991
-msgid "Rename Processor"
-msgstr "Prozessor umbenennen"
-
-#: processor_box.cc:2022
-msgid "At least 100 IO objects exist with a name like %1 - name not changed"
-msgstr ""
-"Es gibt mindestens 100 E/A-Objekte mit einem Namen wie %1 - Name nicht "
-"geändert"
-
-#: processor_box.cc:2159
-msgid "plugin insert constructor failed"
-msgstr "Einfügen des Plugins gescheitert"
-
-#: processor_box.cc:2170
-msgid ""
-"Copying the set of processors on the clipboard failed,\n"
-"probably because the I/O configuration of the plugins\n"
-"could not match the configuration of this track."
-msgstr ""
-"Konnte die Prozessoren aus der Zwischenablage nicht\n"
-"kopieren, vermutlich weil die E/A Konfiguration der Plugins\n"
-"nicht mit der dieser Spur übereinstimmt."
-
-#: processor_box.cc:2216
-msgid ""
-"Do you really want to remove all processors from %1?\n"
-"(this cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich alle Prozessoren von %1 entfernen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
-
-#: processor_box.cc:2220 processor_box.cc:2245
-msgid "Yes, remove them all"
-msgstr "Ja, alle löschen"
-
-#: processor_box.cc:2222 processor_box.cc:2247
-msgid "Remove processors"
-msgstr "Prozessoren entfernen"
-
-#: processor_box.cc:2237
-msgid ""
-"Do you really want to remove all pre-fader processors from %1?\n"
-"(this cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich alle Pre-Fader-Prozessoren von %1 entfernen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
-
-#: processor_box.cc:2240
-msgid ""
-"Do you really want to remove all post-fader processors from %1?\n"
-"(this cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich alle Post-Fader-Prozessoren von %1 entfernen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
-
-#: processor_box.cc:2428
-msgid "New Plugin"
-msgstr "Plugin einfügen"
-
-#: processor_box.cc:2431
-msgid "New Insert"
-msgstr "Insert einfügen"
-
-#: processor_box.cc:2434
-msgid "New External Send ..."
-msgstr "Neuer externer Send..."
-
-#: processor_box.cc:2438
-msgid "New Aux Send ..."
-msgstr "Neuer Aux-Send..."
-
-#: processor_box.cc:2441
-msgid "Send Options"
-msgstr "Send Optionen"
-
-#: processor_box.cc:2443
-msgid "Clear (all)"
-msgstr "Leeren (alle)"
-
-#: processor_box.cc:2445
-msgid "Clear (pre-fader)"
-msgstr "Leeren (Pre-Fader)"
-
-#: processor_box.cc:2447
-msgid "Clear (post-fader)"
-msgstr "Leeren (Post-Fader)"
-
-#: processor_box.cc:2473
-msgid "Activate All"
-msgstr "Alle aktivieren"
-
-#: processor_box.cc:2475
-msgid "Deactivate All"
-msgstr "Alle deaktivieren"
-
-#: processor_box.cc:2477
-msgid "A/B Plugins"
-msgstr "A/B Plugins"
-
-#: processor_box.cc:2486
-msgid "Edit with generic controls..."
-msgstr "Mit einfachen Kontrollelementen editieren..."
-
-#: processor_box.cc:2789
-msgid "%1: %2 (by %3)"
-msgstr "%1: %2 (von %3)"
-
-#: processor_box.cc:2791
-msgid "%1 (by %2)"
-msgstr "%1 (von %2)"
-
-#: patch_change_dialog.cc:50
-msgid "Patch Change"
-msgstr "Patch Change"
-
-#: patch_change_dialog.cc:76
-msgid "Patch Bank"
-msgstr "Patch Bank"
-
-#: patch_change_dialog.cc:83
-msgid "Patch"
-msgstr "Patch"
-
-#: patch_change_dialog.cc:98 step_entry.cc:430
-msgid "Program"
-msgstr "Programm"
-
-#: patch_change_dialog.cc:106 step_entry.cc:422
-msgid "Bank"
-msgstr "Bank"
-
-#: quantize_dialog.cc:36
-msgid "main grid"
-msgstr "Hauptraster"
-
-#: quantize_dialog.cc:52 quantize_dialog.cc:109
-msgid "Quantize"
-msgstr "Quantisieren"
-
-#: quantize_dialog.cc:56
-msgid "Strength"
-msgstr "Stärke"
-
-#: quantize_dialog.cc:59
-msgid "Swing"
-msgstr "Swing"
-
-#: quantize_dialog.cc:62
-msgid "Threshold (ticks)"
-msgstr "Threshold (ticks)"
-
-#: quantize_dialog.cc:63
-msgid "Snap note start"
-msgstr "Notenanfang einrasten an"
-
-#: quantize_dialog.cc:64
-msgid "Snap note end"
-msgstr "Notenende einrasten an"
-
-#: rc_option_editor.cc:77
-msgid "Click audio file:"
-msgstr "Audiodatei für Klick"
-
-#: rc_option_editor.cc:80 rc_option_editor.cc:87
-msgid "Browse..."
-msgstr "Durchsuchen..."
-
-#: rc_option_editor.cc:84
-msgid "Click emphasis audio file:"
-msgstr "Audiodatei für Klick-Betonung"
-
-#: rc_option_editor.cc:116
-msgid "Choose Click"
-msgstr "Click auswählen"
-
-#: rc_option_editor.cc:139
-msgid "Choose Click Emphasis"
-msgstr "Click-Betonung auswählen"
-
-#: rc_option_editor.cc:170
-msgid "Limit undo history to"
-msgstr "Limitiere Aktionsliste auf"
-
-#: rc_option_editor.cc:171
-msgid "Save undo history of"
-msgstr "Speichere Aktionsliste von"
-
-#: rc_option_editor.cc:180 rc_option_editor.cc:187
-msgid "commands"
-msgstr "Aktionen"
-
-#: rc_option_editor.cc:325
-msgid "Edit using:"
-msgstr "Bearbeiten mit:"
-
-#: rc_option_editor.cc:331 rc_option_editor.cc:357 rc_option_editor.cc:384
-msgid "+ button"
-msgstr "+ Maustaste"
-
-#: rc_option_editor.cc:351
-msgid "Delete using:"
-msgstr "Entfernen mit:"
-
-#: rc_option_editor.cc:378
-msgid "Insert note using:"
-msgstr "Note einfügen:"
-
-#: rc_option_editor.cc:405
-msgid "Ignore snap using:"
-msgstr "Einrasten ignorieren mittels:"
-
-#: rc_option_editor.cc:421
-msgid "Keyboard layout:"
-msgstr "Tastaturlayout:"
-
-#: rc_option_editor.cc:544
-msgid "Font scaling:"
-msgstr "Schriftskalierung"
-
-#: rc_option_editor.cc:547
-msgid "Default"
-msgstr "Voreinstellung"
-
-#: rc_option_editor.cc:573
-msgid "Major font-scale changes require an application restart to re-layout."
-msgstr ""
-"Größere Änderungen an der Fontskalierung verlangen einen Neustart des "
-"Programms, um das Layout anzupassen."
-
-#: rc_option_editor.cc:614
-msgid "Waveform Clip Level (dBFS):"
-msgstr "Wellenform Clipping-Wert (dBFS):"
-
-#: rc_option_editor.cc:666
-msgid "Playback (seconds of buffering):"
-msgstr "Wiedergabe (gepufferte Sekunden):"
-
-#: rc_option_editor.cc:679
-msgid "Recording (seconds of buffering):"
-msgstr "Aufnahme (gepufferte Sekunden):"
-
-#: rc_option_editor.cc:737
-msgid "Control Surface Protocol"
-msgstr "Eingabegeräteprotokoll"
-
-#: rc_option_editor.cc:746
-msgid "Double-click on a name to edit settings for an enabled protocol"
-msgstr ""
-"Doppelklick auf einen Namen editiert Einstellungen für ein aktiviertes "
-"Protokoll"
-
-#: rc_option_editor.cc:903
-msgid "Show Video Export Info before export"
-msgstr "Zeige Video-Exportinformationen vor dem Exportieren"
-
-#: rc_option_editor.cc:904
-msgid "Show Video Server Startup Dialog"
-msgstr "Zeige den Videoserver-Startdialog"
-
-#: rc_option_editor.cc:905
-msgid "Advanced Setup (remote video server)"
-msgstr "Ausführliche Einrichtung (entfernter Videoserver)"
-
-#: rc_option_editor.cc:913
-msgid ""
-"<b>When enabled</b> you can speficify a custom video-server URL and docroot. "
-"- Do not enable this option unless you know what you are doing."
-msgstr ""
-"<b>Wenn aktiviert</b>, können Sie eine benutzerdefinierte URL und docroot "
-"für den Videoserver eingeben. - Aktivieren Sie diese Option nur, wenn Sie "
-"wissen, was Sie tun."
-
-#: rc_option_editor.cc:915
-msgid "Video Server URL:"
-msgstr "Videoserver URL:"
-
-#: rc_option_editor.cc:920
-msgid ""
-"Base URL of the video-server including http prefix. This is usually 'http://"
-"hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when "
-"the video-server is running locally"
-msgstr ""
-"Basis-URL des Videoservers mit http-Prefix. Dies ist normalerweise 'http://"
-"hostname.example.org:1554/' und ist auf 'http://localhost:1554/' "
-"voreingestellt, wenn der Videoserver lokal läuft"
-
-#: rc_option_editor.cc:922
-msgid "Video Folder:"
-msgstr "Videoordner:"
-
-#: rc_option_editor.cc:927
-msgid ""
-"Local path to the video-server document-root. Only files below this "
-"directory will be accessible by the video-server. If the server run on a "
-"remote host, it should point to a network mounted folder of the server's "
-"docroot or be left empty if it is unvailable. It is used for the local video-"
-"monitor and file-browsing when opening/adding a video file."
-msgstr ""
-"Lokaler Pfad zum document-root des Videoservers. Nur Dateien unterhalb "
-"dieses Verzeichnisses sind dem Videoserver zugänglich.Falls der Server auf "
-"einem entfernten Rechner läuft, sollte der Pfad auf ein im Netzwerk "
-"gemountetes Verzeichnis der docroot des Servers verweisen, oder leergelassen "
-"werden, falls es nicht zugänglich ist. Wird für den lokalen Videomonitor und "
-"die Dateisuche beim Öffnen/Hinzufügen einer Videodatei benutzt."
-
-#: rc_option_editor.cc:934
-msgid ""
-"<b>When enabled</b> an information window with details is displayed before "
-"the video-export dialog."
-msgstr ""
-"<b>Wenn aktiviert</b> , wird vor dem Videoexport-Dialog ein "
-"Informationsfenster mit Details angezeigt."
-
-#: rc_option_editor.cc:939
-msgid ""
-"<b>When enabled</b> the video server is never launched automatically without "
-"confirmation"
-msgstr ""
-"<b>Wenn aktiviert</b>, wird der Videoserver nie ohne Bestätigung gestartet"
-
-#: rc_option_editor.cc:1022
-msgid "Always Display Plugin Scan Progress"
-msgstr "Plugin Scan-Fortschritt immer anzeigen"
-
-#: rc_option_editor.cc:1023
-msgid "Scan for [new] VST Plugins on Application Start"
-msgstr "Bei Programmstart nach [neuen] VST Plugins scannen"
-
-#: rc_option_editor.cc:1024
-msgid "Scan for AudioUnit Plugins on Application Start"
-msgstr "Bei Programmstart nach AudioUnit Plugins scannen"
-
-#: rc_option_editor.cc:1035
-msgid "General"
-msgstr "Allgemein"
-
-#: rc_option_editor.cc:1041
-msgid "Scan for Plugins"
-msgstr "Scanne nach Plugins"
-
-#: rc_option_editor.cc:1048
-msgid ""
-"<b>When enabled</b> a popup window showing plugin scan progress is displayed "
-"for indexing (cache load) and discovery (detect new plugins)"
-msgstr ""
-"<b>Wenn aktiviert,</b> wird ein Popupfenster dargestellt, um Plugin Scan-"
-"Fortschritt, Indizierung(Laden des Cace) und Entdeckung (neue Plugins "
-"finden) anzuzeigen"
-
-#: rc_option_editor.cc:1055
-msgid ""
-"Specify the default timeout for plugin instantiation in 1/10 seconds. "
-"Plugins that require more time to load will be blacklisted. A value of 0 "
-"disables the timeout."
-msgstr ""
-"Geben Sie die Voreinstellung für das Timeout bei der Plugin-Instanzierung in "
-"1/10 Sekunden an. Plugins, die mehr Zeit benötigen um zu laden, werden auf "
-"die schwarze Liste gesetzt. Ein Wert von 0 deaktiviert das Timeout."
-
-#: rc_option_editor.cc:1057
-msgid "Scan Time Out [deciseconds]"
-msgstr "Scan-Timeout [Zehntelsekunden]"
-
-#: rc_option_editor.cc:1065
-msgid "VST"
-msgstr "VST"
-
-#: rc_option_editor.cc:1071
-msgid "Clear VST Cache"
-msgstr "VST Cache leeren"
-
-#: rc_option_editor.cc:1075
-msgid "Clear VST Blacklist"
-msgstr "VST Blacklist leeren"
-
-#: rc_option_editor.cc:1083
-msgid ""
-"<b>When enabled</b> new VST plugins are searched, tested and added to the "
-"cache index on application start. When disabled new plugins will only be "
-"available after triggering a 'Scan' manually"
-msgstr ""
-"<b>Wenn aktiviert<b>, werden bei Programmstart neue VST Plugins gesucht, "
-"getestet und dem Cache-Index hinzugefügt. Wenn nicht aktiviert, werden neue "
-"Plugins nur nach einem manuellen Scan verfügbar sein"
-
-#: rc_option_editor.cc:1086
-msgid "Linux VST Path:"
-msgstr "Linux VST Pfad:"
-
-#: rc_option_editor.cc:1093
-msgid "Windows VST Path:"
-msgstr "Windows VST Pfad:"
-
-#: rc_option_editor.cc:1102
-msgid "Audio Unit"
-msgstr "Audio Unit"
-
-#: rc_option_editor.cc:1111
-msgid ""
-"<b>When enabled</b> Audio Unit Plugins are discovered on application start. "
-"When disabled AU plugins will only be available after triggering a 'Scan' "
-"manually. The first successful scan will enable AU auto-scan, Any crash "
-"during plugin discovery will disable it."
-msgstr ""
-"<b>Wenn aktiviert<b>, werden bei Programmstart AudioUnit Plugins entdeckt. "
-"Wenn nicht aktiviert, werden neue Plugins nur nach einem manuellen Scan "
-"verfügbar sein. Der erste erfolgreiche Scan wird weitere automatische AU-"
-"Scans aktivieren, ein Crash während der Pluginentdeckung wird sie "
-"deaktivieren."
-
-#: rc_option_editor.cc:1114
-msgid "Clear AU Cache"
-msgstr "AU Cache leeren"
-
-#: rc_option_editor.cc:1118
-msgid "Clear AU Blacklist"
-msgstr "AU Blacklist leeren"
-
-#: rc_option_editor.cc:1201
-msgid "Set Windows VST Search Path"
-msgstr "Windows VST Suchpfad setzen"
-
-#: rc_option_editor.cc:1216
-msgid "Set Linux VST Search Path"
-msgstr "Linux VST Suchpfad setzen"
-
-#: rc_option_editor.cc:1297
-msgid "%1 Preferences"
-msgstr "%1 Einstellungen"
-
-#: rc_option_editor.cc:1309
-msgid "DSP CPU Utilization"
-msgstr "DSP CPU Nutzung"
-
-#: rc_option_editor.cc:1313
-msgid "Signal processing uses"
-msgstr "Die Signalverarbeitung verwendet"
-
-#: rc_option_editor.cc:1318
-msgid "all but one processor"
-msgstr "Alle außer einem Prozessor"
-
-#: rc_option_editor.cc:1319
-msgid "all available processors"
-msgstr "Alle verfügbaren Prozessoren"
-
-#: rc_option_editor.cc:1322
-msgid "%1 processors"
-msgstr "%1 Prozessoren"
-
-#: rc_option_editor.cc:1325
-msgid "This setting will only take effect when %1 is restarted."
-msgstr "Diese Einstellung wird erst nach einem Neustart von %1 wirksam."
-
-#: rc_option_editor.cc:1330
-msgid "Options|Undo"
-msgstr "Undo"
-
-#: rc_option_editor.cc:1337
-msgid "Verify removal of last capture"
-msgstr "Verwerfen der letzten Aufnahme bestätigen"
-
-#: rc_option_editor.cc:1345
-msgid "Make periodic backups of the session file"
-msgstr "Erstelle regelmäßig Backups der Projektdatei"
-
-#: rc_option_editor.cc:1350
-msgid "Session Management"
-msgstr "Projektmanagement:"
-
-#: rc_option_editor.cc:1355
-msgid "Always copy imported files"
-msgstr "Importierte Dateien immer kopieren"
-
-#: rc_option_editor.cc:1362
-msgid "Default folder for new sessions:"
-msgstr "Standardordner für neue Projekte"
-
-#: rc_option_editor.cc:1370
-msgid "Maximum number of recent sessions"
-msgstr "Maximale Anzahl kürzlich geöffneter Projekte"
-
-#: rc_option_editor.cc:1383
-msgid "Click gain level"
-msgstr "Lautstärke für Klick"
-
-#: rc_option_editor.cc:1388 route_time_axis.cc:266 route_time_axis.cc:821
-msgid "Automation"
-msgstr "Automationen"
-
-#: rc_option_editor.cc:1393
-msgid "Thinning factor (larger value => less data)"
-msgstr "Ausdünnungsfaktor (größerer Wert => weniger Daten)"
-
-#: rc_option_editor.cc:1402
-msgid "Automation sampling interval (milliseconds)"
-msgstr "Meßintervall für Automation (Millisekunden)"
-
-#: rc_option_editor.cc:1414
-msgid "Keep record-enable engaged on stop"
-msgstr "Aufnahme bleibt nach Stopp aktiviert"
-
-#: rc_option_editor.cc:1423
-msgid "Play loop is a transport mode"
-msgstr "Schleifenwiedergabe ist ein Transportmodus"
-
-#: rc_option_editor.cc:1428
-msgid ""
-"<b>When enabled</b> the loop button does not start playback but forces "
-"playback to always play the loop\n"
-"\n"
-"<b>When disabled</b> the loop button starts playing the loop, but stop then "
-"cancels loop playback"
-msgstr ""
-"<b>Wenn aktiviert<b>, startet die Schleifen-Schaltfläche nicht die "
-"Wiedergabe, zwingt aber die Wiedergabe, immer die Schleife zu spielen\n"
-"\n"
-"<b>Wenn deaktiviert<b>, startet die Schleifen-Schaltfläche die Wiedergabe, "
-"ein späteres \"Stop\" beendet aber die Wiedergabe als Schleife"
-
-#: rc_option_editor.cc:1434
-msgid "Stop recording when an xrun occurs"
-msgstr "Aufnahme bei xrun stoppen"
-
-#: rc_option_editor.cc:1439
-msgid ""
-"<b>When enabled</b> %1 will stop recording if an over- or underrun is "
-"detected by the audio engine"
-msgstr ""
-"<b>Falls an</b>, wird %1 Aufnahmen bei Auftreten von Over- oder Underruns  "
-"abbrechen"
-
-#: rc_option_editor.cc:1445
-msgid "Create markers where xruns occur"
-msgstr "Bei xrun Marker erzeugen"
-
-#: rc_option_editor.cc:1454
-msgid "Stop at the end of the session"
-msgstr "Am Ende des Projektes anhalten"
-
-#: rc_option_editor.cc:1459
-msgid ""
-"<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the "
-"transport when it reaches the current session end marker\n"
-"\n"
-"<b>When disabled</b> %1 will continue to roll past the session end marker at "
-"all times"
-msgstr ""
-"<b>Falls an</b>, und %1 </b>nimmt nicht auf</b>, wird es bei Erreichen ds "
-"Projektende-Markers die Wiedergabe stoppen\n"
-"\n"
-"<b>Falls aus</b> , wird %1 am Ende des Projektes immer weiterlaufen"
-
-#: rc_option_editor.cc:1467
-msgid "Do seamless looping (not possible when slaved to MTC, LTC etc)"
-msgstr "Nahtlose Schleifen (nicht möglich, wenn an MTC, LTC o.ä. gekoppelt)"
-
-#: rc_option_editor.cc:1472
-msgid ""
-"<b>When enabled</b> this will loop by reading ahead and wrapping around at "
-"the loop point, preventing any need to do a transport locate at the end of "
-"the loop\n"
-"\n"
-"<b>When disabled</b> looping is done by locating back to the start of the "
-"loop when %1 reaches the end which will often cause a small click or delay"
-msgstr ""
-"<b>Falls an</b>, wird dies vorauslesen und am Schleifenendpunkt "
-"zurückspringen, wodurch eine Neupositionierung am Schleifenende vermieden "
-"wird\n"
-"\n"
-"<b>Falls aus</b>, wird %1 bei Erreichen des Schleifenendes zum Anfang der "
-"Schleife springen, was oft einen hörbaren Klick oder kurze Verzögerung "
-"verursacht"
-
-#: rc_option_editor.cc:1480
-msgid "Disable per-track record disarm while rolling"
-msgstr "Während der Aufnahme Aufnahmestatus einzelner Spuren sperren"
-
-#: rc_option_editor.cc:1484
-msgid ""
-"<b>When enabled</b> this will prevent you from accidentally stopping "
-"specific tracks recording during a take"
-msgstr ""
-"<b>Wenn eingeschaltet</b> , hindert Sie dies daran, während eines "
-"Aufnahmevorgangs unabsichtlich bei einzelnen Spuren die Aufnahme zu beenden"
-
-#: rc_option_editor.cc:1489
-msgid "12dB gain reduction during fast-forward and fast-rewind"
-msgstr "Beim Spulen Pegel um 12dB absenken"
-
-#: rc_option_editor.cc:1493
-msgid ""
-"This will reduce the unpleasant increase in perceived volume that occurs "
-"when fast-forwarding or rewinding through some kinds of audio"
-msgstr ""
-"Dies wird die unangenehme Steigerung der wahrgenommenen Lautstärke "
-"verringern, die bei manchem Material bei Vor/Rücklauf auftritt"
-
-#: rc_option_editor.cc:1497
-msgid "Sync/Slave"
-msgstr "Sync/Slave"
-
-#: rc_option_editor.cc:1501
-msgid "External timecode source"
-msgstr "Externe Timecode-Quelle"
-
-#: rc_option_editor.cc:1510
-msgid "Match session video frame rate to external timecode"
-msgstr "Videoframerate des Projekts an externen Timecode anpassen"
-
-#: rc_option_editor.cc:1516
-msgid ""
-"This option controls the value of the video frame rate <i>while chasing</i> "
-"an external timecode source.\n"
-"\n"
-"<b>When enabled</b> the session video frame rate will be changed to match "
-"that of the selected external timecode source.\n"
-"\n"
-"<b>When disabled</b> the session video frame rate will not be changed to "
-"match that of the selected external timecode source.Instead the frame rate "
-"indication in the main clock will flash red and %1 will convert between the "
-"external timecode standard and the session standard."
-msgstr ""
-"Diese Option bestimmt den Wert der Videoframerate <i>während der "
-"Synchronisation</i> mit einer externen Timecode-Quelle. \n"
-"\n"
-"<b>Falls an</b>, wird die Videoframerate des Projektes an die der externen "
-"Timecode-Quelle angepasst. \n"
-"\n"
-"<b>Falls aus</b>, wird die Videoframerate des Projektes nicht geändert. "
-"Stattdessen wird die Anzeige der Framerate in der Uhr rot blinken und %1 "
-"wird zwischen den Standards der externen Quelle und des Projektes "
-"konvertieren."
-
-#: rc_option_editor.cc:1526
-msgid "Sync-lock timecode to clock (disable drift compensation)"
-msgstr ""
-"Starre Synchronisation von Timecode und Uhr (unterbinde Driftkompensation)"
-
-#: rc_option_editor.cc:1532
-msgid ""
-"<b>When enabled</b> %1 will never varispeed when slaved to external "
-"timecode. Sync Lock indicates that the selected external timecode source "
-"shares clock-sync (Black & Burst, Wordclock, etc) with the audio "
-"interface. This option disables drift compensation. The transport speed is "
-"fixed at 1.0. Vari-speed LTC will be ignored and cause drift.\n"
-"\n"
-"<b>When disabled</b> %1 will compensate for potential drift, regardless if "
-"the timecode sources shares clock sync."
-msgstr ""
-"<b>Wenn aktiviert</b>, wird  %1 niemals mit variabler Geschwindigkeit "
-"abspielen, während zu externem Timecode synchronisiert wird. Starre "
-"Synchronisation zeigt an, dass die ausgewählte externe Timecodequelle mit "
-"dem Audiointerface Clock-Sync teilt (Black & Burst, Wordclock, etc.) "
-"Diese Option deaktiviert Driftkompensation. Die Transportgeschwindigkeit ist "
-"auf 1,0 fixiert. Varispeed LTC wird ignoriert und wird Drift verursachen.\n"
-"\n"
-"<b>Wenn deaktiviert</b>, wird  %1 potentiellen Drift kompensieren, "
-"ungeachtet, ob die Timecodequellen Clock Sync teilen."
-
-#: rc_option_editor.cc:1547
-msgid "Lock to 29.9700 fps instead of 30000/1001"
-msgstr "Fest auf 29.9700 fps statt 30000/1001"
-
-#: rc_option_editor.cc:1553
-msgid ""
-"<b>When enabled</b> the external timecode source is assumed to use 29.97 fps "
-"instead of 30000/1001.\n"
-"SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions "
-"that drop-frame timecode has an accumulated error of -86ms over a 24-hour "
-"period.\n"
-"Drop-frame timecode would compensate exactly for a NTSC color frame rate of "
-"30 * 0.9990 (ie 29.970000). That is not the actual rate. However, some "
-"vendors use that rate - despite it being against the specs - because the "
-"variant of using exactly 29.97 fps has zero timecode drift.\n"
-msgstr ""
-"<b>Wenn aktiv</b>, wird erwartet, daß die externe Timecode-Quelle 29.97 fps "
-"statt 30000/1001 benutzt.\n"
-"SMPTE 12M-1999 spezifiziert 29.97df as 30000/1001. Die Spezifikation erwähnt "
-"darüber hinaus, daß Drop-frame Timecode einen Fehler von -86ms im Zeitraum "
-"von 24 Stunden akkumuliert.\n"
-"Drop-frame Timecode würde eine NTSC Farb-Framerate von 30 * 0.9990 "
-"(entspricht29.970000) exakt kompensieren. Das ist nicht die tatsächliche "
-"Rate, jedoch benutzen manche Hersteller diese - der Spezifikation "
-"widersprechend - da bei der Variante mit exakt 29.97 fps kein Timecode-Drift "
-"auftritt.\n"
-
-#: rc_option_editor.cc:1563
-msgid "LTC Reader"
-msgstr "LTC-Leser"
-
-#: rc_option_editor.cc:1567
-msgid "LTC incoming port"
-msgstr "LTC Eingangsport"
-
-#: rc_option_editor.cc:1582
-msgid "LTC Generator"
-msgstr "LTC-Generator"
-
-#: rc_option_editor.cc:1587
-msgid "Enable LTC generator"
-msgstr "LTC-Generator aktivieren"
-
-#: rc_option_editor.cc:1594
-msgid "Send LTC while stopped"
-msgstr "LTC senden, während Transport stillsteht"
-
-#: rc_option_editor.cc:1600
-msgid ""
-"<b>When enabled</b> %1 will continue to send LTC information even when the "
-"transport (playhead) is not moving"
-msgstr ""
-"<b>Falls an</b>, wird %1 weiterhin LTC-Information senden, sogar wenn der "
-"Transport (Positionszeiger) stillsteht"
-
-#: rc_option_editor.cc:1606
-msgid "LTC generator level"
-msgstr "LTC-Generator-Lautstärke"
-
-#: rc_option_editor.cc:1610
-msgid ""
-"Specify the Peak Volume of the generated LTC signal in dbFS. A good value "
-"is  0dBu ^= -18dbFS in an EBU calibrated system"
-msgstr ""
-"Geben Sie den Spitzenwert des erzeugten LTC-Signals in dbFS an. Ein guter "
-"Wert für ein EBU-kalibriertes System ist 0dBu ^= -18dbFS"
-
-#: rc_option_editor.cc:1622
-msgid "Allow dragging of playhead"
-msgstr "Erlaube Ziehen des Positionszeigers"
-
-#: rc_option_editor.cc:1630
-msgid "Move relevant automation when audio regions are moved"
-msgstr "Verschiebe relevante Automationen mit Region"
-
-#: rc_option_editor.cc:1638
-msgid "Show meters on tracks in the editor"
-msgstr "Aktiviere Pegelanzeigen im Editor"
-
-#: rc_option_editor.cc:1646
-msgid "Display master-meter in the toolbar"
-msgstr "Master-Pegelanzeige in der Werkzeugleiste anzeigen"
-
-#: rc_option_editor.cc:1653
-msgid "Default fade shape"
-msgstr "Voreingestellte Fade-Art"
-
-#: rc_option_editor.cc:1672
-msgid "Regions in active edit groups are edited together"
-msgstr "Regionen der aktiven Bearbeitungsgruppen werden gemeinsam bearbeitet"
-
-#: rc_option_editor.cc:1673
-msgid "whenever they overlap in time"
-msgstr "immer, wenn sie sich auf der Zeitachse überlappen"
-
-#: rc_option_editor.cc:1674
-msgid "only if they have identical length, position and origin"
-msgstr "nur bei identischer Länge, Position und Herkunft"
-
-#: rc_option_editor.cc:1684
-msgid "Make rubberband selection rectangle snap to the grid"
-msgstr "Gummiband-Auswahl an Raster ausrichten"
-
-#: rc_option_editor.cc:1692
-msgid "Show waveforms in regions"
-msgstr "Zeige Wellenformen in Regionen"
-
-#: rc_option_editor.cc:1700
-msgid "Show gain envelopes in audio regions"
-msgstr "Zeige Lautstärkekurven in Regionen an"
-
-#: rc_option_editor.cc:1701
-msgid "in all modes"
-msgstr "in allen Modi"
-
-#: rc_option_editor.cc:1702
-msgid "only in region gain mode"
-msgstr "nur im Region-Gain Modus"
-
-#: rc_option_editor.cc:1709
-msgid "Waveform scale"
-msgstr "Wellenformskalierung"
-
-#: rc_option_editor.cc:1714
-msgid "linear"
-msgstr "Linear"
-
-#: rc_option_editor.cc:1715
-msgid "logarithmic"
-msgstr "Logarithmisch"
-
-#: rc_option_editor.cc:1721
-msgid "Waveform shape"
-msgstr "Wellenform Anzeigeart"
-
-#: rc_option_editor.cc:1726
-msgid "traditional"
-msgstr "Traditionell"
-
-#: rc_option_editor.cc:1727
-msgid "rectified"
-msgstr "Rectified"
-
-#: rc_option_editor.cc:1736
-msgid "Show waveforms for audio while it is being recorded"
-msgstr "Zeige bei Aufnahmen die Wellenformen des aufgenommenen Audiomaterials"
-
-#: rc_option_editor.cc:1744
-msgid "Show zoom toolbar"
-msgstr "Zeige Zoom Toolbar"
-
-#: rc_option_editor.cc:1752
-msgid "Update editor window during drags of the summary"
-msgstr ""
-"Aktualisiere das Editorfenster, während die Projektübersicht verändert wird"
-
-#: rc_option_editor.cc:1760
-msgid "Synchronise editor and mixer selection"
-msgstr "Synchronisiere Auswahl der Spuren im Editor und Mixer"
-
-#: rc_option_editor.cc:1767
-msgid "Name new markers"
-msgstr "Neue Marker benennen"
-
-#: rc_option_editor.cc:1773
-msgid ""
-"If enabled, popup a dialog when a new marker is created to allow its name to "
-"be set as it is created.\n"
-"\n"
-"You can always rename markers by right-clicking on them"
-msgstr ""
-"Falls an, wird bei Erzeugung eines neuen Markers ein Dialog eingeblendet, "
-"damit der Name sofort bearbeitet werden kann.\n"
-"\n"
-"Marker können jederzeit per Rechtsklick umbenannt werden"
-
-#: rc_option_editor.cc:1779
-msgid "Auto-scroll editor window when dragging near its edges"
-msgstr "Bei Mausziehen nahe den Rändern das Editorfenster automatisch scrollen"
-
-#: rc_option_editor.cc:1786
-msgid "After splitting selected regions, select"
-msgstr "Nach dem Teilen"
-
-#: rc_option_editor.cc:1791
-msgid "no regions"
-msgstr "keine Regionen"
-
-#: rc_option_editor.cc:1794
-msgid "newly-created regions"
-msgstr "neu erzeugte Regionen"
-
-#: rc_option_editor.cc:1798
-msgid "existing selection and newly-created regions"
-msgstr "existierende Auswahl und neu erzeugte Regionen"
-
-#: rc_option_editor.cc:1805
-msgid "Buffering"
-msgstr "Pufferung"
-
-#: rc_option_editor.cc:1813
-msgid "Record monitoring handled by"
-msgstr "Aufnahmemonitoring wird verwaltet von"
-
-#: rc_option_editor.cc:1819
-msgid "via Audio Driver"
-msgstr "via Audiotreiber"
-
-#: rc_option_editor.cc:1825
-msgid "audio hardware"
-msgstr "Audiohardware"
-
-#: rc_option_editor.cc:1832
-msgid "Tape machine mode"
-msgstr "Bandmaschinen-Modus"
-
-#: rc_option_editor.cc:1837
-msgid "Connection of tracks and busses"
-msgstr "Verbindung von Spuren und Bussen"
-
-#: rc_option_editor.cc:1842
-msgid "Auto-connect master/monitor busses"
-msgstr "Master/Monitor-Busse automatisch verbinden"
-
-#: rc_option_editor.cc:1849
-msgid "Connect track inputs"
-msgstr "Verbinde Spureingänge"
-
-#: rc_option_editor.cc:1854
-msgid "automatically to physical inputs"
-msgstr "automatisch mit Audioeingängen"
-
-#: rc_option_editor.cc:1855 rc_option_editor.cc:1868
-msgid "manually"
-msgstr "manuell"
-
-#: rc_option_editor.cc:1861
-msgid "Connect track and bus outputs"
-msgstr "Verbinde Spur- und Busausgänge"
-
-#: rc_option_editor.cc:1866
-msgid "automatically to physical outputs"
-msgstr "automatisch mit Audioausgängen"
-
-#: rc_option_editor.cc:1867
-msgid "automatically to master bus"
-msgstr "automatisch mit dem Master-Bus"
-
-#: rc_option_editor.cc:1872
-msgid "Denormals"
-msgstr "Denormals"
-
-#: rc_option_editor.cc:1877
-msgid "Use DC bias to protect against denormals"
-msgstr "Nutze DC bias als Schutz vor Denormals"
-
-#: rc_option_editor.cc:1884
-msgid "Processor handling"
-msgstr "Umgang des Prozessors mit Denormals"
-
-#: rc_option_editor.cc:1890
-msgid "no processor handling"
-msgstr "nicht behandeln"
-
-#: rc_option_editor.cc:1896
-msgid "use FlushToZero"
-msgstr "Benutze FlushToZero"
-
-#: rc_option_editor.cc:1903
-msgid "use DenormalsAreZero"
-msgstr "Benutze DenormalsAreZero"
-
-#: rc_option_editor.cc:1910
-msgid "use FlushToZero and DenormalsAreZero"
-msgstr "Benutze FlushToZero & DenormalsAreZero"
-
-#: rc_option_editor.cc:1926
-msgid "Silence plugins when the transport is stopped"
-msgstr "Deaktiviere Plugins, wenn der Transport gestoppt ist."
-
-#: rc_option_editor.cc:1934
-msgid "Make new plugins active"
-msgstr "Neue Plugins sind aktiv"
-
-#: rc_option_editor.cc:1944
-msgid "Enable automatic analysis of audio"
-msgstr "Audiodaten automatisch analysieren"
-
-#: rc_option_editor.cc:1952
-msgid "Replicate missing region channels"
-msgstr "Fehlende Kanäle in Regionen durch Kopien ersetzen"
-
-#: rc_option_editor.cc:1959 rc_option_editor.cc:1961 rc_option_editor.cc:1976
-#: rc_option_editor.cc:1988 rc_option_editor.cc:2000 rc_option_editor.cc:2012
-#: rc_option_editor.cc:2016 rc_option_editor.cc:2024 rc_option_editor.cc:2032
-#: rc_option_editor.cc:2040 rc_option_editor.cc:2042 rc_option_editor.cc:2050
-#: rc_option_editor.cc:2058 rc_option_editor.cc:2066 rc_option_editor.cc:2074
-#: rc_option_editor.cc:2076
-msgid "Solo / mute"
-msgstr "Solo / Mute"
-
-#: rc_option_editor.cc:1964
-msgid "Solo-in-place mute cut (dB)"
-msgstr "Solo-in-Place Mute Dämpfung (dB)"
-
-#: rc_option_editor.cc:1971
-msgid "Solo controls are Listen controls"
-msgstr "Solo-Schalter arbeiten als AFL/PFL"
-
-#: rc_option_editor.cc:1980
-msgid "Listen Position"
-msgstr "Abhörpunkt"
-
-#: rc_option_editor.cc:1985
-msgid "after-fader (AFL)"
-msgstr "After-Fader (AFL)"
-
-#: rc_option_editor.cc:1986
-msgid "pre-fader (PFL)"
-msgstr "Pre-Fader (PFL)"
-
-#: rc_option_editor.cc:1992
-msgid "PFL signals come from"
-msgstr "Abgreifpunkt der PFL Signale"
-
-#: rc_option_editor.cc:1997
-msgid "before pre-fader processors"
-msgstr "Vor den Pre-Fader Prozessoren"
-
-#: rc_option_editor.cc:1998
-msgid "pre-fader but after pre-fader processors"
-msgstr "Pre-Fader, aber nach den Prozessoren"
-
-#: rc_option_editor.cc:2004
-msgid "AFL signals come from"
-msgstr "Abgreifpunkt der AFL Signale"
-
-#: rc_option_editor.cc:2009
-msgid "immediately post-fader"
-msgstr "Direkt nach dem Fader"
-
-#: rc_option_editor.cc:2010
-msgid "after post-fader processors (before pan)"
-msgstr "Nach den Post-Fader Prozessoren (vor Pan)"
-
-#: rc_option_editor.cc:2019
-msgid "Exclusive solo"
-msgstr "Exclusives Solo"
-
-#: rc_option_editor.cc:2027
-msgid "Show solo muting"
-msgstr "Solo auf anderen Kanälen als Mute anzeigen"
-
-#: rc_option_editor.cc:2035
-msgid "Soloing overrides muting"
-msgstr "Solo ist trotz Mute hörbar"
-
-#: rc_option_editor.cc:2040
-msgid "Default track / bus muting options"
-msgstr "Standardeinstellungen für Mute von Spuren / Bussen"
-
-#: rc_option_editor.cc:2045
-msgid "Mute affects pre-fader sends"
-msgstr "Mute schaltet Pre-Fader Sends stumm"
-
-#: rc_option_editor.cc:2053
-msgid "Mute affects post-fader sends"
-msgstr "Mute schaltet Post-Fader Sends stumm"
-
-#: rc_option_editor.cc:2061
-msgid "Mute affects control outputs"
-msgstr "Mute schaltet Abhörausgänge stumm"
-
-#: rc_option_editor.cc:2069
-msgid "Mute affects main outputs"
-msgstr "Mute schaltet Hauptausgänge stumm"
-
-#: rc_option_editor.cc:2074
-msgid "Send Routing"
-msgstr "Send Routing"
-
-#: rc_option_editor.cc:2079
-msgid "Link panners of Aux and External Sends with main panner by default"
-msgstr "Verknüpfe Aux- und External-Send-Panner mit Hauptpanner"
-
-#: rc_option_editor.cc:2087
-msgid "MIDI read-ahead time (seconds)"
-msgstr "MIDI read-ahead Zeit (Sekunden)"
-
-#: rc_option_editor.cc:2105
-msgid "Send MIDI Time Code"
-msgstr "Sende MIDI Time Code"
-
-#: rc_option_editor.cc:2113
-msgid "Percentage either side of normal transport speed to transmit MTC"
-msgstr ""
-"Prozentzahl beiderseits der normalen Transportgeschwindigkeit, bis zu der "
-"MTC übertragen wird"
-
-#: rc_option_editor.cc:2122
-msgid "Obey MIDI Machine Control commands"
-msgstr "MIDI Machine Control Commands empfangen"
-
-#: rc_option_editor.cc:2130
-msgid "Send MIDI Machine Control commands"
-msgstr "MIDI Machine Control Commands senden"
-
-#: rc_option_editor.cc:2138
-msgid "Send MIDI control feedback"
-msgstr "MIDI Control Feedback senden"
-
-#: rc_option_editor.cc:2146
-msgid "Inbound MMC device ID"
-msgstr "ID des eingehenden MMC-Geräts"
-
-#: rc_option_editor.cc:2155
-msgid "Outbound MMC device ID"
-msgstr "ID des ausgehenden MMC-Geräts"
-
-#: rc_option_editor.cc:2164
-msgid "Initial program change"
-msgstr "Erstmaliger Programmwechsel"
-
-#: rc_option_editor.cc:2173
-msgid "Display first MIDI bank/program as 0"
-msgstr "Erste(s) MIDI Bank/Programm als 0 anzeigen"
-
-#: rc_option_editor.cc:2181
-msgid "Never display periodic MIDI messages (MTC, MIDI Clock)"
-msgstr "Periodische MIDI Nachrichten nie anzeigen (MTC, MIDI Clock)"
-
-#: rc_option_editor.cc:2189
-msgid "Sound MIDI notes as they are selected"
-msgstr "MIDI Noten ertönen bei Auswahl"
-
-#: rc_option_editor.cc:2194
-msgid "Midi Audition"
-msgstr "Midi vorhören"
-
-#: rc_option_editor.cc:2198
-msgid "Midi Audition Synth (LV2)"
-msgstr "Midi Vorhör-Synth (LV2)"
-
-#: rc_option_editor.cc:2229 rc_option_editor.cc:2239 rc_option_editor.cc:2241
-msgid "User interaction"
-msgstr "Benutzerinteraktion"
-
-#: rc_option_editor.cc:2232
-msgid ""
-"Use translations of %1 messages\n"
-"   <i>(requires a restart of %1 to take effect)</i>\n"
-"   <i>(if available for your language preferences)</i>"
-msgstr ""
-"Benutze Übersetzung der %1-Oberfläche\n"
-"   <i>(erfordert Neustart von %1)</i>\n"
-"   <i>(falls für Ihre gewünschte Sprache verfügbar)</i>"
-
-#: rc_option_editor.cc:2239
-msgid "Keyboard"
-msgstr "Tastatur"
-
-#: rc_option_editor.cc:2249
-msgid "Control surface remote ID"
-msgstr "Remote ID des Eingabegeräts"
-
-#: rc_option_editor.cc:2254
-msgid "assigned by user"
-msgstr "vom Benutzer festgelegt"
-
-#: rc_option_editor.cc:2255
-msgid "follows order of mixer"
-msgstr "folgt Reihenfolge im Mixer"
-
-#: rc_option_editor.cc:2269 rc_option_editor.cc:2278 rc_option_editor.cc:2287
-#: rc_option_editor.cc:2297 rc_option_editor.cc:2321 rc_option_editor.cc:2334
-#: rc_option_editor.cc:2343
-msgid "Preferences|GUI"
-msgstr "GUI"
-
-#: rc_option_editor.cc:2272
-msgid "Graphically indicate mouse pointer hovering over various widgets"
-msgstr "Mouseover-Effekt über verschiedenen Anzeigen"
-
-#: rc_option_editor.cc:2281
-msgid "Show tooltips if mouse hovers over a control"
-msgstr "Zeige Tooltips, wenn die Maus über einem Element schwebt"
-
-#: rc_option_editor.cc:2290
-msgid "Use name highlight bars in region displays (requires a restart)"
-msgstr ""
-"Verwende Farbbalken zur Namenshervorhebung in der Regionendarstellung "
-"(erfordert Neustart)"
-
-#: rc_option_editor.cc:2303
-msgid "update transport clock display at FPS instead of every 100ms"
-msgstr "Auffrischen der Transport-Uhranzeige in FPS statt alle 100 ms"
-
-#: rc_option_editor.cc:2312
-msgid "Lock timeout (seconds)"
-msgstr "Sperr-Timeout (Sekunden)"
-
-#: rc_option_editor.cc:2320
-msgid "Lock GUI after this many idle seconds (zero to never lock)"
-msgstr "Sperre GUI nach so vielen untätigen Sekunden (null, um nie zu sperren)"
-
-#: rc_option_editor.cc:2336
-msgid "Mixer Strip"
-msgstr "Anzeige im Kanalzug"
-
-#: rc_option_editor.cc:2346
-msgid "Use narrow strips in the mixer by default"
-msgstr "Standardmäßig schmale Kanalzüge verwenden"
-
-#: rc_option_editor.cc:2351 rc_option_editor.cc:2365 rc_option_editor.cc:2384
-#: rc_option_editor.cc:2400 rc_option_editor.cc:2416 rc_option_editor.cc:2430
-#: rc_option_editor.cc:2444 rc_option_editor.cc:2446
-msgid "Preferences|Metering"
-msgstr "Pegelanzeige"
-
-#: rc_option_editor.cc:2355
-msgid "Peak hold time"
-msgstr "Haltezeit für Spitzenwert"
-
-#: rc_option_editor.cc:2361
-msgid "short"
-msgstr "Kurz"
-
-#: rc_option_editor.cc:2362
-msgid "medium"
-msgstr "Mittel"
-
-#: rc_option_editor.cc:2363
-msgid "long"
-msgstr "Lange"
-
-#: rc_option_editor.cc:2369
-msgid "DPM fall-off"
-msgstr "Abfall der digitalen Pegelanzeige"
-
-#: rc_option_editor.cc:2375
-msgid "slowest [6.6dB/sec]"
-msgstr "am langsamsten [6.6dB/sec]"
-
-#: rc_option_editor.cc:2376
-msgid "slow [8.6dB/sec] (BBC PPM, EBU PPM)"
-msgstr "langsam [8.6dB/sec] (BBC PPM, EBU PPM)"
-
-#: rc_option_editor.cc:2377
-msgid "slowish [12.0dB/sec] (DIN)"
-msgstr "etwas langsam [12.0dB/sec] (DIN)"
-
-#: rc_option_editor.cc:2378
-msgid "moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
-msgstr "mäßig [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
-
-#: rc_option_editor.cc:2379
-msgid "medium [20dB/sec]"
-msgstr "mittel [20dB/sec]"
-
-#: rc_option_editor.cc:2380
-msgid "fast [32dB/sec]"
-msgstr "schnell [32dB/sec]"
-
-#: rc_option_editor.cc:2381
-msgid "faster [46dB/sec]"
-msgstr "schneller [46dB/sec]"
-
-#: rc_option_editor.cc:2382
-msgid "fastest [70dB/sec]"
-msgstr "am schnellsten [70dB/sec]"
-
-#: rc_option_editor.cc:2388
-msgid "Meter line-up level; 0dBu"
-msgstr "Ausrichtung der Pegelanzeige; 0dBu"
-
-#: rc_option_editor.cc:2393 rc_option_editor.cc:2409
-msgid "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
-msgstr "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
-
-#: rc_option_editor.cc:2394 rc_option_editor.cc:2410
-msgid "-20dBFS (SMPTE RP.0155)"
-msgstr "-20dBFS (SMPTE RP.0155)"
-
-#: rc_option_editor.cc:2395 rc_option_editor.cc:2411
-msgid "-18dBFS (EBU, BBC)"
-msgstr "-18dBFS (EBU, BBC)"
-
-#: rc_option_editor.cc:2396 rc_option_editor.cc:2412
-msgid "-15dBFS (DIN)"
-msgstr "-15dBFS (DIN)"
-
-#: rc_option_editor.cc:2398
-msgid ""
-"Configure meter-marks and color-knee point for dBFS scale DPM, set reference "
-"level for IEC1/Nordic, IEC2 PPM and VU meter."
-msgstr ""
-"Konfiguriere Skalierung und Farbschwellwert für DPM mit dBFS-Skala, "
-"setzeReferenzpegel  für IEC1/Nordisch, IEC2 PPM und VU Pegelanzeigen."
-
-#: rc_option_editor.cc:2404
-msgid "IEC1/DIN Meter line-up level; 0dBu"
-msgstr "Ausrichtung der IEC1/DIN Pegelanzeige; 0dBu"
-
-#: rc_option_editor.cc:2414
-msgid "Reference level for IEC1/DIN meter."
-msgstr "Referenzpegel  für IEC1/DIN Pegelanzeige."
-
-#: rc_option_editor.cc:2420
-msgid "VU Meter standard"
-msgstr "Standard für VU-Pegelanzeige"
-
-#: rc_option_editor.cc:2425
-msgid "0VU = -2dBu (France)"
-msgstr "0VU = -2dBu (Frankreich)"
-
-#: rc_option_editor.cc:2426
-msgid "0VU = 0dBu (North America, Australia)"
-msgstr "0VU = 0dBu (Nordamerika, Australien)"
-
-#: rc_option_editor.cc:2427
-msgid "0VU = +4dBu (standard)"
-msgstr "0VU = +4dBu (Standard)"
-
-#: rc_option_editor.cc:2428
-msgid "0VU = +8dBu"
-msgstr "0VU = +8dBu"
-
-#: rc_option_editor.cc:2434
-msgid "Peak threshold [dBFS]"
-msgstr "Schwelle für Spitzenwert [dBFS]"
-
-#: rc_option_editor.cc:2442
-msgid ""
-"Specify the audio signal level in dbFS at and above which the meter-peak "
-"indicator will flash red."
-msgstr ""
-"Geben Sie den Signalpegel in dbFS an, bei dessen Erreichen oder "
-"Überschreitung die Spitzenwertanzeige in der Pegelanzeige rot blinkt"
-
-#: rc_option_editor.cc:2449
-msgid "LED meter style"
-msgstr "Pegelanzeigen im LED-Stil"
-
-#: rc_option_editor.cc:2457
-msgid "Theme"
-msgstr "Thema"
-
-#: region_editor.cc:79
-msgid "audition this region"
-msgstr "Diese Region vorhören"
-
-#: region_editor.cc:88 region_layering_order_editor.cc:75
-msgid "Position:"
-msgstr "Position:"
-
-#: region_editor.cc:90 add_video_dialog.cc:155
-msgid "End:"
-msgstr "Ende:"
-
-#: region_editor.cc:92 sfdb_ui.cc:145
-msgid "Length:"
-msgstr "Länge:"
-
-#: region_editor.cc:94
-msgid "Sync point (relative to region):"
-msgstr "Synchronisationspunkt (relativ zur Region)"
-
-#: region_editor.cc:96
-msgid "Sync point (absolute):"
-msgstr "Synchronisationspunkt (absolut)"
-
-#: region_editor.cc:98
-msgid "File start:"
-msgstr "Dateibeginn:"
-
-#: region_editor.cc:102
-msgid "Sources:"
-msgstr "Quellen:"
-
-#: region_editor.cc:104
-msgid "Source:"
-msgstr "Quelle:"
-
-#: region_editor.cc:166
-msgid "Region '%1'"
-msgstr "Region '%1'"
-
-#: region_editor.cc:273
-msgid "change region start position"
-msgstr "Startposition der Region ändern"
-
-#: region_editor.cc:289
-msgid "change region end position"
-msgstr "Endposition der Region ändern"
-
-#: region_editor.cc:309
-msgid "change region length"
-msgstr "Länge der Region verändern"
-
-#: region_editor.cc:403 region_editor.cc:415
-msgid "change region sync point"
-msgstr "Synchronisationspunkt der Region ändern"
-
-#: region_layering_order_editor.cc:42
-msgid "RegionLayeringOrderEditor"
-msgstr "RegionenEbenenOrdnungEditor"
-
-#: region_layering_order_editor.cc:55
-msgid "Region Name"
-msgstr "Name der Region"
-
-#: region_layering_order_editor.cc:72
-msgid "Track:"
-msgstr "Spur:"
-
-#: region_layering_order_editor.cc:104
-msgid "Choose Top Region"
-msgstr "Oberste Region auswählen"
-
-#: region_view.cc:277
-msgid "SilenceText"
-msgstr "StilleText"
-
-#: region_view.cc:292 region_view.cc:311
-msgid "minutes"
-msgstr "Minuten"
-
-#: region_view.cc:295 region_view.cc:314
-msgid "msecs"
-msgstr "ms"
-
-#: region_view.cc:298 region_view.cc:317
-msgid "secs"
-msgstr "s"
-
-#: region_view.cc:301
-msgid "%1 silent segment"
-msgid_plural "%1 silent segments"
-msgstr[0] "%1 stilles Segment"
-msgstr[1] "%1 stille Segmente"
-
-#: region_view.cc:303
-msgid "shortest = %1 %2"
-msgstr "kürzestes = %1 %2"
-
-#: region_view.cc:320
-msgid ""
-"\n"
-"  (shortest audible segment = %1 %2)"
-msgstr ""
-"\n"
-"  (kürzestes hörbares Segment = %1 %2)"
-
-#: return_ui.cc:102
-msgid "Return "
-msgstr "Return "
-
-#: rhythm_ferret.cc:48
-msgid "Percussive Onset"
-msgstr "Percussive Onset"
-
-#: rhythm_ferret.cc:49
-msgid "Note Onset"
-msgstr "Note Onset"
-
-#: rhythm_ferret.cc:54
-msgid "Energy Based"
-msgstr "Energy Based"
-
-#: rhythm_ferret.cc:55
-msgid "Spectral Difference"
-msgstr "Spectral Difference"
-
-#: rhythm_ferret.cc:56
-msgid "High-Frequency Content"
-msgstr "High-Frequency Content"
-
-#: rhythm_ferret.cc:57
-msgid "Complex Domain"
-msgstr "Complex Domain"
-
-#: rhythm_ferret.cc:58
-msgid "Phase Deviation"
-msgstr "Phasenabweichung"
-
-#: rhythm_ferret.cc:59
-msgid "Kullback-Liebler"
-msgstr "Kullback-Liebler"
-
-#: rhythm_ferret.cc:60
-msgid "Modified Kullback-Liebler"
-msgstr "Modified Kullback-Liebler"
-
-#: rhythm_ferret.cc:65
-msgid "Split region"
-msgstr "Region teilen"
-
-#: rhythm_ferret.cc:66
-msgid "Snap regions"
-msgstr "Regionen einrasten"
-
-#: rhythm_ferret.cc:67
-msgid "Conform regions"
-msgstr "Region angleichen"
-
-#: rhythm_ferret.cc:72
-msgid "Rhythm Ferret"
-msgstr "Rhythm Ferret"
-
-#: rhythm_ferret.cc:78
-msgid "Analyze"
-msgstr "Daten analysieren"
-
-#: rhythm_ferret.cc:113
-msgid "Detection function"
-msgstr "Erkennungsfunktion"
-
-#: rhythm_ferret.cc:117
-msgid "Trigger gap"
-msgstr "Mindestauslöseabstand"
-
-#: rhythm_ferret.cc:122 strip_silence_dialog.cc:64
-msgid "Threshold"
-msgstr "Threshold"
-
-#: rhythm_ferret.cc:127
-msgid "Peak threshold"
-msgstr "Schwelle für Spitzenwert"
-
-#: rhythm_ferret.cc:132
-msgid "Silence threshold"
-msgstr "Silence threshold"
-
-#: rhythm_ferret.cc:137
-msgid "Sensitivity"
-msgstr "Empfindlichkeit"
-
-#: rhythm_ferret.cc:141
-msgid "Operation"
-msgstr "Aktionen"
-
-#: rhythm_ferret.cc:355
-msgid "split regions (rhythm ferret)"
-msgstr "Regionen teilen (rhythm ferret)"
-
-#: route_group_dialog.cc:42
-msgid "Track/bus Group"
-msgstr "Spur/Bus-Gruppe"
-
-#: route_group_dialog.cc:47
-msgid "Relative"
-msgstr "Relativ"
-
-#: route_group_dialog.cc:48
-msgid "Muting"
-msgstr "Muting"
-
-#: route_group_dialog.cc:50
-msgid "Record enable"
-msgstr "Aufnahmestatus"
-
-#: route_group_dialog.cc:52
-msgid "Active state"
-msgstr "Aktiv-Status"
-
-#: route_group_dialog.cc:53 route_group_dialog.cc:82 theme_manager.cc:90
-msgid "Color"
-msgstr "Farbe"
-
-#: route_group_dialog.cc:59
-msgid "RouteGroupDialog"
-msgstr "Bearbeitungsgruppendialog"
-
-#: route_group_dialog.cc:100
-msgid "<b>Sharing</b>"
-msgstr "<b>Geteilte Funktionen</b>"
-
-#: route_group_dialog.cc:200
-msgid "The group name is not unique. Please use a different name."
-msgstr ""
-"Der Gruppenname ist nicht einzigartig. Bitte benutzen Sie einen anderen "
-"Namen."
-
-#: route_params_ui.cc:84
-msgid "Tracks/Busses"
-msgstr "Spuren/Busse"
-
-#: route_params_ui.cc:103
-msgid "Inputs"
-msgstr "Eingänge"
-
-#: route_params_ui.cc:104
-msgid "Outputs"
-msgstr "Ausgänge"
-
-#: route_params_ui.cc:105
-msgid "Plugins, Inserts & Sends"
-msgstr "Plugins, Inserts & Sends"
-
-#: route_params_ui.cc:209
-msgid "route display list item for renamed route not found!"
-msgstr ""
-"Konnte Bezeichnung für umbenannten Verbindung nicht in der Liste der "
-"Verbindungen finden!"
-
-#: route_params_ui.cc:279 route_params_ui.cc:307
-#, c-format
-msgid "Playback delay: %<PRId64> samples"
-msgstr "Wiedergabeverzögerung: %<PRId64> Samples"
-
-#: route_params_ui.cc:499
-msgid "NO TRACK"
-msgstr "KEINE SPUR"
-
-#: route_params_ui.cc:637 route_params_ui.cc:638
-msgid "No Track or Bus Selected"
-msgstr "Keine Spuren oder Busse ausgewählt"
-
-#: route_time_axis.cc:103
-msgid "RTAV|G"
-msgstr "G"
-
-#: route_time_axis.cc:104
-msgid "RTAV|P"
-msgstr "P"
-
-#: route_time_axis.cc:105
-msgid "RTAV|A"
-msgstr "A"
-
-#: route_time_axis.cc:181
-msgid "Record (Right-click for Step Edit)"
-msgstr "Aufnahme (Rechtsklick für Step Entry)"
-
-#: route_time_axis.cc:184
-msgid "Record"
-msgstr "Aufnahme"
-
-#: route_time_axis.cc:254
-msgid "Route Group"
-msgstr "Bearbeitungsgruppe"
-
-#: route_time_axis.cc:264
-msgid "MIDI Controllers and Automation"
-msgstr "MIDI-Controller und Automation"
-
-#: route_time_axis.cc:495
-msgid "Show All Automation"
-msgstr "Alle Automationen anzeigen"
-
-#: route_time_axis.cc:498
-msgid "Show Existing Automation"
-msgstr "Genutzte Automationen zeigen"
-
-#: route_time_axis.cc:501
-msgid "Hide All Automation"
-msgstr "Alle Automationen verbergen"
-
-#: route_time_axis.cc:510
-msgid "Processor automation"
-msgstr "Prozessorautomation"
-
-#: route_time_axis.cc:517
-msgid "Fader"
-msgstr "Fader"
-
-#: route_time_axis.cc:535
-msgid "Pan"
-msgstr "Pan"
-
-#: route_time_axis.cc:626
-msgid "Overlaid"
-msgstr "Overlaid"
-
-#: route_time_axis.cc:632
-msgid "Stacked"
-msgstr "Stacked"
-
-#: route_time_axis.cc:640
-msgid "Layers"
-msgstr "Layers"
-
-#: route_time_axis.cc:709
-msgid "Automatic (based on I/O connections)"
-msgstr "Automatisch (auf den I/O Verbindungen basierend)"
-
-#: route_time_axis.cc:718
-msgid "(Currently: Existing Material)"
-msgstr "(Momentan: An vorhandenem Material ausrichten)"
-
-#: route_time_axis.cc:721
-msgid "(Currently: Capture Time)"
-msgstr "(Momentan: An Aufnahmezeit ausrichten)"
-
-#: route_time_axis.cc:729
-msgid "Align With Existing Material"
-msgstr "An vorhandenem Material ausrichten"
-
-#: route_time_axis.cc:734
-msgid "Align With Capture Time"
-msgstr "An Aufnahmezeit ausrichten"
-
-#: route_time_axis.cc:739
-msgid "Alignment"
-msgstr "Ausrichtung"
-
-#: route_time_axis.cc:774
-msgid "Normal Mode"
-msgstr "Normaler Modus"
-
-#: route_time_axis.cc:780
-msgid "Tape Mode"
-msgstr "Band-Modus"
-
-#: route_time_axis.cc:786
-msgid "Non-Layered Mode"
-msgstr "Non-Layered Mode"
-
-#: route_time_axis.cc:792
-msgid "Record Mode"
-msgstr "Aufnahmemodus"
-
-#: route_time_axis.cc:799 route_time_axis.cc:1785
-msgid "Playlist"
-msgstr "Wiedergabeliste"
-
-#: route_time_axis.cc:1093
-msgid "Rename Playlist"
-msgstr "Wiedergabeliste umbenennen"
-
-#: route_time_axis.cc:1094
-msgid "New name for playlist:"
-msgstr "Neuer Name für Wiedergabeliste:"
-
-#: route_time_axis.cc:1179
-msgid "New Copy Playlist"
-msgstr "Neue Kopie der Wiedergabeliste"
-
-#: route_time_axis.cc:1180 route_time_axis.cc:1233
-msgid "Name for new playlist:"
-msgstr "Name für die neue Wiedergabeliste:"
-
-#: route_time_axis.cc:1232
-msgid "New Playlist"
-msgstr "Neue Wiedergabeliste"
-
-#: route_time_axis.cc:1432
-msgid "You cannot create a track with that name as it is reserved for %1"
-msgstr ""
-"Sie können keine Spur mit einem Namen erstellen, der für %1 reserviert ist."
-
-#: route_time_axis.cc:1674
-msgid "New Copy..."
-msgstr "Neue Kopie..."
-
-#: route_time_axis.cc:1678
-msgid "New Take"
-msgstr "Neuer Take"
-
-#: route_time_axis.cc:1679
-msgid "Copy Take"
-msgstr "Take kopieren"
-
-#: route_time_axis.cc:1684
-msgid "Clear Current"
-msgstr "Aktuelle leeren"
-
-#: route_time_axis.cc:1687
-msgid "Select From All..."
-msgstr "Aus allen auswählen..."
-
-#: route_time_axis.cc:1775
-msgid "Take: %1.%2"
-msgstr "Take: %1.%2"
-
-#: route_time_axis.cc:2165 selection.cc:1007 selection.cc:1061
-msgid "programming error: "
-msgstr "Programmierfehler:"
-
-#: route_time_axis.cc:2581
-msgid "Underlays"
-msgstr "Darunterliegende"
-
-#: route_time_axis.cc:2584
-msgid "Remove \"%1\""
-msgstr "Lösche \"%1\""
-
-#: route_time_axis.cc:2634 route_time_axis.cc:2671
-msgid "programming error: underlay reference pointer pairs are inconsistent!"
-msgstr "programming error: underlay reference pointer pairs are inconsistent!"
-
-#: route_time_axis.cc:2698
-msgid "After-fade listen (AFL)"
-msgstr "After-Fader (AFL)"
-
-#: route_time_axis.cc:2702
-msgid "Pre-fade listen (PFL)"
-msgstr "Pre-Fader (PFL)"
-
-#: route_ui.cc:142
-msgid "Mute this track"
-msgstr "Diese Spur stummschalten"
-
-#: route_ui.cc:146
-msgid "Mute other (non-soloed) tracks"
-msgstr "Andere (nicht Solo-)Spuren stummschalten"
-
-#: route_ui.cc:153
-msgid "Enable recording on this track"
-msgstr "Aktiviere die Aufnahme auf dieser Spur"
-
-#: route_ui.cc:161
-msgid "make mixer strips show sends to this bus"
-msgstr "Kanalzüge zeigen Sends zu diesem Bus"
-
-#: route_ui.cc:166
-msgid "Monitor input"
-msgstr "Eingang abhören"
-
-#: route_ui.cc:172
-msgid "Monitor playback"
-msgstr "Vorhandenes Material abhören"
-
-#: route_ui.cc:679
-msgid "Not connected to AudioEngine - cannot engage record"
-msgstr "Nicht mit Audio-Engine verbunden - Aufnahme nicht möglich"
-
-#: route_ui.cc:878
-msgid "Step Entry"
-msgstr "Eingabemodus (Step Entry)"
-
-#: route_ui.cc:951
-msgid "Assign all tracks (prefader)"
-msgstr "Alle Audiospuren zuweisen (Pre-Fader)"
-
-#: route_ui.cc:955
-msgid "Assign all tracks and buses (prefader)"
-msgstr "Alle Audiospuren und Busse zuweisen (Pre-Fader)"
-
-#: route_ui.cc:959
-msgid "Assign all tracks (postfader)"
-msgstr "Alle Audiospuren zuweisen (Post-Fader)"
-
-#: route_ui.cc:963
-msgid "Assign all tracks and buses (postfader)"
-msgstr "Alle Audiospuren und Busse zuweisen (Post-Fader)"
-
-#: route_ui.cc:967
-msgid "Assign selected tracks (prefader)"
-msgstr "Ausgewählte Audiospuren zuweisen (Pre-Fader)"
-
-#: route_ui.cc:971
-msgid "Assign selected tracks and buses (prefader)"
-msgstr "Ausgewählte Audiospuren und Busse zuweisen (Pre-Fader)"
-
-#: route_ui.cc:974
-msgid "Assign selected tracks (postfader)"
-msgstr "Ausgewählte Audiospuren zuweisen (Post-Fader)"
-
-#: route_ui.cc:978
-msgid "Assign selected tracks and buses (postfader)"
-msgstr "Ausgewählte Audiospuren und Busse zuweisen (Post-Fader)"
-
-#: route_ui.cc:981
-msgid "Copy track/bus gains to sends"
-msgstr "Lautstärken der Spuren/Busse auf ihre Sends kopieren"
-
-#: route_ui.cc:982
-msgid "Set sends gain to -inf"
-msgstr "Setze Sends-Lautstärken to -inf"
-
-#: route_ui.cc:983
-msgid "Set sends gain to 0dB"
-msgstr "Setze Sends-Lautstärken to 0dB"
-
-#: route_ui.cc:1303
-msgid "Solo Isolate"
-msgstr "Isoliertes Solo"
-
-#: route_ui.cc:1310
-msgid "Solo Safe"
-msgstr "Solo sperren"
-
-#: route_ui.cc:1332
-msgid "Pre Fader Sends"
-msgstr "Pre-Fader Sends"
-
-#: route_ui.cc:1338
-msgid "Post Fader Sends"
-msgstr "Post-Fader Sends"
-
-#: route_ui.cc:1344
-msgid "Control Outs"
-msgstr "Vorhörausgang"
-
-#: route_ui.cc:1350
-msgid "Main Outs"
-msgstr "Hauptausgänge"
-
-#: route_ui.cc:1482
-msgid "Color Selection"
-msgstr "Farbauswahl"
-
-#: route_ui.cc:1547
-msgid ""
-"The use of colons (':') is discouraged in track and bus names.\n"
-"Do you want to use this new name?"
-msgstr ""
-"Die Verwendung von Doppelpunkten (':') in Spur- und Busnamen\n"
-"wird nicht empfohlen.\n"
-"Wollen Sie diesen neuen Namen verwenden?"
-
-#: route_ui.cc:1551
-msgid "Use the new name"
-msgstr "Neuen Namen verwenden"
-
-#: route_ui.cc:1552
-msgid "Re-edit the name"
-msgstr "Namen bearbeiten"
-
-#: route_ui.cc:1565
-msgid "Rename Track"
-msgstr "Spur umbenennen"
-
-#: route_ui.cc:1567
-msgid "Rename Bus"
-msgstr "Bus umbenennen"
-
-#: route_ui.cc:1635
-msgid ": comment editor"
-msgstr ": Kommentare bearbeiten"
-
-#: route_ui.cc:1801
-msgid " latency"
-msgstr " Latenz"
-
-#: route_ui.cc:1814
-msgid "Cannot create route template directory %1"
-msgstr "Kann das Vorlagenverzeichnis für Spuren/Busse %1 nicht erzeugen"
-
-#: route_ui.cc:1820
-msgid "Save As Template"
-msgstr "Als Vorlage speichern"
-
-#: route_ui.cc:1821
-msgid "Template name:"
-msgstr "Name der Vorlage:"
-
-#: route_ui.cc:1902
-msgid "Remote Control ID"
-msgstr "ID für Fernsteuerung"
-
-#: route_ui.cc:1912
-msgid "Remote control ID:"
-msgstr "ID für Fernsteuerung:"
-
-#: route_ui.cc:1926
-msgid ""
-"The remote control ID of %1 is: %2\n"
-"\n"
-"\n"
-"The remote control ID of %3 cannot be changed."
-msgstr ""
-"Die Fernbedienungs-ID von %1 ist: %2\n"
-"\n"
-"\n"
-"Die Fernbedienungs-ID von %3 kann nicht geändert werden."
-
-#: route_ui.cc:1930
-msgid "the master bus"
-msgstr "der Master-Bus"
-
-#: route_ui.cc:1930
-msgid "the monitor bus"
-msgstr "der Monitor-Bus"
-
-#: route_ui.cc:1932
-msgid ""
-"The remote control ID of %5 is: %2\n"
-"\n"
-"\n"
-"Remote Control IDs are currently determined by track/bus ordering in %6.\n"
-"\n"
-"%3Use the User Interaction tab of the Preferences window if you want to "
-"change this%4"
-msgstr ""
-"Die Fernbedienungs-ID von %5 ist: %2\n"
-"\n"
-"\n"
-"Fernbedienungs-IDs werden zur Zeit durch die Reihenfolge der Spuren/Busse in "
-"%6 bestimmt.\n"
-"\n"
-"%3Benutzen Sie den Reiter GUI im Fenster \"Einstellungen\", um dies zu ändern"
-"%4"
-
-#: route_ui.cc:1989
-msgid ""
-"Left-click to invert (phase reverse) channel %1 of this track.  Right-click "
-"to show menu."
-msgstr ""
-"Linksklick, um die Phase von Kanal %1 zu invertieren. Rechtsklick zeigt das "
-"Menü."
-
-#: route_ui.cc:1991
-msgid "Click to show a menu of channels for inversion (phase reverse)"
-msgstr ""
-"Klicken, um ein Menü zum Invertieren der Kanäle (Phasendrehung) anzuzeigen"
-
-#: search_path_option.cc:35
-msgid "Select folder to search for media"
-msgstr "Verzeichnis zur Mediensuche auswählen"
-
-#: search_path_option.cc:44
-msgid "Click to add a new location"
-msgstr "Hier klicken, um einen Pfad hinzuzufügen"
-
-#: search_path_option.cc:51
-msgid "the session folder"
-msgstr "Projektordner"
-
-#: send_ui.cc:134
-msgid "Send "
-msgstr "Send "
-
-#: session_dialog.cc:61
-msgid "Session Setup"
-msgstr "Projekteinrichtung"
-
-#: session_dialog.cc:66
-msgid "Advanced options ..."
-msgstr "Erweiterte Einstellungen..."
-
-#: session_dialog.cc:263
-msgid "New Session"
-msgstr "Neues Projekt"
-
-#: session_dialog.cc:301
-msgid "Check the website for more..."
-msgstr "Informieren Sie sich auf der Webseite weiter..."
-
-#: session_dialog.cc:304
-msgid "Click to open the program website in your web browser"
-msgstr "Klicken Sie, um die Webseite in Ihrem Web-Browse zu öffnen"
-
-#: session_dialog.cc:324
-msgid "Sample Rate"
-msgstr "Samplerate"
-
-#: session_dialog.cc:325
-msgid "Disk Format"
-msgstr "Dateiformat"
-
-#: session_dialog.cc:343
-msgid "Select session file"
-msgstr "Projektdatei auswählen"
-
-#: session_dialog.cc:358
-msgid "Other Sessions"
-msgstr "Andere Projekte"
-
-#: session_dialog.cc:384
-msgid "Open"
-msgstr "Öffnen"
-
-#: session_dialog.cc:451
-msgid "Session name:"
-msgstr "Projektname:"
-
-#: session_dialog.cc:473
-msgid "Create session folder in:"
-msgstr "Ort des Projektverzeichnisses:"
-
-#: session_dialog.cc:496
-msgid "Select folder for session"
-msgstr "Ordner für Projekt wählen"
-
-#: session_dialog.cc:525
-msgid "Use this template"
-msgstr "Diese Vorlage verwenden"
-
-#: session_dialog.cc:528
-msgid "no template"
-msgstr "keine Vorlage"
-
-#: session_dialog.cc:663 session_dialog.cc:699
-msgid "32 bit float"
-msgstr "32 Bit float"
-
-#: session_dialog.cc:666 session_dialog.cc:702
-msgid "24 bit"
-msgstr "24 Bit"
-
-#: session_dialog.cc:669 session_dialog.cc:705
-msgid "16 bit"
-msgstr "16 Bit"
-
-#: session_dialog.cc:747 session_dialog.cc:748 session_dialog.cc:749
-msgid "channels"
-msgstr "Kanäle"
-
-#: session_dialog.cc:763
-msgid "<b>Busses</b>"
-msgstr "<b>Busse</b>"
-
-#: session_dialog.cc:764
-msgid "<b>Inputs</b>"
-msgstr "<b>Eingänge</b>"
-
-#: session_dialog.cc:765
-msgid "<b>Outputs</b>"
-msgstr "<b>Ausgänge</b>"
-
-#: session_dialog.cc:773
-msgid "Create master bus"
-msgstr "Master-Bus erstellen"
-
-#: session_dialog.cc:783
-msgid "Automatically connect to physical inputs"
-msgstr "Automatisch mit Audioeingängen verbinden"
-
-#: session_dialog.cc:790 session_dialog.cc:849
-msgid "Use only"
-msgstr "Benutze nur"
-
-#: session_dialog.cc:843
-msgid "Automatically connect outputs"
-msgstr "Ausgänge automatisch verbinden"
-
-#: session_dialog.cc:865
-msgid "... to master bus"
-msgstr "... mit dem Master-Bus"
-
-#: session_dialog.cc:875
-msgid "... to physical outputs"
-msgstr "... mit den Audioausgängen"
-
-#: session_import_dialog.cc:65
-msgid "Import from Session"
-msgstr "Aus Projekt importieren"
-
-#: session_import_dialog.cc:74
-msgid "Elements"
-msgstr "Elemente"
-
-#: session_import_dialog.cc:111
-msgid "Cannot load XML for session from %1"
-msgstr "Konnte XML für das Projekt von %1 nicht laden"
-
-#: session_import_dialog.cc:128 session_import_dialog.cc:212
-msgid "Some elements had errors in them. Please see the log for details"
-msgstr ""
-"Einige Elemente beinhalteten Fehler. Für Einzelheiten lesen Sie bitte das Log"
-
-#: session_import_dialog.cc:164
-msgid "Import from session"
-msgstr "Aus Projekt importieren"
-
-#: session_import_dialog.cc:228
-msgid "This will select all elements of this type!"
-msgstr "Dies wird alle Elemente dieses Typs auswählen!"
-
-#: session_metadata_dialog.cc:285
-msgid "EAN Check digit OK"
-msgstr "EAN Prüfziffer OK"
-
-#: session_metadata_dialog.cc:289
-msgid "EAN Check digit error"
-msgstr "EAN Prüfziffernfehler"
-
-#: session_metadata_dialog.cc:289
-msgid "expected"
-msgstr "erwartet"
-
-#: session_metadata_dialog.cc:294
-msgid "EAN Length error"
-msgstr "EAN Längenfehler"
-
-#: session_metadata_dialog.cc:423
-msgid "Field"
-msgstr "Feld"
-
-#: session_metadata_dialog.cc:427
-msgid "Values (current value on top)"
-msgstr "Werte (aktueller oben)"
-
-#: session_metadata_dialog.cc:641
-msgid "User"
-msgstr "Benutzer"
-
-#: session_metadata_dialog.cc:649
-msgid "Email"
-msgstr "E-Mail"
-
-#: session_metadata_dialog.cc:652
-msgid "Web"
-msgstr "Web"
-
-#: session_metadata_dialog.cc:655
-msgid "Organization"
-msgstr "Organisation"
-
-#: session_metadata_dialog.cc:658
-msgid "Country"
-msgstr "Land"
-
-#: session_metadata_dialog.cc:672
-msgid "Title"
-msgstr "Titel"
-
-#: session_metadata_dialog.cc:675
-msgid "Track Number"
-msgstr "Liednummer"
-
-#: session_metadata_dialog.cc:678
-msgid "Subtitle"
-msgstr "Untertitel"
-
-#: session_metadata_dialog.cc:681
-msgid "Grouping"
-msgstr "Gruppierung"
-
-#: session_metadata_dialog.cc:684
-msgid "Artist"
-msgstr "Künstler"
-
-#: session_metadata_dialog.cc:687
-msgid "Genre"
-msgstr "Genre"
-
-#: session_metadata_dialog.cc:690
-msgid "Comment"
-msgstr "Kommentar"
-
-#: session_metadata_dialog.cc:693
-msgid "Copyright"
-msgstr "Copyright"
-
-#: session_metadata_dialog.cc:701 session_metadata_dialog.cc:706
-msgid "Album"
-msgstr "Album"
-
-#: session_metadata_dialog.cc:709
-msgid "Year"
-msgstr "Jahr"
-
-#: session_metadata_dialog.cc:712
-msgid "Album Artist"
-msgstr "Albumkünstler"
-
-#: session_metadata_dialog.cc:715
-msgid "Total Tracks"
-msgstr "Spuranzahl"
-
-#: session_metadata_dialog.cc:718
-msgid "Disc Subtitle"
-msgstr "CD-Untertitel"
-
-#: session_metadata_dialog.cc:721
-msgid "Disc Number"
-msgstr "CD-Nummer"
-
-#: session_metadata_dialog.cc:724
-msgid "Total Discs"
-msgstr "CDs insgesamt"
-
-#: session_metadata_dialog.cc:727
-msgid "Compilation"
-msgstr "Compilation"
-
-#: session_metadata_dialog.cc:730
-msgid "ISRC"
-msgstr "ISRC"
-
-#: session_metadata_dialog.cc:733
-msgid "EAN barcode"
-msgstr "EAN Strichcode"
-
-#: session_metadata_dialog.cc:746
-msgid "People"
-msgstr "Mitwirkenden"
-
-#: session_metadata_dialog.cc:751
-msgid "Lyricist"
-msgstr "Texter"
-
-#: session_metadata_dialog.cc:754
-msgid "Composer"
-msgstr "Komponist"
-
-#: session_metadata_dialog.cc:757
-msgid "Conductor"
-msgstr "Leiter"
-
-#: session_metadata_dialog.cc:760
-msgid "Remixer"
-msgstr "Remixer"
-
-#: session_metadata_dialog.cc:763
-msgid "Arranger"
-msgstr "Arranger"
-
-#: session_metadata_dialog.cc:766
-msgid "Engineer"
-msgstr "Bearbeiter"
-
-#: session_metadata_dialog.cc:769
-msgid "Producer"
-msgstr "Produzent"
-
-#: session_metadata_dialog.cc:772
-msgid "DJ Mixer"
-msgstr "DJ Mixer"
-
-#: session_metadata_dialog.cc:775
-msgid "Metadata|Mixer"
-msgstr "Mixer"
-
-#: session_metadata_dialog.cc:783
-msgid "School"
-msgstr "Schule"
-
-#: session_metadata_dialog.cc:788
-msgid "Instructor"
-msgstr "Lehrender"
-
-#: session_metadata_dialog.cc:791
-msgid "Course"
-msgstr "Kurs"
-
-#: session_metadata_dialog.cc:799
-msgid "Edit Session Metadata"
-msgstr "Projekt-Metadaten bearbeiten"
-
-#: session_metadata_dialog.cc:830
-msgid "Import session metadata"
-msgstr "Projekt-Metadaten importieren"
-
-#: session_metadata_dialog.cc:851
-msgid "Choose session to import metadata from"
-msgstr "Wählen Sie das Projekt, aus dem Metadaten importiert werden sollen"
-
-#: session_metadata_dialog.cc:889
-msgid "This session file could not be read!"
-msgstr "Diese Projektdatei konnte nicht gelesen werden!"
-
-#: session_metadata_dialog.cc:899
-msgid ""
-"The session file didn't contain metadata!\n"
-"Maybe this is an old session format?"
-msgstr ""
-"Das Projekt enthält keine Metadaten!\n"
-"Eventuell ein altes Projektformat?"
-
-#: session_metadata_dialog.cc:918
-msgid "Import all from:"
-msgstr "Alles importieren von:"
-
-#: session_option_editor.cc:32
-msgid "Session Properties"
-msgstr "Projekteinstellungen"
-
-#: session_option_editor.cc:41
-msgid "Timecode Settings"
-msgstr "Timecode Einstellungen"
-
-#: session_option_editor.cc:45
-msgid "Timecode frames-per-second"
-msgstr "Timecode frames-per-second"
-
-#: session_option_editor.cc:50
-msgid "23.976"
-msgstr "23,976"
-
-#: session_option_editor.cc:51
-msgid "24"
-msgstr "24"
-
-#: session_option_editor.cc:52
-msgid "24.975"
-msgstr "24,976"
-
-#: session_option_editor.cc:53
-msgid "25"
-msgstr "25"
-
-#: session_option_editor.cc:54
-msgid "29.97"
-msgstr "29,97"
-
-#: session_option_editor.cc:55
-msgid "29.97 drop"
-msgstr "29,97 (drop)"
-
-#: session_option_editor.cc:56
-msgid "30"
-msgstr "30"
-
-#: session_option_editor.cc:57
-msgid "30 drop"
-msgstr "30 (drop)"
-
-#: session_option_editor.cc:58
-msgid "59.94"
-msgstr "59,94"
-
-#: session_option_editor.cc:59
-msgid "60"
-msgstr "60"
-
-#: session_option_editor.cc:65
-msgid "Pull-up / pull-down"
-msgstr "Pull-Up / Pull-Down"
-
-#: session_option_editor.cc:70
-msgid "4.1667 + 0.1%"
-msgstr "+4,1667 + 0,1%"
-
-#: session_option_editor.cc:71
-msgid "4.1667"
-msgstr "+4,1667"
-
-#: session_option_editor.cc:72
-msgid "4.1667 - 0.1%"
-msgstr "+4,1667 - 0,1%"
-
-#: session_option_editor.cc:73
-msgid "0.1"
-msgstr "0,1"
-
-#: session_option_editor.cc:74
-msgid "none"
-msgstr "keine"
-
-#: session_option_editor.cc:75
-msgid "-0.1"
-msgstr "-0,1"
-
-#: session_option_editor.cc:76
-msgid "-4.1667 + 0.1%"
-msgstr "-4,1667% + 0,1%"
-
-#: session_option_editor.cc:77
-msgid "-4.1667"
-msgstr "-4,1667"
-
-#: session_option_editor.cc:78
-msgid "-4.1667 - 0.1%"
-msgstr "-4,1667 - 0,1%"
-
-#: session_option_editor.cc:84
-msgid ""
-"Use Video File's FPS Instead of Timecode Value for Timeline and Video "
-"Monitor."
-msgstr ""
-"Benutze FPS aus Videodatei statt des Timecode-Wertes für Zeitleiste und "
-"Videomonitor."
-
-#: session_option_editor.cc:91
-msgid ""
-"Apply Pull-Up/Down to Video Timeline and Video Monitor (Unless using JACK-"
-"sync)."
-msgstr ""
-"Pull-Up/Down auf Video-Zeitleiste und Videomonitor anwenden (außer wenn JACK "
-"Sync verwendet wird)."
-
-#: session_option_editor.cc:96
-msgid "Ext Timecode Offsets"
-msgstr "Ext. Timecode Offsets"
-
-#: session_option_editor.cc:100
-msgid "Slave Timecode offset"
-msgstr "Slave Timecode Offset"
-
-#: session_option_editor.cc:107
-msgid "The specified offset is added to the received timecode (MTC or LTC)."
-msgstr ""
-"Der angegebene Offset wird dem empfangenen Timecode hinzuaddiert (MTC oder "
-"LTC)."
-
-#: session_option_editor.cc:113
-msgid "Timecode Generator offset"
-msgstr "Timecode-Generator Offset"
-
-#: session_option_editor.cc:120
-msgid ""
-"Specify an offset which is added to the generated timecode (so far only LTC)."
-msgstr ""
-"Geben Sie einen Offset an, der dem generierten Timecode hinzuaddiert wird "
-"(derzeit nur LTC)."
-
-#: session_option_editor.cc:124
-msgid "JACK Transport/Time Settings"
-msgstr "JACK Transport/Time Einstellungen"
-
-#: session_option_editor.cc:128
-msgid ""
-"%1 is JACK Time Master (provides Bar|Beat|Tick and other information to JACK)"
-msgstr ""
-"%1 ist JACK Time Master (übergibt Takt|Schlag|Tick und andere Information an "
-"JACK)"
-
-#: session_option_editor.cc:136
-msgid "destructive-xfade-seconds"
-msgstr "destruktive Xfade-Sekunden"
-
-#: session_option_editor.cc:137
-msgid "Destructive crossfade length"
-msgstr "Länge für destruktive Crossfades"
-
-#: session_option_editor.cc:146
-msgid "Region fades active"
-msgstr "Regionen Fade-Ins/Fade-Outs sind aktiv"
-
-#: session_option_editor.cc:153
-msgid "Region fades visible"
-msgstr "Regionen Fade-Ins/Fade-Outs sind sichtbar"
-
-#: session_option_editor.cc:160 session_option_editor.cc:173
-#: session_option_editor.cc:187
-msgid "Media"
-msgstr "Medien"
-
-#: session_option_editor.cc:160
-msgid "Audio file format"
-msgstr "Audio-Dateiformat"
-
-#: session_option_editor.cc:164
-msgid "Sample format"
-msgstr "Sampleformat"
-
-#: session_option_editor.cc:169
-msgid "32-bit floating point"
-msgstr "32-bit floating point"
-
-#: session_option_editor.cc:170
-msgid "24-bit integer"
-msgstr "24-bit integer"
-
-#: session_option_editor.cc:171
-msgid "16-bit integer"
-msgstr "16-bit integer"
-
-#: session_option_editor.cc:177
-msgid "File type"
-msgstr "Dateiformat"
-
-#: session_option_editor.cc:182
-msgid "Broadcast WAVE"
-msgstr "Broadcast WAVE"
-
-#: session_option_editor.cc:183
-msgid "WAVE"
-msgstr "WAVE"
-
-#: session_option_editor.cc:184
-msgid "WAVE-64"
-msgstr "WAVE-64"
-
-#: session_option_editor.cc:189
-msgid "File locations"
-msgstr "Dateipfade"
-
-#: session_option_editor.cc:191
-msgid "Search for audio files in:"
-msgstr "Suche hier nach Audiodateien:"
-
-#: session_option_editor.cc:197
-msgid "Search for MIDI files in:"
-msgstr "Suche hier nach MIDI-Dateien:"
-
-#: session_option_editor.cc:206 session_option_editor.cc:218
-#: session_option_editor.cc:228 session_option_editor.cc:239
-msgid "Filenames"
-msgstr "Dateinamen"
-
-#: session_option_editor.cc:206
-msgid "File Naming"
-msgstr "Dateibenennung"
-
-#: session_option_editor.cc:212
-msgid "Prefix Track number"
-msgstr "Füge Spurnummer vorne ein"
-
-#: session_option_editor.cc:217
-msgid ""
-"Adds the current track number to the beginning of the recorded file name."
-msgstr ""
-"Fügt die momentane Spurnummer am Beginn des Dateinamens der Aufnahme hinzu."
-
-#: session_option_editor.cc:222
-msgid "Prefix Take Name"
-msgstr "Füge Takenamen vorne ein"
-
-#: session_option_editor.cc:227
-msgid "Adds the Take Name to the beginning of the recorded file name."
-msgstr "Fügt den Take-Namen am Beginn des Dateinamens der Aufnahme hinzu."
-
-#: session_option_editor.cc:232
-msgid "Take Name"
-msgstr "Name übernehmen"
-
-#: session_option_editor.cc:245
-msgid ""
-"Track Input Monitoring automatically follows transport state (\"auto-input\")"
-msgstr ""
-"Spur-Eingangs-Monitoring folgt automatisch dem Transportstatus (\"auto-input"
-"\")"
-
-#: session_option_editor.cc:252
-msgid "Use monitor section in this session"
-msgstr "In diesem Projekt eine Monitorsektion verwenden"
-
-#: session_option_editor.cc:257 session_option_editor.cc:259
-#: session_option_editor.cc:266 session_option_editor.cc:273
-#: session_option_editor.cc:280 session_option_editor.cc:282
-#: session_option_editor.cc:289 session_option_editor.cc:296
-#: session_option_editor.cc:303 session_option_editor.cc:310
-#: session_option_editor.cc:312
-msgid "Meterbridge"
-msgstr "Meterbridge"
-
-#: session_option_editor.cc:257
-msgid "Route Display"
-msgstr "Routenanzeige"
-
-#: session_option_editor.cc:261
-msgid "Show Midi Tracks"
-msgstr "Zeige MIDI-Spuren"
-
-#: session_option_editor.cc:268
-msgid "Show Busses"
-msgstr "Zeige Busse"
-
-#: session_option_editor.cc:275
-msgid "Include Master Bus"
-msgstr "Zeige Master-Bus"
-
-#: session_option_editor.cc:280
-msgid "Button Area"
-msgstr "Schaltflächenbereich"
-
-#: session_option_editor.cc:284
-msgid "Rec-enable Button"
-msgstr "Schaltfläche für Aufnahmebereitschaft"
-
-#: session_option_editor.cc:291
-msgid "Mute Button"
-msgstr "Schaltfläche für Stummschaltung"
-
-#: session_option_editor.cc:298
-msgid "Solo Button"
-msgstr "Schaltfläche für Solostatus"
-
-#: session_option_editor.cc:305
-msgid "Monitor Buttons"
-msgstr "Monitor-Knöpfe"
-
-#: session_option_editor.cc:310
-msgid "Name Labels"
-msgstr "Namensfelder"
-
-#: session_option_editor.cc:314
-msgid "Track Name"
-msgstr "Spurname"
-
-#: session_option_editor.cc:325
-msgid "MIDI region copies are independent"
-msgstr "Kopien von MIDI Regionen sind unabhängig"
-
-#: session_option_editor.cc:332
-msgid ""
-"Policy for handling overlapping notes\n"
-" on the same MIDI channel"
-msgstr ""
-"Vorgehen bei überlappenden Noten\n"
-"am selben MIDI-Kanal"
-
-#: session_option_editor.cc:337
-msgid "never allow them"
-msgstr "Niemals erlauben"
-
-#: session_option_editor.cc:338
-msgid "don't do anything in particular"
-msgstr "Nichts bestimmtes tun"
-
-#: session_option_editor.cc:339
-msgid "replace any overlapped existing note"
-msgstr "Überlagerte Note ersetzen"
-
-#: session_option_editor.cc:340
-msgid "shorten the overlapped existing note"
-msgstr "Überlagerte Note kürzen"
-
-#: session_option_editor.cc:341
-msgid "shorten the overlapping new note"
-msgstr "Die überlagernde neue Note kürzen"
-
-#: session_option_editor.cc:342
-msgid "replace both overlapping notes with a single note"
-msgstr "Überlagernde Note mit einer einzelnen ersetzen"
-
-#: session_option_editor.cc:346
-msgid "Glue to bars and beats"
-msgstr "An Takte und Schläge binden"
-
-#: session_option_editor.cc:350
-msgid "Glue new markers to bars and beats"
-msgstr "Neue Marker an Takte und Schläge binden"
-
-#: session_option_editor.cc:357
-msgid "Glue new regions to bars and beats"
-msgstr "Neue Regionen an Takte und Schläge binden"
-
-#: session_option_editor.cc:362
-msgid "Defaults"
-msgstr "Voreinstellungen"
-
-#: session_option_editor.cc:364
-msgid "Use these settings as defaults"
-msgstr "Diese Einstellungen als Voreinstellungen nehmen"
-
-#: sfdb_ui.cc:90 sfdb_ui.cc:110 sfdb_ui.cc:119
-msgid "as new tracks"
-msgstr "als neue Spuren"
-
-#: sfdb_ui.cc:92 sfdb_ui.cc:112
-msgid "to selected tracks"
-msgstr "zu ausgewählten Spuren"
-
-#: sfdb_ui.cc:94 sfdb_ui.cc:114
-msgid "to region list"
-msgstr "zur Liste der Regionen"
-
-#: sfdb_ui.cc:96 sfdb_ui.cc:116
-msgid "as new tape tracks"
-msgstr "als neue Band-Spuren"
-
-#: sfdb_ui.cc:100
-msgid "programming error: unknown import mode string %1"
-msgstr "Programmierfehler: unbekannter Importmodus %1"
-
-#: sfdb_ui.cc:127
-msgid "Auto-play"
-msgstr "Auto-Play"
-
-#: sfdb_ui.cc:135 sfdb_ui.cc:324
-msgid "<b>Sound File Information</b>"
-msgstr "<b>Eigenschaften der Audiodatei</b>"
-
-#: sfdb_ui.cc:147
-msgid "Timestamp:"
-msgstr "Zeitstempel:"
-
-#: sfdb_ui.cc:149
-msgid "Format:"
-msgstr "Format:"
-
-#: sfdb_ui.cc:188 sfdb_ui.cc:653
-msgid "Tags:"
-msgstr "Stichworte:"
-
-#: sfdb_ui.cc:293 sfdb_ui.cc:409
-msgid "Could not read file: %1 (%2)."
-msgstr "Konnte Datei nicht lesen: %1 (%2)."
-
-#: sfdb_ui.cc:297
-msgid "<b>Midi File Information</b>"
-msgstr "<b>Midi Datei Information</b>"
-
-#: sfdb_ui.cc:458
-msgid "Could not access soundfile: "
-msgstr "Konnte auf Audiodatei nicht zugreifen: "
-
-#: sfdb_ui.cc:530
-msgid "SoundFileBox: Could not tokenize string: "
-msgstr "SoundFileBox: Konnte Zeichenkette nicht zerlegen: "
-
-#: sfdb_ui.cc:550 sfdb_ui.cc:552
-msgid "Search"
-msgstr "Suchen"
-
-#: sfdb_ui.cc:576
-msgid "Audio and MIDI files"
-msgstr "Audio- und MIDIdateien"
-
-#: sfdb_ui.cc:579
-msgid "Audio files"
-msgstr "Audiodateien"
-
-#: sfdb_ui.cc:582
-msgid "MIDI files"
-msgstr "MIDI-Dateien"
-
-#: sfdb_ui.cc:585 add_video_dialog.cc:123
-msgid "All files"
-msgstr "Alle Dateien"
-
-#: sfdb_ui.cc:604 add_video_dialog.cc:246
-msgid "Browse Files"
-msgstr "Durchsuchen"
-
-#: sfdb_ui.cc:633
-msgid "Paths"
-msgstr "Pfade"
-
-#: sfdb_ui.cc:642
-msgid "Search Tags"
-msgstr "Stichwortsuche"
-
-#: sfdb_ui.cc:658
-msgid "Sort:"
-msgstr "Sortierung:"
-
-#: sfdb_ui.cc:666
-msgid "Longest"
-msgstr "Längste"
-
-#: sfdb_ui.cc:667
-msgid "Shortest"
-msgstr "Kürzeste"
-
-#: sfdb_ui.cc:668
-msgid "Newest"
-msgstr "Neueste"
-
-#: sfdb_ui.cc:669
-msgid "Oldest"
-msgstr "Ältestes"
-
-#: sfdb_ui.cc:670
-msgid "Most downloaded"
-msgstr "Am häufigsten heruntergeladen"
-
-#: sfdb_ui.cc:671
-msgid "Least downloaded"
-msgstr "Am seltensten heruntergeladen"
-
-#: sfdb_ui.cc:672
-msgid "Highest rated"
-msgstr "Bestbewertetes"
-
-#: sfdb_ui.cc:673
-msgid "Lowest rated"
-msgstr "Am schlechtesten bewertetes"
-
-#: sfdb_ui.cc:678
-msgid "More"
-msgstr "Mehr"
-
-#: sfdb_ui.cc:682
-msgid "Similar"
-msgstr "Ähnlich"
-
-#: sfdb_ui.cc:694
-msgid "ID"
-msgstr "ID"
-
-#: sfdb_ui.cc:695 add_video_dialog.cc:83
-msgid "Filename"
-msgstr "Dateiname"
-
-#: sfdb_ui.cc:697
-msgid "Duration"
-msgstr "Dauer"
-
-#: sfdb_ui.cc:698
-msgid "Size"
-msgstr "Größe"
-
-#: sfdb_ui.cc:699
-msgid "Samplerate"
-msgstr "Samplerate"
-
-#: sfdb_ui.cc:700
-msgid "License"
-msgstr "Lizenz"
-
-#: sfdb_ui.cc:718
-msgid "Search Freesound"
-msgstr "Freesound durchsuchen"
-
-#: sfdb_ui.cc:738
-msgid "Press to import selected files and close this window"
-msgstr ""
-"Drücken Sie hier, um die angewählten Dateien zu importieren und dieses "
-"Fenster zu schließen"
-
-#: sfdb_ui.cc:739
-msgid "Press to import selected files and leave this window open"
-msgstr ""
-"Drücken Sie hier, um die angewählten Dateien zu importieren und dieses "
-"Fenster offen zu lassen"
-
-#: sfdb_ui.cc:740
-msgid "Press to close this window without importing any files"
-msgstr ""
-"Drücken Sie hier, um dieses Fenster zu schließen, ohne Dateien zu importieren"
-
-#: sfdb_ui.cc:936
-msgid "SoundFileBrowser: Could not tokenize string: "
-msgstr "SoundFileBrowser: Konnte Zeichenkete nicht zerlegen:"
-
-#: sfdb_ui.cc:1136
-msgid "%1 more page of 100 results available"
-msgid_plural "%1 more pages of 100 results available"
-msgstr[0] "%1 weitere Seite von 100 Ergebnissen verfügbar"
-msgstr[1] "%1 weitere Seiten von 100 Ergebnissen verfügbar"
-
-#: sfdb_ui.cc:1141
-msgid "No more results available"
-msgstr "Keine weiteren Ergebnisse verfügbar"
-
-#: sfdb_ui.cc:1205
-msgid "B"
-msgstr "B"
-
-#: sfdb_ui.cc:1207
-msgid "kB"
-msgstr "kB"
-
-#: sfdb_ui.cc:1209 sfdb_ui.cc:1211
-msgid "MB"
-msgstr "MB"
-
-#: sfdb_ui.cc:1213
-msgid "GB"
-msgstr "GB"
-
-#: sfdb_ui.cc:1425 sfdb_ui.cc:1738 sfdb_ui.cc:1801 sfdb_ui.cc:1819
-msgid "one track per file"
-msgstr "eine Spur pro Datei"
-
-#: sfdb_ui.cc:1428 sfdb_ui.cc:1802 sfdb_ui.cc:1820
-msgid "one track per channel"
-msgstr "eine Spur pro Kanal"
-
-#: sfdb_ui.cc:1436 sfdb_ui.cc:1804 sfdb_ui.cc:1821
-msgid "sequence files"
-msgstr "Dateien aneinanderreihen"
-
-#: sfdb_ui.cc:1439 sfdb_ui.cc:1809
-msgid "all files in one track"
-msgstr "Alle Dateien in eine Spur"
-
-#: sfdb_ui.cc:1440 sfdb_ui.cc:1803
-msgid "merge files"
-msgstr "Dateien zusammenfügen"
-
-#: sfdb_ui.cc:1446 sfdb_ui.cc:1806
-msgid "one region per file"
-msgstr "eine Region pro Datei"
-
-#: sfdb_ui.cc:1449 sfdb_ui.cc:1807
-msgid "one region per channel"
-msgstr "eine Region pro Kanal"
-
-#: sfdb_ui.cc:1454 sfdb_ui.cc:1808 sfdb_ui.cc:1822
-msgid "all files in one region"
-msgstr "alle Dateien in einer Region"
-
-#: sfdb_ui.cc:1521
-msgid ""
-"One or more of the selected files\n"
-"cannot be used by %1"
-msgstr ""
-"Eine oder mehrere der ausgewählten Dateien\n"
-"können von %1 nicht verwendet werden"
-
-#: sfdb_ui.cc:1665
-msgid "Copy files to session"
-msgstr "Kopiere Dateien in Projekt"
-
-#: sfdb_ui.cc:1682 sfdb_ui.cc:1859
-msgid "file timestamp"
-msgstr "Zeitstempel"
-
-#: sfdb_ui.cc:1683 sfdb_ui.cc:1861
-msgid "edit point"
-msgstr "Arbeitspunkt"
-
-#: sfdb_ui.cc:1684 sfdb_ui.cc:1863
-msgid "playhead"
-msgstr "Positionszeiger"
-
-#: sfdb_ui.cc:1685
-msgid "session start"
-msgstr "Projektanfang"
-
-#: sfdb_ui.cc:1691
-msgid "<b>Add files as ...</b>"
-msgstr "<b>Füge Dateien hinzu als...</b>"
-
-#: sfdb_ui.cc:1713
-msgid "<b>Insert at</b>"
-msgstr "<b>Einfügen bei</b>"
-
-#: sfdb_ui.cc:1726
-msgid "<b>Mapping</b>"
-msgstr "<b>Zuordnung</b>"
-
-#: sfdb_ui.cc:1744
-msgid "<b>Conversion quality</b>"
-msgstr "<b>Konvertierungsqualität:</b>"
-
-#: sfdb_ui.cc:1756
-msgid "<b>Instrument</b>"
-msgstr "<b>Instrument</b>"
-
-#: sfdb_ui.cc:1768 sfdb_ui.cc:1875
-msgid "Best"
-msgstr "bestmöglich"
-
-#: sfdb_ui.cc:1769 sfdb_ui.cc:1877
-msgid "Good"
-msgstr "gut"
-
-#: sfdb_ui.cc:1770 sfdb_ui.cc:1879
-msgid "Quick"
-msgstr "schnell"
-
-#: sfdb_ui.cc:1772
-msgid "Fastest"
-msgstr "Schnellstmöglich"
-
-#: shuttle_control.cc:56
-msgid "Shuttle speed control (Context-click for options)"
-msgstr "Abspielgeschwindigkeit (Rechtsklick für Optionen)"
-
-#: shuttle_control.cc:174
-msgid "Percent"
-msgstr "Prozent"
-
-#: shuttle_control.cc:182
-msgid "Units"
-msgstr "Einheiten"
-
-#: shuttle_control.cc:188 shuttle_control.cc:609
-msgid "Sprung"
-msgstr "Feder"
-
-#: shuttle_control.cc:192 shuttle_control.cc:612
-msgid "Wheel"
-msgstr "Drehrad"
-
-#: shuttle_control.cc:226
-msgid "Maximum speed"
-msgstr "Max. Geschwindigkeit"
-
-#: shuttle_control.cc:568
-msgid "Playing"
-msgstr "Wiedergabe"
-
-#: shuttle_control.cc:583
-#, c-format
-msgid "<<< %+d semitones"
-msgstr "<<< %+d Halbtöne"
-
-#: shuttle_control.cc:585
-#, c-format
-msgid ">>> %+d semitones"
-msgstr ">>> %+d Halbtöne"
-
-#: shuttle_control.cc:590
-msgid "Stopped"
-msgstr "Gestoppt"
-
-#: soundcloud_export_selector.cc:44
-msgid "User Email"
-msgstr "Benutzer Email"
-
-#: soundcloud_export_selector.cc:45
-msgid "Password"
-msgstr "Passwort"
-
-#: soundcloud_export_selector.cc:46
-msgid "Make files public"
-msgstr "Dateien öffentlich machen"
-
-#: soundcloud_export_selector.cc:47
-msgid "Open uploaded files in browser"
-msgstr "Hochgeladene Dateien in Browser öffnen"
-
-#: soundcloud_export_selector.cc:48
-msgid "Make files downloadable"
-msgstr "Dateien herunterladbar machen"
-
-#: soundcloud_export_selector.cc:107
-msgid "%1: %2 of %3 bytes uploaded"
-msgstr "%1: %2 von %3 bytes hochgeladen"
-
-#: splash.cc:73
-msgid "%1 loading ..."
-msgstr "%1 startet ..."
-
-#: speaker_dialog.cc:40
-msgid "Add Speaker"
-msgstr "Lautsprecher hinzufügen"
-
-#: speaker_dialog.cc:41
-msgid "Remove Speaker"
-msgstr "Lautsprecher entfernen"
-
-#: speaker_dialog.cc:63
-msgid "Azimuth:"
-msgstr "Azimut:"
-
-#: startup.cc:67
-msgid ""
-"Use an external mixer or the hardware mixer of your audio interface.\n"
-"%1 will play NO role in monitoring"
-msgstr ""
-"Verwende einen externen Mixer oder den Hardwaremixer der Audiohardware.\n"
-"%1 wird das Monitoring NICHT übernehmen."
-
-#: startup.cc:69
-msgid "Ask %1 to play back material as it is being recorded"
-msgstr "%1 soll laufende Aufnahmen wiedergeben"
-
-#: startup.cc:142
-msgid ""
-"<span size=\"larger\">%1 is a digital audio workstation. You can use it to "
-"record, edit and mix multi-track audio. You can produce your own CDs, mix "
-"video soundtracks, or experiment with new ideas about music and sound. \n"
-"\n"
-"There are a few things that need to be configured before you start using the "
-"program.</span> "
-msgstr ""
-"<span size=\"larger\">%1 ist eine Digital Audio Workstation (DAW). Sie "
-"können damit Mehrspuraufnahmen aufnehmen, editieren und mischen. Sie können "
-"Ihre eigenen CDs produzieren, Video Soundtracks mischen oder einfach mit "
-"neuen Musik- und Klangideen experimentieren.\n"
-"\n"
-"Es gibt ein paar Dinge, die vor dem ersten Programmstart konfiguriert werden "
-"müssen.</span>"
-
-#: startup.cc:168
-msgid "Welcome to %1"
-msgstr "Willkommen bei %1"
-
-#: startup.cc:191
-msgid "Default folder for %1 sessions"
-msgstr "Standardordner für %1 Projekte"
-
-#: startup.cc:197
-msgid ""
-"Each project that you work on with %1 has its own folder.\n"
-"These can require a lot of disk space if you are recording audio.\n"
-"\n"
-"Where would you like new %1 sessions to be stored by default?\n"
-"\n"
-"<i>(You can put new sessions anywhere, this is just a default)</i>"
-msgstr ""
-"Jedes Projekt in %1 hat seinen eigenen Ordner.\n"
-"Diese Ordner können sehr groß werden, wenn Sie aufnehmen.\n"
-"\n"
-"Wo soll %1 neue Projekte standardmäßig abspeichern?\n"
-"\n"
-"<i>(Neue Projekte können überall abgespeichert werden, dies ist nur die "
-"Vorgabe)</i>"
-
-#: startup.cc:220
-msgid "Default folder for new sessions"
-msgstr "Standardordner für neue Projekte"
-
-#: startup.cc:241
-msgid ""
-"While recording instruments or vocals, you probably want to listen to the\n"
-"signal as well as record it. This is called \"monitoring\". There are\n"
-"different ways to do this depending on the equipment you have and the\n"
-"configuration of that equipment. The two most common are presented here.\n"
-"Please choose whichever one is right for your setup.\n"
-"\n"
-"<i>(You can change this preference at any time, via the Preferences dialog)</"
-"i>\n"
-"\n"
-"<i>If you do not understand what this is about, just accept the default.</i>"
-msgstr ""
-"Während der Aufnahme von Instrumenten oder Gesang soll das Signal\n"
-"wahrscheinlich gleichzeitig abgehört und aufgenommen werden.\n"
-"Dies wird \"Monitoring\" genannt. Ausgehend von Ihrer\n"
-"Hardware gibt es verschiedenen Möglichkeiten hierfür.\n"
-"Die zwei meistgenutzten stehen hier zur Auswahl.\n"
-"Bitte wählen Sie, welche Konfiguration Ihren Wünschen entspricht.\n"
-"\n"
-"<i>(Diese Einstellung kann jederzeit über die globalen Einstellungen "
-"geändert werden)</i> \n"
-"\n"
-"<i>Im Zweifelsfall akzeptieren Sie einfach die Voreinstellung.</i>"
-
-#: startup.cc:262
-msgid "Monitoring Choices"
-msgstr "Auswahl des Monitoring"
-
-#: startup.cc:285
-msgid "Use a Master bus directly"
-msgstr "Nutze den Master-Bus direkt"
-
-#: startup.cc:287
-msgid ""
-"Connect the Master bus directly to your hardware outputs. This is preferable "
-"for simple usage."
-msgstr ""
-"Verbinde den Master-Bus direkt mit den Audioausgängen. Wird für einfache "
-"Anwendungen empfohlen."
-
-#: startup.cc:296
-msgid "Use an additional Monitor bus"
-msgstr "Nutze einen zusätzlichen Monitor-Bus"
-
-#: startup.cc:299
-msgid ""
-"Use a Monitor bus between Master bus and hardware outputs for \n"
-"greater control in monitoring without affecting the mix."
-msgstr ""
-"Nutze einen Monitor-Bus zwischen Master-Bus und Audioausgängen, um mehr\n"
-"Möglichkeiten für das Monitoring zu bekommen, ohne den Mix zu beeinflussen."
-
-#: startup.cc:321
-msgid ""
-"<i>You can change this preference at any time via the Preferences dialog.\n"
-"You can also add or remove the monitor section to/from any session.</i>\n"
-"\n"
-"<i>If you do not understand what this is about, just accept the default.</i>"
-msgstr ""
-"<i>Diese Einstellung können Sie jederzeit über den Dialog "
-"Projekteinstellungen \n"
-"ändern. Sie können auch die Monitorsektion in Ihren Projekten hinzufügen \n"
-"oder entfernen.</i>\n"
-"\n"
-"</i>Im Zweifelsfall akzeptieren Sie einfach die Voreinstellung.</i>"
-
-#: startup.cc:332
-msgid "Monitor Section"
-msgstr "Monitorsektion"
-
-#: step_entry.cc:60
-msgid "Step Entry: %1"
-msgstr "Eingabemodus (Step Entry): %1"
-
-#: step_entry.cc:65
-msgid ">beat"
-msgstr ">Schlag"
-
-#: step_entry.cc:66
-msgid ">bar"
-msgstr ">Takt"
-
-#: step_entry.cc:67
-msgid ">EP"
-msgstr ">AP"
-
-#: step_entry.cc:68
-msgid "sustain"
-msgstr "Sustain"
-
-#: step_entry.cc:69
-msgid "rest"
-msgstr "Pause"
-
-#: step_entry.cc:70
-msgid "g-rest"
-msgstr "R-Pause"
-
-#: step_entry.cc:71
-msgid "back"
-msgstr "zurück"
-
-#: step_entry.cc:82 step_entry.cc:85
-msgid "+"
-msgstr "+"
-
-#: step_entry.cc:191
-msgid "Set note length to a whole note"
-msgstr "Notenwert auf ganze Note setzen"
-
-#: step_entry.cc:192
-msgid "Set note length to a half note"
-msgstr "Notenwert auf halbe Note setzen"
-
-#: step_entry.cc:193
-msgid "Set note length to a quarter note"
-msgstr "Notenwert auf Viertelnote setzen"
-
-#: step_entry.cc:194
-msgid "Set note length to a eighth note"
-msgstr "Notenwert auf Achtelnote setzen"
-
-#: step_entry.cc:195
-msgid "Set note length to a sixteenth note"
-msgstr "Notenwert auf Sechzehntelnote setzen"
-
-#: step_entry.cc:196
-msgid "Set note length to a thirty-second note"
-msgstr "Notenwert auf Zweiunddreißigstelnote setzen"
-
-#: step_entry.cc:197
-msgid "Set note length to a sixty-fourth note"
-msgstr "Notenwert auf Vierundsechzigstelnote setzen"
-
-#: step_entry.cc:276
-msgid "Set volume (velocity) to pianississimo"
-msgstr "Lautstärke (velocity) auf pianississimo setzen"
-
-#: step_entry.cc:277
-msgid "Set volume (velocity) to pianissimo"
-msgstr "Lautstärke (velocity) auf pianissimo setzen"
-
-#: step_entry.cc:278
-msgid "Set volume (velocity) to piano"
-msgstr "Lautstärke (velocity) auf piano setzen"
-
-#: step_entry.cc:279
-msgid "Set volume (velocity) to mezzo-piano"
-msgstr "Lautstärke (velocity) auf mezzo-piano setzen"
-
-#: step_entry.cc:280
-msgid "Set volume (velocity) to mezzo-forte"
-msgstr "Lautstärke (velocity) auf mezzo-forte setzen"
-
-#: step_entry.cc:281
-msgid "Set volume (velocity) to forte"
-msgstr "Lautstärke (velocity) auf forte setzen"
-
-#: step_entry.cc:282
-msgid "Set volume (velocity) to fortissimo"
-msgstr "Lautstärke (Velocity) auf fortissimo setzen"
-
-#: step_entry.cc:283
-msgid "Set volume (velocity) to fortississimo"
-msgstr "Lautstärke (Velocity) auf fortississimo setzen"
-
-#: step_entry.cc:331
-msgid "Stack inserted notes to form a chord"
-msgstr "Einen Akkord eingeben (Noten stapeln)"
-
-#: step_entry.cc:332
-msgid "Extend selected notes by note length"
-msgstr "Ausgewählte Noten um Notenwert verlängern"
-
-#: step_entry.cc:333
-msgid "Use undotted note lengths"
-msgstr "Keine punktierten Notenwerte verwenden"
-
-#: step_entry.cc:334
-msgid "Use dotted (* 1.5) note lengths"
-msgstr "Punktierte Notenwerte (* 1,5)"
-
-#: step_entry.cc:335
-msgid "Use double-dotted (* 1.75) note lengths"
-msgstr "Doppelt punktierte Notenwerte (* 1,75)"
-
-#: step_entry.cc:336
-msgid "Use triple-dotted (* 1.875) note lengths"
-msgstr "Dreifach punktierte Notenwerte (* 1,875)"
-
-#: step_entry.cc:337
-msgid "Insert a note-length's rest"
-msgstr "Eine Pause einfügen"
-
-#: step_entry.cc:338
-msgid "Insert a grid-unit's rest"
-msgstr "Eine Pause in der Länge einer Rastereinheit einfügen"
-
-#: step_entry.cc:339
-msgid "Insert a rest until the next beat"
-msgstr "Eine Pause bis zum nächsten Schlag einfügen"
-
-#: step_entry.cc:340
-msgid "Insert a rest until the next bar"
-msgstr "Eine Pause bis zum nächsten Takt einfügen"
-
-#: step_entry.cc:341
-msgid "Insert a bank change message"
-msgstr "MIDI Bank Change einfügen"
-
-#: step_entry.cc:342
-msgid "Insert a program change message"
-msgstr "MIDI Program Change einfügen"
-
-#: step_entry.cc:343 step_entry.cc:700
-msgid "Move Insert Position Back by Note Length"
-msgstr "Um einen Notenwert zurück gehen"
-
-#: step_entry.cc:344 step_entry.cc:698
-msgid "Move Insert Position to Edit Point"
-msgstr "Eingabepunkt zum Arbeitspunkt verschieben"
-
-#: step_entry.cc:401
-msgid "1/Note"
-msgstr "1/Note"
-
-#: step_entry.cc:415
-msgid "Octave"
-msgstr "Oktave"
-
-#: step_entry.cc:598
-msgid "Insert Note A"
-msgstr "Note A Einfügen"
-
-#: step_entry.cc:599
-msgid "Insert Note A-sharp"
-msgstr "Ais einfügen"
-
-#: step_entry.cc:600
-msgid "Insert Note B"
-msgstr "Note H Einfügen"
-
-#: step_entry.cc:601
-msgid "Insert Note C"
-msgstr "Note C Einfügen"
-
-#: step_entry.cc:602
-msgid "Insert Note C-sharp"
-msgstr "Cis einfügen"
-
-#: step_entry.cc:603
-msgid "Insert Note D"
-msgstr "Note D Einfügen"
-
-#: step_entry.cc:604
-msgid "Insert Note D-sharp"
-msgstr "Dis einfügen"
-
-#: step_entry.cc:605
-msgid "Insert Note E"
-msgstr "Note E Einfügen"
-
-#: step_entry.cc:606
-msgid "Insert Note F"
-msgstr "Note F Einfügen"
-
-#: step_entry.cc:607
-msgid "Insert Note F-sharp"
-msgstr "Fis einfügen"
-
-#: step_entry.cc:608
-msgid "Insert Note G"
-msgstr "Note G Einfügen"
-
-#: step_entry.cc:609
-msgid "Insert Note G-sharp"
-msgstr "Gis einfügen"
-
-#: step_entry.cc:611
-msgid "Insert a Note-length Rest"
-msgstr "Eine Pause einfügen"
-
-#: step_entry.cc:612
-msgid "Insert a Snap-length Rest"
-msgstr "Eine Pause in der Länge einer Rastereinheit einfügen"
-
-#: step_entry.cc:614 step_entry.cc:615
-msgid "Move to next octave"
-msgstr "Zu nächster Oktave gehen"
-
-#: step_entry.cc:617
-msgid "Move to Next Note Length"
-msgstr "Zu nächster Notenlänge gehen"
-
-#: step_entry.cc:618
-msgid "Move to Previous Note Length"
-msgstr "Zu voriger Notenlänge gehen"
-
-#: step_entry.cc:620
-msgid "Increase Note Length"
-msgstr "Notenwert verlängern"
-
-#: step_entry.cc:621
-msgid "Decrease Note Length"
-msgstr "Notenwert kürzen"
-
-#: step_entry.cc:623
-msgid "Move to Next Note Velocity"
-msgstr "Zu nächster Velocity gehen"
-
-#: step_entry.cc:624
-msgid "Move to Previous Note Velocity"
-msgstr "Zu voriger Velocity gehen"
-
-#: step_entry.cc:626
-msgid "Increase Note Velocity"
-msgstr "Velocity erhöhen"
-
-#: step_entry.cc:627
-msgid "Decrease Note Velocity"
-msgstr "Velocity verringern"
-
-#: step_entry.cc:629
-msgid "Switch to the 1st octave"
-msgstr "Zur 1. Oktave wechseln"
-
-#: step_entry.cc:630
-msgid "Switch to the 2nd octave"
-msgstr "Zur 2. Oktave wechseln"
-
-#: step_entry.cc:631
-msgid "Switch to the 3rd octave"
-msgstr "Zur 3. Oktave wechseln"
-
-#: step_entry.cc:632
-msgid "Switch to the 4th octave"
-msgstr "Zur 4. Oktave wechseln"
-
-#: step_entry.cc:633
-msgid "Switch to the 5th octave"
-msgstr "Zur 5. Oktave wechseln"
-
-#: step_entry.cc:634
-msgid "Switch to the 6th octave"
-msgstr "Zur 6. Oktave wechseln"
-
-#: step_entry.cc:635
-msgid "Switch to the 7th octave"
-msgstr "Zur 7. Oktave wechseln"
-
-#: step_entry.cc:636
-msgid "Switch to the 8th octave"
-msgstr "Zur 8. Oktave wechseln"
-
-#: step_entry.cc:637
-msgid "Switch to the 9th octave"
-msgstr "Zur 9. Oktave wechseln"
-
-#: step_entry.cc:638
-msgid "Switch to the 10th octave"
-msgstr "Zur 10. Oktave wechseln"
-
-#: step_entry.cc:639
-msgid "Switch to the 11th octave"
-msgstr "Zur 11. Oktave wechseln"
-
-#: step_entry.cc:644
-msgid "Set Note Length to Whole"
-msgstr "Notenwert auf ganze Note setzen"
-
-#: step_entry.cc:646
-msgid "Set Note Length to 1/2"
-msgstr "Notenwert auf halbe Note setzen"
-
-#: step_entry.cc:648
-msgid "Set Note Length to 1/3"
-msgstr "Notenwert auf drittel Note setzen"
-
-#: step_entry.cc:650
-msgid "Set Note Length to 1/4"
-msgstr "Notenwert auf Viertelnote setzen"
-
-#: step_entry.cc:652
-msgid "Set Note Length to 1/8"
-msgstr "Notenwert auf Achtelnote setzen"
-
-#: step_entry.cc:654
-msgid "Set Note Length to 1/16"
-msgstr "Notenwert auf Sechzehntelnote setzen"
-
-#: step_entry.cc:656
-msgid "Set Note Length to 1/32"
-msgstr "Notenwert auf Zweiunddreißigstelnote setzen"
-
-#: step_entry.cc:658
-msgid "Set Note Length to 1/64"
-msgstr "Notenwert auf Vierundsechzigstelnote setzen"
-
-#: step_entry.cc:663
-msgid "Set Note Velocity to Pianississimo"
-msgstr "Lautstärke (velocity) auf pianississimo setzen"
-
-#: step_entry.cc:665
-msgid "Set Note Velocity to Pianissimo"
-msgstr "Lautstärke (velocity) auf pianissimo setzen"
-
-#: step_entry.cc:667
-msgid "Set Note Velocity to Piano"
-msgstr "Lautstärke (velocity) auf piano setzen"
-
-#: step_entry.cc:669
-msgid "Set Note Velocity to Mezzo-Piano"
-msgstr "Lautstärke (velocity) auf mezzo-piano setzen"
-
-#: step_entry.cc:671
-msgid "Set Note Velocity to Mezzo-Forte"
-msgstr "Lautstärke (velocity) auf mezzo-forte setzen"
-
-#: step_entry.cc:673
-msgid "Set Note Velocity to Forte"
-msgstr "Lautstärke (velocity) auf forte setzen"
-
-#: step_entry.cc:675 step_entry.cc:677
-msgid "Set Note Velocity to Fortississimo"
-msgstr "Lautstärke (velocity) auf fortississimo setzen"
-
-#: step_entry.cc:679
-msgid "Toggle Triple Notes"
-msgstr "Triolen an/aus"
-
-#: step_entry.cc:684
-msgid "No Dotted Notes"
-msgstr "Keine punktierten Noten"
-
-#: step_entry.cc:686
-msgid "Toggled Dotted Notes"
-msgstr "Punktierte Noten an/aus"
-
-#: step_entry.cc:688
-msgid "Toggled Double-Dotted Notes"
-msgstr "Doppelt punktierte Noten an/aus"
-
-#: step_entry.cc:690
-msgid "Toggled Triple-Dotted Notes"
-msgstr "Punktierte Triolen an/aus"
-
-#: step_entry.cc:693
-msgid "Toggle Chord Entry"
-msgstr "Akkordeingabe aktivieren"
-
-#: step_entry.cc:695
-msgid "Sustain Selected Notes by Note Length"
-msgstr "Ausgewählte Noten ertönen über Notenlänge"
-
-#: stereo_panner.cc:133
-#, c-format
-msgid "L:%3d R:%3d Width:%d%%"
-msgstr "L:%3d R:%3d Breite:%d%%"
-
-#: stereo_panner.cc:271
-msgid "Panner|M"
-msgstr "M"
-
-#: stereo_panner_editor.cc:35
-msgid "Stereo Panner"
-msgstr "Stereo Panner"
-
-#: stereo_panner_editor.cc:49
-msgid "Width"
-msgstr "Breite"
-
-#: strip_silence_dialog.cc:44
-msgid "Strip Silence"
-msgstr "Stille entfernen"
-
-#: strip_silence_dialog.cc:75
-msgid "Minimum length"
-msgstr "Mindestlänge"
-
-#: strip_silence_dialog.cc:83
-msgid "Fade length"
-msgstr "Fade-Länge"
-
-#: tempo_dialog.cc:41 tempo_dialog.cc:57
-msgid "bar:"
-msgstr "Takt:"
-
-#: tempo_dialog.cc:42 tempo_dialog.cc:58
-msgid "beat:"
-msgstr "Schlag:"
-
-#: tempo_dialog.cc:43 tempo_dialog.cc:59
-msgid "Pulse note"
-msgstr "Pulsnote"
-
-#: tempo_dialog.cc:44 tempo_dialog.cc:60
-msgid "Tap tempo"
-msgstr "Tempo tappen"
-
-#: tempo_dialog.cc:54
-msgid "Edit Tempo"
-msgstr "Tempo bearbeiten"
-
-#: tempo_dialog.cc:77 tempo_dialog.cc:78 tempo_dialog.cc:324
-#: tempo_dialog.cc:325
-msgid "whole"
-msgstr "Ganze"
-
-#: tempo_dialog.cc:79 tempo_dialog.cc:80 tempo_dialog.cc:326
-#: tempo_dialog.cc:327
-msgid "second"
-msgstr "Halbe"
-
-#: tempo_dialog.cc:81 tempo_dialog.cc:82 tempo_dialog.cc:328
-#: tempo_dialog.cc:329
-msgid "third"
-msgstr "Drittel"
-
-#: tempo_dialog.cc:83 tempo_dialog.cc:84 tempo_dialog.cc:330
-#: tempo_dialog.cc:331
-msgid "quarter"
-msgstr "Viertel"
-
-#: tempo_dialog.cc:85 tempo_dialog.cc:86 tempo_dialog.cc:332
-#: tempo_dialog.cc:333
-msgid "eighth"
-msgstr "Achtel"
-
-#: tempo_dialog.cc:87 tempo_dialog.cc:88 tempo_dialog.cc:334
-#: tempo_dialog.cc:335
-msgid "sixteenth"
-msgstr "Sechzehntel"
-
-#: tempo_dialog.cc:89 tempo_dialog.cc:90 tempo_dialog.cc:336
-#: tempo_dialog.cc:337
-msgid "thirty-second"
-msgstr "Zweiunddreissigstel"
-
-#: tempo_dialog.cc:91 tempo_dialog.cc:92 tempo_dialog.cc:338
-#: tempo_dialog.cc:339
-msgid "sixty-fourth"
-msgstr "Vierundsechzigstelnote"
-
-#: tempo_dialog.cc:93 tempo_dialog.cc:94 tempo_dialog.cc:340
-#: tempo_dialog.cc:341
-msgid "one-hundred-twenty-eighth"
-msgstr "Hundertachtundzwanzigstelnote"
-
-#: tempo_dialog.cc:121
-msgid "Beats per minute:"
-msgstr "Schläge pro Minute:"
-
-#: tempo_dialog.cc:155
-msgid "Tempo begins at"
-msgstr "Tempo beginnt bei"
-
-#: tempo_dialog.cc:251
-msgid "incomprehensible pulse note type (%1)"
-msgstr "Unverständlicher Puls-Notentyp (%1)"
-
-#: tempo_dialog.cc:307
-msgid "Edit Meter"
-msgstr "Taktart bearbeiten"
-
-#: tempo_dialog.cc:356
-msgid "Note value:"
-msgstr "Notenwert:"
-
-#: tempo_dialog.cc:357
-msgid "Beats per bar:"
-msgstr "Schläge pro Takt:"
-
-#: tempo_dialog.cc:371
-msgid "Meter begins at bar:"
-msgstr "Taktart beginnt bei Takt:"
-
-#: tempo_dialog.cc:484
-msgid "incomprehensible meter note type (%1)"
-msgstr "Unverständlicher Signatur-Notentyp (%1)"
-
-#: theme_manager.cc:65
-msgid "Dark Theme"
-msgstr "Dunkles Thema"
-
-#: theme_manager.cc:66
-msgid "Light Theme"
-msgstr "Helles Thema"
-
-#: theme_manager.cc:67
-msgid "Restore Defaults"
-msgstr "Standards wiederherstellen"
-
-#: theme_manager.cc:68
-msgid "Draw \"flat\" buttons"
-msgstr "Zeichne \"flache\" Schaltflächen"
-
-#: theme_manager.cc:69
-msgid "Blink Rec-Arm buttons"
-msgstr "Aufnahmebereitschaftsknopf blinkt"
-
-#: theme_manager.cc:70
-msgid "Color regions using their track's color"
-msgstr "Färbe Regionen in der Spurfarbe ein"
-
-#: theme_manager.cc:71
-msgid "Show waveform clipping"
-msgstr "Clipping der Wellenform anzeigen"
-
-#: theme_manager.cc:73
-msgid "Waveforms color gradient depth"
-msgstr "Farbverlaufs-Intensität der Wellenform"
-
-#: theme_manager.cc:75
-msgid "Timeline item gradient depth"
-msgstr "Farbverlaufs-Intensität von Zeitleisten-Objekten "
-
-#: theme_manager.cc:76
-msgid "All floating windows are dialogs"
-msgstr "Alle schwebenden Fenster sind Dialoge"
-
-#: theme_manager.cc:77
-msgid "Transient windows follow front window."
-msgstr "Transientenfenster folgt Hauptfenster"
-
-#: theme_manager.cc:78
-msgid "Icon Set"
-msgstr "Icon-Satz"
-
-#: theme_manager.cc:87
-msgid "Object"
-msgstr "Objekt"
-
-#: theme_manager.cc:163
-msgid "Items"
-msgstr "Objekte"
-
-#: theme_manager.cc:164
-msgid "Palette"
-msgstr "Palette"
-
-#: theme_manager.cc:165
-msgid "Transparency"
-msgstr "Transparenz"
-
-#: theme_manager.cc:195
-msgid ""
-"Mark all floating windows to be type \"Dialog\" rather than using \"Utility"
-"\" for some.\n"
-"This may help with some window managers. This requires a restart of %1 to "
-"take effect"
-msgstr ""
-"Markiere alle schwebenden Fenster als Typ \"Dialog\", statt für einige "
-"\"Utility\"  zu verwenden.\n"
-"Dies kann bei einigen Fenstermanagern helfen. Sie müssen %1 starten, um "
-"diese Option zu aktivieren"
-
-#: theme_manager.cc:199
-msgid ""
-"Make transient windows follow the front window when toggling between the "
-"editor and mixer.\n"
-"This requires a restart of %1 to take effect"
-msgstr ""
-"Kurzlebige Fenster folgen bei Wechsel zwischen Editor und Mixer dem "
-"Vordergrund-Fenster.\n"
-"Dies erfordert einen Neustart von %1."
-
-#: theme_manager.cc:620
-msgid "Color Palette"
-msgstr "Farbpalette"
-
-#: time_axis_view.cc:148
-msgid "Track/Bus name (double click to edit)"
-msgstr "Spur-/Busname (Doppelklick zum Bearbeiten)"
-
-#: time_axis_view_item.cc:345
-msgid "new duration %1 frame is out of bounds for %2"
-msgid_plural "new duration of %1 frames is out of bounds for %2"
-msgstr[0] "neue Dauer %1 Frame ist außerhalb des erlaubten Bereichs für %2"
-msgstr[1] "neue Dauer %1 Frames ist außerhalb des erlaubten Bereichs für %2"
-
-#: time_fx_dialog.cc:62
-msgid "Quick but Ugly"
-msgstr "Schnell, aber hässlich"
-
-#: time_fx_dialog.cc:63
-msgid "Skip Anti-aliasing"
-msgstr "Überspringe Anti-Aliasing"
-
-#: time_fx_dialog.cc:64
-msgid "Contents:"
-msgstr "Inhalt:"
-
-#: time_fx_dialog.cc:65
-msgid "Minimize time distortion"
-msgstr "zeitliche Verzerrung minimieren"
-
-#: time_fx_dialog.cc:66
-msgid "Preserve Formants"
-msgstr "Formanten beibehalten"
-
-#: time_fx_dialog.cc:71
-msgid "TimeFXDialog"
-msgstr "TimeFXDialog"
-
-#: time_fx_dialog.cc:74
-msgid "Pitch Shift Audio"
-msgstr "Tonhöhe ändern"
-
-#: time_fx_dialog.cc:76
-msgid "Time Stretch Audio"
-msgstr "Time Stretch Audio"
-
-#: time_fx_dialog.cc:104 transpose_dialog.cc:41
-msgid "Octaves:"
-msgstr "Oktaven:"
-
-#: time_fx_dialog.cc:109 transpose_dialog.cc:46
-msgid "Semitones:"
-msgstr "Halbtöne:"
-
-#: time_fx_dialog.cc:114
-msgid "Cents:"
-msgstr "Cents:"
-
-#: time_fx_dialog.cc:122
-msgid "Time|Shift"
-msgstr "Tonhöhe ändern"
-
-#: time_fx_dialog.cc:146 time_fx_dialog.cc:149
-msgid "TimeFXButton"
-msgstr "TimeFXButton"
-
-#: time_fx_dialog.cc:154
-msgid "Stretch/Shrink"
-msgstr "Strecken/Stauchen"
-
-#: time_fx_dialog.cc:164
-msgid "<b>Progress</b>"
-msgstr "<b>Fortschritt</b>"
-
-#: time_info_box.cc:124
-msgid "Start recording at auto-punch start"
-msgstr "Aufnahme am Anfang des Punchbereichs starten"
-
-#: time_info_box.cc:125
-msgid "Stop recording at auto-punch end"
-msgstr "Aufnahme am Ende des Punchbereichs beenden"
-
-#: time_selection.cc:40
-msgid "programming error: request for non-existent audio range (%1)!"
-msgstr ""
-"Programmierfehler: nichtexistenter Audiobereich wurde angefordert (%1)!"
-
-#: transform_dialog.cc:39
-msgid "this note's"
-msgstr "dieser Note"
-
-#: transform_dialog.cc:40
-msgid "the previous note's"
-msgstr "der vorigen Note"
-
-#: transform_dialog.cc:41
-msgid "this note's index"
-msgstr "Index der Note"
-
-#: transform_dialog.cc:42
-msgid "the number of notes"
-msgstr "Anzahl der Noten"
-
-#: transform_dialog.cc:43
-msgid "exactly"
-msgstr "genau"
-
-#: transform_dialog.cc:44
-msgid "a random number from"
-msgstr "eine zufällige Nummer von"
-
-#: transform_dialog.cc:55
-msgid "equal steps from"
-msgstr "gleiche Schritte von"
-
-#: transform_dialog.cc:58
-msgid "note number"
-msgstr "Notennummer"
-
-#: transform_dialog.cc:59
-msgid "velocity"
-msgstr "Velocity"
-
-#: transform_dialog.cc:60
-msgid "start time"
-msgstr "Beginnzeit"
-
-#: transform_dialog.cc:61
-msgid "length"
-msgstr "Länge"
-
-#: transform_dialog.cc:82 transform_dialog.cc:113
-msgid "Transform"
-msgstr "Transformiere"
-
-#: transform_dialog.cc:91
-msgid "Set "
-msgstr "Setze"
-
-#: transpose_dialog.cc:30
-msgid "Transpose MIDI"
-msgstr "MIDI Transponieren"
-
-#: transpose_dialog.cc:55
-msgid "Transpose"
-msgstr "Transponieren"
-
-#: ui_config.cc:163 ui_config.cc:300
-msgid "Loading default ui configuration file %1"
-msgstr "lade voreingestellte UI-Konfigurationsdatei %1"
-
-#: ui_config.cc:166 ui_config.cc:303
-msgid "cannot read default ui configuration file \"%1\""
-msgstr "Kann die voreingestellte UI-Konfigurationsdatei \"%1\" nicht lesen"
-
-#: ui_config.cc:169 ui_config.cc:308
-msgid "default ui configuration file \"%1\" not loaded successfully."
-msgstr ""
-"Die voreingestellte UI-Konfigurationsdatei \"%1\" konnte nicht geladen "
-"werden."
-
-#: ui_config.cc:177
-msgid "Could not find default UI configuration file %1"
-msgstr "Konnte UI-Konfigurationsdatei für Voreinstellungen %1 nicht finden"
-
-#: ui_config.cc:219
-msgid "Loading color file %1"
-msgstr "Lade Farbdatei %1"
-
-#: ui_config.cc:222
-msgid "cannot read color file \"%1\""
-msgstr "kann Farbdatei \"%1\" nicht lesen"
-
-#: ui_config.cc:227
-msgid "color file \"%1\" not loaded successfully."
-msgstr "Farbdatei \"%1\" konnte nicht geladen werden."
-
-#: ui_config.cc:233
-msgid "Color file %1 not found"
-msgstr "Farbdatei %1 nicht gefunden"
-
-#: ui_config.cc:282 ui_config.cc:361
-msgid "Color file %1 not saved"
-msgstr "Farbdatei %1 nicght gespeichert"
-
-#: ui_config.cc:317
-msgid "Loading user ui configuration file %1"
-msgstr "Lade benutzerdefinierte UI-Konfigurationsdatei %1"
-
-#: ui_config.cc:320
-msgid "cannot read ui configuration file \"%1\""
-msgstr "kann die UI-Konfigurationsdatei \"%1\" nicht lesen"
-
-#: ui_config.cc:325
-msgid "user ui configuration file \"%1\" not loaded successfully."
-msgstr ""
-"Die benutzerdefinierte UI-Konfigurationsdatei \"%1\" konnte nicht geladen "
-"werden."
-
-#: ui_config.cc:333
-msgid "could not find any ui configuration file, canvas will look broken."
-msgstr ""
-"Konnte keine UI-Konfigurationsdatei finden, die Arbeitsfläche wird nicht "
-"korrekt dargestellt werden."
-
-#: ui_config.cc:351
-msgid "Config file %1 not saved"
-msgstr "Konfigurationsdatei %1 nicht gespeichert"
-
-#: ui_config.cc:592
-msgid "Color %1 not found"
-msgstr "Farbe %1 nicht gefunden"
-
-#: ui_config.cc:662
-msgid "Unable to find UI style file %1 in search path %2. %3 will look strange"
-msgstr ""
-"Kann den UI-Stil Datei %1 im Suchpfad %2 nicht finden. %3 wird merkwürdig "
-"aussehen"
-
-#: utils.cc:117 utils.cc:160
-msgid "bad XPM header %1"
-msgstr "Fehlerhafter XPM Header %1"
-
-#: utils.cc:577
-msgid "cannot find XPM file for %1"
-msgstr "Konnte XPM-Datei für %1 nicht finden"
-
-#: utils.cc:597 utils.cc:627 utils.cc:641
-msgid "default"
-msgstr "voreingestellt"
-
-#: utils.cc:642
-msgid "icon \"%1\" not found for icon set \"%2\", fallback to default"
-msgstr ""
-"Icon \"%1\" wurde im Icon-Satz \"%2\" nicht gefunden, greife auf "
-"Voreinstellung zurück"
-
-#: utils.cc:649
-msgid "cannot find icon image for %1 using %2"
-msgstr "Konnte Icon-Bild für %1 unter %2 nicht finden"
-
-#: utils.cc:666 utils.cc:682
-msgid "Caught exception while loading icon named %1"
-msgstr ""
-"Während des Ladens des Icons mit dem Namen %1 trat ein Ausnahmefehler auf"
-
-#: add_video_dialog.cc:54
-msgid "Set Video Track"
-msgstr "Videospur-Einstellungen"
-
-#: add_video_dialog.cc:62
-msgid "Open Video Monitor Window"
-msgstr "Videomonitorfenster öffnen"
-
-#: add_video_dialog.cc:63
-msgid "Adjust Session Framerate to Match Video Framerate"
-msgstr "Projekt-Framerate an Video-Framerate anpassen"
-
-#: add_video_dialog.cc:65
-msgid "Reload docroot"
-msgstr "docroot neu laden"
-
-#: add_video_dialog.cc:120
-msgid "Video files"
-msgstr "Videodateien"
-
-#: add_video_dialog.cc:149
-msgid "<b>Video Information</b>"
-msgstr "<b>Videoinformationen</b>"
-
-#: add_video_dialog.cc:152
-msgid "Start:"
-msgstr "Start:"
-
-#: add_video_dialog.cc:158
-msgid "Frame rate:"
-msgstr "Framerate:"
-
-#: add_video_dialog.cc:161
-msgid "Aspect Ratio:"
-msgstr "Seitenverhältnis:"
-
-#: add_video_dialog.cc:244
-msgid "VideoServerIndex"
-msgstr "VideoServerIndex"
-
-#: add_video_dialog.cc:675
-msgid " %1 fps"
-msgstr " %1 fps"
-
-#: video_timeline.cc:468
-msgid ""
-"Parsing video file info failed. Is the Video Server running? Is the file "
-"readable by the Video Server? Does the docroot match? Is it a video file?"
-msgstr ""
-"Fehler beim Parsen der Videodatei. Läuft der Videoserver? Ist die Datei für "
-"den Videoserver lesbar? Ist die docroot passend eingestellt? Ist die Datei "
-"tatsächlich eine Videodatei?"
-
-#: video_timeline.cc:506
-msgid ""
-"Failed to set session-framerate: '%1' does not have a corresponding option "
-"setting in %2."
-msgstr ""
-"Setzen der Projektframerate fehlgeschlagen: '%1' hat keine entsprechende "
-"Einstellungsoption in %2."
-
-#: video_timeline.cc:514
-msgid ""
-"Video file's framerate is not equal to %1 session timecode's framerate: '%2' "
-"vs '%3'"
-msgstr ""
-"Framerate der Videodatei entspricht nicht der Framerate des Timecodes im %1-"
-"Projekt: '%2' vs. '%3'"
-
-#: video_timeline.cc:587
-msgid ""
-"Video-server docroot mismatch. %1: '%2', video-server: '%3'. This usually "
-"means that the video server was not started by %1 and uses a different "
-"document-root."
-msgstr ""
-"Docroot des Videoserver stimmt nicht überein. %1: '%2', Videoserver: '%3'. "
-"Das bedeutet üblicherweise, dass der Videoserver nicht von %1 gestartet "
-"wurde und einen anderen Dokumenten-Wurzelpfad verwendet."
-
-#: video_timeline.cc:724
-msgid ""
-"Video-monitor 'xjadeo' was not found. Please install http://xjadeo.sf.net/ "
-"(a custom path to xjadeo can be specified by setting the XJREMOTE "
-"environment variable. It should point to an application compatible with "
-"xjadeo's remote-control interface 'xjremote').\n"
-"\n"
-"see also http://manual.ardour.org/video-timeline/setup/"
-msgstr ""
-"Der Videomonitor 'xjadeo' wurde nicht gefunden. Bitte installieren Sie "
-"http://xjadeo.sf.net/ (ein benutzerspezifischer Pfad für xjadeo kann durch "
-"Setzen der Umgebungsvariablen XJREMOTE angegeben werden. Er sollte auf ein "
-"Programm zeigen, das zu dem Fernsteuerungsprotokoll 'xjremote' von xjadeo "
-"kompatibel ist).\n"
-"\n"
-"Siehe auch http://manual.ardour.org/video-timeline/setup/"
-
-#: video_timeline.cc:739
-msgid "Video-monitor 'xjadeo' cannot be launched."
-msgstr "Videomonitor 'xjadeo' kann nicht gestartet werden."
-
-#: video_timeline.cc:766
-msgid ""
-"Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.7.7 or "
-"later. http://xjadeo.sf.net/"
-msgstr ""
-"Videomonitor 'xjadeo' ist zu alt. Bitte installieren Sie xjadeo in Version "
-"0.7.7 oder höher. http://xjadeo.sf.net/"
-
-#: video_monitor.cc:285
-msgid "Video Monitor: File Not Found."
-msgstr "Videomonitor: Datei nicht gefunden."
-
-#: transcode_ffmpeg.cc:56
-msgid ""
-"No ffprobe or ffmpeg executables could be found on this system.\n"
-"Video import and export is not possible until you install those tools.\n"
-"%1 requires ffmpeg and ffprobe from ffmpeg.org - version 1.1 or newer.\n"
-"\n"
-"The tools are included with the %1 releases from ardour.org and also "
-"available with the video-server at http://x42.github.com/harvid/\n"
-"\n"
-"Important: the files need to be installed in $PATH and named ffmpeg_harvid "
-"and ffprobe_harvid.\n"
-"If you already have a suitable ffmpeg installation on your system, we "
-"recommend creating symbolic links from ffmpeg to ffmpeg_harvid and from "
-"ffprobe to ffprobe_harvid.\n"
-"\n"
-"see also http://manual.ardour.org/video-timeline/setup/"
-msgstr ""
-"Die Programme ffprobe oder ffmpeg konnten auf diesem System nicht gefunden "
-"werden.\n"
-"Bis diese Werkzeuge installiert sind, ist Videoexport nicht möglich.\n"
-"%1 benötigt ffmpeg und ffprobe von ffmpeg.org in der Version 1.1 oder "
-"neuer.\n"
-"\n"
-"Diese Werkzeuge sind in den %1-Paketen von ardour.org inkludiert und auch "
-"mit dem Videoserver auf http://x42.github.com/harvid/ erhältlich.\n"
-"\n"
-"Wichtig:  die Dateien müssen in $PATH installiert sein und die Namen "
-"ffmpeg_harvid und ffprobe_harvid.\n"
-"Falls Sie bereits eine ffmpeg Installation auf Ihrem System haben, empfehlen "
-"wir, symbolische Links von ffmpeg zu ffmpeg_harvid und von ffprobe zu "
-"ffprobe_harvid anzulegen.\n"
-"\n"
-"Siehe auch http://manual.ardour.org/video-timeline/setup/"
-
-#: transcode_video_dialog.cc:56
-msgid "Transcode/Import Video File "
-msgstr "Videodatei transkodieren/importieren"
-
-#: transcode_video_dialog.cc:58
-msgid "Output File:"
-msgstr "Ausgabedatei:"
-
-#: transcode_video_dialog.cc:61 export_video_dialog.cc:85
-msgid "Abort"
-msgstr "Abbruch"
-
-#: transcode_video_dialog.cc:63
-msgid "Height = "
-msgstr "Höhe ="
-
-#: transcode_video_dialog.cc:66
-msgid "Manual Override"
-msgstr "Manuelle Eingabe"
-
-#: transcode_video_dialog.cc:70 export_video_dialog.cc:103
-msgid "Debug Mode: Print ffmpeg command and output to stdout."
-msgstr "Debug-Modus: gibt die ffmpeg-Befehlszeile und -Ausgabe an stdout aus."
-
-#: transcode_video_dialog.cc:107
-msgid "<b>File Information</b>"
-msgstr "<b>Dateiinformationen</b>"
-
-#: transcode_video_dialog.cc:113
-msgid ""
-"No ffprobe or ffmpeg executables could be found on this system. Video Import "
-"is not possible until you install those tools. See the Log window for more "
-"information."
-msgstr ""
-"Die Programme ffprobe oder ffmpeg konnten auf diesem System nicht gefunden "
-"werden. Bis diese Werkzeuge installiert sind, ist Videoimport nicht möglich. "
-"Sehen Sie im Log-Fenster nach weiteren Informationen."
-
-#: transcode_video_dialog.cc:120
-msgid ""
-"File-info can not be read. Most likely '%1' is not a valid video-file or an "
-"unsupported video codec or format."
-msgstr ""
-"Dateiinformationen können nicht gelesen werden. Vermutlich ist '%1' keine "
-"gültige Videodatei, oder enthält einen nicht unterstützten Videocodec bzw. "
-"ein nicht unterstütztes Videoformat."
-
-#: transcode_video_dialog.cc:134
-msgid "FPS:"
-msgstr "FPS:"
-
-#: transcode_video_dialog.cc:136
-msgid "Duration:"
-msgstr "Dauer:"
-
-#: transcode_video_dialog.cc:138
-msgid "Codec:"
-msgstr "Codec:"
-
-#: transcode_video_dialog.cc:140
-msgid "Geometry:"
-msgstr "Geometrie:"
-
-#: transcode_video_dialog.cc:155
-msgid "??"
-msgstr "??"
-
-#: transcode_video_dialog.cc:176
-msgid "<b>Import Settings</b>"
-msgstr "<b>Importeinstellungen</b>"
-
-#: transcode_video_dialog.cc:181
-msgid "Reference From Current Location (Previously Transcoded Files Only)"
-msgstr ""
-"Referenz von momentaner Position (vorher nur von transkodierten Dateien)"
-
-#: transcode_video_dialog.cc:183
-msgid "Import/Transcode Video to Session"
-msgstr "Video ins Projekt transkodieren/importieren"
-
-#: transcode_video_dialog.cc:191
-msgid "Do Not Import Video (Audio Import Only)"
-msgstr "Video nicht importieren (nur Audio)"
-
-#: transcode_video_dialog.cc:200
-msgid "Scale Video: Width = "
-msgstr "Video skalieren: Breite = "
-
-#: transcode_video_dialog.cc:207
-msgid "Original Width"
-msgstr "Originalbreite"
-
-#: transcode_video_dialog.cc:222
-msgid "Bitrate (KBit/s):"
-msgstr "Bitrate (KBit/s):"
-
-#: transcode_video_dialog.cc:227
-msgid "Extract Audio:"
-msgstr "Audio extrahieren:"
-
-#: transcode_video_dialog.cc:232
-msgid "No Audio Track Present"
-msgstr "Keine Audiospur"
-
-#: transcode_video_dialog.cc:235
-msgid "Do Not Extract Audio"
-msgstr "Audio nicht extrahieren"
-
-#: transcode_video_dialog.cc:350
-msgid "Extracting Audio.."
-msgstr "Extrahiere Audio..."
-
-#: transcode_video_dialog.cc:353
-msgid "Audio Extraction Failed."
-msgstr "Extrahieren des Audio gescheitert."
-
-#: transcode_video_dialog.cc:379
-msgid "Transcoding Video.."
-msgstr "Transkodiere Video.."
-
-#: transcode_video_dialog.cc:413
-msgid "Transcoding Failed."
-msgstr "Transkodieren gescheitert"
-
-#: transcode_video_dialog.cc:503
-msgid "Save Transcoded Video File"
-msgstr "Sichere transkodierte Videodatei"
-
-#: video_server_dialog.cc:52
-msgid "Launch Video Server"
-msgstr "Video-Server starten"
-
-#: video_server_dialog.cc:53
-msgid "Server Executable:"
-msgstr "Server-Datei:"
-
-#: video_server_dialog.cc:55
-msgid "Server Docroot:"
-msgstr "Server Docroot:"
-
-#: video_server_dialog.cc:61
-msgid "Don't show this dialog again. (Reset in Edit->Preferences)."
-msgstr ""
-"Diesen Dialog nicht mehr anzeigen (kann in Einstellungen geändert werden)."
-
-#: video_server_dialog.cc:97
-msgid ""
-"The external video server 'harvid' can not be found.\n"
-"The tool is included with the %1 releases from ardour.org, alternatively you "
-"can download it from http://x42.github.com/harvid/ or acquire it from your "
-"distribution.\n"
-"\n"
-"see also http://manual.ardour.org/video-timeline/setup/"
-msgstr "key"
-
-#: video_server_dialog.cc:129
-msgid "Listen Address:"
-msgstr "Eingehende Adresse:"
-
-#: video_server_dialog.cc:134
-msgid "Listen Port:"
-msgstr "Eingehender Port:"
-
-#: video_server_dialog.cc:139
-msgid "Cache Size:"
-msgstr "Cachegröße"
-
-#: video_server_dialog.cc:145
-msgid ""
-"%1 relies on an external video server for the videotimeline.\n"
-"The server configured in Edit -> Preferences -> Video is not reachable.\n"
-"Do you want %1 to launch 'harvid' on this machine?"
-msgstr ""
-"%1 benötigt einen externen Videoserver für die Video-Zeitleiste.\n"
-"Der in Bearbeiten -> Globale Einstellungen -> Video konfigurierte Server ist "
-"nicht erreichbar.\n"
-"Möchten Sie, daß %1 \"harvid\" auf diesem Computer startet?"
-
-#: video_server_dialog.cc:189
-msgid "Set Video Server Executable"
-msgstr "Setze Video-Serverpfad"
-
-#: video_server_dialog.cc:209
-msgid "Server docroot"
-msgstr "Server-docroot"
-
-#: utils_videotl.cc:60
-msgid "Destination is outside Video Server's docroot. "
-msgstr "Ziel ist ausserhalb der docroot des Videoservers."
-
-#: utils_videotl.cc:61
-msgid ""
-"The destination file path is outside of the Video Server's docroot. The file "
-"will not be readable by the Video Server. Do you still want to continue?"
-msgstr ""
-"Der Dateipfad des Zieles befindet sich ausserhalb der docroot des "
-"Videoservers. Die Datei wird für den Videoserver nicht lesbar sein. Wollen "
-"Sie wirklich fortfahren?"
-
-#: utils_videotl.cc:64
-msgid "Continue"
-msgstr "Fortfahren"
-
-#: utils_videotl.cc:70
-msgid "Confirm Overwrite"
-msgstr "Bestätige das Überschreiben"
-
-#: utils_videotl.cc:71
-msgid "A file with the same name already exists.  Do you want to overwrite it?"
-msgstr ""
-"Eine Datei mit diesem Namen existiert bereits. Wollen Sie sie überschreiben?"
-
-#: utils_videotl.cc:81 utils_videotl.cc:97
-msgid "Cannot create video folder \"%1\" (%2)"
-msgstr "Kann Videoordner \"%1\" nicht erstellen (%2)"
-
-#: export_video_dialog.cc:71
-msgid "Export Video File "
-msgstr "Exportiere Videodatei"
-
-#: export_video_dialog.cc:82
-msgid "Video:"
-msgstr "Video:"
-
-#: export_video_dialog.cc:87
-msgid "Scale Video (W x H):"
-msgstr "Skaliere Video (W x H):"
-
-#: export_video_dialog.cc:88
-msgid "Retain Aspect"
-msgstr "Seitenverhältnis beibehalten"
-
-#: export_video_dialog.cc:93
-msgid "Set Aspect Ratio:"
-msgstr "Seitenverhältnis:"
-
-#: export_video_dialog.cc:94
-msgid "Normalize Audio"
-msgstr "Audio normalisieren"
-
-#: export_video_dialog.cc:95
-msgid "2 Pass Encoding"
-msgstr "Enkodiere in 2 Durchgängen"
-
-#: export_video_dialog.cc:96
-msgid "Codec Optimizations:"
-msgstr "Codec-Optimierungen:"
-
-#: export_video_dialog.cc:98
-msgid "Deinterlace"
-msgstr "Deinterlacing anwenden"
-
-#: export_video_dialog.cc:99
-msgid "Use [2] B-frames (MPEG 2 or 4 only)"
-msgstr "Verwende [2] B-frames (nur MPEG 2 oder 4)"
-
-#: export_video_dialog.cc:100
-msgid "Override FPS (Default is to retain FPS from the input video file):"
-msgstr "FPS erzwingen (Voreinstellung: FPS der Videodatei wird beibehalten):"
-
-#: export_video_dialog.cc:101
-msgid "Include Session Metadata"
-msgstr "Projekt-Metadaten verwenden"
-
-#: export_video_dialog.cc:119
-msgid ""
-"No ffprobe or ffmpeg executables could be found on this system. Video Export "
-"is not possible until you install those tools. See the Log window for more "
-"information."
-msgstr ""
-"Die Programme ffprobe oder ffmpeg konnten auf diesem System nicht gefunden "
-"werden. Bis diese Werkzeuge installiert sind, ist Videoexport nicht möglich. "
-"Sehen Sie im Log-Fenster nach weiteren Informationen."
-
-#: export_video_dialog.cc:130
-msgid "<b>Output:</b> (file extension defines format)"
-msgstr "<b>Ausgabe:</b> (Dateierweiterung definiert das Format)"
-
-#: export_video_dialog.cc:140
-msgid "<b>Input Video:</b>"
-msgstr "<b>Eingabevideo:</b>"
-
-#: export_video_dialog.cc:151
-msgid "Audio:"
-msgstr "Audio:"
-
-#: export_video_dialog.cc:153
-msgid "Master Bus"
-msgstr "Masterbus"
-
-#: export_video_dialog.cc:158
-msgid "from the %1 session's start to the session's end"
-msgstr "von %1 Projektbeginn bis -ende"
-
-#: export_video_dialog.cc:161
-msgid "<b>Settings:</b>"
-msgstr "<b>Einstellungen:</b>"
-
-#: export_video_dialog.cc:169
-msgid "Range:"
-msgstr "Bereich:"
-
-#: export_video_dialog.cc:172
-msgid "Preset:"
-msgstr "Preset:"
-
-#: export_video_dialog.cc:175
-msgid "Video Codec:"
-msgstr "Videocodec:"
-
-#: export_video_dialog.cc:178
-msgid "Video KBit/s:"
-msgstr "Video KBit/s:"
-
-#: export_video_dialog.cc:181
-msgid "Audio Codec:"
-msgstr "Audiocodec:"
-
-#: export_video_dialog.cc:184
-msgid "Audio KBit/s:"
-msgstr "Audio KBit/s:"
-
-#: export_video_dialog.cc:187
-msgid "Audio Samplerate:"
-msgstr "Audiosamplerate:"
-
-#: export_video_dialog.cc:222 export_video_dialog.cc:231
-#: export_video_dialog.cc:814 export_video_dialog.cc:817
-msgid "(default for format)"
-msgstr "(Voreinstellung für Format)"
-
-#: export_video_dialog.cc:242 export_video_dialog.cc:255
-#: export_video_dialog.cc:821 export_video_dialog.cc:830
-msgid "(default)"
-msgstr "(Voreinstellung)"
-
-#: export_video_dialog.cc:256 export_video_dialog.cc:824
-msgid "(retain)"
-msgstr "(beibehalten)"
-
-#: export_video_dialog.cc:348
-msgid "from 00:00:00:00 to the video's end"
-msgstr "von 00:00:00:00 bis Videoende"
-
-#: export_video_dialog.cc:350
-msgid "from the video's start to the video's end"
-msgstr "von Videostart bis Videoende"
-
-#: export_video_dialog.cc:353
-msgid "Selected range"
-msgstr "Ausgewählter Bereich"
-
-#: export_video_dialog.cc:573
-msgid "Normalizing audio"
-msgstr "Audio normalisieren"
-
-#: export_video_dialog.cc:577
-msgid "Exporting audio"
-msgstr "Exportiere Audio"
-
-#: export_video_dialog.cc:632
-msgid "Exporting Audio..."
-msgstr "Exportiere Audio..."
-
-#: export_video_dialog.cc:689
-msgid ""
-"Export Video: Cannot query duration of video-file, using duration from "
-"timeline instead."
-msgstr ""
-"Exportiere Video: Kann die Dauer der Videodatei nicht eruieren, verwende "
-"statt dessen die Dauer aus der Zeitleiste."
-
-#: export_video_dialog.cc:719
-msgid "Export Video: export-range does not include video."
-msgstr "Video Export: Exportbereich enthält kein Video."
-
-#: export_video_dialog.cc:732
-msgid "Export Video: No Master Out Ports to Connect for Audio Export"
-msgstr ""
-"Exportiere Video: Keine Master-Ausgangsports zum Verbinden für den "
-"Audioexport"
-
-#: export_video_dialog.cc:774
-msgid "Encoding Video..."
-msgstr "Enkodiere Video..."
-
-#: export_video_dialog.cc:794
-msgid "Export Video: Video input file cannot be read."
-msgstr "Exportiere Video: Die Videoquelldatei kann nicht gelesen werden."
-
-#: export_video_dialog.cc:900
-msgid "Encoding Video.. Pass 1/2"
-msgstr "Kodiere Video.. Durchgang 1/2"
-
-#: export_video_dialog.cc:912
-msgid "Encoding Video.. Pass 2/2"
-msgstr "Kodiere Video.. Durchgang 2/2"
-
-#: export_video_dialog.cc:1015
-msgid "Transcoding failed."
-msgstr "Transkodieren fehlgeschlagen."
-
-#: export_video_dialog.cc:1251 export_video_dialog.cc:1271
-msgid "Save Exported Video File"
-msgstr "Sichere exportierte Videodatei"
-
-#: export_video_infobox.cc:33
-msgid "Video Export Info"
-msgstr "Video-Exportinformationen"
-
-#: export_video_infobox.cc:34
-msgid "Do Not Show This Dialog Again (Reset in Edit > Preferences > Video)."
-msgstr ""
-"Diesen Dialog nicht wieder anzeigen (kann in Bearbeiten > Globale "
-"Einstellungen > Video zurückgesetzt werden)."
-
-#: export_video_infobox.cc:46
-msgid "<b>Video Export Info</b>"
-msgstr "<b>Videoexport Informationen</b>"
-
-#: export_video_infobox.cc:51
-msgid ""
-"Video encoding is a non-trivial task with many details.\n"
-"\n"
-"Please see the manual at %1/video-timeline/operations/#export.\n"
-"\n"
-"Open Manual in Browser? "
-msgstr ""
-"Das Kodieren von Video ist eine komplexe Aufgabe mit vielen Details.\n"
-"\n"
-"Lesen Sie bitte darüber im Handbuch unter %1/video-timeline/operations/"
-"#export nach.\n"
-"\n"
-"Handbuch im Browser öffnen? "
-
-#~ msgid "Copyright (C) 1999-2012 Paul Davis"
-#~ msgstr "Copyright (C) 1999-2012 Paul Davis"
-
-#~ msgid "tracks"
-#~ msgstr "Spuren"
-
-#~ msgid "busses"
-#~ msgstr "Audio-Busse"
-
-#~ msgid ""
-#~ "Do you really want to remove track \"%1\" ?\n"
-#~ "\n"
-#~ "You may also lose the playlist used by this track.\n"
-#~ "\n"
-#~ "(This action cannot be undone, and the session file will be overwritten)"
-#~ msgstr ""
-#~ "Wollen Sie wirklich die Spur \"%1\" löschen?\n"
-#~ "\n"
-#~ "Sie werden auch die Wiedergabelisten, die diese Spur benutzt, verlieren.\n"
-#~ "\n"
-#~ "(Dies kann nicht rückgängig gemacht werden!)"
-
-#~ msgid ""
-#~ "Do you really want to remove bus \"%1\" ?\n"
-#~ "\n"
-#~ "(This action cannot be undone, and the session file will be overwritten)"
-#~ msgstr ""
-#~ "Wollen Sie den Bus \"%1\" wirklich löschen?\n"
-#~ "(Dies kann nicht rückgängig gemacht werden!)"
-
-#~ msgid "Remove track"
-#~ msgstr "Spur löschen"
-
-#~ msgid "Remove bus"
-#~ msgstr "Bus löschen"
+# German translations for gtk-ardour
+# Copyright (C) 2003 Paul Davis
+# This file is distributed under the same license as the gtk-ardour package.
+#
+#
+# Karsten Petersen <kapet at kapet.de>, 2003.
+# Edgar Aichinger <edgar.aichinger at aon.at>, 2008, 2012, 2013, 2014, 2015.
+# Benjamin Scherrer <benjamin at wagnerbrutal.de>, 2015.
+msgid ""
+msgstr ""
+"Project-Id-Version: gtk-ardour 0.347.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-08-13 10:38+0200\n"
+"PO-Revision-Date: 2015-08-13 11:53+0200\n"
+"Last-Translator: Edgar Aichinger <edogawa at aon.at>\n"
+"Language-Team: German <ardour-dev at lists.ardour.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.5\n"
+"X-Poedit-Basepath: ../../\n"
+"X-Poedit-SearchPath-0: gtk2_ardour\n"
+
+#: about.cc:125
+msgid "Brian Ahr"
+msgstr "Brian Ahr"
+
+#: about.cc:126
+msgid "John Anderson"
+msgstr "John Anderson"
+
+#: about.cc:127
+msgid "Marcus Andersson"
+msgstr "Marcus Andersson"
+
+#: about.cc:128
+msgid "Nedko Arnaudov"
+msgstr "Nedko Arnaudov"
+
+#: about.cc:129
+msgid "Hans Baier"
+msgstr "Hans Baier"
+
+#: about.cc:130
+msgid "Ben Bell"
+msgstr "Ben Bell"
+
+#: about.cc:131
+msgid "Sakari Bergen"
+msgstr "Sakari Bergen"
+
+#: about.cc:132
+msgid "Christian Borss"
+msgstr "Christian Borss"
+
+#: about.cc:133
+msgid "Chris Cannam"
+msgstr "Chris Cannam"
+
+#: about.cc:134
+msgid "Jeremy Carter"
+msgstr "Jeremy Carter"
+
+#: about.cc:135
+msgid "Jesse Chappell"
+msgstr "Jesse Chappell"
+
+#: about.cc:136
+msgid "Thomas Charbonnel"
+msgstr "Thomas Charbonnel"
+
+#: about.cc:137
+msgid "Sam Chessman"
+msgstr "Sam Chessman"
+
+#: about.cc:138
+msgid "André Colomb"
+msgstr "André Colomb"
+
+#: about.cc:139
+msgid "Paul Davis"
+msgstr "Paul Davis"
+
+#: about.cc:140
+msgid "Gerard van Dongen"
+msgstr "Gerard van Dongen"
+
+#: about.cc:141
+msgid "John Emmas"
+msgstr "John Emmas"
+
+#: about.cc:142
+msgid "Colin Fletcher"
+msgstr "Colin Fletcher"
+
+#: about.cc:143
+msgid "Dave Flick"
+msgstr "Dave Flick"
+
+#: about.cc:144
+msgid "Hans Fugal"
+msgstr "Hans Fugal"
+
+#: about.cc:145
+msgid "Robin Gareus"
+msgstr "Robin Gareus"
+
+#: about.cc:146
+msgid "Christopher George"
+msgstr "Christopher George"
+
+#: about.cc:147
+msgid "Chris Goddard"
+msgstr "Chris Goddard"
+
+#: about.cc:148
+msgid "J. Abelardo Gutierrez"
+msgstr "J. Abelardo Gutierrez"
+
+#: about.cc:149
+msgid "Jeremy Hall"
+msgstr "Jeremy Hall"
+
+#: about.cc:150
+msgid "Audun Halland"
+msgstr "Audun Halland"
+
+#: about.cc:151
+msgid "David Halter"
+msgstr "David Halter"
+
+#: about.cc:152
+msgid "Steve Harris"
+msgstr "Steve Harris"
+
+#: about.cc:153
+msgid "Melvin Ray Herr"
+msgstr "Melvin Ray Herr"
+
+#: about.cc:154
+msgid "Carl Hetherington"
+msgstr "Carl Hetherington"
+
+#: about.cc:155
+msgid "Rob Holland"
+msgstr "Rob Holland"
+
+#: about.cc:156
+msgid "Robert Jordens"
+msgstr "Robert Jordens"
+
+#: about.cc:157
+msgid "Stefan Kersten"
+msgstr "Stefan Kersten"
+
+#: about.cc:158
+msgid "Armand Klenk"
+msgstr "Armand Klenk"
+
+#: about.cc:159
+msgid "Julien de Kozak"
+msgstr "Julien de Kozak"
+
+#: about.cc:160
+msgid "Matt Krai"
+msgstr "Matt Krai"
+
+#: about.cc:161
+msgid "Georg Krause"
+msgstr "Georg Krause"
+
+#: about.cc:162
+msgid "Nick Lanham"
+msgstr "Nick Lanham"
+
+#: about.cc:163
+msgid "Colin Law"
+msgstr "Colin Law"
+
+#: about.cc:164
+msgid "Joshua Leach"
+msgstr "Joshua Leach"
+
+#: about.cc:165
+msgid "Ben Loftis"
+msgstr "Ben Loftis"
+
+#: about.cc:166
+msgid "Nick Mainsbridge"
+msgstr "Nick Mainsbridge"
+
+#: about.cc:167
+msgid "Tim Mayberry"
+msgstr "Tim Mayberry"
+
+#: about.cc:168
+msgid "Doug Mclain"
+msgstr "Doug Mclain"
+
+#: about.cc:169
+msgid "Todd Naugle"
+msgstr "Todd Naugle"
+
+#: about.cc:170
+msgid "Jack O'Quin"
+msgstr "Jack O'Quin"
+
+#: about.cc:171
+msgid "Nimal Ratnayake"
+msgstr "Nimal Ratnayake"
+
+#: about.cc:172
+msgid "David Robillard"
+msgstr "David Robillard"
+
+#: about.cc:173
+msgid "Taybin Rutkin"
+msgstr "Taybin Rutkin"
+
+#: about.cc:174
+msgid "Andreas Ruge"
+msgstr "Andreas Ruge"
+
+#: about.cc:175
+msgid "Sampo Savolainen"
+msgstr "Sampo Savolainen"
+
+#: about.cc:176
+msgid "Rodrigo Severo"
+msgstr "Rodrigo Severo"
+
+#: about.cc:177
+msgid "Per Sigmond"
+msgstr "Per Sigmond"
+
+#: about.cc:178
+msgid "Lincoln Spiteri"
+msgstr "Lincoln Spiteri"
+
+#: about.cc:179
+msgid "Mike Start"
+msgstr "Mike Start"
+
+#: about.cc:180
+msgid "Mark Stewart"
+msgstr "Mark Stewart"
+
+#: about.cc:181
+msgid "Roland Stigge"
+msgstr "Roland Stigge"
+
+#: about.cc:182
+msgid "Petter Sundlöf"
+msgstr "Petter Sundlöf"
+
+#: about.cc:183
+msgid "Mike Täht"
+msgstr "Mike Täht"
+
+#: about.cc:184
+msgid "Roy Vegard"
+msgstr "Roy Vegard"
+
+#: about.cc:185
+msgid "Thorsten Wilms"
+msgstr "Thorsten Wilms"
+
+#: about.cc:186
+msgid "Damien Zammit"
+msgstr "Damien Zammit"
+
+#: about.cc:187
+msgid "Grygorii Zharun"
+msgstr "Grygorii Zharun"
+
+#: about.cc:192
+msgid ""
+"French:\n"
+"\tAlain Fréhel <alain.frehel at free.fr>\n"
+"\tChristophe Combelles <ccomb at free.fr>\n"
+"\tMartin Blanchard\n"
+"\tRomain Arnaud <roming22 at gmail.com>\n"
+msgstr ""
+"Französisch:\n"
+"\tAlain Fréhel <alain.frehel at free.fr>\n"
+"\tChristophe Combelles <ccomb at free.fr>\n"
+"\tMartin Blanchard\n"
+"\tRomain Arnaud <roming22 at gmail.com>\n"
+
+#: about.cc:193
+msgid ""
+"German:\n"
+"\tKarsten Petersen <kapet at kapet.de>\n"
+"\tSebastian Arnold <mail at sebastian-arnold.net>\n"
+"\tRobert Schwede <schwede at ironshark.com>\n"
+"\tBenjamin Scherrer <realhangman at web.de>\n"
+"\tEdgar Aichinger <edogawa at aon.at>\n"
+"\tRichard Oax <richard at pagliacciempire.de>\n"
+"\tRobin Gloster <robin at loc-com.de>\n"
+msgstr ""
+"Deutsch:\n"
+"\tKarsten Petersen <kapet at kapet.de>\n"
+"\tSebastian Arnold <mail at sebastian-arnold.net>\n"
+"\tRobert Schwede <schwede at ironshark.com>\n"
+"\tBenjamin Scherrer <realhangman at web.de>\n"
+"\tEdgar Aichinger <edogawa at aon.at>\n"
+"\tRichard Oax <richard at pagliacciempire.de>\n"
+"\tRobin Gloster <robin at loc-com.de>\n"
+
+#: about.cc:200
+msgid ""
+"Italian:\n"
+"\tFilippo Pappalardo <filippo at email.it>\n"
+"\tRaffaele Morelli <raffaele.morelli at gmail.com>\n"
+msgstr ""
+"Italienisch:\n"
+"\tFilippo Pappalardo <filippo at email.it>\n"
+"\tRaffaele Morelli <raffaele.morelli at gmail.com>\n"
+
+#: about.cc:201
+msgid ""
+"Portuguese:\n"
+"\tRui Nuno Capela <rncbc at rncbc.org>\n"
+msgstr ""
+"Portugiesisch:\n"
+"\tRui Nuno Capela <rncbc at rncbc.org>\n"
+
+#: about.cc:202
+msgid ""
+"Brazilian Portuguese:\n"
+"\tAlexander da Franca Fernandes <alexander at nautae.eti.br>\n"
+"\tChris Ross <chris at tebibyte.org>\n"
+msgstr ""
+"Brasilianisches Portugiesisch:\n"
+"\tAlexander da Franca Fernandes <alexander at nautae.eti.br>\n"
+"\tChris Ross <chris at tebibyte.org>\n"
+
+#: about.cc:204
+msgid ""
+"Spanish:\n"
+"\t Alex Krohn <alexkrohn at fastmail.fm>\n"
+"\tPablo Fernández <pablo.fbus at gmail.com>\n"
+msgstr ""
+"Spanisch:\n"
+"\t Alex Krohn <alexkrohn at fastmail.fm>\n"
+"\tPablo Fernández <pablo.fbus at gmail.com>\n"
+
+#: about.cc:205
+msgid ""
+"Russian:\n"
+"\t Igor Blinov <pitstop at nm.ru>\n"
+"\tAlexandre Prokoudine <alexandre.prokoudine at gmail.com>\n"
+msgstr ""
+"Russisch:\n"
+"\t Igor Blinov <pitstop at nm.ru>\n"
+"\tAlexandre Prokoudine <alexandre.prokoudine at gmail.com>\n"
+
+#: about.cc:207
+msgid ""
+"Greek:\n"
+"\t Klearchos Gourgourinis <muadib at in.gr>\n"
+msgstr ""
+"Griechisch:\n"
+"\t Klearchos Gourgourinis <muadib at in.gr>\n"
+
+#: about.cc:208
+msgid ""
+"Swedish:\n"
+"\t Petter Sundlöf <petter.sundlof at gmail.com>\n"
+msgstr ""
+"Schwedisch:\n"
+"\t Petter Sundlöf <petter.sundlof at gmail.com>\n"
+
+#: about.cc:209
+msgid ""
+"Polish:\n"
+"\t Piotr Zaryk <pzaryk at gmail.com>\n"
+msgstr ""
+"Polnisch:\n"
+"\t Piotr Zaryk <pzaryk at gmail.com>\n"
+
+#: about.cc:210
+msgid ""
+"Czech:\n"
+"\t Pavel Fric <pavelfric at seznam.cz>\n"
+msgstr ""
+"Tschechisch:\n"
+"\t Pavel Fric <pavelfric at seznam.cz>\n"
+
+#: about.cc:211
+msgid ""
+"Norwegian:\n"
+"\t Eivind Ødegård\n"
+msgstr ""
+"Norwegisch:\n"
+"\t Eivind Ødegård\n"
+
+#: about.cc:212
+msgid ""
+"Chinese:\n"
+"\t Rui-huai Zhang <zrhzrh at mail.ustc.edu.cn>\n"
+msgstr ""
+"Chinesisch:\n"
+"\t Rui-huai Zhang <zrhzrh at mail.ustc.edu.cn>\n"
+
+#: about.cc:592
+msgid "Copyright (C) 1999-2015 Paul Davis\n"
+msgstr "Copyright (C) 1999-2015 Paul Davis\n"
+
+#: about.cc:596
+msgid "http://ardour.org/"
+msgstr "http://ardour.org/"
+
+#: about.cc:597
+msgid ""
+"%1%2\n"
+"(built from revision %3)"
+msgstr ""
+"%1%2\n"
+"(kompiliert aus Revision %3)"
+
+#: about.cc:601
+msgid "Config"
+msgstr "Konfiguration"
+
+#: actions.cc:85
+msgid "Loading menus from %1"
+msgstr "Lade Menüs von %1"
+
+#: actions.cc:88 actions.cc:89
+msgid "badly formatted menu definition file: %1"
+msgstr "schlecht formatierte Menüdefinitions-Datei: %1"
+
+#: actions.cc:91
+msgid "%1 menu definition file not found"
+msgstr "Konnte die %1 Menü-Definitionsdatei nicht finden"
+
+#: actions.cc:95 actions.cc:96
+msgid "%1 will not work without a valid menu definition file"
+msgstr "%1 wird ohne gültige Menüdefinitions-Datei nicht funktionieren"
+
+#: add_route_dialog.cc:54 route_params_ui.cc:524
+msgid "Add Track or Bus"
+msgstr "Spur/Bus hinzufügen"
+
+#: add_route_dialog.cc:57
+msgid "Configuration:"
+msgstr "Kanaleinstellungen:"
+
+#: add_route_dialog.cc:58
+msgid "Record Mode:"
+msgstr "Aufnahmemodus:"
+
+#: add_route_dialog.cc:59
+msgid "Instrument:"
+msgstr "Instrument:"
+
+#: add_route_dialog.cc:77
+msgid "Audio Tracks"
+msgstr "Audiospuren"
+
+#: add_route_dialog.cc:78 add_route_dialog.cc:209
+msgid "MIDI Tracks"
+msgstr "Midispuren"
+
+#: add_route_dialog.cc:79 add_route_dialog.cc:211
+msgid "Audio+MIDI Tracks"
+msgstr "Audio+MIDI-Spuren"
+
+#: add_route_dialog.cc:80 add_route_dialog.cc:207
+msgid "Busses"
+msgstr "Audiobusse"
+
+#: add_route_dialog.cc:83 add_route_dialog.cc:559
+msgid "First"
+msgstr "Zuerst"
+
+#: add_route_dialog.cc:84 add_route_dialog.cc:563
+msgid "Before Selection"
+msgstr "Vor Auswahl"
+
+#: add_route_dialog.cc:85 add_route_dialog.cc:561
+msgid "After Selection"
+msgstr "Nach Auswahl"
+
+#: add_route_dialog.cc:86
+msgid "Last"
+msgstr "Zuletzt"
+
+#: add_route_dialog.cc:103
+msgid "Add:"
+msgstr "Erstelle:"
+
+#: add_route_dialog.cc:116 time_fx_dialog.cc:91 add_video_dialog.cc:135
+#: video_server_dialog.cc:121
+msgid "<b>Options</b>"
+msgstr "<b>Optionen</b>"
+
+#: add_route_dialog.cc:126 bundle_manager.cc:193 region_editor.cc:50
+#: route_group_dialog.cc:71
+msgid "Name:"
+msgstr "Name:"
+
+#: add_route_dialog.cc:156
+msgid "Group:"
+msgstr "Gruppe:"
+
+#: add_route_dialog.cc:162
+msgid "Insert:"
+msgstr "Insert:"
+
+#: add_route_dialog.cc:223 add_route_dialog.cc:232 add_route_dialog.cc:306
+#: ardour_ui_ed.cc:548 engine_dialog.cc:240 rc_option_editor.cc:2279
+#: rc_option_editor.cc:2281 rc_option_editor.cc:2283 rc_option_editor.cc:2301
+#: rc_option_editor.cc:2303 rc_option_editor.cc:2311 rc_option_editor.cc:2313
+#: rc_option_editor.cc:2331 rc_option_editor.cc:2344 rc_option_editor.cc:2346
+#: rc_option_editor.cc:2348 rc_option_editor.cc:2393 rc_option_editor.cc:2395
+#: rc_option_editor.cc:2397 rc_option_editor.cc:2405 rc_option_editor.cc:2413
+#: rc_option_editor.cc:2415 rc_option_editor.cc:2423
+msgid "Audio"
+msgstr "Audio"
+
+#: add_route_dialog.cc:224 add_route_dialog.cc:235 add_route_dialog.cc:307
+#: editor_actions.cc:109 engine_dialog.cc:242 missing_file_dialog.cc:56
+#: rc_option_editor.cc:2558 rc_option_editor.cc:2568 rc_option_editor.cc:2576
+#: rc_option_editor.cc:2584 rc_option_editor.cc:2593 rc_option_editor.cc:2601
+#: rc_option_editor.cc:2609 rc_option_editor.cc:2617 rc_option_editor.cc:2626
+#: rc_option_editor.cc:2635 rc_option_editor.cc:2644 rc_option_editor.cc:2652
+#: rc_option_editor.cc:2660 rc_option_editor.cc:2668 rc_option_editor.cc:2691
+msgid "MIDI"
+msgstr "MIDI"
+
+#: add_route_dialog.cc:225 add_route_dialog.cc:238 add_route_dialog.cc:308
+msgid "Audio+MIDI"
+msgstr "Audio+MIDI"
+
+#: add_route_dialog.cc:226 add_route_dialog.cc:241 add_route_dialog.cc:309
+msgid "Bus"
+msgstr "Bus"
+
+#: add_route_dialog.cc:268
+msgid ""
+"Audio+MIDI tracks are intended for use <b>ONLY</b> with plugins that use "
+"both audio and MIDI input data\n"
+"\n"
+"If you do not plan to use such a plugin, then use a normal audio or MIDI "
+"track instead."
+msgstr ""
+"Audio+MIDI Spuren sind <b>NUR</b> für den Gebrauch mit Plugins gedacht, die "
+"sowohl Audio als auch MIDI Eingangsdaten benutzen\n"
+"\n"
+"Falls Sie nicht vorhaben, so ein Plugin zu benutzen, verwenden Sie "
+"stattdessen eine normale Audio- oder MIDI-Spur"
+
+#: add_route_dialog.cc:327 add_route_dialog.cc:346 editor_actions.cc:431
+#: editor_rulers.cc:251 time_axis_view.cc:1385
+msgid "Normal"
+msgstr "Normal"
+
+#: add_route_dialog.cc:330 add_route_dialog.cc:348
+msgid "Non Layered"
+msgstr "Non Layered"
+
+#: add_route_dialog.cc:331 add_route_dialog.cc:350
+msgid "Tape"
+msgstr "Band"
+
+#: add_route_dialog.cc:431 monitor_section.cc:296
+msgid "Mono"
+msgstr "Mono"
+
+#: add_route_dialog.cc:435
+msgid "Stereo"
+msgstr "Stereo"
+
+#: add_route_dialog.cc:459
+msgid "3 Channel"
+msgstr "3 Kanäle"
+
+#: add_route_dialog.cc:463
+msgid "4 Channel"
+msgstr "4 Kanäle"
+
+#: add_route_dialog.cc:467
+msgid "5 Channel"
+msgstr "5 Kanäle"
+
+#: add_route_dialog.cc:471
+msgid "6 Channel"
+msgstr "6 Kanäle"
+
+#: add_route_dialog.cc:475
+msgid "8 Channel"
+msgstr "8 Kanäle"
+
+#: add_route_dialog.cc:479
+msgid "12 Channel"
+msgstr "12 Kanäle"
+
+#: add_route_dialog.cc:483 mixer_strip.cc:1898 mixer_strip.cc:2306
+msgid "Custom"
+msgstr "Benutzerdefiniert"
+
+#: add_route_dialog.cc:516 add_route_dialog.cc:532 route_group_menu.cc:81
+msgid "New Group..."
+msgstr "Neue Gruppe..."
+
+#: add_route_dialog.cc:520 route_group_menu.cc:85
+msgid "No Group"
+msgstr "Keine Gruppe"
+
+#: ambiguous_file_dialog.cc:30
+msgid "Ambiguous File"
+msgstr "Mehrmals gefundene Datei"
+
+#: ambiguous_file_dialog.cc:35
+msgid ""
+"%1 has found the file <i>%2</i> in the following places:\n"
+"\n"
+msgstr ""
+"%1 hat die Datei <i>%2</i> an den folgenden Orten gefunden:\n"
+"\n"
+
+#: ambiguous_file_dialog.cc:44
+msgid ""
+"\n"
+"\n"
+"Please select the path that you want to get the file from."
+msgstr ""
+"\n"
+"\n"
+"Bitte wähle den Pfad der gewünschten Datei aus."
+
+#: ambiguous_file_dialog.cc:46 missing_file_dialog.cc:46
+msgid "Done"
+msgstr "Fertig"
+
+#: analysis_window.cc:46
+msgid "Signal source"
+msgstr "Signalquelle"
+
+#: analysis_window.cc:47
+msgid "Selected ranges"
+msgstr "Ausgewählte Bereiche"
+
+#: analysis_window.cc:48
+msgid "Selected regions"
+msgstr "Ausgewählte Regionen"
+
+#: analysis_window.cc:50
+msgid "Display model"
+msgstr "Anzeigetyp"
+
+#: analysis_window.cc:51
+msgid "Composite graphs for each track"
+msgstr "Graphen für jede Spur einzeln"
+
+#: analysis_window.cc:52
+msgid "Composite graph of all tracks"
+msgstr "Graphen aller Spuren zusammenfassen"
+
+#: analysis_window.cc:54
+msgid "Show frequency power range"
+msgstr "Leistungsspektrum anzeigen"
+
+#: analysis_window.cc:55
+msgid "Normalize values"
+msgstr "Normalisieren"
+
+#: analysis_window.cc:59
+msgid "FFT analysis window"
+msgstr "FFT-Analysefenster"
+
+#: analysis_window.cc:60 editor.cc:1835
+msgid "Spectral Analysis"
+msgstr "FFT-Analyse"
+
+#: analysis_window.cc:67 editor_actions.cc:142 session_metadata_dialog.cc:667
+msgid "Track"
+msgstr "Spur"
+
+#: analysis_window.cc:68 editor_actions.cc:657 mixer_ui.cc:131
+#: mixer_ui.cc:1874
+msgid "Show"
+msgstr "Anzeigen"
+
+#: analysis_window.cc:135
+msgid "Re-analyze data"
+msgstr "Daten erneut analysieren"
+
+#: ardour_button.cc:820
+msgid "button cannot watch state of non-existing Controllable\n"
+msgstr ""
+"Schaltfläche kann den Status des nichtexistenten Kontrollzieles nicht "
+"verfolgen\n"
+
+#: ardour_button.cc:1088
+msgid "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+msgstr "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+
+#: ardour_ui.cc:172
+msgid ""
+"%1 %2.x has discovered configuration files from %1 %3.x.\n"
+"\n"
+"Would you like these files to be copied and used for %1 %2.x?\n"
+"\n"
+"(This will require you to restart %1.)"
+msgstr ""
+"%1 %2.x hat Konfigurationsdateien von %1 %3.x gefunden.\n"
+"\n"
+"Möchten Sie diese Dateien zur Benutzung von %1 %2.x kopieren?\n"
+"\n"
+"(Dies erfordert einen Neustart von %1.)"
+
+#: ardour_ui.cc:252 editor_actions.cc:651 region_editor.cc:51
+msgid "Audition"
+msgstr "Vorhören"
+
+#: ardour_ui.cc:253 editor_actions.cc:136 mixer_strip.cc:2078
+#: monitor_section.cc:376 rc_option_editor.cc:2433 route_time_axis.cc:254
+#: route_time_axis.cc:2739
+msgid "Solo"
+msgstr "Solo"
+
+#: ardour_ui.cc:254 rc_option_editor.cc:1192
+msgid "Feedback"
+msgstr "Feedback"
+
+#: ardour_ui.cc:265 speaker_dialog.cc:36
+msgid "Speaker Configuration"
+msgstr "Lautsprechereinstellung"
+
+#: ardour_ui.cc:266 keyeditor.cc:53
+msgid "Key Bindings"
+msgstr "Tastaturkürzel"
+
+#: ardour_ui.cc:267
+msgid "Preferences"
+msgstr "Globale Einstellungen"
+
+#: ardour_ui.cc:268 ardour_ui.cc:275
+msgid "Add Tracks/Busses"
+msgstr "Spuren/Busse hinzufügen"
+
+#: ardour_ui.cc:269
+msgid "About"
+msgstr "Über..."
+
+#: ardour_ui.cc:270 location_ui.cc:1141 session_option_editor.cc:189
+#: session_option_editor.cc:195 session_option_editor.cc:202
+msgid "Locations"
+msgstr "Dateiorte"
+
+#: ardour_ui.cc:271 route_params_ui.cc:59 route_params_ui.cc:630
+msgid "Tracks and Busses"
+msgstr "Spuren/Busse"
+
+#: ardour_ui.cc:272 engine_dialog.cc:74
+msgid "Audio/MIDI Setup"
+msgstr "Audio/MIDI Einstellungen"
+
+#: ardour_ui.cc:273
+msgid "Video Export Dialog"
+msgstr "Videoexport-Dialog"
+
+#: ardour_ui.cc:274
+msgid "Properties"
+msgstr "Projekteinstellungen"
+
+#: ardour_ui.cc:276 bundle_manager.cc:264
+msgid "Bundle Manager"
+msgstr "Bundle Manager"
+
+#: ardour_ui.cc:277 big_clock_window.cc:37
+msgid "Big Clock"
+msgstr "Große Zeitanzeige"
+
+#: ardour_ui.cc:278
+msgid "Audio Connections"
+msgstr "Audio-Verbindungen"
+
+#: ardour_ui.cc:279
+msgid "MIDI Connections"
+msgstr "MIDI-Verbindungen"
+
+#: ardour_ui.cc:293
+msgid "Your configuration files were copied. You can now restart %1."
+msgstr ""
+"Ihre Konfigurationsdateien wurden kopiert. Sie können jetzt %1 neu starten."
+
+#: ardour_ui.cc:519
+msgid ""
+"The audio backend was shutdown because:\n"
+"\n"
+"%1"
+msgstr ""
+"Das Audiobackend wurde aus folgendem Grund beendet:\n"
+"\n"
+"%1"
+
+#: ardour_ui.cc:521
+msgid ""
+"The audio backend has either been shutdown or it\n"
+"disconnected %1 because %1\n"
+"was not fast enough. Try to restart\n"
+"the audio backend and save the session."
+msgstr ""
+"Das Audiobackend wurde entweder beendet oder hat\n"
+"%1 getrennt, weil %1 nicht schnell genug\n"
+"war. Sie sollten versuchen, das Audiobackend \n"
+"neu zu starten und das Projekt zu speichern."
+
+#: ardour_ui.cc:545
+msgid ""
+"Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. "
+"Please see the log window for further details."
+msgstr ""
+"Audio Unit Plugin Scan fehlgeschlagen. Automatische AU Scans wurden "
+"deaktiviert. Weitere Einzelheiten finden Sie im Logfenster."
+
+#: ardour_ui.cc:546
+msgid "Audio Unit Plugin Scan Failed:"
+msgstr "Audio Unit Plugin Scan fehlgeschlagen:"
+
+#: ardour_ui.cc:877
+msgid "NSM server did not announce itself"
+msgstr "Der NSM Server hat sich nicht angemeldet"
+
+#: ardour_ui.cc:890
+msgid "NSM: no client ID provided"
+msgstr "NSM: keine Client-ID verfügbar"
+
+#: ardour_ui.cc:897
+msgid "NSM: no session created"
+msgstr "NSM: kein Projekt erzeugt"
+
+#: ardour_ui.cc:920
+msgid "NSM: initialization failed"
+msgstr "NSM: Initialisierung gescheitert"
+
+#: ardour_ui.cc:952
+msgid "Free/Demo Version Warning"
+msgstr "Demoversionswarnung"
+
+#: ardour_ui.cc:954
+msgid "Subscribe and support development of %1"
+msgstr "%1 abonnieren und die Entwicklung unterstützen"
+
+#: ardour_ui.cc:955
+msgid "Don't warn me about this again"
+msgstr "Nicht noch einmal warnen"
+
+#: ardour_ui.cc:957
+msgid ""
+"<span weight=\"bold\" size=\"large\">%1</span>\n"
+"\n"
+"<b>%2</b>\n"
+"\n"
+"<i>%3</i>\n"
+"\n"
+"%4"
+msgstr ""
+"<span weight=\"bold\" size=\"large\">%1</span>\n"
+"\n"
+"<b>%2</b>\n"
+"\n"
+"<i>%3</i>\n"
+"\n"
+"%4"
+
+#: ardour_ui.cc:958
+msgid "This is a free/demo version of %1"
+msgstr "Dies ist eine freie Demoversion von %1"
+
+#: ardour_ui.cc:959
+msgid "It will not restore OR save any plugin settings"
+msgstr "Sie kann keine Plugin-Einstellungen speichern oder laden"
+
+#: ardour_ui.cc:960
+msgid ""
+"If you load an existing session with plugin settings\n"
+"they will not be used and will be lost."
+msgstr ""
+"Wenn Sie ein existierendes Projekt mit Plugin-Einstellungen laden, werden "
+"diese nicht benutzt und beim Speichern verloren gehen."
+
+#: ardour_ui.cc:962 plugin_ui.cc:579
+msgid ""
+"To get full access to updates without this limitation\n"
+"consider becoming a subscriber for a low cost every month."
+msgstr ""
+"Um vollen Zugriff auf Updates ohne diese Einschränkung zu erhalten, erwägen "
+"Sie, uns durch ein Abonnement mit einem geringen monatlichen Betrag zu "
+"unterstützen."
+
+#: ardour_ui.cc:972
+msgid "Quit now"
+msgstr "Jetzt beenden"
+
+#: ardour_ui.cc:973
+msgid "Continue using %1"
+msgstr "%1 weiterhin benutzen"
+
+#: ardour_ui.cc:1006 startup.cc:346
+msgid "%1 is ready for use"
+msgstr "%1 ist nun bereit"
+
+#: ardour_ui.cc:1048
+msgid ""
+"WARNING: Your system has a limit for maximum amount of locked memory. This "
+"might cause %1 to run out of memory before your system runs out of memory. \n"
+"\n"
+"You can view the memory limit with 'ulimit -l', and it is normally "
+"controlled by %2"
+msgstr ""
+"WARNUNG: Ihr System hat eine Begrenzung für die Reservierung von "
+"Arbeitsspeicher eingestellt. Dies könnte dazu führen, dass %1 der Speicher "
+"ausgeht bevor die Systembegrenzung erreicht ist.\n"
+"\n"
+"Sie können die Speicherbegrenzung mit 'ulimit -l' einsehen und normalerweise "
+"in %2 verändern."
+
+#: ardour_ui.cc:1065
+msgid "Do not show this window again"
+msgstr "Diese Meldung nicht erneut anzeigen"
+
+#: ardour_ui.cc:1109
+msgid "Don't quit"
+msgstr "Abbrechen"
+
+#: ardour_ui.cc:1110
+msgid "Just quit"
+msgstr "Beenden ohne zu speichern"
+
+#: ardour_ui.cc:1111 ardour_ui.cc:4903
+msgid "Save and quit"
+msgstr "Speichern und beenden"
+
+#: ardour_ui.cc:1121
+msgid ""
+"%1 was unable to save your session.\n"
+"\n"
+"If you still wish to quit, please use the\n"
+"\n"
+"\"Just quit\" option."
+msgstr ""
+"%1 konnte das Projekt nicht speichern.\n"
+"
\n"
+"Wenn Sie trotzdem beenden wollen, wählen Sie bitte\n"
+"\n"
+"\"Trotzdem beenden\"."
+
+#: ardour_ui.cc:1171
+msgid "Unsaved Session"
+msgstr "Nicht gespeichertes Projekt"
+
+#: ardour_ui.cc:1192
+msgid ""
+"The session \"%1\"\n"
+"has not been saved.\n"
+"\n"
+"Any changes made this time\n"
+"will be lost unless you save it.\n"
+"\n"
+"What do you want to do?"
+msgstr ""
+"Das Projekt \"%1\"\n"
+"wurde nicht gespeichert.\n"
+"\n"
+"Alle Änderungen werden verloren\n"
+"gehen, wenn Sie es nicht speichern.\n"
+"\n"
+"Wie wollen Sie vorgehen?"
+
+#: ardour_ui.cc:1195
+msgid ""
+"The snapshot \"%1\"\n"
+"has not been saved.\n"
+"\n"
+"Any changes made this time\n"
+"will be lost unless you save it.\n"
+"\n"
+"What do you want to do?"
+msgstr ""
+"Der Schnappschuss \"%1\"\n"
+"wurde nicht gespeichert.\n"
+"\n"
+"Alle Änderungen werden verloren\n"
+"gehen, wenn Sie ihn nicht speichern.\n"
+"\n"
+"Wie wollen Sie vorgehen?"
+
+#: ardour_ui.cc:1209
+msgid "Prompter"
+msgstr "Frage"
+
+#: ardour_ui.cc:1322 ardour_ui.cc:1330
+msgid "Audio: <span foreground=\"red\">none</span>"
+msgstr "Audio: <span foreground=\"red\">Kein</span>"
+
+#: ardour_ui.cc:1334
+#, c-format
+msgid "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
+msgstr "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
+
+#: ardour_ui.cc:1338
+#, c-format
+msgid "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
+msgstr "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
+
+#: ardour_ui.cc:1356 export_video_dialog.cc:76
+msgid "File:"
+msgstr "Datei:"
+
+#: ardour_ui.cc:1360
+msgid "BWF"
+msgstr "BWF"
+
+#: ardour_ui.cc:1363
+msgid "WAV"
+msgstr "WAV"
+
+#: ardour_ui.cc:1366
+msgid "WAV64"
+msgstr "WAV64"
+
+#: ardour_ui.cc:1369 session_option_editor.cc:185
+msgid "CAF"
+msgstr "CAF"
+
+#: ardour_ui.cc:1372
+msgid "AIFF"
+msgstr "AIFF"
+
+#: ardour_ui.cc:1375
+msgid "iXML"
+msgstr "iXML"
+
+#: ardour_ui.cc:1378
+msgid "RF64"
+msgstr "RF64"
+
+#: ardour_ui.cc:1386
+msgid "32-float"
+msgstr "32-float"
+
+#: ardour_ui.cc:1389
+msgid "24-int"
+msgstr "24-int"
+
+#: ardour_ui.cc:1392
+msgid "16-int"
+msgstr "16-int"
+
+#: ardour_ui.cc:1413
+#, c-format
+msgid "X: <span foreground=\"%s\">>10K</span>"
+msgstr "X: <span foreground=\"%s\">>10K</span>"
+
+#: ardour_ui.cc:1415
+#, c-format
+msgid "X: <span foreground=\"%s\">%u</span>"
+msgstr "X: <span foreground=\"%s\">%u</span>"
+
+#: ardour_ui.cc:1418
+#, c-format
+msgid "X: <span foreground=\"%s\">?</span>"
+msgstr "X: <span foreground=\"%s\">?</span>"
+
+#: ardour_ui.cc:1421
+msgid "Audio dropouts. Shift+click to reset"
+msgstr "Audio Dropouts. Zum Zurücksetzen Shift+Klick"
+
+#: ardour_ui.cc:1434
+#, c-format
+msgid "DSP: <span foreground=\"%s\">%5.1f%%</span>"
+msgstr "DSP: <span foreground=\"%s\">%5.1f%%</span>"
+
+#: ardour_ui.cc:1453
+#, c-format
+msgid ""
+"Buffers: <span foreground=\"green\">p:</span><span foreground=\"%s\">"
+"%<PRIu32>%%</span> <span foreground=\"green\">c:</span><span foreground=\"%s"
+"\">%<PRIu32>%%</span>"
+msgstr ""
+"Puffer: <span foreground=\"green\">p:</span><span foreground=\"%s\">%<PRIu32>"
+"%%</span> <span foreground=\"green\">c:</span><span foreground=\"%s\">"
+"%<PRIu32>%%</span>"
+
+#: ardour_ui.cc:1494
+msgid "Disk: <span foreground=\"green\">Unknown</span>"
+msgstr "Disk: <span foreground=\"green\">Unbekannt</span>"
+
+#: ardour_ui.cc:1496
+msgid "Disk: <span foreground=\"green\">24hrs+</span>"
+msgstr "Disk: <span foreground=\"green\">24h+</span>"
+
+#: ardour_ui.cc:1514
+msgid "Disk: <span foreground=\"green\">>24 hrs</span>"
+msgstr "Disk: <span foreground=\"green\">>24 h</span>"
+
+#: ardour_ui.cc:1525
+#, c-format
+msgid "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"
+msgstr "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"
+
+#: ardour_ui.cc:1551
+#, c-format
+msgid "Timecode|TC: <span foreground=\"%s\">%s</span>"
+msgstr "TC: <span foreground=\"%s\">%s</span>"
+
+#: ardour_ui.cc:1672 ardour_ui.cc:1681 session_dialog.cc:318
+#: session_dialog.cc:323
+msgid "Recent Sessions"
+msgstr "Zuletzt verwendete Projekte"
+
+#: ardour_ui.cc:1760
+msgid ""
+"%1 is not connected to any audio backend.\n"
+"You cannot open or close sessions in this condition"
+msgstr ""
+"%1 ist derzeit mit keinem Audiobackend verbunden.\n"
+"Daher können keine Projekte geöffnet oder geschlossen werden."
+
+#: ardour_ui.cc:1784
+msgid "Open Session"
+msgstr "Projekt öffnen"
+
+#: ardour_ui.cc:1809 session_dialog.cc:349 session_import_dialog.cc:170
+#: session_metadata_dialog.cc:858
+msgid "%1 sessions"
+msgstr "%1 Projekte"
+
+#: ardour_ui.cc:1846
+msgid "You cannot add a track without a session already loaded."
+msgstr ""
+"Sie können erst Spuren oder Busse hinzufügen, wenn ein Projekt geladen wurde."
+
+#: ardour_ui.cc:1854
+msgid "could not create %1 new mixed track"
+msgid_plural "could not create %1 new mixed tracks"
+msgstr[0] "konnte %1 neue Audio+MIDI-Spur nicht erstellen"
+msgstr[1] "konnte %1 neue Audio+MIDI-Spuren nicht erstellen"
+
+#: ardour_ui.cc:1860 ardour_ui.cc:1921
+msgid ""
+"There are insufficient ports available\n"
+"to create a new track or bus.\n"
+"You should save %1, exit and\n"
+"restart with more ports."
+msgstr ""
+"Es sind nicht genügend Ports verfügbar,\n"
+"um neue Spuren oder Busse zu erzeugen.\n"
+"Sie sollten %1 sichern, beenden und\n"
+" mit mehr Ports neustarten."
+
+#: ardour_ui.cc:1895
+msgid "You cannot add a track or bus without a session already loaded."
+msgstr ""
+"Sie können erst Spuren oder Busse hinzufügen, wenn ein Projekt geladen wurde."
+
+#: ardour_ui.cc:1904
+msgid "could not create %1 new audio track"
+msgid_plural "could not create %1 new audio tracks"
+msgstr[0] "konnte %1 neue Audiospur nicht erstellen."
+msgstr[1] "konnte %1 neue Audiospuren nicht erstellen."
+
+#: ardour_ui.cc:1913
+msgid "could not create %1 new audio bus"
+msgid_plural "could not create %1 new audio busses"
+msgstr[0] "konnte %1 neuen Audiobus nicht erstellen"
+msgstr[1] "konnte %1 neue Audiobusse nicht erstellen"
+
+#: ardour_ui.cc:2066
+msgid ""
+"Please create one or more tracks before trying to record.\n"
+"You can do this with the \"Add Track or Bus\" option in the Session menu."
+msgstr ""
+"Bitte fügen Sie, bevor Sie aufnehmen, mindestens \n"
+"eine oder mehrere Spur hinzu. Die geht über \"Spur/Bus hinzufügen\"\n"
+"im Menüpunkt Projekt."
+
+#: ardour_ui.cc:2444
+#, c-format
+msgid "Copied %<PRId64> of %<PRId64>"
+msgstr "%<PRId64> von %<PRId64> kopiert"
+
+#: ardour_ui.cc:2498 save_as_dialog.cc:33
+msgid "Save As"
+msgstr "Speichern unter"
+
+#: ardour_ui.cc:2526
+msgid "Save As failed: %1"
+msgstr "Sichern unter fehlgeschlagen: %1"
+
+#: ardour_ui.cc:2548
+msgid "Save as..."
+msgstr "Speichern unter..."
+
+#: ardour_ui.cc:2549 ardour_ui.cc:2628
+msgid "New session name"
+msgstr "Neuer Projektname"
+
+#: ardour_ui.cc:2551
+msgid "Take Snapshot"
+msgstr "Schnappschuss machen"
+
+#: ardour_ui.cc:2552
+msgid "Name of new snapshot"
+msgstr "Name für neuen Schnappschuss"
+
+#: ardour_ui.cc:2577
+msgid ""
+"To ensure compatibility with various systems\n"
+"snapshot names may not contain a '%1' character"
+msgstr ""
+"Um die Kompatibilität mit verschiedenen Systemen sicher zu stellen,\n"
+"dürfen Namen von Schnappschüssen kein '%1'-Zeichen enthalten"
+
+#: ardour_ui.cc:2589
+msgid "Confirm Snapshot Overwrite"
+msgstr "Überschreiben des Schnappschusses bestätigen"
+
+#: ardour_ui.cc:2590
+msgid "A snapshot already exists with that name.  Do you want to overwrite it?"
+msgstr ""
+"Ein Schnappschuss mit diesem Namen existiert bereits. Wollen Sie ihn "
+"überschreiben?"
+
+#: ardour_ui.cc:2593 utils_videotl.cc:74
+msgid "Overwrite"
+msgstr "Überschreiben"
+
+#: ardour_ui.cc:2627
+msgid "Rename Session"
+msgstr "Projekt umbenennen"
+
+#: ardour_ui.cc:2642 ardour_ui.cc:3056 ardour_ui.cc:3094
+msgid ""
+"To ensure compatibility with various systems\n"
+"session names may not contain a '%1' character"
+msgstr ""
+"Um die Kompatibilität mit verschiedenen Systemen sicher zu stellen,\n"
+"dürfen Projektnamen kein '%1'-Zeichen enthalten"
+
+#: ardour_ui.cc:2650
+msgid ""
+"That name is already in use by another directory/folder. Please try again."
+msgstr ""
+"Dieser Name wird schon von einem anderen Verzeichnis/Ordner benutzt. Bitte "
+"versuchen Sie einen anderen Namen."
+
+#: ardour_ui.cc:2659
+msgid ""
+"Renaming this session failed.\n"
+"Things could be seriously messed up at this point"
+msgstr ""
+"Das Umbenennen des Projekts ist fehlgeschlagen.\n"
+"Dies könnte auf schwerwiegende Probleme hinweisen."
+
+#: ardour_ui.cc:2774
+msgid "Save Template"
+msgstr "Als Vorlage Speichern"
+
+#: ardour_ui.cc:2775
+msgid "Name for template:"
+msgstr "Name für Vorlage"
+
+#: ardour_ui.cc:2776
+msgid "-template"
+msgstr "-Vorlage"
+
+#: ardour_ui.cc:2813
+msgid ""
+"This session\n"
+"%1\n"
+"already exists. Do you want to open it?"
+msgstr ""
+"Dieses Projekt\n"
+"%1\n"
+"existiert bereits. Wollen Sie es öffnen?"
+
+#: ardour_ui.cc:2823
+msgid "Open Existing Session"
+msgstr "Vorhandenes Projekt öffnen"
+
+#: ardour_ui.cc:3084
+msgid "There is no existing session at \"%1\""
+msgstr "Es gibt kein Projekt in: \"%1\""
+
+#: ardour_ui.cc:3176
+msgid "Please wait while %1 loads your session"
+msgstr "Bitte warten Sie, während %1 das Projekt lädt"
+
+#: ardour_ui.cc:3191
+msgid "Port Registration Error"
+msgstr "Fehler bei der Registrierung von Ports"
+
+#: ardour_ui.cc:3192
+msgid "Click the Close button to try again."
+msgstr "Klicken Sie auf Schließen, um es erneut zu versuchen."
+
+#: ardour_ui.cc:3213
+msgid "Session \"%1 (snapshot %2)\" did not load successfully"
+msgstr "Projekt  \"%1 (Schnappschuss %2)\" konnte nicht geladen werden."
+
+#: ardour_ui.cc:3219
+msgid "Loading Error"
+msgstr "Fehler beim Laden"
+
+#: ardour_ui.cc:3241
+msgid ""
+"This session has been opened in read-only mode.\n"
+"\n"
+"You will not be able to record or save."
+msgstr ""
+"Dieses Projekt wurde im Nur-Lesen Modus geöffnet.\n"
+"\n"
+"Aufnehmen oder Speichern wird nicht möglich sein."
+
+#: ardour_ui.cc:3246
+msgid "Read-only Session"
+msgstr "Schreibgeschütztes Projekt"
+
+#: ardour_ui.cc:3312
+msgid "Could not create session in \"%1\""
+msgstr "Konnte kein Projekt in \"%1\" anlegen"
+
+#: ardour_ui.cc:3461
+msgid "No files were ready for clean-up"
+msgstr "Keine Audiodateien zum Aufräumen vorhanden"
+
+#: ardour_ui.cc:3465 ardour_ui.cc:3475 ardour_ui.cc:3608 ardour_ui.cc:3615
+#: ardour_ui_ed.cc:103
+msgid "Clean-up"
+msgstr "Aufräumen"
+
+#: ardour_ui.cc:3466
+msgid ""
+"If this seems suprising, \n"
+"check for any existing snapshots.\n"
+"These may still include regions that\n"
+"require some unused files to continue to exist."
+msgstr ""
+"Falls trotzdem nicht benötigte Dateien\n"
+"existieren, welche hier nicht erkannt werden,\n"
+"sind sie wahrscheinlich noch in einem\n"
+"älteren Schnappschuss als Region eingebunden."
+
+#: ardour_ui.cc:3525
+msgid "kilo"
+msgstr "kilo"
+
+#: ardour_ui.cc:3528
+msgid "mega"
+msgstr "mega"
+
+#: ardour_ui.cc:3531
+msgid "giga"
+msgstr "giga"
+
+#: ardour_ui.cc:3536
+msgid ""
+"The following file was deleted from %2,\n"
+"releasing %3 %4bytes of disk space"
+msgid_plural ""
+"The following %1 files were deleted from %2,\n"
+"releasing %3 %4bytes of disk space"
+msgstr[0] ""
+"Die folgende Datei wurde von %2\n"
+"gelöscht und gab %3 %4bytes Speicherplatz frei"
+msgstr[1] ""
+"Die folgenden %1 Dateien wurden von %2\n"
+"gelöscht und gaben %3 %4bytes Speicherplatz frei"
+
+#: ardour_ui.cc:3543
+msgid ""
+"The following file was not in use and \n"
+"has been moved to: %2\n"
+"\n"
+"After a restart of %5\n"
+"\n"
+"<span face=\"mono\">Session -> Clean-up -> Flush Wastebasket</span>\n"
+"\n"
+"will release an additional %3 %4bytes of disk space.\n"
+msgid_plural ""
+"The following %1 files were not in use and \n"
+"have been moved to: %2\n"
+"\n"
+"After a restart of %5\n"
+"\n"
+"<span face=\"mono\">Session -> Clean-up -> Flush Wastebasket</span>\n"
+"\n"
+"will release an additional %3 %4bytes of disk space.\n"
+msgstr[0] ""
+"Die folgende Datei wurde nicht benutzt\n"
+"und wurde nach %2 verschoben.\n"
+"\n"
+"Nach einem Neustart von %5 kann über\n"
+"\n"
+"<span face=\"mono\">Projekt -> Aufräumen -> Mülleimer leeren</span>\n"
+"\n"
+"%3 %4bytes Speicherplatz freigegeben werden.\n"
+msgstr[1] ""
+"Die folgenden %1 Dateien waren unbenutzt\n"
+"und wurden nach %2 verschoben.\n"
+"\n"
+"Nach einem Neustart von %5 kann über\n"
+"\n"
+"<span face=\"mono\">Projekt -> Aufräumen -> Mülleimer leeren</span>\n"
+"\n"
+"%3 %4bytes Speicherplatz freigegeben werden.\n"
+
+#: ardour_ui.cc:3603
+msgid "Are you sure you want to clean-up?"
+msgstr "Wollen Sie wirklich aufräumen?"
+
+#: ardour_ui.cc:3610
+msgid ""
+"Clean-up is a destructive operation.\n"
+"ALL undo/redo information will be lost if you clean-up.\n"
+"Clean-up will move all unused files to a \"dead\" location."
+msgstr ""
+"Das Aufräumen ist eine destruktive Operation.\n"
+"SÄMTLICHE Wiederherstellungsinformationen gehen verloren, wenn Sie "
+"aufräumen.\n"
+"Nach dem Aufräumen werden alle nicht benötigten Audiodateien in den \"dead "
+"sounds\" Ordner verschoben."
+
+#: ardour_ui.cc:3618
+msgid "CleanupDialog"
+msgstr "Aufräumdialog"
+
+#: ardour_ui.cc:3648
+msgid "Cleaned Files"
+msgstr "Aufgeräumte Dateien"
+
+#: ardour_ui.cc:3665
+msgid "deleted file"
+msgstr "gelöschte Datei"
+
+#: ardour_ui.cc:3803
+msgid "Video-Server was not launched by %1. The request to stop it is ignored."
+msgstr ""
+"Der Video-Server wurde nicht von %1 gestartet. Die Aufforderung ihn zu "
+"beenden wird ignoriert."
+
+#: ardour_ui.cc:3807
+msgid "Stop Video-Server"
+msgstr "Video-Server anhalten"
+
+#: ardour_ui.cc:3808
+msgid "Do you really want to stop the Video Server?"
+msgstr "Wollen Sie den Video-Server wirklich anhalten?"
+
+#: ardour_ui.cc:3811
+msgid "Yes, Stop It"
+msgstr "Ja, anhalten."
+
+#: ardour_ui.cc:3837
+msgid "The Video Server is already started."
+msgstr "Der Video-Server läuft bereits"
+
+#: ardour_ui.cc:3839
+msgid ""
+"An external Video Server is configured and can be reached. Not starting a "
+"new instance."
+msgstr ""
+"Ein externer Video-Server wurde konfiguriert, ist aber nicht erreichbar. Es "
+"wird keine neue Instanz gestartet."
+
+#: ardour_ui.cc:3847 ardour_ui.cc:3952
+msgid ""
+"Could not connect to the Video Server. Start it or configure its access URL "
+"in Preferences."
+msgstr ""
+"Es konnte keine Verbindung zum Video-Server hergestellt werden.Sie müssen "
+"ihn vorher starten oder die URL für den Zugriff in den Einstellungen "
+"anpassen."
+
+#: ardour_ui.cc:3877
+msgid "Specified docroot is not an existing directory."
+msgstr "Das eingestellte Dokumentenverzeichnis existiert nicht."
+
+#: ardour_ui.cc:3883 ardour_ui.cc:3889
+msgid "Given Video Server is not an executable file."
+msgstr "Der eingestellte Video-Server ist keine ausführbare Datei."
+
+#: ardour_ui.cc:3923
+msgid "Cannot launch the video-server"
+msgstr "Kann den Videoserver nicht starten "
+
+#: ardour_ui.cc:3933
+msgid "Video-server was started but does not respond to requests..."
+msgstr "Viideoserver wurde gestartet, reagiert aber nicht auf Anfragen..."
+
+#: ardour_ui.cc:3978 editor_audio_import.cc:644
+msgid "could not open %1"
+msgstr "Konnte %1 nicht öffnen"
+
+#: ardour_ui.cc:3982
+msgid "no video-file selected"
+msgstr "Es wurde keine Videodatei ausgewählt."
+
+#: ardour_ui.cc:4174
+msgid "xrun"
+msgstr "xrun"
+
+#: ardour_ui.cc:4183
+msgid "Recording was stopped because your system could not keep up."
+msgstr ""
+"Die Aufnahme wurde gestoppt, da Ihr System nicht schnell genug folgen konnte."
+
+#: ardour_ui.cc:4212
+msgid ""
+"The disk system on your computer\n"
+"was not able to keep up with %1.\n"
+"\n"
+"Specifically, it failed to write data to disk\n"
+"quickly enough to keep up with recording.\n"
+msgstr ""
+"Ihre Festplatte war nicht schnell genug,\n"
+"um %1 zu folgen.\n"
+"\n"
+"Die Daten konnten nicht schnell genug geschrieben\n"
+"werden, um die Aufnahme fortzuführen.\n"
+
+#: ardour_ui.cc:4285
+msgid "Scanning for plugins"
+msgstr "Suche nach Plugins"
+
+#: ardour_ui.cc:4287
+msgid "Cancel plugin scan"
+msgstr "Plugin-Suche abbrechen"
+
+#: ardour_ui.cc:4296
+msgid "Stop Timeout"
+msgstr "Stopp-Timeout"
+
+#: ardour_ui.cc:4303
+msgid "Scan Timeout"
+msgstr "Such-Timeout"
+
+#: ardour_ui.cc:4347
+msgid ""
+"The disk system on your computer\n"
+"was not able to keep up with %1.\n"
+"\n"
+"Specifically, it failed to read data from disk\n"
+"quickly enough to keep up with playback.\n"
+msgstr ""
+"Ihre Festplatte war nicht schnell genug,\n"
+"um %1 zu folgen.\n"
+"\n"
+"Die Daten konnten nicht schnell genug gelesen\n"
+"werden, um die Wiedergabe aufrechtzuerhalten.\n"
+
+#: ardour_ui.cc:4387
+msgid "Crash Recovery"
+msgstr "Absturz-Wiederherstellung"
+
+#: ardour_ui.cc:4388
+msgid ""
+"This session appears to have been in the\n"
+"middle of recording when %1 or\n"
+"the computer was shutdown.\n"
+"\n"
+"%1 can recover any captured audio for\n"
+"you, or it can ignore it. Please decide\n"
+"what you would like to do.\n"
+msgstr ""
+"Es scheint, dass dieses Projekt während\n"
+"einer Aufnahme abgebrochen oder\n"
+"geschlossen wurde.\n"
+"\n"
+"%1 kann die aufgenommenen Audiodaten\n"
+"für Sie wiederherstellen oder sie verwerfen.\n"
+"Bitte entscheiden Sie, wie Sie vorgehen möchten.\n"
+
+#: ardour_ui.cc:4400
+msgid "Ignore crash data"
+msgstr "Daten verwerfen"
+
+#: ardour_ui.cc:4401
+msgid "Recover from crash"
+msgstr "Daten wiederherstellen"
+
+#: ardour_ui.cc:4421
+msgid "Sample Rate Mismatch"
+msgstr "Samplerate passt nicht"
+
+#: ardour_ui.cc:4422
+msgid ""
+"This session was created with a sample rate of %1 Hz, but\n"
+"%2 is currently running at %3 Hz.  If you load this session,\n"
+"audio may be played at the wrong sample rate.\n"
+msgstr ""
+"Dieses Projekt wurde mit einer Samplerate von %1 Hz erstellt.\n"
+"\n"
+"%2 läuft derzeit mit %3 Hz. Wenn Sie dieses Projekt laden, \n"
+"wird Ihr Audiomaterial mit der falschen Samplerate abgespielt.\n"
+
+#: ardour_ui.cc:4431
+msgid "Do not load session"
+msgstr "Projekt nicht laden"
+
+#: ardour_ui.cc:4432
+msgid "Load session anyway"
+msgstr "Projekt trotzdem laden"
+
+#: ardour_ui.cc:4459
+msgid "Could not disconnect from Audio/MIDI engine"
+msgstr "Konnte Verbindung mit der Audio/MIDI Engine nicht trennen"
+
+#: ardour_ui.cc:4476 ardour_ui.cc:4479
+msgid "Could not reconnect to the Audio/MIDI engine"
+msgstr "Konnte nicht zur Audio/MIDI Engine wiederverbinden"
+
+#: ardour_ui.cc:4763
+msgid ""
+"%4This is a session from an older version of %3%5\n"
+"\n"
+"%3 has copied the old session file\n"
+"\n"
+"%6%1%7\n"
+"\n"
+"to\n"
+"\n"
+"%6%2%7\n"
+"\n"
+"From now on, use the -2000 version with older versions of %3"
+msgstr ""
+"%4Dies ist ein Projekt, das mit einer älteren Version von %3 erstellt wurde"
+"%5\n"
+"\n"
+"%3 hat die alte Projektdatei\n"
+"\n"
+"%6%1%7\n"
+"\n"
+"nach\n"
+"\n"
+"%6%2%7 kopiert.\n"
+"\n"
+"Benutzen Sie von nun an die -2000 Version mit älteren Versionen von %3"
+
+#: ardour_ui.cc:4872
+msgid "This is a free/demo copy of %1. It has just switched to silent mode."
+msgstr ""
+"Dies ist eine freie Demoversion von %1. Sie hat sich gerade stummgeschaltet."
+
+#: ardour_ui.cc:4878
+msgid "%1 is now silent"
+msgstr "%1 ist nun stumm"
+
+#: ardour_ui.cc:4880
+msgid ""
+"Please consider paying for a copy of %1 - you can pay whatever you want."
+msgstr ""
+"Bitte ziehen Sie in Erwägung, für eine Kopie von %1 einen Geldbetrag - in "
+"beliebiger Höhe - zu zahlen."
+
+#: ardour_ui.cc:4881
+msgid "Better yet become a subscriber - subscriptions start at US$1 per month."
+msgstr ""
+"Besser noch, werden Sie ein Abonnent - Abonnements beginnen bei US$1 pro "
+"Monat."
+
+#: ardour_ui.cc:4882
+msgid "Pay for a copy (via the web)"
+msgstr "Für eine Kopie zahlen (über das WWW)"
+
+#: ardour_ui.cc:4883
+msgid "Become a subscriber (via the web)"
+msgstr "Abonnent werden (über das Web)"
+
+#: ardour_ui.cc:4902
+msgid "Remain silent"
+msgstr "Stumm bleiben"
+
+#: ardour_ui.cc:4904
+msgid "Give me more time"
+msgstr "Ich möchte mehr Zeit haben"
+
+#: ardour_ui2.cc:73
+msgid "UI: cannot setup editor"
+msgstr "Der Editor konnte nicht initialisiert werden."
+
+#: ardour_ui2.cc:78
+msgid "UI: cannot setup mixer"
+msgstr "Der Mixer konnte nicht initialisiert werden."
+
+#: ardour_ui2.cc:83
+msgid "UI: cannot setup meterbridge"
+msgstr "UI: konnte Meterbridge nicht einrichten."
+
+#: ardour_ui2.cc:128
+msgid "Play from playhead"
+msgstr "Wiedergabe ab Positionszeiger"
+
+#: ardour_ui2.cc:129
+msgid "Stop playback"
+msgstr "Wiedergabe anhalten"
+
+#: ardour_ui2.cc:130
+msgid "Toggle record"
+msgstr "Aufnahmestatus aktivieren"
+
+#: ardour_ui2.cc:131
+msgid "Play range/selection"
+msgstr "Bereich/Auswahl wiedergeben"
+
+#: ardour_ui2.cc:132
+msgid "Go to start of session"
+msgstr "Zum Anfang des Projekts springen"
+
+#: ardour_ui2.cc:133
+msgid "Go to end of session"
+msgstr "Zum Ende des Projekts springen"
+
+#: ardour_ui2.cc:134
+msgid "Play loop range"
+msgstr "Schleife wiedergeben"
+
+#: ardour_ui2.cc:135
+msgid ""
+"MIDI Panic\n"
+"Send note off and reset controller messages on all MIDI channels"
+msgstr ""
+"MIDI Panic\n"
+"Schalte auf allen Midikanälen die Notensignale aus und setzte alle MIDI-"
+"Controller zurück"
+
+#: ardour_ui2.cc:136
+msgid "Return to last playback start when stopped"
+msgstr "Bei Stopp zum letzten Wiedergabepunkt springen"
+
+#: ardour_ui2.cc:137
+msgid "Playhead follows Range Selections and Edits"
+msgstr "Positionszeiger folgt Auswahl und Editierungen"
+
+#: ardour_ui2.cc:138
+msgid "Be sensible about input monitoring"
+msgstr "Automatisches Input Monitoring aktivieren"
+
+#: ardour_ui2.cc:139
+msgid "Enable/Disable audio click"
+msgstr "Aktiviert/Deaktiviert Klick"
+
+#: ardour_ui2.cc:140 monitor_section.cc:117
+msgid ""
+"When active, something is soloed.\n"
+"Click to de-solo everything"
+msgstr ""
+"Wenn aktiv, ist etwas auf Solo geschalten.\n"
+"Klick schaltet Solo überall aus."
+
+#: ardour_ui2.cc:141
+msgid ""
+"When active, auditioning is taking place\n"
+"Click to stop the audition"
+msgstr ""
+"Wird beim Vorhören aktiv.\n"
+"Klicken stoppt das Vorhören."
+
+#: ardour_ui2.cc:142
+msgid "When active, there is a feedback loop."
+msgstr "Wenn aktiv, gibt es eine Rückkopplungsschleife."
+
+#: ardour_ui2.cc:143
+msgid ""
+"<b>Primary Clock</b> right-click to set display mode. Click to edit, click"
+"+drag a digit or mouse-over+scroll wheel to modify.\n"
+"Text edits: right-to-left overwrite <tt>Esc</tt>: cancel; <tt>Enter</tt>: "
+"confirm; postfix the edit with '+' or '-' to enter delta times.\n"
+msgstr ""
+"<b>Primäre Uhr</b> Rechtsklick um Anzeigemodus zu setzen. Klick zum "
+"Bearbeiten, Klick+Mausbewegung auf eine Ziffer oder Maus-Über+Scrollrad zum "
+"Ändern.\n"
+"Text editieren: überschreibt von rechts nach links <tt>Esc</tt>: Abbruch; "
+"<tt>Eingabe</tt>: Bestätige; hänge '+' or '-' an, um Deltazeiten "
+"einzugeben.\n"
+
+#: ardour_ui2.cc:144
+msgid ""
+"<b>Secondary Clock</b> right-click to set display mode. Click to edit, click"
+"+drag a digit or mouse-over+scroll wheel to modify.\n"
+"Text edits: right-to-left overwrite <tt>Esc</tt>: cancel; <tt>Enter</tt>: "
+"confirm; postfix the edit with '+' or '-' to enter delta times.\n"
+msgstr ""
+"<b>Sekundäre Uhr</b> Rechtsklick um Anzeigemodus zu setzen. Klick zum "
+"Bearbeiten, Klick+Mausbewegung auf eine Ziffer oder Maus-Über+Scrollrad zum "
+"Ändern.\n"
+"Text editieren: überschreibt von rechts nach links <tt>Esc</tt>: Abbruch; "
+"<tt>Eingabe</tt>: Bestätige; hänge '+' or '-' an, um Deltazeiten "
+"einzugeben.\n"
+
+#: ardour_ui2.cc:145
+msgid "Reset All Peak Indicators"
+msgstr "Alle Spitzenwertanzeigen zurücksetzen"
+
+#: ardour_ui2.cc:146
+msgid "Show Error Log and acknowledge warnings"
+msgstr "Zeige Fehlermeldungen und bestätige Warnungen"
+
+#: ardour_ui2.cc:179
+msgid "[ERROR]: "
+msgstr "[FEHLER]:"
+
+#: ardour_ui2.cc:182
+msgid "[WARNING]: "
+msgstr "[WARNUNG]:"
+
+#: ardour_ui2.cc:185
+msgid "[INFO]: "
+msgstr "[INFO]: "
+
+#: ardour_ui2.cc:255 ardour_ui_ed.cc:408
+msgid "Auto Return"
+msgstr "Auto Return"
+
+#: ardour_ui2.cc:257 ardour_ui_ed.cc:411
+msgid "Follow Edits"
+msgstr "Folge Bearbeitungen"
+
+#: ardour_ui2.cc:716 rc_option_editor.cc:2786
+msgid "GUI"
+msgstr "GUI"
+
+#: ardour_ui2.cc:733 rc_option_editor.cc:1778 rc_option_editor.cc:1796
+#: rc_option_editor.cc:1799 rc_option_editor.cc:1801 rc_option_editor.cc:1803
+#: rc_option_editor.cc:1811 rc_option_editor.cc:1819 rc_option_editor.cc:1821
+#: rc_option_editor.cc:1829 rc_option_editor.cc:1836 rc_option_editor.cc:1845
+#: rc_option_editor.cc:1847 rc_option_editor.cc:1849 rc_option_editor.cc:1857
+#: rc_option_editor.cc:1859 rc_option_editor.cc:1868
+#: session_option_editor.cc:321 session_option_editor.cc:323
+#: session_option_editor.cc:344 session_option_editor.cc:346
+#: session_option_editor.cc:348 session_option_editor.cc:355
+#: session_option_editor.cc:362 session_option_editor.cc:366
+msgid "Misc"
+msgstr "Allgemein"
+
+#: ardour_ui_dependents.cc:76
+msgid "Setup Editor"
+msgstr "Editor laden"
+
+#: ardour_ui_dependents.cc:78
+msgid "Setup Mixer"
+msgstr "Mixer laden"
+
+#: ardour_ui_dependents.cc:84
+msgid "Reload Session History"
+msgstr "Projekt-Aktionsverlauf laden"
+
+#: ardour_ui_dialogs.cc:250
+msgid "Don't close"
+msgstr "Abbrechen"
+
+#: ardour_ui_dialogs.cc:251
+msgid "Just close"
+msgstr "Ohne speichern schließen"
+
+#: ardour_ui_dialogs.cc:252
+msgid "Save and close"
+msgstr "Speichern und schließen"
+
+#: ardour_ui_dialogs.cc:362
+msgid "This screen is not tall enough to display the mixer window"
+msgstr ""
+"Dieser Bildschirm ist nicht hoch genug, um das Mixerfenster darzustellen"
+
+#: ardour_ui_ed.cc:102
+msgid "Session"
+msgstr "Projekt"
+
+#: ardour_ui_ed.cc:105 editor_actions.cc:138 editor_regions.cc:116
+#: port_group.cc:458 session_option_editor.cc:82 session_option_editor.cc:89
+msgid "Sync"
+msgstr "Sync"
+
+#: ardour_ui_ed.cc:106
+msgid "Options"
+msgstr "Optionen"
+
+#: ardour_ui_ed.cc:107
+msgid "Window"
+msgstr "Fenster"
+
+#: ardour_ui_ed.cc:108
+msgid "Help"
+msgstr "Hilfe"
+
+#: ardour_ui_ed.cc:109
+msgid "Misc. Shortcuts"
+msgstr "Verschiedenes"
+
+#: ardour_ui_ed.cc:110
+msgid "Audio File Format"
+msgstr "Audio-Dateiformat"
+
+#: ardour_ui_ed.cc:111
+msgid "File Type"
+msgstr "Dateiformat"
+
+#: ardour_ui_ed.cc:112 export_format_dialog.cc:67
+msgid "Sample Format"
+msgstr "Sampleformat"
+
+#: ardour_ui_ed.cc:113 rc_option_editor.cc:2719 rc_option_editor.cc:2731
+msgid "Control Surfaces"
+msgstr "Eingabegeräte / Controller"
+
+#: ardour_ui_ed.cc:114 rc_option_editor.cc:2395 rc_option_editor.cc:2738
+msgid "Plugins"
+msgstr "Plugins"
+
+#: ardour_ui_ed.cc:115 rc_option_editor.cc:2853
+msgid "Metering"
+msgstr "Pegelanzeige"
+
+#: ardour_ui_ed.cc:116
+msgid "Fall Off Rate"
+msgstr "Abfall der Pegelanzeige"
+
+#: ardour_ui_ed.cc:117
+msgid "Hold Time"
+msgstr "Pegelanzeige halten"
+
+#: ardour_ui_ed.cc:118
+msgid "Denormal Handling"
+msgstr "Umgang mit Denormals"
+
+#: ardour_ui_ed.cc:122 route_time_axis.cc:1689
+msgid "New..."
+msgstr "Neu..."
+
+#: ardour_ui_ed.cc:124
+msgid "Open..."
+msgstr "Öffnen..."
+
+#: ardour_ui_ed.cc:125
+msgid "Recent..."
+msgstr "Zuletzt verwendet..."
+
+#: ardour_ui_ed.cc:126 panner_editor.cc:29 playlist_selector.cc:64
+msgid "Close"
+msgstr "Schließen"
+
+#: ardour_ui_ed.cc:129
+msgid "Add Track or Bus..."
+msgstr "Spur/Bus hinzufügen..."
+
+#: ardour_ui_ed.cc:134
+msgid "Open Video"
+msgstr "Video öffnen"
+
+#: ardour_ui_ed.cc:137
+msgid "Remove Video"
+msgstr "Video entfernen"
+
+#: ardour_ui_ed.cc:140
+msgid "Export To Video File"
+msgstr "Exportiere Videodatei"
+
+#: ardour_ui_ed.cc:144
+msgid "Snapshot (& keep working on current version) ..."
+msgstr "Schnappschuss (& an dieser Version weiterarbeiten)..."
+
+#: ardour_ui_ed.cc:148
+msgid "Snapshot (& switch to new version) ..."
+msgstr "Schnappschuss (& zur neuen Version wechseln) ..."
+
+#: ardour_ui_ed.cc:152
+msgid "Save As..."
+msgstr "Speichern unter..."
+
+#: ardour_ui_ed.cc:156 editor_actions.cc:1783 editor_markers.cc:896
+#: editor_snapshots.cc:124 mixer_strip.cc:1564 route_time_axis.cc:1685
+msgid "Rename..."
+msgstr "Umbenennen..."
+
+#: ardour_ui_ed.cc:160
+msgid "Save Template..."
+msgstr "Als Vorlage Speichern..."
+
+#: ardour_ui_ed.cc:163
+msgid "Metadata"
+msgstr "Metadaten"
+
+#: ardour_ui_ed.cc:166
+msgid "Edit Metadata..."
+msgstr "Metadaten bearbeiten..."
+
+#: ardour_ui_ed.cc:169
+msgid "Import Metadata..."
+msgstr "Metadaten importieren..."
+
+#: ardour_ui_ed.cc:172
+msgid "Export To Audio File(s)..."
+msgstr "Exportiere Audiodatei(en)..."
+
+#: ardour_ui_ed.cc:175
+msgid "Stem export..."
+msgstr "Stems exportieren..."
+
+#: ardour_ui_ed.cc:178 editor_export_audio.cc:65
+#: export_channel_selector.cc:190 export_channel_selector.cc:576
+#: export_dialog.cc:129 export_video_dialog.cc:80
+msgid "Export"
+msgstr "Exportieren"
+
+#: ardour_ui_ed.cc:181
+msgid "Clean-up Unused Sources..."
+msgstr "Nicht benutzte Dateien entfernen..."
+
+#: ardour_ui_ed.cc:185
+msgid "Flush Wastebasket"
+msgstr "Müll leeren"
+
+#: ardour_ui_ed.cc:192
+msgid "Quit"
+msgstr "Beenden"
+
+#: ardour_ui_ed.cc:193 automation_time_axis.cc:543 editor_actions.cc:654
+#: editor_markers.cc:895 location_ui.cc:57 plugin_selector.cc:86
+#: route_time_axis.cc:865
+msgid "Hide"
+msgstr "Verbergen"
+
+#: ardour_ui_ed.cc:197
+msgid "Maximise Editor Space"
+msgstr "Editor maximieren"
+
+#: ardour_ui_ed.cc:198
+msgid "Maximise Mixer Space"
+msgstr "Mixerfenster maximieren"
+
+#: ardour_ui_ed.cc:199
+msgid "Show Toolbars"
+msgstr "Zeige Werkzeugleisten"
+
+#: ardour_ui_ed.cc:203
+msgid "Show more UI preferences"
+msgstr "Mehr UI-Einstellungen anzeigen"
+
+#: ardour_ui_ed.cc:205 mixer_ui.cc:1945 mixer_ui.cc:1951
+msgid "Window|Mixer"
+msgstr "Mixer"
+
+#: ardour_ui_ed.cc:206
+msgid "Toggle Editor+Mixer"
+msgstr "Editor+Mixer umschalten"
+
+#: ardour_ui_ed.cc:207 meterbridge.cc:217 meterbridge.cc:223
+msgid "Window|Meterbridge"
+msgstr "Meterbridge"
+
+#: ardour_ui_ed.cc:209
+msgid "Reattach All Tearoffs"
+msgstr "Alle Abreißmenüs wieder anheften"
+
+#: ardour_ui_ed.cc:211 midi_tracer.cc:45
+msgid "MIDI Tracer"
+msgstr "Midisignale verfolgen"
+
+#: ardour_ui_ed.cc:213
+msgid "Chat"
+msgstr "Chat"
+
+#: ardour_ui_ed.cc:215
+msgid "Help|Manual"
+msgstr "Handbuch"
+
+#: ardour_ui_ed.cc:216
+msgid "Reference"
+msgstr "Referenz"
+
+#: ardour_ui_ed.cc:217
+msgid "Report A Bug"
+msgstr "Einen Fehler melden"
+
+#: ardour_ui_ed.cc:218
+msgid "Cheat Sheet"
+msgstr "Cheat Sheet"
+
+#: ardour_ui_ed.cc:219
+msgid "Ardour Website"
+msgstr "Ardour Website"
+
+#: ardour_ui_ed.cc:220
+msgid "Ardour Development"
+msgstr "Ardour Entwicklung"
+
+#: ardour_ui_ed.cc:221
+msgid "User Forums"
+msgstr "Userforen"
+
+#: ardour_ui_ed.cc:222
+msgid "How to report a bug"
+msgstr "Wie man einen Fehler meldet"
+
+#: ardour_ui_ed.cc:224 plugin_ui.cc:419
+msgid "Save"
+msgstr "Speichern"
+
+#: ardour_ui_ed.cc:232 rc_option_editor.cc:1879 rc_option_editor.cc:1890
+#: rc_option_editor.cc:1901 rc_option_editor.cc:1912 rc_option_editor.cc:1921
+#: rc_option_editor.cc:1934 rc_option_editor.cc:1947 rc_option_editor.cc:1956
+#: rc_option_editor.cc:1966 rc_option_editor.cc:1968 rc_option_editor.cc:1977
+#: rc_option_editor.cc:1993 rc_option_editor.cc:2014 rc_option_editor.cc:2032
+#: rc_option_editor.cc:2034 rc_option_editor.cc:2050 rc_option_editor.cc:2053
+#: rc_option_editor.cc:2055 rc_option_editor.cc:2072 rc_option_editor.cc:2083
+msgid "Transport"
+msgstr "Transport"
+
+#: ardour_ui_ed.cc:238
+msgid "Stop"
+msgstr "Stopp"
+
+#: ardour_ui_ed.cc:241
+msgid "Roll"
+msgstr "Wiedergabe"
+
+#: ardour_ui_ed.cc:245 ardour_ui_ed.cc:248
+msgid "Start/Stop"
+msgstr "Start/Stopp"
+
+#: ardour_ui_ed.cc:251
+msgid "Start/Continue/Stop"
+msgstr "Start/Stopp"
+
+#: ardour_ui_ed.cc:254
+msgid "Stop and Forget Capture"
+msgstr "Stopp + Aufnahme verwerfen"
+
+#: ardour_ui_ed.cc:264
+msgid "Transition To Roll"
+msgstr "Vorwärts (normal)"
+
+#: ardour_ui_ed.cc:268
+msgid "Transition To Reverse"
+msgstr "Rückwärts (normal)"
+
+#: ardour_ui_ed.cc:272
+msgid "Play Loop Range"
+msgstr "Schleife wiedergeben"
+
+#: ardour_ui_ed.cc:275
+msgid "Play Selection"
+msgstr "Auswahl abspielen"
+
+#: ardour_ui_ed.cc:278
+msgid "Play Selection w/Preroll"
+msgstr "Ausgewählten Bereich mit Vorlauf wiedergeben"
+
+#: ardour_ui_ed.cc:282
+msgid "Enable Record"
+msgstr "Aufnahme aktivieren"
+
+#: ardour_ui_ed.cc:285 ardour_ui_ed.cc:289
+msgid "Start Recording"
+msgstr "Aufnahme starten"
+
+#: ardour_ui_ed.cc:293
+msgid "Rewind"
+msgstr "Rückwärts (beschleunigen)"
+
+#: ardour_ui_ed.cc:296
+msgid "Rewind (Slow)"
+msgstr "Rückwärts (langsam)"
+
+#: ardour_ui_ed.cc:299
+msgid "Rewind (Fast)"
+msgstr "Rückwärts (schnell)"
+
+#: ardour_ui_ed.cc:302
+msgid "Forward"
+msgstr "Vorwärts (beschleunigen)"
+
+#: ardour_ui_ed.cc:305
+msgid "Forward (Slow)"
+msgstr "Vorwärts (langsam)"
+
+#: ardour_ui_ed.cc:308
+msgid "Forward (Fast)"
+msgstr "Vorwärts (schnell)"
+
+#: ardour_ui_ed.cc:311
+msgid "Go to Zero"
+msgstr "Zum Nullpunkt springen"
+
+#: ardour_ui_ed.cc:314 ardour_ui_ed.cc:317
+msgid "Go to Start"
+msgstr "Zum Anfang springen"
+
+#: ardour_ui_ed.cc:320
+msgid "Go to End"
+msgstr "Zum Ende springen"
+
+#: ardour_ui_ed.cc:323
+msgid "Go to Wall Clock"
+msgstr "Zur lokalen Uhrzeit springen"
+
+#: ardour_ui_ed.cc:328 ardour_ui_ed.cc:331
+msgid "Numpad Decimal"
+msgstr "Nummernblock Dezimalpunkt"
+
+#: ardour_ui_ed.cc:334
+msgid "Numpad 0"
+msgstr "Nummernblock 0"
+
+#: ardour_ui_ed.cc:337
+msgid "Numpad 1"
+msgstr "Nummernblock 1"
+
+#: ardour_ui_ed.cc:340
+msgid "Numpad 2"
+msgstr "Nummernblock 2"
+
+#: ardour_ui_ed.cc:343
+msgid "Numpad 3"
+msgstr "Nummernblock 3"
+
+#: ardour_ui_ed.cc:346
+msgid "Numpad 4"
+msgstr "Nummernblock 4"
+
+#: ardour_ui_ed.cc:349
+msgid "Numpad 5"
+msgstr "Nummernblock 5"
+
+#: ardour_ui_ed.cc:352
+msgid "Numpad 6"
+msgstr "Nummernblock 6"
+
+#: ardour_ui_ed.cc:355
+msgid "Numpad 7"
+msgstr "Nummernblock 7"
+
+#: ardour_ui_ed.cc:358
+msgid "Numpad 8"
+msgstr "Nummernblock 8"
+
+#: ardour_ui_ed.cc:361
+msgid "Numpad 9"
+msgstr "Nummernblock 9"
+
+#: ardour_ui_ed.cc:365
+msgid "Focus On Clock"
+msgstr "Fokus auf Zeitanzeige setzen"
+
+#: ardour_ui_ed.cc:369 ardour_ui_ed.cc:378 audio_clock.cc:2114 editor.cc:259
+#: editor_actions.cc:578 editor_actions.cc:587 export_timespan_selector.cc:88
+#: session_option_editor.cc:41 session_option_editor.cc:61
+#: session_option_editor.cc:80 session_option_editor.cc:96
+#: session_option_editor.cc:109 session_option_editor.cc:122
+#: session_option_editor.cc:124 session_option_editor.cc:126
+msgid "Timecode"
+msgstr "Timecode"
+
+#: ardour_ui_ed.cc:371 ardour_ui_ed.cc:380 editor_actions.cc:576
+msgid "Bars & Beats"
+msgstr "Takte & Schläge"
+
+#: ardour_ui_ed.cc:373 ardour_ui_ed.cc:382
+msgid "Minutes & Seconds"
+msgstr "Minuten & Sekunden"
+
+#: ardour_ui_ed.cc:375 ardour_ui_ed.cc:384 audio_clock.cc:2118 editor.cc:260
+#: editor_actions.cc:577
+msgid "Samples"
+msgstr "Samples"
+
+#: ardour_ui_ed.cc:387
+msgid "Punch In"
+msgstr "Punch In"
+
+#: ardour_ui_ed.cc:388 mixer_strip.cc:1881 mixer_strip.cc:2069 route_ui.cc:164
+#: time_info_box.cc:116
+msgid "In"
+msgstr "In"
+
+#: ardour_ui_ed.cc:391
+msgid "Punch Out"
+msgstr "Punch Out"
+
+#: ardour_ui_ed.cc:392 mixer_strip.cc:1893 time_info_box.cc:117
+msgid "Out"
+msgstr "Out"
+
+#: ardour_ui_ed.cc:395
+msgid "Punch In/Out"
+msgstr "Punch In/Out"
+
+#: ardour_ui_ed.cc:396
+msgid "In/Out"
+msgstr "In/Out"
+
+#: ardour_ui_ed.cc:399 rc_option_editor.cc:1845
+msgid "Click"
+msgstr "Klick"
+
+#: ardour_ui_ed.cc:402
+msgid "Auto Input"
+msgstr "Auto Input"
+
+#: ardour_ui_ed.cc:405
+msgid "Auto Play"
+msgstr "Auto Play"
+
+#: ardour_ui_ed.cc:416
+msgid "Sync Startup to Video"
+msgstr "Start mit Video synchronisieren"
+
+#: ardour_ui_ed.cc:418
+msgid "Time Master"
+msgstr "Time Master"
+
+#: ardour_ui_ed.cc:420
+msgid "Use External Positional Sync Source"
+msgstr "Benutze Externe Synchronisationsquelle"
+
+#: ardour_ui_ed.cc:425
+msgid "Toggle Record Enable Track %1"
+msgstr "Aufnahmebereitschaft auf Spur %1 umschalten"
+
+#: ardour_ui_ed.cc:432
+msgid "Percentage"
+msgstr "Prozent"
+
+#: ardour_ui_ed.cc:433 shuttle_control.cc:187
+msgid "Semitones"
+msgstr "Halbtöne"
+
+#: ardour_ui_ed.cc:437
+msgid "Send MTC"
+msgstr "MTC senden"
+
+#: ardour_ui_ed.cc:439
+msgid "Send MMC"
+msgstr "MMC senden"
+
+#: ardour_ui_ed.cc:441
+msgid "Use MMC"
+msgstr "Benutze MMC"
+
+#: ardour_ui_ed.cc:443 rc_option_editor.cc:2571
+msgid "Send MIDI Clock"
+msgstr "MIDI Clock senden"
+
+#: ardour_ui_ed.cc:445
+msgid "Send MIDI Feedback"
+msgstr "MIDI Feedback senden"
+
+#: ardour_ui_ed.cc:451
+msgid "Panic"
+msgstr "Panic"
+
+#: ardour_ui_ed.cc:542
+msgid "Wall Clock"
+msgstr "Uhrzeit"
+
+#: ardour_ui_ed.cc:544
+msgid "Disk Space"
+msgstr "Speicherplatz"
+
+#: ardour_ui_ed.cc:545
+msgid "DSP"
+msgstr "DSP"
+
+#: ardour_ui_ed.cc:546
+msgid "X-run"
+msgstr "X-run"
+
+#: ardour_ui_ed.cc:547
+msgid "Buffers"
+msgstr "Puffer"
+
+#: ardour_ui_ed.cc:549
+msgid "Timecode Format"
+msgstr "Timecode-Format"
+
+#: ardour_ui_ed.cc:550
+msgid "File Format"
+msgstr "Dateiformat"
+
+#: ardour_ui_options.cc:63
+msgid ""
+"It is not possible to use JACK as the the sync source\n"
+"when the pull up/down setting is non-zero."
+msgstr ""
+"Es ist nicht möglich, JACK als Synchronisationsquelle zu verwenden,\n"
+"wenn die Pull-up/down Einstellung nicht 0 ist."
+
+#: ardour_ui_options.cc:317
+msgid "Internal"
+msgstr "Intern"
+
+#: ardour_ui_options.cc:503
+msgid "Enable/Disable external positional sync"
+msgstr "Aktiviere/Deaktiviere externe Positionssynchronisierung"
+
+#: ardour_ui_options.cc:505
+msgid "Sync to JACK is not possible: video pull up/down is set"
+msgstr "Synchronisation ist nicht möglich: Video pull-up/down ist aktiviert"
+
+#: audio_clock.cc:1052 audio_clock.cc:1071
+msgid "--pending--"
+msgstr "--wartend--"
+
+#: audio_clock.cc:1123
+msgid "SR"
+msgstr "SR"
+
+#: audio_clock.cc:1129 audio_clock.cc:1133
+msgid "Pull"
+msgstr "Ziehen"
+
+#: audio_clock.cc:1131
+#, c-format
+msgid "%+.4f%%"
+msgstr "%+.4f%%"
+
+#: audio_clock.cc:1287 editor.cc:261 editor_actions.cc:139
+#: editor_actions.cc:570
+msgid "Tempo"
+msgstr "Tempo"
+
+#: audio_clock.cc:1291 editor.cc:262 editor_actions.cc:571
+msgid "Meter"
+msgstr "Taktart"
+
+#: audio_clock.cc:1869 audio_streamview.cc:116 editor_actions.cc:1101
+#: session_metadata_dialog.cc:452 session_metadata_dialog.cc:500
+#: session_metadata_dialog.cc:556 session_metadata_dialog.cc:845
+#: streamview.cc:470
+msgid "programming error: %1"
+msgstr "Programmierfehler: %1"
+
+#: audio_clock.cc:2002 audio_clock.cc:2030
+msgid "programming error: %1 %2"
+msgstr "Programmierfehler: %1 %2"
+
+#: audio_clock.cc:2116 editor.cc:258 export_timespan_selector.cc:98
+msgid "Bars:Beats"
+msgstr "Takte:Schläge"
+
+#: audio_clock.cc:2117 export_timespan_selector.cc:93
+msgid "Minutes:Seconds"
+msgstr "Minuten:Sekunden"
+
+#: audio_clock.cc:2122
+msgid "Set From Playhead"
+msgstr "Ab Positionszeiger"
+
+#: audio_clock.cc:2123
+msgid "Locate to This Time"
+msgstr "Positionszeiger hierhin setzen"
+
+#: audio_clock.cc:2126
+msgid "Copy to clipboard"
+msgstr "In die Zwischenablage kopieren"
+
+#: audio_region_editor.cc:64 control_point_dialog.cc:49 rhythm_ferret.cc:124
+#: rhythm_ferret.cc:129 rhythm_ferret.cc:134
+msgid "dB"
+msgstr "dB"
+
+#: audio_region_editor.cc:67
+msgid "Region gain:"
+msgstr "Regionen-Lautstärke:"
+
+#: audio_region_editor.cc:77 export_format_dialog.cc:43
+msgid "dBFS"
+msgstr "dBFS"
+
+#: audio_region_editor.cc:80
+msgid "Peak amplitude:"
+msgstr "Spitzenamplitude"
+
+#: audio_region_editor.cc:91
+msgid "Calculating..."
+msgstr "Berechne..."
+
+#: audio_region_view.cc:1254
+msgid "add gain control point"
+msgstr "Lautstärkekurve bearbeiten"
+
+#: automation_controller.cc:287 automation_controller.cc:303
+msgid "Select Note..."
+msgstr "Note selektieren..."
+
+#: automation_controller.cc:294
+msgid "Halve"
+msgstr "Halbiere"
+
+#: automation_controller.cc:297
+msgid "Double"
+msgstr "Verdopple"
+
+#: automation_controller.cc:308
+msgid "Set to %1 beat"
+msgid_plural "Set to %1 beats"
+msgstr[0] "Setze auf %1 Schlag"
+msgstr[1] "Setze auf %1 Schläge"
+
+#: automation_line.cc:287 editor_drag.cc:4129
+msgid "automation event move"
+msgstr "Automationspunkt bewegen"
+
+#: automation_line.cc:884 region_gain_line.cc:75
+msgid "remove control point"
+msgstr "Automationspunkt entfernen"
+
+#: automation_line.cc:1008
+msgid "Ignoring illegal points on AutomationLine \"%1\""
+msgstr "Unzulässige Automationspunkte werden ignoriert: \"%1\""
+
+#: automation_region_view.cc:190 automation_time_axis.cc:644
+msgid "add automation event"
+msgstr "Automationspunkt einfügen"
+
+#: automation_streamview.cc:95
+msgid "unable to display automation region for control without list"
+msgstr ""
+"die Automationsspur für diesen Parameter kann ohne Liste nicht dargestellt "
+"werden"
+
+#: automation_time_axis.cc:163
+msgid "automation state"
+msgstr "Automationsmodus"
+
+#: automation_time_axis.cc:164
+msgid "hide track"
+msgstr "Diese Spur verbergen"
+
+#: automation_time_axis.cc:308 automation_time_axis.cc:360
+#: automation_time_axis.cc:554 gain_meter.cc:222 generic_pluginui.cc:524
+#: generic_pluginui.cc:818 panner_ui.cc:149
+msgid "Automation|Manual"
+msgstr "Manuell"
+
+#: automation_time_axis.cc:310 automation_time_axis.cc:371
+#: automation_time_axis.cc:559 editor.cc:1916 editor.cc:1994
+#: editor_actions.cc:122 editor_actions.cc:1932 gain_meter.cc:225
+#: generic_pluginui.cc:100 generic_pluginui.cc:527 generic_pluginui.cc:820
+#: midi_time_axis.cc:1607 midi_time_axis.cc:1610 midi_time_axis.cc:1613
+#: panner_ui.cc:152
+msgid "Play"
+msgstr "Wiedergabe"
+
+#: automation_time_axis.cc:312 automation_time_axis.cc:382
+#: automation_time_axis.cc:564 gain_meter.cc:228 generic_pluginui.cc:102
+#: generic_pluginui.cc:530 generic_pluginui.cc:822 panner_ui.cc:155
+msgid "Write"
+msgstr "Schreiben"
+
+#: automation_time_axis.cc:314 automation_time_axis.cc:393
+#: automation_time_axis.cc:569 gain_meter.cc:231 generic_pluginui.cc:104
+#: generic_pluginui.cc:533 generic_pluginui.cc:824 panner_ui.cc:158
+msgid "Touch"
+msgstr "Ändern"
+
+#: automation_time_axis.cc:404 generic_pluginui.cc:536 meter_patterns.cc:116
+msgid "???"
+msgstr "???"
+
+#: automation_time_axis.cc:445
+msgid "clear automation"
+msgstr "Automation zurücksetzen"
+
+#: automation_time_axis.cc:545
+msgid "Clear"
+msgstr "Leeren"
+
+#: automation_time_axis.cc:576
+msgid "State"
+msgstr "Automationssmodus"
+
+#: automation_time_axis.cc:592
+msgid "Discrete"
+msgstr "Diskret"
+
+#: automation_time_axis.cc:598 export_format_dialog.cc:489
+msgid "Linear"
+msgstr "Linear"
+
+#: automation_time_axis.cc:604 rhythm_ferret.cc:109 shuttle_control.cc:206
+msgid "Mode"
+msgstr "Modus"
+
+#: bundle_manager.cc:182
+msgid "Disassociate"
+msgstr "Trenne"
+
+#: bundle_manager.cc:186
+msgid "Edit Bundle"
+msgstr "Bundle editieren"
+
+#: bundle_manager.cc:201
+msgid "Direction:"
+msgstr "Richtung:"
+
+#: bundle_manager.cc:206 bundle_manager.cc:210 engine_dialog.cc:881
+#: mixer_strip.cc:165 mixer_strip.cc:379 mixer_strip.cc:2302
+#: rc_option_editor.cc:2828
+msgid "Input"
+msgstr "Eingang"
+
+#: bundle_manager.cc:207 bundle_manager.cc:212 bundle_manager.cc:246
+#: engine_dialog.cc:883 mixer_strip.cc:169 mixer_strip.cc:383
+#: mixer_strip.cc:2305 monitor_section.cc:329 monitor_section.cc:333
+#: rc_option_editor.cc:2832
+msgid "Output"
+msgstr "Ausgang"
+
+#: bundle_manager.cc:265 editor.cc:1958 editor_actions.cc:94
+#: editor_actions.cc:104 rc_option_editor.cc:1539 rc_option_editor.cc:1546
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: bundle_manager.cc:266 editor.cc:5921 editor.cc:5949 editor_actions.cc:345
+#: editor_actions.cc:346 plugin_ui.cc:420 processor_box.cc:2525
+msgid "Delete"
+msgstr "Löschen"
+
+#: bundle_manager.cc:272 bundle_manager.cc:439 editor_route_groups.cc:97
+#: editor_routes.cc:207 midi_list_editor.cc:107 session_metadata_dialog.cc:646
+msgid "Name"
+msgstr "Name"
+
+#: bundle_manager.cc:283
+msgid "New"
+msgstr "Neu"
+
+#: bundle_manager.cc:333
+msgid "Bundle"
+msgstr "Bundle"
+
+#: bundle_manager.cc:418
+msgid "Add Channel"
+msgstr "Kanal hinzufügen"
+
+#: bundle_manager.cc:425
+msgid "Rename Channel"
+msgstr "Kanal umbenennen"
+
+#: configinfo.cc:28
+msgid "Build Configuration"
+msgstr "Build Configuration"
+
+#: control_point_dialog.cc:33
+msgid "Control point"
+msgstr "Automationspunkt"
+
+#: control_point_dialog.cc:45
+msgid "Value"
+msgstr "Wert"
+
+#: edit_note_dialog.cc:42
+msgid "Note"
+msgstr "Note"
+
+#: edit_note_dialog.cc:45
+msgid "Set selected notes to this channel"
+msgstr "Ausgewählte Noten auf diesen Kanal setzen"
+
+#: edit_note_dialog.cc:46
+msgid "Set selected notes to this pitch"
+msgstr "Ausgewählte Noten auf diese Tonhöhe setzen"
+
+#: edit_note_dialog.cc:47
+msgid "Set selected notes to this velocity"
+msgstr "Ausgewählte Noten auf diese Velocity setzen"
+
+#: edit_note_dialog.cc:49
+msgid "Set selected notes to this time"
+msgstr "Ausgewählte Noten auf diesen Zeitpunkt setzen"
+
+#: edit_note_dialog.cc:51
+msgid "Set selected notes to this length"
+msgstr "Ausgewählte Noten auf diese Notenlänge setzen"
+
+#: edit_note_dialog.cc:58 midi_list_editor.cc:105 patch_change_dialog.cc:90
+#: step_entry.cc:394
+msgid "Channel"
+msgstr "Kanal"
+
+#: edit_note_dialog.cc:68
+msgid "Pitch"
+msgstr "Tonhöhe"
+
+#: edit_note_dialog.cc:78 step_entry.cc:408
+msgid "Velocity"
+msgstr "Velocity"
+
+#: edit_note_dialog.cc:88 patch_change_dialog.cc:66
+msgid "Time"
+msgstr "Zeitpunkt"
+
+#: edit_note_dialog.cc:98 editor_regions.cc:115
+#: export_timespan_selector.cc:378 export_timespan_selector.cc:440
+#: location_ui.cc:320 midi_list_editor.cc:115 time_info_box.cc:108
+msgid "Length"
+msgstr "Länge"
+
+#: edit_note_dialog.cc:165
+msgid "edit note"
+msgstr "Note bearbeiten"
+
+#: editor.cc:148
+msgid "CD Frames"
+msgstr "CD-Frames"
+
+#: editor.cc:149
+msgid "TC Frames"
+msgstr "TC Frames"
+
+#: editor.cc:150
+msgid "TC Seconds"
+msgstr "TC Sekunden"
+
+#: editor.cc:151
+msgid "TC Minutes"
+msgstr "TC Minuten"
+
+#: editor.cc:152
+msgid "Seconds"
+msgstr "Sekunden"
+
+#: editor.cc:153
+msgid "Minutes"
+msgstr "Minuten"
+
+#: editor.cc:154 quantize_dialog.cc:37 quantize_dialog.cc:141
+msgid "Beats/128"
+msgstr "Schläge/128"
+
+#: editor.cc:155 quantize_dialog.cc:38 quantize_dialog.cc:143
+msgid "Beats/64"
+msgstr "Schläge/64"
+
+#: editor.cc:156 quantize_dialog.cc:39 quantize_dialog.cc:145
+msgid "Beats/32"
+msgstr "Schläge/32"
+
+#: editor.cc:157
+msgid "Beats/28"
+msgstr "Schläge/28"
+
+#: editor.cc:158
+msgid "Beats/24"
+msgstr "Schläge/24"
+
+#: editor.cc:159
+msgid "Beats/20"
+msgstr "Schläge/20"
+
+#: editor.cc:160 quantize_dialog.cc:40 quantize_dialog.cc:147
+msgid "Beats/16"
+msgstr "Schläge/16"
+
+#: editor.cc:161
+msgid "Beats/14"
+msgstr "Schläge/14"
+
+#: editor.cc:162
+msgid "Beats/12"
+msgstr "Schläge/12"
+
+#: editor.cc:163
+msgid "Beats/10"
+msgstr "Schläge/10"
+
+#: editor.cc:164 quantize_dialog.cc:41 quantize_dialog.cc:149
+msgid "Beats/8"
+msgstr "Schläge/8"
+
+#: editor.cc:165
+msgid "Beats/7"
+msgstr "Schläge/7"
+
+#: editor.cc:166
+msgid "Beats/6"
+msgstr "Schläge/6"
+
+#: editor.cc:167
+msgid "Beats/5"
+msgstr "Schläge/5"
+
+#: editor.cc:168 quantize_dialog.cc:42 quantize_dialog.cc:151
+msgid "Beats/4"
+msgstr "Schläge/4"
+
+#: editor.cc:169 quantize_dialog.cc:43 quantize_dialog.cc:153
+msgid "Beats/3"
+msgstr "Schläge/3"
+
+#: editor.cc:170 quantize_dialog.cc:44 quantize_dialog.cc:155
+msgid "Beats/2"
+msgstr "Schläge/2"
+
+#: editor.cc:171 quantize_dialog.cc:45 quantize_dialog.cc:157
+msgid "Beats"
+msgstr "Schläge"
+
+#: editor.cc:172
+msgid "Bars"
+msgstr "Takte"
+
+#: editor.cc:173
+msgid "Marks"
+msgstr "Marker"
+
+#: editor.cc:174
+msgid "Region starts"
+msgstr "Regionen-Anfang"
+
+#: editor.cc:175
+msgid "Region ends"
+msgstr "Regionen-Ende"
+
+#: editor.cc:176
+msgid "Region syncs"
+msgstr "Regionen-Sync"
+
+#: editor.cc:177
+msgid "Region bounds"
+msgstr "Regionengrenzen"
+
+#: editor.cc:182 editor_actions.cc:519
+msgid "No Grid"
+msgstr "Raster aus"
+
+#: editor.cc:183 editor_actions.cc:520
+msgid "Grid"
+msgstr "Einrasten"
+
+#: editor.cc:184 editor_actions.cc:521
+msgid "Magnetic"
+msgstr "Magnetisch"
+
+#: editor.cc:189 editor.cc:207 editor_actions.cc:121 editor_actions.cc:502
+msgid "Playhead"
+msgstr "Positionszeiger"
+
+#: editor.cc:190 editor_actions.cc:504
+msgid "Marker"
+msgstr "Marker"
+
+#: editor.cc:191 editor.cc:208 editor_actions.cc:503
+msgid "Mouse"
+msgstr "Maus"
+
+#: editor.cc:196 editor_actions.cc:511
+msgid "Slide"
+msgstr "Slide"
+
+#: editor.cc:197
+msgid "Splice"
+msgstr "Splice"
+
+#: editor.cc:198 editor_actions.cc:510
+msgid "Ripple"
+msgstr "Ripple"
+
+#: editor.cc:199 editor_actions.cc:1801 editor_markers.cc:898
+#: editor_rulers.cc:260 location_ui.cc:58
+msgid "Lock"
+msgstr "Lock"
+
+#: editor.cc:204 mono_panner_editor.cc:42
+msgid "Left"
+msgstr "Links"
+
+#: editor.cc:205 mono_panner_editor.cc:47
+msgid "Right"
+msgstr "Rechts"
+
+#: editor.cc:206
+msgid "Center"
+msgstr "Mitte"
+
+#: editor.cc:209 editor.cc:3248
+msgid "Edit point"
+msgstr "Arbeitspunkt"
+
+#: editor.cc:215
+msgid "Mushy"
+msgstr "Matschig"
+
+#: editor.cc:216
+msgid "Smooth"
+msgstr "Klar"
+
+#: editor.cc:217
+msgid "Balanced multitimbral mixture"
+msgstr "Ausgewogene multitimbrale Mischung"
+
+#: editor.cc:218
+msgid "Unpitched percussion with stable notes"
+msgstr "Ungestimmte Perkussion mit stabilen Tönen"
+
+#: editor.cc:219
+msgid "Crisp monophonic instrumental"
+msgstr "Klare monophone Instrumentalmusik"
+
+#: editor.cc:220
+msgid "Unpitched solo percussion"
+msgstr "Ungestimmte Perkussion (solo)"
+
+#: editor.cc:221
+msgid "Resample without preserving pitch"
+msgstr "Resampeln, ohne die Tonhöhe zu erhalten"
+
+#: editor.cc:257
+msgid "Mins:Secs"
+msgstr "Min:Sek"
+
+#: editor.cc:263
+msgid "Location Markers"
+msgstr "Positionsmarker"
+
+#: editor.cc:264
+msgid "Range Markers"
+msgstr "Bereiche"
+
+#: editor.cc:265
+msgid "Loop/Punch Ranges"
+msgstr "Schleifen/Punchbereiche"
+
+#: editor.cc:266 editor_actions.cc:574
+msgid "CD Markers"
+msgstr "CD-Marker"
+
+#: editor.cc:267
+msgid "Video Timeline"
+msgstr "Video Zeitleiste"
+
+#: editor.cc:284
+msgid "mode"
+msgstr "Modus"
+
+#: editor.cc:462 editor_actions.cc:114 editor_actions.cc:573
+msgid "Markers"
+msgstr "Marker"
+
+#: editor.cc:580 rc_option_editor.cc:2413
+msgid "Regions"
+msgstr "Regionen"
+
+#: editor.cc:581
+msgid "Tracks & Busses"
+msgstr "Spuren & Busse"
+
+#: editor.cc:582
+msgid "Snapshots"
+msgstr "Schnappschüsse"
+
+#: editor.cc:583
+msgid "Track & Bus Groups"
+msgstr "Spuren & Bus-Gruppen"
+
+#: editor.cc:584
+msgid "Ranges & Marks"
+msgstr "Bereiche & Marker"
+
+#: editor.cc:731 editor.cc:5773 rc_option_editor.cc:2090
+#: rc_option_editor.cc:2098 rc_option_editor.cc:2106 rc_option_editor.cc:2114
+#: rc_option_editor.cc:2138 rc_option_editor.cc:2150 rc_option_editor.cc:2161
+#: rc_option_editor.cc:2163 rc_option_editor.cc:2171 rc_option_editor.cc:2179
+#: rc_option_editor.cc:2199 rc_option_editor.cc:2211 rc_option_editor.cc:2213
+#: rc_option_editor.cc:2215 rc_option_editor.cc:2223 rc_option_editor.cc:2231
+#: rc_option_editor.cc:2246 rc_option_editor.cc:2250 rc_option_editor.cc:2274
+msgid "Editor"
+msgstr "Editor"
+
+#: editor.cc:1335 editor.cc:4757 editor_actions.cc:134 editor_actions.cc:1877
+msgid "Loop"
+msgstr "Schleife"
+
+#: editor.cc:1341 editor.cc:4784 editor_actions.cc:135 time_info_box.cc:68
+msgid "Punch"
+msgstr "Punch"
+
+#: editor.cc:1453 rc_option_editor.cc:2132
+msgid "Linear (for highly correlated material)"
+msgstr "Linear (für stark korreliertes Material)"
+
+#: editor.cc:1463 rc_option_editor.cc:2133
+msgid "Constant power"
+msgstr "Konstante Energie"
+
+#: editor.cc:1472 rc_option_editor.cc:2134
+msgid "Symmetric"
+msgstr "Symmetrisch"
+
+#: editor.cc:1482 rc_option_editor.cc:2135
+msgid "Slow"
+msgstr "Langsam"
+
+#: editor.cc:1491 rc_option_editor.cc:2136 sfdb_ui.cc:1770 sfdb_ui.cc:1880
+msgid "Fast"
+msgstr "Schnell"
+
+#: editor.cc:1513 editor.cc:1538
+msgid "Deactivate"
+msgstr "Deaktivieren"
+
+#: editor.cc:1515 editor.cc:1540
+msgid "Activate"
+msgstr "Aktivieren"
+
+#: editor.cc:1641 editor.cc:1649 editor_ops.cc:3933
+msgid "Freeze"
+msgstr "Einfrieren"
+
+#: editor.cc:1645
+msgid "Unfreeze"
+msgstr "Auftauen"
+
+#: editor.cc:1784
+msgid "Selected Regions"
+msgstr "Ausgewählte Regionen"
+
+#: editor.cc:1828 editor_markers.cc:933
+msgid "Play Range"
+msgstr "Bereich wiedergeben"
+
+#: editor.cc:1829 editor_markers.cc:936
+msgid "Loop Range"
+msgstr "Bereich in Schleife wiedergeben"
+
+#: editor.cc:1832 editor_markers.cc:943
+msgid "Zoom to Range"
+msgstr "Auf Bereich zoomen"
+
+#: editor.cc:1841 editor_actions.cc:376
+msgid "Move Range Start to Previous Region Boundary"
+msgstr "Anfang des Bereiches zur vorherigen Regiongrenze verschieben"
+
+#: editor.cc:1848 editor_actions.cc:383
+msgid "Move Range Start to Next Region Boundary"
+msgstr "Anfang des Bereiches zur nächsten Regiongrenze verschieben"
+
+#: editor.cc:1855 editor_actions.cc:390
+msgid "Move Range End to Previous Region Boundary"
+msgstr "Ende des Bereiches zur vorherigen Regiongrenze verschieben"
+
+#: editor.cc:1862 editor_actions.cc:397
+msgid "Move Range End to Next Region Boundary"
+msgstr "Ende des Bereiches zur nächsten Regiongrenze verschieben"
+
+#: editor.cc:1868 editor_actions.cc:133 editor_actions.cc:332
+msgid "Separate"
+msgstr "Teilen"
+
+#: editor.cc:1869
+msgid "Convert to Region in Region List"
+msgstr "In Region umwanden (in Regionenliste hinzufügen)"
+
+#: editor.cc:1872 editor_markers.cc:963
+msgid "Select All in Range"
+msgstr "Alles im Bereich auswählen"
+
+#: editor.cc:1875 editor_actions.cc:304
+msgid "Set Loop from Selection"
+msgstr "Schleife aus Auswahl bilden"
+
+#: editor.cc:1876 editor_actions.cc:305
+msgid "Set Punch from Selection"
+msgstr "Punch aus Auswahl bilden"
+
+#: editor.cc:1877 editor_actions.cc:306
+msgid "Set Session Start/End from Selection"
+msgstr "Projektstart/ende auf Auswahl setzen"
+
+#: editor.cc:1880
+msgid "Add Range Markers"
+msgstr "Bereichsmarker einfügen"
+
+#: editor.cc:1883
+msgid "Crop Region to Range"
+msgstr "Region auf Bereich kürzen"
+
+#: editor.cc:1884
+msgid "Fill Range with Region"
+msgstr "Bereich mit Region füllen"
+
+#: editor.cc:1885 editor_actions.cc:318
+msgid "Duplicate Range"
+msgstr "Bereich duplizieren"
+
+#: editor.cc:1888
+msgid "Consolidate Range"
+msgstr "Bereich als neue Region pre-Mixer"
+
+#: editor.cc:1889
+msgid "Consolidate Range With Processing"
+msgstr "Bereich zu neuer Region (mit Signalverarbeitung)"
+
+#: editor.cc:1890
+msgid "Bounce Range to Region List"
+msgstr "Auswahl zur Regionenliste bouncen"
+
+#: editor.cc:1891
+msgid "Bounce Range to Region List With Processing"
+msgstr "Auswahl zur Regionenliste bouncen (mit Signalverarbeitung)"
+
+#: editor.cc:1892 editor_markers.cc:946
+msgid "Export Range..."
+msgstr "Bereich exportieren..."
+
+#: editor.cc:1894
+msgid "Export Video Range..."
+msgstr "Videobereich exportieren..."
+
+#: editor.cc:1910 editor.cc:1992 editor_actions.cc:310
+msgid "Play From Edit Point"
+msgstr "Wiedergabe ab Arbeitspunkt"
+
+#: editor.cc:1911 editor.cc:1993
+msgid "Play From Start"
+msgstr "Wiedergabe ab Anfang"
+
+#: editor.cc:1912
+msgid "Play Region"
+msgstr "Region wiedergeben"
+
+#: editor.cc:1914
+msgid "Loop Region"
+msgstr "Region in Schleife wiedergeben"
+
+#: editor.cc:1924 editor.cc:2002
+msgid "Select All in Track"
+msgstr "Alles in der Spur auswählen"
+
+#: editor.cc:1925 editor.cc:2003 editor_actions.cc:194
+msgid "Select All Objects"
+msgstr "Alle Objekte auswählen"
+
+#: editor.cc:1926 editor.cc:2004
+msgid "Invert Selection in Track"
+msgstr "Auswahl in der Spur umkehren"
+
+#: editor.cc:1927 editor.cc:2005 editor_actions.cc:197
+msgid "Invert Selection"
+msgstr "Auswahl umkehren"
+
+#: editor.cc:1929
+msgid "Set Range to Loop Range"
+msgstr "Bereich als Schleife auswählen"
+
+#: editor.cc:1930 editor_actions.cc:200
+msgid "Set Range to Punch Range"
+msgstr "Bereich als Punchbereich"
+
+#: editor.cc:1931 editor_actions.cc:201
+msgid "Set Range to Selected Regions"
+msgstr "Bereich auf ausgewählte Regionen setzen"
+
+#: editor.cc:1933 editor.cc:2007 editor_actions.cc:203 editor_actions.cc:204
+msgid "Select All After Edit Point"
+msgstr "Alle Regionen nach dem Arbeitspunkt auswählen"
+
+#: editor.cc:1934 editor.cc:2008 editor_actions.cc:205 editor_actions.cc:206
+msgid "Select All Before Edit Point"
+msgstr "Alle Regionen vor dem Arbeitspunkt auswählen"
+
+#: editor.cc:1935 editor.cc:2009
+msgid "Select All After Playhead"
+msgstr "Alle Regionen nach dem Positionszeiger auswählen"
+
+#: editor.cc:1936 editor.cc:2010
+msgid "Select All Before Playhead"
+msgstr "Alle Regionen vor dem Positionszeiger auswählen"
+
+#: editor.cc:1937
+msgid "Select All Between Playhead and Edit Point"
+msgstr "Alle zwischen Positionszeiger und Arbeitspunkt auswählen"
+
+#: editor.cc:1938
+msgid "Select All Within Playhead and Edit Point"
+msgstr "Alles zwischen Positionszeiger und Arbeitspunkt auswählen"
+
+#: editor.cc:1939
+msgid "Select Range Between Playhead and Edit Point"
+msgstr "Wähle Bereich zwischen Positionszeiger und Arbeitspunkt aus"
+
+#: editor.cc:1941 editor.cc:2012 editor_actions.cc:131 editor_actions.cc:132
+msgid "Select"
+msgstr "Auswahl"
+
+#: editor.cc:1949 editor.cc:2020 editor_actions.cc:344 processor_box.cc:2518
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: editor.cc:1950 editor.cc:2021 editor_actions.cc:348 processor_box.cc:2521
+msgid "Copy"
+msgstr "Kopieren"
+
+#: editor.cc:1951 editor.cc:2022 editor_actions.cc:349 processor_box.cc:2529
+msgid "Paste"
+msgstr "Einfügen"
+
+#: editor.cc:1955 editor_actions.cc:91
+msgid "Align"
+msgstr "Ausrichten"
+
+#: editor.cc:1956
+msgid "Align Relative"
+msgstr "Relativ ausrichten"
+
+#: editor.cc:1963
+msgid "Insert Selected Region"
+msgstr "Ausgewählte Region einfügen"
+
+#: editor.cc:1964
+msgid "Insert Existing Media"
+msgstr "Vorhandenes Material importieren"
+
+#: editor.cc:1973 editor.cc:2029
+msgid "Nudge Entire Track Later"
+msgstr "Gesamte Spur schrittweise nach hinten"
+
+#: editor.cc:1974 editor.cc:2030
+msgid "Nudge Track After Edit Point Later"
+msgstr "Spur nach Arbeitspunkt schrittweise nach hinten"
+
+#: editor.cc:1975 editor.cc:2031
+msgid "Nudge Entire Track Earlier"
+msgstr "Gesamte Spur schrittweise nach vorne"
+
+#: editor.cc:1976 editor.cc:2032
+msgid "Nudge Track After Edit Point Earlier"
+msgstr "Spur nach Arbeitspunkt schrittweise nach vorne"
+
+#: editor.cc:1978 editor.cc:2034
+msgid "Nudge"
+msgstr "Verschieben"
+
+#: editor.cc:2249
+msgid ""
+"Playhead position stored with a negative value - ignored (use zero instead)"
+msgstr ""
+"Positionzeiger mit negativer Position - ignoriert (benutze stattdessen Null)"
+
+#: editor.cc:3027 editor.cc:3724 editor.cc:3795 midi_channel_selector.cc:157
+#: midi_channel_selector.cc:395 midi_channel_selector.cc:431
+msgid "All"
+msgstr "Alle"
+
+#: editor.cc:3227
+msgid "Smart Mode (add Range functions to Grab mode)"
+msgstr "Smart-Modus (zusätzliche Bereichsfunktionen im Greifmodus)"
+
+#: editor.cc:3228
+msgid "Grab Mode (select/move objects)"
+msgstr "Greifmodus (Objekte auswählen/bewegen)"
+
+#: editor.cc:3229
+msgid "Cut Mode (split regions)"
+msgstr "Schneidemodus (Regionen teilen)"
+
+#: editor.cc:3230
+msgid "Range Mode (select time ranges)"
+msgstr "Bereichsmodus (Zeitbereiche auswählen)"
+
+#: editor.cc:3231
+msgid "Draw Mode (draw and edit gain/notes/automation)"
+msgstr "Zeichenmodus (zeichne und editiere Lautstärken/Noten/Automationen)"
+
+#: editor.cc:3232
+msgid "Stretch Mode (time-stretch audio and midi regions, preserving pitch)"
+msgstr ""
+"Streckmodus (Audio- und MIDI-Regionen zeitstrecken, ohne die Tonhöhe zu "
+"ändern)"
+
+#: editor.cc:3233
+msgid "Audition Mode (listen to regions)"
+msgstr "Vorhörmodus (Regionen anhören)"
+
+#: editor.cc:3234
+msgid "Internal Edit Mode (edit notes and automation points)"
+msgstr ""
+"Interner Bearbeitungsmodus (Noten und Automationspunkte innerhalb der "
+"Regionen "
+"editieren)"
+
+#: editor.cc:3235
+msgid ""
+"Groups: click to (de)activate\n"
+"Context-click for other operations"
+msgstr ""
+"Gruppen: Klicken zum (De)aktivieren\n"
+"Rechtsklick für Optionen"
+
+#: editor.cc:3236
+msgid "Nudge Region/Selection Later"
+msgstr "Region/Auswahl schrittweise nach hinten"
+
+#: editor.cc:3237
+msgid "Nudge Region/Selection Earlier"
+msgstr "Region/Auswahl schrittweise nach vorne"
+
+#: editor.cc:3238 editor_actions.cc:269
+msgid "Zoom In"
+msgstr "Vergrößern"
+
+#: editor.cc:3239 editor_actions.cc:268
+msgid "Zoom Out"
+msgstr "Verkleinern"
+
+#: editor.cc:3240
+msgid "Zoom to Time Scale"
+msgstr "Zu einer Zeitspanne zoomen"
+
+#: editor.cc:3241 editor.cc:3746 editor_actions.cc:270
+msgid "Zoom to Session"
+msgstr "Auf ganzes Projekt zoomen"
+
+#: editor.cc:3242
+msgid "Zoom focus"
+msgstr "Zoom-Mittelpunkt"
+
+#: editor.cc:3243
+msgid "Expand Tracks"
+msgstr "Spuren vergrößern"
+
+#: editor.cc:3244
+msgid "Shrink Tracks"
+msgstr "Spuren verkleinern"
+
+#: editor.cc:3245
+msgid "Number of visible tracks"
+msgstr "Anzahl der sichtbaren Spuren"
+
+#: editor.cc:3246
+msgid "Snap/Grid Units"
+msgstr "Rastereinheiten"
+
+#: editor.cc:3247
+msgid "Snap/Grid Mode"
+msgstr "Einrastmodus"
+
+#: editor.cc:3249
+msgid "Edit Mode"
+msgstr "Bearbeitungsmodus"
+
+#: editor.cc:3250
+msgid ""
+"Nudge Clock\n"
+"(controls distance used to nudge regions and selections)"
+msgstr ""
+"Uhr für Schrittweite\n"
+"(bestimmt den Abstand für das schrittweise Verschieben von Regionen und "
+"Bereichen)"
+
+#: editor.cc:3518 editor_actions.cc:320
+msgid "Command|Undo"
+msgstr "Rückgängig"
+
+#: editor.cc:3520
+msgid "Command|Undo (%1)"
+msgstr "Rückgängig (%1)"
+
+#: editor.cc:3527 editor_actions.cc:322 editor_actions.cc:323
+#: editor_actions.cc:324
+msgid "Redo"
+msgstr "Wiederherstellen"
+
+#: editor.cc:3529
+msgid "Redo (%1)"
+msgstr "Wiederherstellen (%1)"
+
+#: editor.cc:3548 editor.cc:3572 editor_actions.cc:110 editor_actions.cc:1858
+msgid "Duplicate"
+msgstr "Duplizieren"
+
+#: editor.cc:3549
+msgid "Number of duplications:"
+msgstr "Anzahl der Duplikate:"
+
+#: editor.cc:3723 route_group_dialog.cc:51 time_info_box.cc:67
+msgid "Selection"
+msgstr "Auswahl"
+
+#: editor.cc:3726
+msgid "Fit 1 track"
+msgstr "1 Spur einpassen"
+
+#: editor.cc:3727
+msgid "Fit 2 tracks"
+msgstr "2 Spuren einpassen"
+
+#: editor.cc:3728
+msgid "Fit 4 tracks"
+msgstr "4 Spuren einpassen"
+
+#: editor.cc:3729
+msgid "Fit 8 tracks"
+msgstr "8 Spuren einpassen"
+
+#: editor.cc:3730
+msgid "Fit 16 tracks"
+msgstr "16 Spuren einpassen"
+
+#: editor.cc:3731
+msgid "Fit 24 tracks"
+msgstr "24 Spuren einpassen"
+
+#: editor.cc:3732
+msgid "Fit 32 tracks"
+msgstr "32 Spuren einpassen"
+
+#: editor.cc:3733
+msgid "Fit 48 tracks"
+msgstr "48 Spuren einpassen"
+
+#: editor.cc:3734
+msgid "Fit All tracks"
+msgstr "Alle Spuren einpassen"
+
+#: editor.cc:3735
+msgid "Fit Selection"
+msgstr "Passe Auswahl ein"
+
+#: editor.cc:3737
+msgid "Zoom to 10 ms"
+msgstr "Zoome auf 10 ms"
+
+#: editor.cc:3738
+msgid "Zoom to 100 ms"
+msgstr "Zoome auf 100 ms"
+
+#: editor.cc:3739
+msgid "Zoom to 1 sec"
+msgstr "Zoome auf 1 Sek."
+
+#: editor.cc:3740
+msgid "Zoom to 10 sec"
+msgstr "Zoome auf 10 Sek."
+
+#: editor.cc:3741
+msgid "Zoom to 1 min"
+msgstr "Zoome auf 1 Min."
+
+#: editor.cc:3742
+msgid "Zoom to 10 min"
+msgstr "Zoome auf 10 Min."
+
+#: editor.cc:3743
+msgid "Zoom to 1 hour"
+msgstr "Zoome auf 1 Stunde"
+
+#: editor.cc:3744
+msgid "Zoom to 8 hours"
+msgstr "Zoome auf 8 Stunden"
+
+#: editor.cc:3745
+msgid "Zoom to 24 hours"
+msgstr "Zoome auf 24 Stunden"
+
+#: editor.cc:3747
+msgid "Zoom to Range/Region Selection"
+msgstr "Zoome auf Bereichs-/Regionenauswahl"
+
+#: editor.cc:3817
+msgid "*"
+msgstr "*"
+
+#: editor.cc:4137
+msgid "Playlist Deletion"
+msgstr "Löschen von Wiedergabelisten"
+
+#: editor.cc:4138
+msgid ""
+"Playlist %1 is currently unused.\n"
+"If it is kept, its audio files will not be cleaned.\n"
+"If it is deleted, audio files used by it alone will be cleaned."
+msgstr ""
+"Die Wiedergabeliste %1 wird momentan nicht verwendet.\n"
+"Wenn sie nicht gelöscht wird, können keine Audiodateien aufgeräumt werden, "
+"die von ihr verwendet werden.\n"
+"Falls sie gelöscht wird, werden die ausschließlich von ihr verwendeten "
+"Audiodateien gelöscht."
+
+#: editor.cc:4148
+msgid "Delete Playlist"
+msgstr "Wiedergabeliste löschen"
+
+#: editor.cc:4149
+msgid "Keep Playlist"
+msgstr "Wiedergabeliste behalten"
+
+#: editor.cc:4150 editor_audio_import.cc:597 editor_ops.cc:6407
+#: engine_dialog.cc:2679 sfdb_freesound_mootcher.cc:69 processor_box.cc:2286
+#: processor_box.cc:2311
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: editor.cc:4292
+msgid "new playlists"
+msgstr "Neue Wiedergabelisten"
+
+#: editor.cc:4308
+msgid "copy playlists"
+msgstr "Wiedergabelisten kopieren"
+
+#: editor.cc:4323
+msgid "clear playlists"
+msgstr "Wiedergabelisten zurücksetzen"
+
+#: editor.cc:5068
+msgid "Please wait while %1 loads visual data."
+msgstr "Bitte warten Sie, während %1 die Daten zur Anzeige des Projekts lädt."
+
+#: editor.cc:5920 editor.cc:5951 editor_markers.cc:978 panner_ui.cc:410
+#: processor_box.cc:2549
+msgid "Edit..."
+msgstr "Bearbeiten..."
+
+#: editor.cc:5953 editor_actions.cc:1953
+msgid "Legatize"
+msgstr "überbinden (Legato)"
+
+#: editor.cc:5955 editor_actions.cc:1952
+msgid "Quantize..."
+msgstr "Quantisieren.."
+
+#: editor.cc:5957 editor_actions.cc:1955
+msgid "Remove Overlap"
+msgstr "Überlappung entfernen (Legato)"
+
+#: editor.cc:5959 editor_actions.cc:1954
+msgid "Transform..."
+msgstr "Transformiere..."
+
+#: editor_actions.cc:92
+msgid "Autoconnect"
+msgstr "Automatisch verbinden"
+
+#: editor_actions.cc:93
+msgid "Crossfades"
+msgstr "Crossfades"
+
+#: editor_actions.cc:95
+msgid "Move Selected Marker"
+msgstr "Ausgewählten Positionsmarker verschieben"
+
+#: editor_actions.cc:96
+msgid "Select Range Operations"
+msgstr "Bereichs"
+
+#: editor_actions.cc:97
+msgid "Select Regions"
+msgstr "Region auswählen"
+
+#: editor_actions.cc:98
+msgid "Edit Point"
+msgstr "Arbeitspunkt"
+
+#: editor_actions.cc:99
+msgid "Fade"
+msgstr "Fade"
+
+#: editor_actions.cc:100
+msgid "Latch"
+msgstr "Latch"
+
+#: editor_actions.cc:101 editor_regions.cc:112 region_editor.cc:46
+msgid "Region"
+msgstr "Region"
+
+#: editor_actions.cc:102
+msgid "Layering"
+msgstr "Layering"
+
+#: editor_actions.cc:103 editor_regions.cc:113 stereo_panner_editor.cc:44
+msgid "Position"
+msgstr "Position"
+
+#: editor_actions.cc:105 gain_meter.cc:158 gain_meter.cc:827 panner_ui.cc:176
+#: panner_ui.cc:635 route_time_axis.cc:528
+msgid "Trim"
+msgstr "Anpassen"
+
+#: editor_actions.cc:106 editor_actions.cc:126 route_group_dialog.cc:46
+msgid "Gain"
+msgstr "Lautstärke"
+
+#: editor_actions.cc:107 editor_actions.cc:572
+msgid "Ranges"
+msgstr "Bereiche"
+
+#: editor_actions.cc:108 editor_actions.cc:1854 session_option_editor.cc:135
+#: session_option_editor.cc:144 session_option_editor.cc:151
+msgid "Fades"
+msgstr "Fades"
+
+#: editor_actions.cc:111
+msgid "Link"
+msgstr "Verknüpfen"
+
+#: editor_actions.cc:112 editor_actions.cc:145
+msgid "Zoom Focus"
+msgstr "Zoom Fokus"
+
+#: editor_actions.cc:113
+msgid "Locate to Markers"
+msgstr "Positionszeiger zu Marker setzen"
+
+#: editor_actions.cc:115
+msgid "Meter falloff"
+msgstr "Abfall der Pegelanzeigen"
+
+#: editor_actions.cc:116
+msgid "Meter hold"
+msgstr "Pegelanzeige halten"
+
+#: editor_actions.cc:117 session_option_editor.cc:321
+msgid "MIDI Options"
+msgstr "MIDI Optionen"
+
+#: editor_actions.cc:118
+msgid "Misc Options"
+msgstr "Sonstiges"
+
+#: editor_actions.cc:119 rc_option_editor.cc:2283 route_group_dialog.cc:54
+#: session_option_editor.cc:243 session_option_editor.cc:250
+msgid "Monitoring"
+msgstr "Monitoring"
+
+#: editor_actions.cc:120
+msgid "Active Mark"
+msgstr "Aktiver Marker"
+
+#: editor_actions.cc:123
+msgid "Primary Clock"
+msgstr "Erste Zeitanzeige"
+
+#: editor_actions.cc:124
+msgid "Pullup / Pulldown"
+msgstr "Pull-Up / Pull-Down"
+
+#: editor_actions.cc:125
+msgid "Region operations"
+msgstr "Region(en)"
+
+#: editor_actions.cc:127 ruler_dialog.cc:28
+msgid "Rulers"
+msgstr "Markierungsleisten"
+
+#: editor_actions.cc:128
+msgid "Views"
+msgstr "Ansichten"
+
+#: editor_actions.cc:129
+msgid "Scroll"
+msgstr "Scrollen"
+
+#: editor_actions.cc:130
+msgid "Secondary Clock"
+msgstr "Zweite Zeitanzeige"
+
+#: editor_actions.cc:137
+msgid "Subframes"
+msgstr "Subframes"
+
+#: editor_actions.cc:140
+msgid "Timecode fps"
+msgstr "Timecode FPS"
+
+#: editor_actions.cc:141 route_time_axis.cc:586
+msgid "Height"
+msgstr "Höhe"
+
+#: editor_actions.cc:143
+msgid "Tools"
+msgstr "Werkzeuge"
+
+#: editor_actions.cc:144
+msgid "View"
+msgstr "Ansicht"
+
+#: editor_actions.cc:146
+msgid "Zoom"
+msgstr "Zoom"
+
+#: editor_actions.cc:152
+msgid "Break drag or deselect all"
+msgstr "Ziehen abbrechen oder alles deselektieren"
+
+#: editor_actions.cc:157
+msgid "Session|Lock"
+msgstr "Sperren"
+
+#: editor_actions.cc:159
+msgid "Show Editor Mixer"
+msgstr "Mixer-Panel zeigen"
+
+#: editor_actions.cc:160
+msgid "Show Editor List"
+msgstr "Seitenleiste anzeigen"
+
+#: editor_actions.cc:162
+msgid "Playhead to Next Region Boundary"
+msgstr "Positionszeiger zur nächsten Regiongrenze"
+
+#: editor_actions.cc:163
+msgid "Playhead to Next Region Boundary (No Track Selection)"
+msgstr "Positionszeiger zur nächsten Regiongrenze (ohne Spurauswahl)"
+
+#: editor_actions.cc:164
+msgid "Playhead to Previous Region Boundary"
+msgstr "Positionszeiger zur vorherigen Regiongrenze"
+
+#: editor_actions.cc:165
+msgid "Playhead to Previous Region Boundary (No Track Selection)"
+msgstr "Positionszeiger zur vorherigen Regiongrenze (ohne Spurauswahl)"
+
+#: editor_actions.cc:167
+msgid "Playhead to Next Region Start"
+msgstr "Positionszeiger zum Anfang der nächsten Region"
+
+#: editor_actions.cc:168
+msgid "Playhead to Next Region End"
+msgstr "Positionszeiger zum Ende der nächsten Region"
+
+#: editor_actions.cc:169
+msgid "Playhead to Next Region Sync"
+msgstr "Positionszeiger zum Einrastpunkt der nächsten Region"
+
+#: editor_actions.cc:171
+msgid "Playhead to Previous Region Start"
+msgstr "Positionszeiger zum Anfang der vorherigen Region"
+
+#: editor_actions.cc:172
+msgid "Playhead to Previous Region End"
+msgstr "Positionszeiger zum Ende der vorherigen Region"
+
+#: editor_actions.cc:173
+msgid "Playhead to Previous Region Sync"
+msgstr "Positionszeiger zum Einrastpunkt der vorherigen Region"
+
+#: editor_actions.cc:175
+msgid "To Next Region Boundary"
+msgstr "Zur nächsten Regiongrenze"
+
+#: editor_actions.cc:176
+msgid "To Next Region Boundary (No Track Selection)"
+msgstr "Zur nächsten Regiongrenze (ohne Spurauswahl)"
+
+#: editor_actions.cc:177
+msgid "To Previous Region Boundary"
+msgstr "Zur vorherigen Regiongrenze"
+
+#: editor_actions.cc:178
+msgid "To Previous Region Boundary (No Track Selection)"
+msgstr "Zur vorherigen Regiongrenze  (ohne Spurauswahl)"
+
+#: editor_actions.cc:180
+msgid "To Next Region Start"
+msgstr "Zum nächsten Regionen-Anfang"
+
+#: editor_actions.cc:181
+msgid "To Next Region End"
+msgstr "Zum nächsten Regionen-Ende"
+
+#: editor_actions.cc:182
+msgid "To Next Region Sync"
+msgstr "Zum nächsten Regionen-Synchronisationspunkt"
+
+#: editor_actions.cc:184
+msgid "To Previous Region Start"
+msgstr "Zum vorherigen Anfang einer Region"
+
+#: editor_actions.cc:185
+msgid "To Previous Region End"
+msgstr "Zum vorherigen Ende einer Region"
+
+#: editor_actions.cc:186
+msgid "To Previous Region Sync"
+msgstr "Zum vorherigen Synchronisationspunkt einer Region"
+
+#: editor_actions.cc:188
+msgid "To Range Start"
+msgstr "Zum Anfang des Auswahlbereichs"
+
+#: editor_actions.cc:189
+msgid "To Range End"
+msgstr "Zum Ende des Auswahlbereichs"
+
+#: editor_actions.cc:191
+msgid "Playhead to Range Start"
+msgstr "Positionszeiger zum Anfang des Auswahlbereichs"
+
+#: editor_actions.cc:192
+msgid "Playhead to Range End"
+msgstr "Positionszeiger zum Ende des Auswahlbereichs"
+
+#: editor_actions.cc:195
+msgid "Select All Tracks"
+msgstr "Alle Spuren auswählen"
+
+#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2535
+msgid "Deselect All"
+msgstr "Nichts auswählen"
+
+#: editor_actions.cc:199
+msgid "Set Range in Loop Range"
+msgstr "Bereich auf Schleife setzen"
+
+#: editor_actions.cc:208
+msgid "Select All Overlapping Edit Range"
+msgstr "Alle Regionen des Bearbeitungsbereichs auswählen "
+
+#: editor_actions.cc:209
+msgid "Select All Inside Edit Range"
+msgstr "Alles inerhalb des Bearbeitungsbereichs auswählen"
+
+#: editor_actions.cc:211
+msgid "Select Edit Range"
+msgstr "Editierbereich auswählen"
+
+#: editor_actions.cc:213
+msgid "Select All in Punch Range"
+msgstr "Alle Regionen im Punchbereich auswählen"
+
+#: editor_actions.cc:214
+msgid "Select All in Loop Range"
+msgstr "Alle Regionen innerhalb der Schleife auswählen"
+
+#: editor_actions.cc:216
+msgid "Select Next Track or Bus"
+msgstr "Nächste Spur/Bus auswählen"
+
+#: editor_actions.cc:217
+msgid "Select Previous Track or Bus"
+msgstr "Vorherige Spur/Bus auswählen"
+
+#: editor_actions.cc:219
+msgid "Toggle Record Enable"
+msgstr "Aufnahmebereitschaft umschalten"
+
+#: editor_actions.cc:221
+msgid "Toggle Solo"
+msgstr "Solo umschalten"
+
+#: editor_actions.cc:223
+msgid "Toggle Mute"
+msgstr "Mute umschalten"
+
+#: editor_actions.cc:225
+msgid "Toggle Solo Isolate"
+msgstr "Isoliertes Solo umschalten"
+
+#: editor_actions.cc:230
+msgid "Save View %1"
+msgstr "Ansicht %1 speichern"
+
+#: editor_actions.cc:236
+msgid "Go to View %1"
+msgstr "Ansicht %1 aufrufen"
+
+#: editor_actions.cc:242
+msgid "Locate to Mark %1"
+msgstr "Positionszeiger zu Marker %1 setzen"
+
+#: editor_actions.cc:246 editor_actions.cc:247
+msgid "Jump to Next Mark"
+msgstr "Zu nächstem Marker springen"
+
+#: editor_actions.cc:248 editor_actions.cc:249
+msgid "Jump to Previous Mark"
+msgstr "Zur vorherigen Marker springen"
+
+#: editor_actions.cc:251
+msgid "Set Session Start from Playhead"
+msgstr "Projektbeginn auf Positionszeiger setzen"
+
+#: editor_actions.cc:252
+msgid "Set Session End from Playhead"
+msgstr "Projektende auf Positionszeiger setzen"
+
+#: editor_actions.cc:254 editor_actions.cc:255
+msgid "Add Mark from Playhead"
+msgstr "Marker am Positionszeiger setzen"
+
+#: editor_actions.cc:257 editor_actions.cc:258
+msgid "Remove Mark at Playhead"
+msgstr "Marker beim Positionszeiger entfernen"
+
+#: editor_actions.cc:260
+msgid "Nudge Next Later"
+msgstr "Nächste Region schrittweise nach hinten"
+
+#: editor_actions.cc:261
+msgid "Nudge Next Earlier"
+msgstr "Nächste Region schrittweise nach vorne"
+
+#: editor_actions.cc:263
+msgid "Nudge Playhead Forward"
+msgstr "Positionszeiger vorwärts"
+
+#: editor_actions.cc:264
+msgid "Nudge Playhead Backward"
+msgstr "Positionszeiger rückwärts"
+
+#: editor_actions.cc:265
+msgid "Playhead To Next Grid"
+msgstr "Positionszeiger zum nächsten Rasterpunkt"
+
+#: editor_actions.cc:266
+msgid "Playhead To Previous Grid"
+msgstr "Positionszeiger zum vorherigen Rasterpunkt"
+
+#: editor_actions.cc:271
+msgid "Zoom to Selection"
+msgstr "Zoome zu Auswahl"
+
+#: editor_actions.cc:272
+msgid "Toggle Zoom State"
+msgstr "Letzten Zoom wählen"
+
+#: editor_actions.cc:274
+msgid "Expand Track Height"
+msgstr "Spurhöhe vergrößern"
+
+#: editor_actions.cc:275
+msgid "Shrink Track Height"
+msgstr "Spurhöhe verkleinern"
+
+#: editor_actions.cc:277
+msgid "Move Selected Tracks Up"
+msgstr "Ausgewählte Spuren nach oben verschieben"
+
+#: editor_actions.cc:279
+msgid "Move Selected Tracks Down"
+msgstr "Ausgewählte Spuren nach unten verschieben"
+
+#: editor_actions.cc:282
+msgid "Scroll Tracks Up"
+msgstr "Spuren nach oben scrollen"
+
+#: editor_actions.cc:284
+msgid "Scroll Tracks Down"
+msgstr "Spuren nach unten scrollen"
+
+#: editor_actions.cc:286
+msgid "Step Tracks Up"
+msgstr "Spuren langsam nach oben scrollen"
+
+#: editor_actions.cc:288
+msgid "Step Tracks Down"
+msgstr "Spuren langsam nach unten scrollen"
+
+#: editor_actions.cc:291
+msgid "Scroll Backward"
+msgstr "Nach rechts scrollen"
+
+#: editor_actions.cc:292
+msgid "Scroll Forward"
+msgstr "Nach links scrollen"
+
+#: editor_actions.cc:293
+msgid "Center Playhead"
+msgstr "Positionszeiger zentrieren"
+
+#: editor_actions.cc:294
+msgid "Center Edit Point"
+msgstr "Arbeitspunkt zentrieren"
+
+#: editor_actions.cc:296
+msgid "Playhead Forward"
+msgstr "Positionszeiger vorwärts"
+
+#: editor_actions.cc:297
+msgid "Playhead Backward"
+msgstr "Positionszeiger rückwärts"
+
+#: editor_actions.cc:299
+msgid "Playhead to Active Mark"
+msgstr "Positionszeiger zur aktiven Markierung"
+
+#: editor_actions.cc:300
+msgid "Active Mark to Playhead"
+msgstr "Aktiven Marker zum Positionszeiger verschieben"
+
+#: editor_actions.cc:302
+msgid "Use Skip Ranges"
+msgstr "Benutze Sprungbereiche"
+
+#: editor_actions.cc:309
+msgid "Play Selected Regions"
+msgstr "Ausgewählte Regionen wiedergeben"
+
+#: editor_actions.cc:311
+msgid "Play from Edit Point and Return"
+msgstr "Wiedergabe ab Arbeitspunkt & Zurück"
+
+#: editor_actions.cc:313
+msgid "Play Edit Range"
+msgstr "Editierbereich wiedergeben"
+
+#: editor_actions.cc:315
+msgid "Playhead to Mouse"
+msgstr "Positionszeiger zur Mausposition"
+
+#: editor_actions.cc:316
+msgid "Active Marker to Mouse"
+msgstr "Aktiven Marker zur Mausposition"
+
+#: editor_actions.cc:326
+msgid "Undo Selection Change"
+msgstr "Auswahländerung rückgängig machen"
+
+#: editor_actions.cc:327
+msgid "Redo Selection Change"
+msgstr "Auswahländerung wiederherstellen"
+
+#: editor_actions.cc:329
+msgid "Export Audio"
+msgstr "Audio exportieren"
+
+#: editor_actions.cc:330 export_dialog.cc:396
+msgid "Export Range"
+msgstr "Bereich exportieren"
+
+#: editor_actions.cc:335
+msgid "Separate Using Punch Range"
+msgstr "an Punch-Bereichsgrenzen teilen"
+
+#: editor_actions.cc:338
+msgid "Separate Using Loop Range"
+msgstr "an Schleifengrenzen teilen"
+
+#: editor_actions.cc:341 editor_actions.cc:363
+msgid "Crop"
+msgstr "Auf Bereich zuschneiden"
+
+#: editor_actions.cc:351
+msgid "Fade Range Selection"
+msgstr "Bereichsauswahl faden"
+
+#: editor_actions.cc:353
+msgid "Set Tempo from Edit Range = Bar"
+msgstr "Editierbereich = Taktlänge setzen"
+
+#: editor_actions.cc:355
+msgid "Log"
+msgstr "Log"
+
+#: editor_actions.cc:358 editor_actions.cc:360
+msgid "Move to Next Transient"
+msgstr "Zum nächsten Transienten bewegen"
+
+#: editor_actions.cc:359 editor_actions.cc:361
+msgid "Move to Previous Transient"
+msgstr "Zum vorigen Transienten bewegen"
+
+#: editor_actions.cc:365 editor_actions.cc:368
+msgid "Start Range"
+msgstr "Bereich beginnen"
+
+#: editor_actions.cc:366 editor_actions.cc:369
+msgid "Finish Range"
+msgstr "Bereich beenden"
+
+#: editor_actions.cc:401
+msgid "Follow Playhead"
+msgstr "Positionszeiger folgen"
+
+#: editor_actions.cc:402
+msgid "Remove Last Capture"
+msgstr "Letzte Aufnahme entfernen"
+
+#: editor_actions.cc:404
+msgid "Stationary Playhead"
+msgstr "stehender Positionszeiger"
+
+#: editor_actions.cc:406 insert_remove_time_dialog.cc:32
+msgid "Insert Time"
+msgstr "Stille Einfügen"
+
+#: editor_actions.cc:408 insert_remove_time_dialog.cc:32
+msgid "Remove Time"
+msgstr "Zeit entfernen"
+
+#: editor_actions.cc:413
+msgid "Toggle Active"
+msgstr "Spur De/Aktivieren"
+
+#: editor_actions.cc:415 editor_actions.cc:1780 editor_markers.cc:914
+#: editor_markers.cc:979 editor_snapshots.cc:122 mixer_strip.cc:1603
+#: route_time_axis.cc:867
+msgid "Remove"
+msgstr "Löschen"
+
+#: editor_actions.cc:420
+msgid "Fit Selection (Vertical)"
+msgstr "Auswahl einpassen (vertikal)"
+
+#: editor_actions.cc:422 time_axis_view.cc:1382
+msgid "Largest"
+msgstr "Am größten"
+
+#: editor_actions.cc:425 time_axis_view.cc:1383
+msgid "Larger"
+msgstr "Größer"
+
+#: editor_actions.cc:428 editor_rulers.cc:249 time_axis_view.cc:1384
+msgid "Large"
+msgstr "Groß"
+
+#: editor_actions.cc:434 editor_rulers.cc:253 time_axis_view.cc:1386
+msgid "Small"
+msgstr "Klein"
+
+#: editor_actions.cc:438
+msgid "Sound Selected MIDI Notes"
+msgstr "ausgewählte Noten abspielen"
+
+#: editor_actions.cc:443
+msgid "Zoom Focus Left"
+msgstr "Am linken Rand ausrichten"
+
+#: editor_actions.cc:444
+msgid "Zoom Focus Right"
+msgstr "Am rechten Rand ausrichten"
+
+#: editor_actions.cc:445
+msgid "Zoom Focus Center"
+msgstr "Zentriert ausrichten"
+
+#: editor_actions.cc:446
+msgid "Zoom Focus Playhead"
+msgstr "Am Positionszeiger ausrichten"
+
+#: editor_actions.cc:447
+msgid "Zoom Focus Mouse"
+msgstr "Zoom Fokus zur Maus"
+
+#: editor_actions.cc:448
+msgid "Zoom Focus Edit Point"
+msgstr "Zoom Fokus zu Arbeitspunkt"
+
+#: editor_actions.cc:450
+msgid "Next Zoom Focus"
+msgstr "Zoom FokusNächster "
+
+#: editor_actions.cc:456
+msgid "Smart Object Mode"
+msgstr "Smarter Objektmodus"
+
+#: editor_actions.cc:459
+msgid "Smart"
+msgstr "Smart"
+
+#: editor_actions.cc:462
+msgid "Object Tool"
+msgstr "Objektwerkzeug"
+
+#: editor_actions.cc:467
+msgid "Range Tool"
+msgstr "Bereich-Werkzeug (Range)"
+
+#: editor_actions.cc:472
+msgid "Note Drawing Tool"
+msgstr "Noten-Malwerkzeug"
+
+#: editor_actions.cc:477
+msgid "Audition Tool"
+msgstr "Vorhör-Werkzeug"
+
+#: editor_actions.cc:482
+msgid "Time FX Tool"
+msgstr "TimeFX-Werkzeug"
+
+#: editor_actions.cc:487
+msgid "Content Tool"
+msgstr "Inhaltswerkzeug"
+
+#: editor_actions.cc:493
+msgid "Cut Tool"
+msgstr "Schneidewerkzeug"
+
+#: editor_actions.cc:499
+msgid "Step Mouse Mode"
+msgstr "Schritt-Mausmodus"
+
+#: editor_actions.cc:506
+msgid "Change Edit Point"
+msgstr "Arbeitspunkt ändern"
+
+#: editor_actions.cc:507
+msgid "Change Edit Point Including Marker"
+msgstr "Arbeitspunkt ändern (auch auf Marker wechseln)"
+
+#: editor_actions.cc:512
+msgid "EditMode|Lock"
+msgstr "Sperren"
+
+#: editor_actions.cc:513
+msgid "Cycle Edit Mode"
+msgstr "Bearbeitungsmodus weiterschalten"
+
+#: editor_actions.cc:515
+msgid "Snap to"
+msgstr "Einrasten"
+
+#: editor_actions.cc:516
+msgid "Snap Mode"
+msgstr "Einrastmodus"
+
+#: editor_actions.cc:523
+msgid "Next Snap Mode"
+msgstr "Nächster Einrastmodus"
+
+#: editor_actions.cc:524
+msgid "Next Snap Choice"
+msgstr "Nächste Einrastmöglichkeit"
+
+#: editor_actions.cc:525
+msgid "Next Musical Snap Choice"
+msgstr "Nächster Einrastmöglichkeit (musikalisch)"
+
+#: editor_actions.cc:526
+msgid "Previous Snap Choice"
+msgstr "Vorige Einrastmöglichkeit"
+
+#: editor_actions.cc:527
+msgid "Previous Musical Snap Choice"
+msgstr " Vorige Einrastmöglichkeit (musikalisch)"
+
+#: editor_actions.cc:532
+msgid "Snap to CD Frame"
+msgstr "An CD-Frames einrasten"
+
+#: editor_actions.cc:533
+msgid "Snap to Timecode Frame"
+msgstr "An Timecode-Frames einrasten"
+
+#: editor_actions.cc:534
+msgid "Snap to Timecode Seconds"
+msgstr "An Timecode-Sekunden einrasten"
+
+#: editor_actions.cc:535
+msgid "Snap to Timecode Minutes"
+msgstr "An Timecode-Minuten einrasten"
+
+#: editor_actions.cc:536
+msgid "Snap to Seconds"
+msgstr "An Sekunden einrasten"
+
+#: editor_actions.cc:537
+msgid "Snap to Minutes"
+msgstr "An Minuten einrasten"
+
+#: editor_actions.cc:539
+msgid "Snap to One Twenty Eighths"
+msgstr "An Schläge/28 einrasten"
+
+#: editor_actions.cc:540
+msgid "Snap to Sixty Fourths"
+msgstr "An Schläge/128 einrasten"
+
+#: editor_actions.cc:541
+msgid "Snap to Thirty Seconds"
+msgstr "An Schläge/32 einrasten"
+
+#: editor_actions.cc:542
+msgid "Snap to Twenty Eighths"
+msgstr "An Schläge/28 einrasten"
+
+#: editor_actions.cc:543
+msgid "Snap to Twenty Fourths"
+msgstr "An Schläge/24 einrasten"
+
+#: editor_actions.cc:544
+msgid "Snap to Twentieths"
+msgstr "An Schläge/20 einrasten"
+
+#: editor_actions.cc:545
+msgid "Snap to Sixteenths"
+msgstr "An Schläge/16 einrasten"
+
+#: editor_actions.cc:546
+msgid "Snap to Fourteenths"
+msgstr "An Schläge/14 einrasten"
+
+#: editor_actions.cc:547
+msgid "Snap to Twelfths"
+msgstr "An Schläge/12 einrasten"
+
+#: editor_actions.cc:548
+msgid "Snap to Tenths"
+msgstr "An Schläge/10 einrasten"
+
+#: editor_actions.cc:549
+msgid "Snap to Eighths"
+msgstr "An Schläge/8 einrasten"
+
+#: editor_actions.cc:550
+msgid "Snap to Sevenths"
+msgstr "An Schläge/7 einrasten"
+
+#: editor_actions.cc:551
+msgid "Snap to Sixths"
+msgstr "An Schläge/6 einrasten"
+
+#: editor_actions.cc:552
+msgid "Snap to Fifths"
+msgstr "An Schläge/5 einrasten"
+
+#: editor_actions.cc:553
+msgid "Snap to Quarters"
+msgstr "An Schläge/4 einrasten"
+
+#: editor_actions.cc:554
+msgid "Snap to Thirds"
+msgstr "An Triolen einrasten"
+
+#: editor_actions.cc:555
+msgid "Snap to Halves"
+msgstr "An Schläge/2 einrasten"
+
+#: editor_actions.cc:557
+msgid "Snap to Beat"
+msgstr "An Schlägen einrasten"
+
+#: editor_actions.cc:558
+msgid "Snap to Bar"
+msgstr "An Takten einrasten"
+
+#: editor_actions.cc:559
+msgid "Snap to Mark"
+msgstr "An Markern einrasten"
+
+#: editor_actions.cc:560
+msgid "Snap to Region Start"
+msgstr "An Regionenanfang einrasten"
+
+#: editor_actions.cc:561
+msgid "Snap to Region End"
+msgstr "An Regionenende einrasten"
+
+#: editor_actions.cc:562
+msgid "Snap to Region Sync"
+msgstr "An Regionen-Synchronisationspunkt einrasten"
+
+#: editor_actions.cc:563
+msgid "Snap to Region Boundary"
+msgstr "An Regionengrenzen einrasten"
+
+#: editor_actions.cc:565
+msgid "Show Marker Lines"
+msgstr "Markerlinien anzeigen"
+
+#: editor_actions.cc:575
+msgid "Loop/Punch"
+msgstr "Schleifen/Punchbereiche"
+
+#: editor_actions.cc:579
+msgid "Min:Sec"
+msgstr "Min:Sek"
+
+#: editor_actions.cc:581 editor_actions.cc:584 editor_rulers.cc:271
+msgid "Video Monitor"
+msgstr "Videomonitor"
+
+#: editor_actions.cc:583 rc_option_editor.cc:2734
+msgid "Video"
+msgstr "Video"
+
+#: editor_actions.cc:586
+msgid "Always on Top"
+msgstr "Immer oben"
+
+#: editor_actions.cc:588
+msgid "Frame number"
+msgstr "Framenummer"
+
+#: editor_actions.cc:589
+msgid "Timecode Background"
+msgstr "Timecode-Hintergrund"
+
+#: editor_actions.cc:590
+msgid "Fullscreen"
+msgstr "Vollbild"
+
+#: editor_actions.cc:591
+msgid "Letterbox"
+msgstr "Letterbox"
+
+#: editor_actions.cc:592
+msgid "Original Size"
+msgstr "Originalgröße"
+
+#: editor_actions.cc:649
+msgid "Sort"
+msgstr "Sortieren"
+
+#: editor_actions.cc:660 editor_routes.cc:484 mixer_ui.cc:1212
+msgid "Show All"
+msgstr "Alles anzeigen"
+
+#: editor_actions.cc:661
+msgid "Show Automatic Regions"
+msgstr "Automatische Regionen anzeigen"
+
+#: editor_actions.cc:663
+msgid "Ascending"
+msgstr "aufsteigend"
+
+#: editor_actions.cc:665
+msgid "Descending"
+msgstr "absteigend"
+
+#: editor_actions.cc:668
+msgid "By Region Name"
+msgstr "nach Name der Region"
+
+#: editor_actions.cc:670
+msgid "By Region Length"
+msgstr "nach Länge der Region"
+
+#: editor_actions.cc:672
+msgid "By Region Position"
+msgstr "nach Position der Region"
+
+#: editor_actions.cc:674
+msgid "By Region Timestamp"
+msgstr "nach Zeitstempel der Region"
+
+#: editor_actions.cc:676
+msgid "By Region Start in File"
+msgstr "nach Anfang der Region in der Datei"
+
+#: editor_actions.cc:678
+msgid "By Region End in File"
+msgstr "nach Ende der Region in der Datei"
+
+#: editor_actions.cc:680
+msgid "By Source File Name"
+msgstr "nach Namen der Quelldatei"
+
+#: editor_actions.cc:682
+msgid "By Source File Length"
+msgstr "nach Länge der Quelldatei"
+
+#: editor_actions.cc:684
+msgid "By Source File Creation Date"
+msgstr "nach Erstellungsdatum der Quelldatei"
+
+#: editor_actions.cc:686
+msgid "By Source Filesystem"
+msgstr "nach Dateisystem der Quelle"
+
+#: editor_actions.cc:689
+msgid "Remove Unused"
+msgstr "Ungenutzte entfernen"
+
+#: editor_actions.cc:691
+msgid "Import PT session"
+msgstr "PT Projekt importieren"
+
+#: editor_actions.cc:696 editor_audio_import.cc:282 editor_pt_import.cc:148
+#: session_import_dialog.cc:75 session_import_dialog.cc:95
+#: session_metadata_dialog.cc:418 editor_videotimeline.cc:91
+msgid "Import"
+msgstr "Importieren"
+
+#: editor_actions.cc:699
+msgid "Import to Region List..."
+msgstr "In Regionenliste importieren"
+
+#: editor_actions.cc:702 session_import_dialog.cc:44
+msgid "Import From Session"
+msgstr "Aus Projekt importieren"
+
+#: editor_actions.cc:706
+msgid "Bring all media into session folder"
+msgstr "Alle Medien in Projektordner kopieren"
+
+#: editor_actions.cc:709
+msgid "Show Summary"
+msgstr "Projektübersicht anzeigen"
+
+#: editor_actions.cc:711
+msgid "Show Group Tabs"
+msgstr "Gruppierungsleiste anzeigen"
+
+#: editor_actions.cc:713
+msgid "Show Measure Lines"
+msgstr "Zeige Taktlinien"
+
+#: editor_actions.cc:717
+msgid "Show Logo"
+msgstr "Zeige Logo"
+
+#: editor_actions.cc:721
+msgid "Toggle MIDI Input Active for Editor-Selected Tracks/Busses"
+msgstr "MIDI Eingang für im Editor ausgewählte Spuren/Busse de/aktivieren"
+
+#: editor_actions.cc:744
+msgid "Loaded editor bindings from %1"
+msgstr "Editor-Tastenkürzel aus %1 geladen"
+
+#: editor_actions.cc:746
+msgid "Could not find editor.bindings in search path %1"
+msgstr "Konnte editor.bindings im Suchpfad %1 nicht finden"
+
+#: editor_actions.cc:1090 editor_actions.cc:1486 editor_actions.cc:1497
+#: editor_actions.cc:1550 editor_actions.cc:1561 editor_actions.cc:1608
+#: editor_actions.cc:1618 editor_regions.cc:1571
+msgid "programming error: %1: %2"
+msgstr "Programmierfehler: %1: %2"
+
+#: editor_actions.cc:1786
+msgid "Raise"
+msgstr "Nach oben"
+
+#: editor_actions.cc:1789
+msgid "Raise to Top"
+msgstr "Ganz nach oben"
+
+#: editor_actions.cc:1792
+msgid "Lower"
+msgstr "Nach unten"
+
+#: editor_actions.cc:1795
+msgid "Lower to Bottom"
+msgstr "Ganz nach unten"
+
+#: editor_actions.cc:1798
+msgid "Move to Original Position"
+msgstr "Zur Ursprungsposition verschieben"
+
+#: editor_actions.cc:1803
+msgid "Lock to Video"
+msgstr "an Video koppeln"
+
+#: editor_actions.cc:1808 editor_markers.cc:905
+msgid "Glue to Bars and Beats"
+msgstr "An Takte und Schläge binden"
+
+#: editor_actions.cc:1813
+msgid "Remove Sync"
+msgstr "Synchronisationspunkt entfernen"
+
+#: editor_actions.cc:1816 mixer_strip.cc:2068 monitor_section.cc:278
+#: monitor_section.cc:368 route_time_axis.cc:255 route_time_axis.cc:537
+msgid "Mute"
+msgstr "Mute"
+
+#: editor_actions.cc:1819
+msgid "Normalize..."
+msgstr "Normalisieren..."
+
+#: editor_actions.cc:1822
+msgid "Reverse"
+msgstr "Umkehren"
+
+#: editor_actions.cc:1825
+msgid "Make Mono Regions"
+msgstr "In Mono-Regionen umwandeln"
+
+#: editor_actions.cc:1828
+msgid "Boost Gain"
+msgstr "Lautstärke erhöhen"
+
+#: editor_actions.cc:1831
+msgid "Cut Gain"
+msgstr "Lautstärke reduzieren"
+
+#: editor_actions.cc:1834
+msgid "Pitch Shift..."
+msgstr "Tonhöhe ändern..."
+
+#: editor_actions.cc:1837
+msgid "Transpose..."
+msgstr "Transponieren..."
+
+#: editor_actions.cc:1840
+msgid "Opaque"
+msgstr "Deckend"
+
+#: editor_actions.cc:1844 editor_regions.cc:117
+msgid "Fade In"
+msgstr "Fade In"
+
+#: editor_actions.cc:1849 editor_regions.cc:118
+msgid "Fade Out"
+msgstr "Fade Out"
+
+#: editor_actions.cc:1864
+msgid "Multi-Duplicate..."
+msgstr "Mehrfach duplizieren..."
+
+#: editor_actions.cc:1869
+msgid "Fill Track"
+msgstr "Spur auffüllen"
+
+#: editor_actions.cc:1873 editor_markers.cc:993
+msgid "Set Loop Range"
+msgstr "Schleife erstellen"
+
+#: editor_actions.cc:1880
+msgid "Set Punch"
+msgstr "Punchbereich erstellen"
+
+#: editor_actions.cc:1884
+msgid "Add Single Range Marker"
+msgstr "Einzelnen Bereichsmarker einfügen"
+
+#: editor_actions.cc:1889
+msgid "Add Range Marker Per Region"
+msgstr "Einen Bereichsmarker pro Region einfügen"
+
+#: editor_actions.cc:1893
+msgid "Snap Position To Grid"
+msgstr "Positionszeiger einrasten"
+
+#: editor_actions.cc:1896
+msgid "Close Gaps"
+msgstr "Lücken schließen"
+
+#: editor_actions.cc:1899
+msgid "Rhythm Ferret..."
+msgstr "Rhythm Ferret..."
+
+#: editor_actions.cc:1902
+msgid "Export..."
+msgstr "Exportieren..."
+
+#: editor_actions.cc:1908
+msgid "Separate Under"
+msgstr "Bereich unter aktueller Region entfernen"
+
+#: editor_actions.cc:1912 editor_actions.cc:1913
+msgid "Set Fade In Length"
+msgstr "Fade-In bis Positionszeiger"
+
+#: editor_actions.cc:1914 editor_actions.cc:1915
+msgid "Set Fade Out Length"
+msgstr "Fade-Out ab Positionszeiger"
+
+#: editor_actions.cc:1917
+msgid "Set Tempo from Region = Bar"
+msgstr "Regionlänge = Taktlänge setzen"
+
+#: editor_actions.cc:1922
+msgid "Split at Percussion Onsets"
+msgstr "Regionen an perkussiven Schlägen teilen"
+
+#: editor_actions.cc:1927
+msgid "List Editor..."
+msgstr "Eventlisteneditor..."
+
+#: editor_actions.cc:1930
+msgid "Properties..."
+msgstr "Eigenschaften..."
+
+#: editor_actions.cc:1934
+msgid "Bounce (with processing)"
+msgstr "Bounce (mit Signalverarbeitung)"
+
+#: editor_actions.cc:1935
+msgid "Bounce (without processing)"
+msgstr "Bounce (ohne Signalverarbeitung)"
+
+#: editor_actions.cc:1936
+msgid "Combine"
+msgstr "Verbinden (combine)"
+
+#: editor_actions.cc:1937
+msgid "Uncombine"
+msgstr "Trennen (uncombine)"
+
+#: editor_actions.cc:1939
+msgid "Spectral Analysis..."
+msgstr "FFT-Analyse"
+
+#: editor_actions.cc:1941
+msgid "Reset Envelope"
+msgstr "Lautstärkekurve zurücksetzen"
+
+#: editor_actions.cc:1943
+msgid "Reset Gain"
+msgstr "Lautstärke zurücksetzen"
+
+#: editor_actions.cc:1948
+msgid "Envelope Active"
+msgstr "Lautstärkekurve ist aktiv"
+
+#: editor_actions.cc:1956 editor_actions.cc:1957
+msgid "Insert Patch Change..."
+msgstr "Patch Change einfügen..."
+
+#: editor_actions.cc:1958
+msgid "Unlink from other copies"
+msgstr "Von anderen Kopien entkoppeln"
+
+#: editor_actions.cc:1959
+msgid "Strip Silence..."
+msgstr "Stille entfernen..."
+
+#: editor_actions.cc:1960
+msgid "Set Range Selection"
+msgstr "Bereich auswählen"
+
+#: editor_actions.cc:1962 editor_actions.cc:1963
+msgid "Nudge Later"
+msgstr "Schritt nach hinten"
+
+#: editor_actions.cc:1964 editor_actions.cc:1965
+msgid "Nudge Earlier"
+msgstr "Schritt nach vorne"
+
+#: editor_actions.cc:1967
+msgid "Sequence Regions"
+msgstr "Regionen aneinanderreihen"
+
+#: editor_actions.cc:1972
+msgid "Nudge Later by Capture Offset"
+msgstr "Schritt nach hinten um Aufnahme-Offset"
+
+#: editor_actions.cc:1979
+msgid "Nudge Earlier by Capture Offset"
+msgstr "Schritt nach vorne um Aufnahme-Offset"
+
+#: editor_actions.cc:1983
+msgid "Trim to Loop"
+msgstr "Auf Schleife kürzen"
+
+#: editor_actions.cc:1984
+msgid "Trim to Punch"
+msgstr "Auf Punchbereich kürzen"
+
+#: editor_actions.cc:1986
+msgid "Trim to Previous"
+msgstr "Zur vorherigen Region aufschließen"
+
+#: editor_actions.cc:1987
+msgid "Trim to Next"
+msgstr "Zur nächsten Region aufschließen"
+
+#: editor_actions.cc:1994
+msgid "Insert Region From Region List"
+msgstr "Region von Regionenliste hinzufügen"
+
+#: editor_actions.cc:2000
+msgid "Set Sync Position"
+msgstr "Synchronisationspunkt setzen"
+
+#: editor_actions.cc:2001
+msgid "Place Transient"
+msgstr "Transienten setzen"
+
+#: editor_actions.cc:2002
+msgid "Split/Separate"
+msgstr "Teilen/Auftrennen"
+
+#: editor_actions.cc:2003
+msgid "Trim Start at Edit Point"
+msgstr "Anfang der Region am Arbeitspunkt abschneiden"
+
+#: editor_actions.cc:2004
+msgid "Trim End at Edit Point"
+msgstr "Ende der Region am Arbeitspunkt abschneiden"
+
+#: editor_actions.cc:2009
+msgid "Align Start"
+msgstr "Anfang ausrichten"
+
+#: editor_actions.cc:2016
+msgid "Align Start Relative"
+msgstr "Anfang relativ ausrichten"
+
+#: editor_actions.cc:2020
+msgid "Align End"
+msgstr "Ende ausrichten"
+
+#: editor_actions.cc:2025
+msgid "Align End Relative"
+msgstr "Ende relativ ausrichten"
+
+#: editor_actions.cc:2032
+msgid "Align Sync"
+msgstr "Synchronisationspunkt ausrichten"
+
+#: editor_actions.cc:2039
+msgid "Align Sync Relative"
+msgstr "Synchronisationspunkt relativ ausrichten"
+
+#: editor_actions.cc:2043 editor_actions.cc:2046
+msgid "Choose Top..."
+msgstr "Oberste Region auswählen..."
+
+#: editor_audio_import.cc:77 editor_audio_import.cc:99
+msgid "You can't import or embed an audiofile until you have a session loaded."
+msgstr ""
+"Sie können keine Audiodatei importieren, solange kein Projekt geladen ist."
+
+#: editor_audio_import.cc:83 editor_audio_import.cc:127
+msgid "Add Existing Media"
+msgstr "Vorhandenes Material importieren"
+
+#: editor_audio_import.cc:175
+msgid ""
+"The session already contains a source file named %1.  Do you want to import "
+"%1 as a new file, or skip it?"
+msgstr ""
+"Das Projekt enthält bereits eine Datei namens %1. Wollen Sie %1 als neue "
+"Datei importieren, oder überspringen?"
+
+#: editor_audio_import.cc:177
+msgid ""
+"The session already contains a source file named %1.  Do you want to import "
+"%2 as a new source, or skip it?"
+msgstr ""
+"Das Projekt enthält bereits eine Datei namens %1. Wollen Sie %2 als neue "
+"Quelle importieren, oder überspringen?"
+
+#: editor_audio_import.cc:282 editor_pt_import.cc:148
+#: editor_videotimeline.cc:91
+msgid "Cancel Import"
+msgstr "Importieren Abbrechen"
+
+#: editor_audio_import.cc:562
+msgid "Editor: cannot open file \"%1\", (%2)"
+msgstr "Editor: kann die Datei \"%1\" nicht öffnen (%2)"
+
+#: editor_audio_import.cc:570
+msgid "Cancel entire import"
+msgstr "Importieren Abbrechen"
+
+#: editor_audio_import.cc:571
+msgid "Don't embed it"
+msgstr "Nicht einbetten"
+
+#: editor_audio_import.cc:572
+msgid "Embed all without questions"
+msgstr "Alle Importieren ohne nachzufragen"
+
+#: editor_audio_import.cc:575 editor_audio_import.cc:601
+#: export_format_dialog.cc:60
+msgid "Sample rate"
+msgstr "Samplerate"
+
+#: editor_audio_import.cc:576 editor_audio_import.cc:602
+msgid ""
+"%1\n"
+"This audiofile's sample rate doesn't match the session sample rate!"
+msgstr ""
+"%1\n"
+"Die Samplerate dieser Audiodatei unterscheidet sich von der Samplerate "
+"dieses Projekts."
+
+#: editor_audio_import.cc:598
+msgid "Embed it anyway"
+msgstr "Trotzdem importieren"
+
+#: editor_pt_import.cc:81
+msgid "You can't import a PT session until you have a session loaded."
+msgstr ""
+"Sie können ein PT Projekt nur in ein bereits geöffnetes Projekt importieren."
+
+#: editor_pt_import.cc:86
+msgid "Import PT Session"
+msgstr "PT Projekt importieren"
+
+#: editor_pt_import.cc:97
+msgid "%1: this is only the directory/folder name, not the filename.\n"
+msgstr "%1: dies ist nur der Verzeichnisname, nicht der Dateiname."
+
+#: editor_pt_import.cc:131
+msgid "Doesn't seem to be a valid PT session file"
+msgstr "Scheint keine gültige PT Projektdatei zu sein"
+
+#: editor_pt_import.cc:135
+msgid ""
+"PT v%1 Session @ %2Hz\n"
+"\n"
+"%3 audio files\n"
+"%4 regions\n"
+"%5 active regions\n"
+"\n"
+"Continue..."
+msgstr ""
+"PT v%1 Session @ %2Hz\n"
+"\n"
+"%3 Audiodateien\n"
+"%4 Regionen\n"
+"%5 aktive Regionen\n"
+"\n"
+"Fortfahren..."
+
+#: editor_canvas_events.cc:1311 editor_drag.cc:1402
+msgid "Could not create new track after region placed in the drop zone"
+msgstr ""
+"Konnte keine neue Spur erzeugen, nachdem die Region in der Drop Zone "
+"platziert wurde"
+
+#: editor_drag.cc:1294
+msgid "fixed time region drag"
+msgstr "Region zeitgleich verschieben"
+
+#: editor_drag.cc:2228
+msgid "Ripple drag"
+msgstr "Wellenmodus-Ziehen"
+
+#: editor_drag.cc:2389 midi_region_view.cc:2850
+msgid "resize notes"
+msgstr "Notenlänge ändern"
+
+#: editor_drag.cc:2584
+msgid "Video Start:"
+msgstr "Videostart"
+
+#: editor_drag.cc:2586
+msgid "Diff:"
+msgstr "Diff:"
+
+#: editor_drag.cc:2605
+msgid "Move Video"
+msgstr "Bewege Video"
+
+#: editor_drag.cc:3113
+msgid "copy meter mark"
+msgstr "Taktmarker kopieren"
+
+#: editor_drag.cc:3121
+msgid "move meter mark"
+msgstr "Taktwechsel bewegen"
+
+#: editor_drag.cc:3244
+msgid "copy tempo mark"
+msgstr "Tempomarker kopieren"
+
+#: editor_drag.cc:3252
+msgid "move tempo mark"
+msgstr "Tempowechsel bewegen"
+
+#: editor_drag.cc:3504
+msgid "change fade in length"
+msgstr "Ändere Fade-In Länge"
+
+#: editor_drag.cc:3629
+msgid "change fade out length"
+msgstr "Fade-Out verändern"
+
+#: editor_drag.cc:3991
+msgid "move marker"
+msgstr "Marker bewegen"
+
+#: editor_drag.cc:4239 editor_drag.cc:5622
+msgid "automation range move"
+msgstr "Automationsbereich bewegen"
+
+#: editor_drag.cc:4596
+msgid "An error occurred while executing time stretch operation"
+msgstr "Beim Ausführen der Timestretch-Operation trat ein Fehler auf"
+
+#: editor_drag.cc:5057
+msgid "programming_error: %1"
+msgstr "Programmierfehler: %1"
+
+#: editor_drag.cc:5126 editor_drag.cc:5136
+msgid "new skip marker"
+msgstr "neuer Sprungmarker"
+
+#: editor_drag.cc:5127
+msgid "skip"
+msgstr "Sprung"
+
+#: editor_drag.cc:5131 location_ui.cc:56
+msgid "CD"
+msgstr "CD"
+
+#: editor_drag.cc:5132
+msgid "new CD marker"
+msgstr "neuer CD Marker"
+
+#: editor_drag.cc:5137 editor_route_groups.cc:437 mixer_ui.cc:1513
+msgid "unnamed"
+msgstr "unbenannt"
+
+#: editor_drag.cc:5443
+msgid "Automation range drag created for invalid region type"
+msgstr "Automationsbereichs-Ziehen für ungültigen Regionstyp erzeugt"
+
+#: editor_route_groups.cc:96
+msgid "Col"
+msgstr "Spalte"
+
+#: editor_route_groups.cc:96
+msgid "Group Tab Color"
+msgstr "Farbe des Gruppen-Reiters"
+
+#: editor_route_groups.cc:97
+msgid "Name of Group"
+msgstr "Gruppenname"
+
+#: editor_route_groups.cc:98 editor_routes.cc:208
+msgid "Visible|V"
+msgstr "V"
+
+#: editor_route_groups.cc:98
+msgid "Group is visible?"
+msgstr "Gruppe sichtbar?"
+
+#: editor_route_groups.cc:99
+msgid "On"
+msgstr "An"
+
+#: editor_route_groups.cc:99
+msgid "Group is enabled?"
+msgstr "Ist die Gruppe aktiviert?"
+
+#: editor_route_groups.cc:100
+msgid "Group|G"
+msgstr "G"
+
+#: editor_route_groups.cc:100
+msgid "Sharing Gain?"
+msgstr "Lautstärke teilen?"
+
+#: editor_route_groups.cc:101
+msgid "Relative|Rel"
+msgstr "Rel"
+
+#: editor_route_groups.cc:101
+msgid "Relative Gain Changes?"
+msgstr "Relative Lautstärke-Änderungen"
+
+#: editor_route_groups.cc:102 editor_regions.cc:121 editor_routes.cc:212
+#: mixer_strip.cc:2094 meter_strip.cc:367 route_time_axis.cc:2741
+#: time_axis_view.cc:1201
+msgid "Mute|M"
+msgstr "M"
+
+#: editor_route_groups.cc:102
+msgid "Sharing Mute?"
+msgstr "Stummschaltung teilen?"
+
+#: editor_route_groups.cc:103 editor_routes.cc:213 mixer_strip.cc:2104
+#: meter_strip.cc:375 route_time_axis.cc:2738
+msgid "Solo|S"
+msgstr "S"
+
+#: editor_route_groups.cc:103
+msgid "Sharing Solo?"
+msgstr "Solo teilen?"
+
+#: editor_route_groups.cc:104 midi_time_axis.cc:1623 midi_time_axis.cc:1626
+#: midi_time_axis.cc:1629
+msgid "Rec"
+msgstr "Rec"
+
+#: editor_route_groups.cc:104
+msgid "Sharing Record-enable Status?"
+msgstr "Aufnahmebereitschaft teilen?"
+
+#: editor_route_groups.cc:105
+msgid "Monitoring|Mon"
+msgstr "Mon"
+
+#: editor_route_groups.cc:105
+msgid "Sharing Monitoring Choice?"
+msgstr "Monitoring-Wahl teilen?"
+
+#: editor_route_groups.cc:106
+msgid "Selection|Sel"
+msgstr "Sel"
+
+#: editor_route_groups.cc:106
+msgid "Sharing Selected/Editing Status?"
+msgstr "Auswahl-/Editierzustand teilen?"
+
+#: editor_route_groups.cc:107 editor_routes.cc:209
+msgid "Active|A"
+msgstr "A"
+
+#: editor_route_groups.cc:107
+msgid "Sharing Active Status?"
+msgstr "Einschaltzustand teilen?"
+
+#: editor_export_audio.cc:92 editor_markers.cc:733 editor_markers.cc:820
+#: editor_markers.cc:1005 editor_markers.cc:1023 editor_markers.cc:1041
+#: editor_markers.cc:1060 editor_markers.cc:1079 editor_markers.cc:1109
+#: editor_markers.cc:1140 editor_markers.cc:1170 editor_markers.cc:1198
+#: editor_markers.cc:1229 editor_markers.cc:1254 editor_markers.cc:1305
+#: editor_markers.cc:1349 editor_markers.cc:1375 editor_markers.cc:1569
+#: editor_mouse.cc:2140
+msgid "programming error: marker canvas item has no marker object pointer!"
+msgstr "Programmierfehler: marker canvas item has no marker object pointer!"
+
+#: editor_export_audio.cc:145 editor_export_audio.cc:150
+msgid "File Exists!"
+msgstr "Datei existiert!"
+
+#: editor_export_audio.cc:153
+msgid "Overwrite Existing File"
+msgstr "Vorhandenes Material überschreiben"
+
+#: editor_group_tabs.cc:176
+msgid "Fit to Window"
+msgstr "An Fenster anpassen"
+
+#: editor_markers.cc:139
+msgid "start"
+msgstr "Start"
+
+#: editor_markers.cc:140
+msgid "end"
+msgstr "Ende"
+
+#: editor_markers.cc:645
+msgid "mark"
+msgstr "Marker"
+
+#: editor_markers.cc:650 editor_ops.cc:2100 editor_ops.cc:2122
+#: editor_ops.cc:2238 editor_ops.cc:2275 location_ui.cc:1023
+msgid "add marker"
+msgstr "Marker hinzufügen"
+
+#: editor_markers.cc:682 editor_markers.cc:1449
+msgid "set loop range"
+msgstr "Loopbereich festlegen"
+
+#: editor_markers.cc:698 editor_markers.cc:1455
+msgid "set punch range"
+msgstr "Punchbereich festlegen"
+
+#: editor_markers.cc:715 editor_ops.cc:4169
+msgid "range"
+msgstr "Bereich"
+
+#: editor_markers.cc:718
+msgid "new range marker"
+msgstr "Neuer Bereich"
+
+#: editor_markers.cc:751 editor_ops.cc:2206 location_ui.cc:859
+msgid "remove marker"
+msgstr "Marker entfernen"
+
+#: editor_markers.cc:887
+msgid "Locate to Here"
+msgstr "Hierhin setzen"
+
+#: editor_markers.cc:888
+msgid "Play from Here"
+msgstr "Wiedergabe ab hier"
+
+#: editor_markers.cc:889
+msgid "Move Mark to Playhead"
+msgstr "Marker zum Positionszeiger verschieben"
+
+#: editor_markers.cc:893
+msgid "Create Range to Next Marker"
+msgstr "Bereich bis zum nächsten Marker erstellen"
+
+#: editor_markers.cc:934
+msgid "Locate to Marker"
+msgstr "Positionszeiger zu Marker setzen"
+
+#: editor_markers.cc:935
+msgid "Play from Marker"
+msgstr "Wiedergabe ab Marker"
+
+#: editor_markers.cc:938
+msgid "Set Marker from Playhead"
+msgstr "Marker beim Positionszeiger erzeugen"
+
+#: editor_markers.cc:940
+msgid "Set Range from Selection"
+msgstr "Bereich aus Auswahl bilden"
+
+#: editor_markers.cc:950
+msgid "Hide Range"
+msgstr "Bereich verbergen"
+
+#: editor_markers.cc:951
+msgid "Rename Range..."
+msgstr "Bereich umbenennen..."
+
+#: editor_markers.cc:955
+msgid "Remove Range"
+msgstr "Bereich entfernen"
+
+#: editor_markers.cc:962
+msgid "Separate Regions in Range"
+msgstr "Regionen an Bereichsgrenzen teilen"
+
+#: editor_markers.cc:965
+msgid "Select Range"
+msgstr "Bereich auswählen"
+
+#: editor_markers.cc:994
+msgid "Set Punch Range"
+msgstr "Punchbereich erstellen"
+
+#: editor_markers.cc:1400 editor_ops.cc:2055
+msgid "New Name:"
+msgstr "Neuer Name: "
+
+#: editor_markers.cc:1403
+msgid "Rename Mark"
+msgstr "Marker umbenennen"
+
+#: editor_markers.cc:1405
+msgid "Rename Range"
+msgstr "Bereich umbenennen"
+
+#: editor_markers.cc:1412 editor_mouse.cc:2157 processor_box.cc:2060
+#: processor_box.cc:2531 route_time_axis.cc:1107 route_ui.cc:1574
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: editor_markers.cc:1425
+msgid "rename marker"
+msgstr "Marker umbenennen"
+
+#: editor_mixer.cc:90
+msgid "This screen is not tall enough to display the editor mixer"
+msgstr ""
+"Dieser Bildschirm ist nicht hoch genug, um den Editor-Mixer darzustellen"
+
+#: editor_mouse.cc:1235 editor_mouse.cc:1253 editor_tempodisplay.cc:270
+msgid ""
+"programming error: tempo marker canvas item has no marker object pointer!"
+msgstr ""
+"Programmierfehler: tempo marker canvas item has no marker object pointer!"
+
+#: editor_mouse.cc:1240 editor_tempodisplay.cc:275
+msgid "programming error: marker for tempo is not a tempo marker!"
+msgstr "Programmierfehler: marker for tempo is not a tempo marker!"
+
+#: editor_mouse.cc:1258 editor_tempodisplay.cc:375
+msgid "programming error: marker for meter is not a meter marker!"
+msgstr "Programmierfehler: marker for meter is not a meter marker!"
+
+#: editor_mouse.cc:1905 editor_mouse.cc:1930 editor_mouse.cc:1943
+msgid ""
+"programming error: control point canvas item has no control point object "
+"pointer!"
+msgstr ""
+"Programmierfehler: control point canvas item has no control point object "
+"pointer!"
+
+#: editor_mouse.cc:2078
+msgid "start point trim"
+msgstr "Startpunkt ändern"
+
+#: editor_mouse.cc:2103
+msgid "End point trim"
+msgstr "Endpunkt verändern"
+
+#: editor_mouse.cc:2155
+msgid "Name for region:"
+msgstr "Name für Region:"
+
+#: editor_ops.cc:165
+msgid "split"
+msgstr "teile"
+
+#: editor_ops.cc:339
+msgid "alter selection"
+msgstr "Auswahl ändern"
+
+#: editor_ops.cc:381
+msgid "nudge regions forward"
+msgstr "Regionen Schritt vorwärts"
+
+#: editor_ops.cc:435 editor_ops.cc:526
+msgid "nudge location forward"
+msgstr "Position Schritt vorwärts"
+
+#: editor_ops.cc:466
+msgid "nudge regions backward"
+msgstr "Regionen Schritt nach hinten"
+
+#: editor_ops.cc:558
+msgid "nudge forward"
+msgstr "Schritt vorwärts"
+
+#: editor_ops.cc:582
+msgid "nudge backward"
+msgstr "Schritt nach hinten"
+
+#: editor_ops.cc:647
+msgid "sequence regions"
+msgstr "Regionen aneinanderreihen"
+
+#: editor_ops.cc:709
+msgid "build_region_boundary_cache called with snap_type = %1"
+msgstr "build_region_boundary_cache wurde mit snap_type = %1 aufgerufen"
+
+#: editor_ops.cc:2057
+msgid "New Location Marker"
+msgstr "Neuer Positionsmarker"
+
+#: editor_ops.cc:2148 editor_ops.cc:2172
+msgid "Set session start"
+msgstr "Projektstart setzen"
+
+#: editor_ops.cc:2238
+msgid "add markers"
+msgstr "Marker hinzufügen"
+
+#: editor_ops.cc:2334
+msgid "clear markers"
+msgstr "Marker zurücksetzen"
+
+#: editor_ops.cc:2349
+msgid "clear ranges"
+msgstr "Bereiche zurücksetzen"
+
+#: editor_ops.cc:2365
+msgid "clear locations"
+msgstr "Positionen zurücksetzen"
+
+#: editor_ops.cc:2428
+msgid "insert region"
+msgstr "Region einfügen"
+
+#: editor_ops.cc:2619
+msgid "raise regions"
+msgstr "Regionen weiter nach oben"
+
+#: editor_ops.cc:2621
+msgid "raise region"
+msgstr "Region weiter nach oben"
+
+#: editor_ops.cc:2627
+msgid "raise regions to top"
+msgstr "Regionen ganz nach oben"
+
+#: editor_ops.cc:2629
+msgid "raise region to top"
+msgstr "Region ganz nach oben"
+
+#: editor_ops.cc:2635
+msgid "lower regions"
+msgstr "Regionen weiter nach unten"
+
+#: editor_ops.cc:2637 editor_ops.cc:2645
+msgid "lower region"
+msgstr "Region weiter nach unten"
+
+#: editor_ops.cc:2643
+msgid "lower regions to bottom"
+msgstr "Regionen ganz nach unten"
+
+#: editor_ops.cc:2728
+msgid "Rename Region"
+msgstr "Region umbenennen"
+
+#: editor_ops.cc:2730 processor_box.cc:2058 route_ui.cc:1572
+msgid "New name:"
+msgstr "Neuer Name: "
+
+#: editor_ops.cc:3047
+msgid "separate"
+msgstr "Teilen"
+
+#: editor_ops.cc:3159
+msgid "separate region under"
+msgstr "Bereich unter aktueller Region entfernen"
+
+#: editor_ops.cc:3305
+msgid "trim to selection"
+msgstr "Auf Auswahl kürzen"
+
+#: editor_ops.cc:3454
+msgid "set sync point"
+msgstr "Einrastpunkt definieren"
+
+#: editor_ops.cc:3478
+msgid "remove region sync"
+msgstr "Synchronisationspunkt löschen"
+
+#: editor_ops.cc:3500
+msgid "move regions to original position"
+msgstr "Regionen zu ihrer Ursprungsposition verschieben"
+
+#: editor_ops.cc:3502
+msgid "move region to original position"
+msgstr "Region zu ihrer Ursprungsposition verschieben"
+
+#: editor_ops.cc:3523
+msgid "align selection"
+msgstr "Auswahl ausrichten"
+
+#: editor_ops.cc:3597
+msgid "align selection (relative)"
+msgstr "Auswahl relativ ausrichten"
+
+#: editor_ops.cc:3631
+msgid "align region"
+msgstr "Region ausrichten"
+
+#: editor_ops.cc:3682
+msgid "trim front"
+msgstr "vorne abschneiden"
+
+#: editor_ops.cc:3682
+msgid "trim back"
+msgstr "hinten Abschneiden"
+
+#: editor_ops.cc:3712
+msgid "trim to loop"
+msgstr "Auf Schleife kürzen"
+
+#: editor_ops.cc:3722
+msgid "trim to punch"
+msgstr "Auf Punchbereich kürzen"
+
+#: editor_ops.cc:3844
+msgid "trim to region"
+msgstr "Auf Region kürzen"
+
+#: editor_ops.cc:3903
+msgid ""
+"This track/bus cannot be frozen because the signal adds or loses channels "
+"before reaching the outputs.\n"
+"This is typically caused by plugins that generate stereo output from mono "
+"input or vice versa."
+msgstr ""
+"Diese Spur/dieser Bus kann nicht eingefroren werden, da sich die Kanalanzahl "
+"des Signals vor dem Ausgang ändert.\n"
+"Typischerweise wird dies durch ein Plugin verursacht, das Stereo aus einer "
+"Monoquelle oder umgekehrt erzeugt."
+
+#: editor_ops.cc:3906
+msgid "Cannot freeze"
+msgstr "Einfrieren nicht möglich"
+
+#: editor_ops.cc:3912
+msgid ""
+"<b>%1</b>\n"
+"\n"
+"This track has at least one send/insert/return as part of its signal flow.\n"
+"\n"
+"Freezing will only process the signal as far as the first send/insert/return."
+msgstr ""
+"<b>%1</b>\n"
+"\n"
+"Der Signalfluss dieser Spur hat mindestens ein Send/Insert/Return.\n"
+"\n"
+"Einfrieren wird das Signal nur bis zum ersten Send/Insert/Return verarbeiten."
+
+#: editor_ops.cc:3916
+msgid "Freeze anyway"
+msgstr "Trotzdem einfrieren"
+
+#: editor_ops.cc:3917
+msgid "Don't freeze"
+msgstr "Nicht einfrieren"
+
+#: editor_ops.cc:3918
+msgid "Freeze Limits"
+msgstr "Einfrier-Grenzen"
+
+#: editor_ops.cc:3933
+msgid "Cancel Freeze"
+msgstr "Einfrieren abbrechen"
+
+#: editor_ops.cc:3963
+msgid ""
+"You can't perform this operation because the processing of the signal will "
+"cause one or more of the tracks to end up with a region with more channels "
+"than this track has inputs.\n"
+"\n"
+"You can do this without processing, which is a different operation."
+msgstr ""
+"Diese Operation kann nicht ausgeführt werden, da durch die "
+"Signalverarbeitung eine oder mehrere Spuren eine Region mit mehr Kanälen "
+"bekäme, als die Spur Eingänge hat.\n"
+"\n"
+"Sie können dies ohne Signalverarbeitung tun, das ist aber eine andere "
+"Operation."
+
+#: editor_ops.cc:3967
+msgid "Cannot bounce"
+msgstr "Kann nicht bouncen"
+
+#: editor_ops.cc:4018
+msgid "bounce range"
+msgstr "Bereich bouncen"
+
+#: editor_ops.cc:4085
+msgid "delete"
+msgstr "Löschen"
+
+#: editor_ops.cc:4088
+msgid "cut"
+msgstr "Ausschneiden"
+
+#: editor_ops.cc:4091
+msgid "copy"
+msgstr "Kopieren"
+
+#: editor_ops.cc:4094
+msgid "clear"
+msgstr "Leeren"
+
+#: editor_ops.cc:4142
+msgid "objects"
+msgstr "Objekte"
+
+#: editor_ops.cc:4352 editor_ops.cc:4437
+msgid "remove region"
+msgstr "Region(en) löschen"
+
+#: editor_ops.cc:4862
+msgid "duplicate selection"
+msgstr "Auswahl duplizieren"
+
+#: editor_ops.cc:4948
+msgid "nudge track"
+msgstr "Spur verschieben"
+
+#: editor_ops.cc:4975
+msgid ""
+"Do you really want to destroy the last capture?\n"
+"(This is destructive and cannot be undone)"
+msgstr ""
+"Wollen Sie wirklich die letzte Aufnahme rückgängig machen?\n"
+"(Dies ist destruktiv und kann nicht rückgängig gemacht werden!)"
+
+#: editor_ops.cc:4978 editor_ops.cc:7078 editor_regions.cc:462
+#: editor_snapshots.cc:159
+msgid "No, do nothing."
+msgstr "Nein, nichts machen."
+
+#: editor_ops.cc:4979
+msgid "Yes, destroy it."
+msgstr "Ja, entfernen."
+
+#: editor_ops.cc:4981
+msgid "Destroy last capture"
+msgstr "Lösche letzte Aufnahme"
+
+#: editor_ops.cc:5057
+msgid "normalize"
+msgstr "Normalisieren"
+
+#: editor_ops.cc:5155
+msgid "reverse regions"
+msgstr "Regionen umkehren"
+
+#: editor_ops.cc:5189
+msgid "strip silence"
+msgstr "Stille entfernen"
+
+#: editor_ops.cc:5270
+msgid "Fork Region(s)"
+msgstr "Region(en) abzweigen"
+
+#: editor_ops.cc:5277
+msgid "Could not unlink %1"
+msgstr "Konnte die Bindung von %1 nicht lösen"
+
+#: editor_ops.cc:5517
+msgid "reset region gain"
+msgstr "Lautstärkekurve zurücksetzen"
+
+#: editor_ops.cc:5575
+msgid "region gain envelope active"
+msgstr "Lautstärkekurve aktiv"
+
+#: editor_ops.cc:5600
+msgid "toggle region lock"
+msgstr "Regionensperre umschalten"
+
+#: editor_ops.cc:5624
+msgid "Toggle Video Lock"
+msgstr "Videosperre umschalten"
+
+#: editor_ops.cc:5648
+msgid "region lock style"
+msgstr "Art der Regionensperre"
+
+#: editor_ops.cc:5673
+msgid "change region opacity"
+msgstr "Regionen-Deckkraft ändern"
+
+#: editor_ops.cc:5766
+msgid "fade range"
+msgstr "Bereich faden"
+
+#: editor_ops.cc:5804
+msgid "set fade in length"
+msgstr "Ändere Fade-In Länge"
+
+#: editor_ops.cc:5811
+msgid "set fade out length"
+msgstr "Ändere Fade-Out Länge"
+
+#: editor_ops.cc:5876
+msgid "set fade in shape"
+msgstr "Fade-In Kurve bearbeiten"
+
+#: editor_ops.cc:5911
+msgid "set fade out shape"
+msgstr "Fade-Out Kurve ändern"
+
+#: editor_ops.cc:5947
+msgid "set fade in active"
+msgstr "Fade-In aktivieren"
+
+#: editor_ops.cc:5981
+msgid "set fade out active"
+msgstr "Fade-Out aktivieren"
+
+#: editor_ops.cc:6041
+msgid "toggle fade active"
+msgstr "Fade umschalten"
+
+#: editor_ops.cc:6227
+msgid "set loop range from selection"
+msgstr "Schleife aus Auswahl erstellen"
+
+#: editor_ops.cc:6241
+msgid "set loop range from region"
+msgstr "Schleife aus Region erstellen"
+
+#: editor_ops.cc:6260
+msgid "set punch range from selection"
+msgstr "Punchbereich aus Auswahl erstellen"
+
+#: editor_ops.cc:6284
+msgid "set session start/end from selection"
+msgstr "Projektstart/ende auf Auswahl setzen"
+
+#: editor_ops.cc:6299
+msgid "set punch range from region"
+msgstr "Punchbereich aus Region erstellen"
+
+#: editor_ops.cc:6408
+msgid "Add new marker"
+msgstr "Marker hinzufügen"
+
+#: editor_ops.cc:6409
+msgid "Set global tempo"
+msgstr "Globales tempo setzen"
+
+#: editor_ops.cc:6412
+msgid "Define one bar"
+msgstr "Einen Takt definieren"
+
+#: editor_ops.cc:6413
+msgid "Do you want to set the global tempo or add a new tempo marker?"
+msgstr ""
+"Möchten Sie das globale Tempo ändern oder einen neuen Tempo-Marker setzen?"
+
+#: editor_ops.cc:6439
+msgid "set tempo from region"
+msgstr "Tempo anhand von Region setzen"
+
+#: editor_ops.cc:6469
+msgid "split regions"
+msgstr "Region teilen (Split)"
+
+#: editor_ops.cc:6511
+msgid ""
+"You are about to split\n"
+"%1\n"
+"into %2 pieces.\n"
+"This could take a long time."
+msgstr ""
+"Sie versuchen %1 in %2 Teile zu teilen.\n"
+"Das könnte sehr lange dauern."
+
+#: editor_ops.cc:6518
+msgid "Call for the Ferret!"
+msgstr "Call for the Ferret!"
+
+#: editor_ops.cc:6519
+msgid ""
+"Press OK to continue with this split operation\n"
+"or ask the Ferret dialog to tune the analysis"
+msgstr ""
+"Drücken Sie OK um mit der aufteiloperation (Split) fortzufahren\n"
+"oder versuchen sie im Ferret-Fenster die Analyse zu verbessern."
+
+#: editor_ops.cc:6521
+msgid "Press OK to continue with this split operation"
+msgstr "Drücken Sie OK um mit der aufteiloperation (Split) fortzufahren"
+
+#: editor_ops.cc:6524
+msgid "Excessive split?"
+msgstr "Übermäßige Aufteilung?"
+
+#: editor_ops.cc:6676
+msgid "place transient"
+msgstr "Transienten platzieren"
+
+#: editor_ops.cc:6711
+msgid "snap regions to grid"
+msgstr "Regionen an Raster einrasten"
+
+#: editor_ops.cc:6750
+msgid "Close Region Gaps"
+msgstr "Regionenlücken schließen"
+
+#: editor_ops.cc:6755
+msgid "Crossfade length"
+msgstr "Länge des Crossfades"
+
+#: editor_ops.cc:6764 editor_ops.cc:6775 rhythm_ferret.cc:119
+#: session_option_editor.cc:141
+msgid "ms"
+msgstr "ms"
+
+#: editor_ops.cc:6766
+msgid "Pull-back length"
+msgstr "Öffnungslänge vorne"
+
+#: editor_ops.cc:6779
+msgid "Ok"
+msgstr "Ok"
+
+#: editor_ops.cc:6794
+msgid "close region gaps"
+msgstr "Schließe Lücken zwischen Regionen"
+
+#: editor_ops.cc:7036
+msgid "That would be bad news ...."
+msgstr "Lieber nicht!"
+
+#: editor_ops.cc:7041
+msgid ""
+"Removing the master or monitor bus is such a bad idea\n"
+"that %1 is not going to allow it.\n"
+"\n"
+"If you really want to do this sort of thing\n"
+"edit your ardour.rc file to set the\n"
+"\"allow-special-bus-removal\" option to be \"yes\""
+msgstr ""
+"Den Master- oder Monitorbus zu entfernen ist eine so\n"
+"schlechte Idee, dass %1 es nicht zulässt.\n"
+"\n"
+"Um dies dennoch zu tun, kann die Datei ardour.rc\n"
+"bearbeitet werden. \"allow-special-bus-removal\" muss\n"
+"dazu auf \"yes\" gesetzt werden."
+
+#: editor_ops.cc:7057 route_ui.cc:1938
+msgid "track"
+msgid_plural "tracks"
+msgstr[0] "Spur"
+msgstr[1] "Spuren"
+
+#: editor_ops.cc:7058 route_ui.cc:1938
+msgid "bus"
+msgid_plural "busses"
+msgstr[0] "Bus"
+msgstr[1] "Busse"
+
+#: editor_ops.cc:7062
+msgid ""
+"Do you really want to remove %1 %2 and %3 %4?\n"
+"(You may also lose the playlists associated with the %2)\n"
+"\n"
+"This action cannot be undone, and the session file will be overwritten!"
+msgstr ""
+"Wollen Sie wirklich %1 %2 und %3 %4 entfernen?\n"
+"(Sie werden auch die mit der %2 assoziierten Wiedergabelisten verlieren)\n"
+"\n"
+"Dies kann nicht rückgängig gemacht werden, und die Projektdatei wird "
+"überschrieben werden!"
+
+#: editor_ops.cc:7067
+msgid ""
+"Do you really want to remove %1 %2?\n"
+"(You may also lose the playlists associated with the %2)\n"
+"\n"
+"This action cannot be undone, and the session file will be overwritten!"
+msgstr ""
+"Wollen Sie wirklich %1 %2 entfernen?\n"
+"(Sie werden auch die mit der %2 assoziierten Wiedergabelisten verlieren)\n"
+"\n"
+"Dies kann nicht rückgängig gemacht werden, und die Projektdatei wird "
+"überschrieben werden!"
+
+#: editor_ops.cc:7073
+msgid ""
+"Do you really want to remove %1 %2?\n"
+"\n"
+"This action cannot be undone, and the session file will be overwritten"
+msgstr ""
+"Wollen Sie wirklich %1 %2 entfernen\n"
+"\n"
+"Diese Aktion kann nicht rückgängig gemacht werden, und die Projektdatei wird "
+"überschrieben werden"
+
+#: editor_ops.cc:7080
+msgid "Yes, remove them."
+msgstr "Ja, entfernen."
+
+#: editor_ops.cc:7082 editor_snapshots.cc:160
+msgid "Yes, remove it."
+msgstr "Ja, entfernen."
+
+#: editor_ops.cc:7087 editor_ops.cc:7089
+msgid "Remove %1"
+msgstr "Entferne %1"
+
+#: editor_ops.cc:7191 editor_ops.cc:7205 editor_ops.cc:7245 editor_ops.cc:7255
+msgid "insert time"
+msgstr "Stille einfügen"
+
+#: editor_ops.cc:7308
+msgid "Cannot insert or delete time when in Lock edit."
+msgstr "Kann im Sperr-Bearbeitungsmodus keine Zeit einfügen oder löschen"
+
+#: editor_ops.cc:7328 editor_ops.cc:7340 editor_ops.cc:7413
+msgid "cut time"
+msgstr "Zeit ausschneiden"
+
+#: editor_ops.cc:7426
+msgid "remove time"
+msgstr "Zeit entfernen"
+
+#: editor_ops.cc:7500
+msgid "There are too many tracks to fit in the current window"
+msgstr "Es gibt zu viele Spuren, sie in das aktuelle Fenster zu einzupassen"
+
+#: editor_ops.cc:7561
+msgid "Sel"
+msgstr "Sel"
+
+#: editor_ops.cc:7600
+#, c-format
+msgid "Saved view %u"
+msgstr "Ansicht %u gespeichert"
+
+#: editor_ops.cc:7625
+msgid "mute regions"
+msgstr "Regionen stummschalten"
+
+#: editor_ops.cc:7627
+msgid "mute region"
+msgstr "Region stummschalten"
+
+#: editor_ops.cc:7664
+msgid "combine regions"
+msgstr "Regionen verbinden (combine)"
+
+#: editor_ops.cc:7702
+msgid "uncombine regions"
+msgstr "Regionen trennen (uncombine)"
+
+#: editor_ops.cc:7739
+msgid "%1: Locked"
+msgstr "%1: Gesperrt"
+
+#: editor_ops.cc:7746
+msgid "Click to unlock"
+msgstr "Klicken, um Sperre aufzuheben"
+
+#: editor_ops.cc:7793
+msgid "Moving embedded files into session folder"
+msgstr "Verschiebe eingebettete Dateien in den Projektordner"
+
+#: editor_regions.cc:112
+msgid "Region name, with number of channels in []'s"
+msgstr "Name der Region, mit Kanalzahl in []"
+
+#: editor_regions.cc:113
+msgid "Position of start of region"
+msgstr "Position des Regionen-Anfangs"
+
+#: editor_regions.cc:114 editor_regions.cc:859 time_info_box.cc:101
+msgid "End"
+msgstr "Ende"
+
+#: editor_regions.cc:114
+msgid "Position of end of region"
+msgstr "Position des Regionen-Endes"
+
+#: editor_regions.cc:115
+msgid "Length of the region"
+msgstr "Länge der Region"
+
+#: editor_regions.cc:116
+msgid "Position of region sync point, relative to start of the region"
+msgstr ""
+"Position des Regionen-Synchronisationspunktes, relativ zu Regionenanfang"
+
+#: editor_regions.cc:117
+msgid "Length of region fade-in (units: secondary clock), () if disabled"
+msgstr "Länge des Einblendens (Einheiten: sekundäre Uhr), () falls inaktiv"
+
+#: editor_regions.cc:118
+msgid "Length of region fade-out (units: secondary clock), () if disabled"
+msgstr "Länge des Ausblendens (Einheiten: sekundäre Uhr), () falls inaktiv"
+
+#: editor_regions.cc:119
+msgid "Lock|L"
+msgstr "L"
+
+#: editor_regions.cc:119
+msgid "Region position locked?"
+msgstr "Position der Region gesperrt?"
+
+#: editor_regions.cc:120
+msgid "Gain|G"
+msgstr "G"
+
+#: editor_regions.cc:120
+msgid "Region position glued to Bars|Beats time?"
+msgstr "Regionenposition an Takt und Schäge gebunden?"
+
+#: editor_regions.cc:121
+msgid "Region muted?"
+msgstr "Region stummgeschaltet?"
+
+#: editor_regions.cc:122
+msgid "Opaque|O"
+msgstr "O"
+
+#: editor_regions.cc:122
+msgid "Region opaque (blocks regions below it from being heard)?"
+msgstr "Region deckend (hindert darunterliegende Regionen, gehört zu werden)?"
+
+#: editor_regions.cc:311 editor_regions.cc:316 editor_regions.cc:318
+msgid "Hidden"
+msgstr "Versteckt"
+
+#: editor_regions.cc:391
+msgid "(MISSING) "
+msgstr "(FEHLT)"
+
+#: editor_regions.cc:459
+msgid ""
+"Do you really want to remove unused regions?\n"
+"(This is destructive and cannot be undone)"
+msgstr ""
+"Wollen Sie ungenutzte Regionen wirklich entfernen?\n"
+"(Dies ist destruktiv und kann nicht rückgängig gemacht werden)"
+
+#: editor_regions.cc:463
+msgid "Yes, remove."
+msgstr "Ja, entfernen."
+
+#: editor_regions.cc:465
+msgid "Remove unused regions"
+msgstr "Ungenutzte Regionen entfernen"
+
+#: editor_regions.cc:694
+msgid "EditorRegions::format_position: negative timecode position: %1"
+msgstr "EditorRegions::format_position: Negative Timecode Position: %1"
+
+#: editor_regions.cc:824 editor_regions.cc:840 editor_regions.cc:854
+msgid "Mult."
+msgstr "Viele"
+
+#: editor_regions.cc:857 midi_list_editor.cc:104 time_info_box.cc:94
+msgid "Start"
+msgstr "Start"
+
+#: editor_regions.cc:875 editor_regions.cc:891
+msgid "Multiple"
+msgstr "Viele"
+
+#: editor_regions.cc:960
+msgid "MISSING "
+msgstr "FEHLT"
+
+#: editor_routes.cc:183
+msgid "SS"
+msgstr "SS"
+
+#: editor_routes.cc:207
+msgid "Track/Bus Name"
+msgstr "Spur/Busname"
+
+#: editor_routes.cc:208
+msgid "Track/Bus visible ?"
+msgstr "Spuren/Busse sichtbar?"
+
+#: editor_routes.cc:209
+msgid "Track/Bus active ?"
+msgstr "Spur/Bus aktiv?"
+
+#: editor_routes.cc:210
+msgid "MidiInput|I"
+msgstr "I"
+
+#: editor_routes.cc:210
+msgid "MIDI input enabled"
+msgstr "MIDI Eingänge aktiv"
+
+#: editor_routes.cc:211
+msgid "Rec|R"
+msgstr "R"
+
+#: editor_routes.cc:211
+msgid "Record enabled"
+msgstr "Aufnahme bereit"
+
+#: editor_routes.cc:212
+msgid "Muted"
+msgstr "Stumm"
+
+#: editor_routes.cc:213
+msgid "Soloed"
+msgstr "Solo ein"
+
+#: editor_routes.cc:214
+msgid "SoloIso|SI"
+msgstr "SI"
+
+#: editor_routes.cc:214
+msgid "Solo Isolated"
+msgstr "Isoliertes Solo"
+
+#: editor_routes.cc:215
+msgid "SoloLock|SS"
+msgstr "SS"
+
+#: editor_routes.cc:215
+msgid "Solo Safe (Locked)"
+msgstr "Solo Safe (gesperrt)"
+
+#: editor_routes.cc:485 mixer_ui.cc:1213
+msgid "Hide All"
+msgstr "Alle verbergen"
+
+#: editor_routes.cc:486 mixer_ui.cc:1214
+msgid "Show All Audio Tracks"
+msgstr "Zeige alle Audiospuren"
+
+#: editor_routes.cc:487 mixer_ui.cc:1215
+msgid "Hide All Audio Tracks"
+msgstr "Verberge alle Audiospuren"
+
+#: editor_routes.cc:488 mixer_ui.cc:1216
+msgid "Show All Audio Busses"
+msgstr "Zeige alle Audiobusse"
+
+#: editor_routes.cc:489 mixer_ui.cc:1217
+msgid "Hide All Audio Busses"
+msgstr "Verberge alle Audiobusse"
+
+#: editor_routes.cc:490 mixer_ui.cc:1218
+msgid "Show All Midi Tracks"
+msgstr "Zeige alle MIDI-Spuren"
+
+#: editor_routes.cc:491 mixer_ui.cc:1219
+msgid "Hide All Midi Tracks"
+msgstr "Verberge alle MIDI-Spuren"
+
+#: editor_routes.cc:492
+msgid "Show Tracks With Regions Under Playhead"
+msgstr "Zeige Spuren mit Regionen unter dem Positionszeiger"
+
+#: editor_rulers.cc:211
+msgid "New location marker"
+msgstr "Neuer Positionsmarker"
+
+#: editor_rulers.cc:212
+msgid "Clear all locations"
+msgstr "Alle Positionsmarker entfernen"
+
+#: editor_rulers.cc:213
+msgid "Unhide locations"
+msgstr "Positionen anzeigen"
+
+#: editor_rulers.cc:217
+msgid "New range"
+msgstr "Neuer Bereich"
+
+#: editor_rulers.cc:218
+msgid "Clear all ranges"
+msgstr "Alle Bereiche entfernen"
+
+#: editor_rulers.cc:219
+msgid "Unhide ranges"
+msgstr "Bereiche anzeigen"
+
+#: editor_rulers.cc:224
+msgid "New Loop range"
+msgstr "Neuer Schleifenbereich"
+
+#: editor_rulers.cc:225
+msgid "New Punch range"
+msgstr "Neuer Punchbereich"
+
+#: editor_rulers.cc:230
+msgid "New CD track marker"
+msgstr "Neuer CD-Track Marker"
+
+#: editor_rulers.cc:235 tempo_dialog.cc:38
+msgid "New Tempo"
+msgstr "Tempowechsel einfügen..."
+
+#: editor_rulers.cc:239 tempo_dialog.cc:315
+msgid "New Meter"
+msgstr "Taktwechsel einfügen..."
+
+#: editor_snapshots.cc:137
+msgid "Rename Snapshot"
+msgstr "Schnappschuss umbenennen"
+
+#: editor_snapshots.cc:139
+msgid "New name of snapshot"
+msgstr "Name für neuen Schnappschuss"
+
+#: editor_snapshots.cc:157
+msgid ""
+"Do you really want to remove snapshot \"%1\" ?\n"
+"(which cannot be undone)"
+msgstr ""
+"Wollen Sie den Schnappschuss \"%1\" wirklich löschen?\n"
+"(Dies kann nicht rückgängig gemacht werden)"
+
+#: editor_snapshots.cc:162
+msgid "Remove snapshot"
+msgstr "Schnappschuss entfernen"
+
+#: editor_tempodisplay.cc:194 editor_tempodisplay.cc:234
+msgid "add"
+msgstr "Hinzufügen"
+
+#: editor_tempodisplay.cc:215
+msgid "add tempo mark"
+msgstr "Tempowechsel einfügen"
+
+#: editor_tempodisplay.cc:254
+msgid "add meter mark"
+msgstr "Taktwechsel einfügen"
+
+#: editor_tempodisplay.cc:287 editor_tempodisplay.cc:315
+msgid "done"
+msgstr "Fertig"
+
+#: editor_tempodisplay.cc:304 editor_tempodisplay.cc:330
+msgid "replace tempo mark"
+msgstr "Tempowechsel ersetzen"
+
+#: editor_tempodisplay.cc:353 editor_tempodisplay.cc:387
+msgid "remove tempo mark"
+msgstr "Tempowechsel entfernen"
+
+#: editor_tempodisplay.cc:370
+msgid ""
+"programming error: meter marker canvas item has no marker object pointer!"
+msgstr ""
+"pProgrammierfehler: meter marker canvas item has no marker object pointer!"
+
+#: editor_timefx.cc:68
+msgid "stretch/shrink"
+msgstr "strecken/stauchen"
+
+#: editor_timefx.cc:130
+msgid "pitch shift"
+msgstr "pitch-shift"
+
+#: editor_timefx.cc:304
+msgid "timefx cannot be started - thread creation error"
+msgstr ""
+"Time-Stretch konnte nicht gestartet werden - Fehler beim erstellen des "
+"Threads"
+
+#: engine_dialog.cc:87
+msgid "Device Control Panel"
+msgstr "Gerätekontrollfeld"
+
+#: engine_dialog.cc:88
+msgid "Midi Device Setup"
+msgstr "MIDI Geräteeinstellungen"
+
+#: engine_dialog.cc:89
+msgid "Stop (Reconfigure)"
+msgstr "Stop (Neu konfigurieren)"
+
+#: engine_dialog.cc:90 engine_dialog.cc:2693
+msgid "Measure"
+msgstr "Messen"
+
+#: engine_dialog.cc:91
+msgid "Use results"
+msgstr "Benutze Ergebnisse"
+
+#: engine_dialog.cc:92
+msgid "Back to settings ... (ignore results)"
+msgstr "Zurücksetzen ... (Resultate ignorieren)"
+
+#: engine_dialog.cc:93
+msgid "Calibrate Audio"
+msgstr "AUdio kalibrieren"
+
+#: engine_dialog.cc:97
+msgid "Back to settings"
+msgstr "Zurück zu Einstellungen"
+
+#: engine_dialog.cc:117
+msgid ""
+"No audio/MIDI backends detected. %1 cannot run\n"
+"\n"
+"(This is a build/packaging/system error. It should never happen.)"
+msgstr ""
+"Kein Audio/MIDI backend gefunden. %1 kann nicht laufen\n"
+"\n"
+"(Das ist ein Kompilier-/Paket-/Systemfehler und sollte nie passieren.)"
+
+#: engine_dialog.cc:142
+msgid "Latency Measurement Tool"
+msgstr "Latenzmeßwerkzeug"
+
+#: engine_dialog.cc:154
+msgid ""
+"<span weight=\"bold\">Turn down the volume on your audio equipment to a very "
+"low level.</span>"
+msgstr ""
+"<span weight=\"bold\">Drehen Sie die Lautstärke Ihrer Audioanlage sehr leise."
+"</span>"
+
+#: engine_dialog.cc:163
+msgid "Select two channels below and connect them using a cable."
+msgstr "Wählen Sie unten zwei Kanäle aus und verbinden sie mit einem Kabel."
+
+#: engine_dialog.cc:168
+msgid "Output channel"
+msgstr "Ausgangskanal"
+
+#: engine_dialog.cc:176
+msgid "Input channel"
+msgstr "Eingangskanal"
+
+#: engine_dialog.cc:209
+msgid "Once the channels are connected, click the \"Measure\" button."
+msgstr "Wenn die Kanäle verbunden sind, klicken Sie den \"Messen\"-Knopf."
+
+#: engine_dialog.cc:216
+msgid "When satisfied with the results, click the \"Use results\" button."
+msgstr ""
+"Wenn Sie mit dem Resultat zufrieden sind, klicken Sie den Knopf \"Benutze "
+"Ergebnisse\"."
+
+#: engine_dialog.cc:231 engine_dialog.cc:2813 engine_dialog.cc:2823
+msgid "No measurement results yet"
+msgstr "Noch keine Messergebnisse"
+
+#: engine_dialog.cc:241 route_params_ui.cc:106
+msgid "Latency"
+msgstr "Latenz"
+
+#: engine_dialog.cc:465
+msgid "Audio System:"
+msgstr "Audiosystem:"
+
+#: engine_dialog.cc:507
+msgid "Driver:"
+msgstr "Treiber:"
+
+#: engine_dialog.cc:514
+msgid "Input Device:"
+msgstr "Eingangsgerät:"
+
+#: engine_dialog.cc:518
+msgid "Output Device:"
+msgstr "Ausgangsgerät:"
+
+#: engine_dialog.cc:525
+msgid "Device:"
+msgstr "Gerät:"
+
+#: engine_dialog.cc:534 engine_dialog.cc:639 sfdb_ui.cc:152 sfdb_ui.cc:347
+#: sfdb_ui.cc:352
+msgid "Sample rate:"
+msgstr "Samplerate:"
+
+#: engine_dialog.cc:540 engine_dialog.cc:646
+msgid "Buffer size:"
+msgstr "Puffergröße"
+
+#: engine_dialog.cc:558
+msgid "Input Channels:"
+msgstr "Eingangskanäle:"
+
+#: engine_dialog.cc:571
+msgid "Output Channels:"
+msgstr "Ausgangskanäle:"
+
+#: engine_dialog.cc:583
+msgid "Hardware input latency:"
+msgstr "Hardware Eingangslatenz (Samples)"
+
+#: engine_dialog.cc:586 engine_dialog.cc:599
+msgid "samples"
+msgstr "Samples"
+
+#: engine_dialog.cc:596
+msgid "Hardware output latency:"
+msgstr "Hardware Ausgangslatenz (Samples)"
+
+#: engine_dialog.cc:607
+msgid "MIDI System:"
+msgstr "MIDI System:"
+
+#: engine_dialog.cc:631
+msgid ""
+"%1 is already running. %2 will connect to it and use the existing settings."
+msgstr ""
+"%1 läuft bereits. %2 wird zu ihm verbinden und die existierenden "
+"Einstellungen übernehmen."
+
+#: engine_dialog.cc:684
+msgid ""
+"Failed to start or connect to audio-engine.\n"
+"\n"
+"Latency calibration requires a working audio interface."
+msgstr ""
+"Das Starten oder Verbinden mit der Audio-Engine ist fehlgeschlagen.\n"
+"\n"
+"Latenzkalibrierung erfordert ein funktionierendes Audio-Interface."
+
+#: engine_dialog.cc:690
+msgid ""
+"Your selected audio configuration is playback- or capture-only.\n"
+"\n"
+"Latency calibration requires playback and capture"
+msgstr ""
+"Ihre aktuelle Audiokonfiguration erlaubt nur Playback oder Aufnahme "
+"alleine.\n"
+"\n"
+"Latenzkalibrierung verlangt Duplexbetrieb (gleichzeitig Aufnahme und "
+"Wiedergabe)"
+
+#: engine_dialog.cc:870
+msgid "MIDI Devices"
+msgstr "MIDI Geräte"
+
+#: engine_dialog.cc:876
+msgid "Device"
+msgstr "Gerät"
+
+#: engine_dialog.cc:878
+msgid "Hardware Latencies"
+msgstr "Hardware-Latenzen"
+
+#: engine_dialog.cc:919
+msgid "Calibrate"
+msgstr "Kalibrieren"
+
+#: engine_dialog.cc:1008
+msgid "all available channels"
+msgstr "alle verfügbaren Kanäle"
+
+#: engine_dialog.cc:1441 latency_gui.cc:39
+msgid "sample"
+msgid_plural "samples"
+msgstr[0] "Sample"
+msgstr[1] "Samples"
+
+#: engine_dialog.cc:1494
+#, c-format
+msgid "(%.1f ms)"
+msgstr "(%.1f ms)"
+
+#: engine_dialog.cc:2161
+msgid "Could not start backend engine %1"
+msgstr "Konnte Backend Engine %1 nicht starten"
+
+#: engine_dialog.cc:2212
+msgid "Cannot set driver to %1"
+msgstr "Kann Treiber nicht auf %1 setzen"
+
+#: engine_dialog.cc:2217
+msgid "Cannot set input device name to %1"
+msgstr "Kann Namen des Eingangsgeräts nicht auf %1 setzen"
+
+#: engine_dialog.cc:2221
+msgid "Cannot set output device name to %1"
+msgstr "Kann Namen des Ausgangsgeräts nicht auf %1 setzen"
+
+#: engine_dialog.cc:2226
+msgid "Cannot set device name to %1"
+msgstr "Kann Gerät nicht auf %1 setzen"
+
+#: engine_dialog.cc:2231
+msgid "Cannot set sample rate to %1"
+msgstr "Kann Samplerate nicht auf %1 setzen"
+
+#: engine_dialog.cc:2235
+msgid "Cannot set buffer size to %1"
+msgstr "Kann Buffergröße nicht auf %1 setzen"
+
+#: engine_dialog.cc:2241
+msgid "Cannot set input channels to %1"
+msgstr "Kann Eingangskanäle nicht auf %1 setzen"
+
+#: engine_dialog.cc:2245
+msgid "Cannot set output channels to %1"
+msgstr "Kann Ausgangskanäle nicht auf %1 setzen"
+
+#: engine_dialog.cc:2251
+msgid "Cannot set input latency to %1"
+msgstr "Kann Eingangslatenz nicht auf %1 setzen"
+
+#: engine_dialog.cc:2255
+msgid "Cannot set output latency to %1"
+msgstr "Kann Ausgangslatenz nicht auf %1 setzen"
+
+#: engine_dialog.cc:2551 engine_dialog.cc:2610
+msgid "No signal detected "
+msgstr "Kein Signal erkannt"
+
+#: engine_dialog.cc:2564 engine_dialog.cc:2618 port_insert_ui.cc:70
+#: port_insert_ui.cc:98
+msgid "Disconnected from audio engine"
+msgstr "Von Audio-Engine getrennt"
+
+#: engine_dialog.cc:2573 engine_dialog.cc:2626
+msgid "Detected roundtrip latency: "
+msgstr "Entdeckte Roundtrip-Latenz:"
+
+#: engine_dialog.cc:2575 engine_dialog.cc:2628
+msgid "Systemic latency: "
+msgstr "Systemische Latenz:"
+
+#: engine_dialog.cc:2582
+msgid "(signal detection error)"
+msgstr "(Fehler bei der Signalerkennung)"
+
+#: engine_dialog.cc:2588
+msgid "(inverted - bad wiring)"
+msgstr "(invertiert - schlechte Verkabelung)"
+
+#: engine_dialog.cc:2635
+msgid "(averaging)"
+msgstr "(durchschnittlich)"
+
+#: engine_dialog.cc:2641
+msgid "(too large jitter)"
+msgstr "(zu viel Jitter)"
+
+#: engine_dialog.cc:2645
+msgid "(large jitter)"
+msgstr "(viel Jitter)"
+
+#: engine_dialog.cc:2657
+msgid "Timeout - large MIDI jitter."
+msgstr "Timeout - viel MIDI Jitter."
+
+#: engine_dialog.cc:2673 port_insert_ui.cc:134
+msgid "Detecting ..."
+msgstr "Messe..."
+
+#: engine_dialog.cc:2764
+msgid "Disconnect from %1"
+msgstr "Trenne von %1"
+
+#: engine_dialog.cc:2769
+msgid "Running"
+msgstr "Läuft"
+
+#: engine_dialog.cc:2771
+msgid "Connected"
+msgstr "Verbunden"
+
+#: engine_dialog.cc:2782
+msgid "Connect to %1"
+msgstr "Verbinde zu %1"
+
+#: export_channel_selector.cc:51 sfdb_ui.cc:150
+msgid "Channels:"
+msgstr "Kanäle:"
+
+#: export_channel_selector.cc:52
+msgid "Split to mono files"
+msgstr "In Monodateien aufteilen"
+
+#: export_channel_selector.cc:197
+msgid "Bus or Track"
+msgstr "Bus oder Spur"
+
+#: export_channel_selector.cc:473
+msgid "Region contents without fades nor region gain (channels: %1)"
+msgstr "Regioneninhalt ohne Fades und Regionenlautstärke (Kanäle: %1)"
+
+#: export_channel_selector.cc:477
+msgid "Region contents with fades and region gain (channels: %1)"
+msgstr "Regioneninhalt mit Fades und Regionenlautstärke (Kanäle: %1)"
+
+#: export_channel_selector.cc:481
+msgid "Track output (channels: %1)"
+msgstr "Spurausgang (%1 Kanäle)"
+
+#: export_channel_selector.cc:550
+msgid "Apply track/bus processing"
+msgstr "Signalverarbeitung der Spur/des Busses anwenden"
+
+#: export_channel_selector.cc:551
+msgid "Select all tracks"
+msgstr "Alle Spuren auswählen"
+
+#: export_channel_selector.cc:552
+msgid "Select all busses"
+msgstr "Alle Busse auswählen"
+
+#: export_channel_selector.cc:553
+msgid "Deselect all"
+msgstr "Alles deselektieren"
+
+#: export_channel_selector.cc:587
+msgid "Track name"
+msgstr "Spurname"
+
+#: export_dialog.cc:46
+msgid ""
+"<span color=\"#ffa755\">Some already existing files will be overwritten.</"
+"span>"
+msgstr ""
+"<span color=\"#ffa755\">Einige existierende Dateien werden überschrieben "
+"werden.</span>"
+
+#: export_dialog.cc:47
+msgid "List files"
+msgstr "Dateien auflisten"
+
+#: export_dialog.cc:158 export_format_dialog.cc:59
+msgid "File format"
+msgstr "Dateiformat"
+
+#: export_dialog.cc:159 export_timespan_selector.cc:374
+#: export_timespan_selector.cc:436
+msgid "Time Span"
+msgstr "Zeitspanne"
+
+#: export_dialog.cc:160
+msgid "Channels"
+msgstr "Kanäle"
+
+#: export_dialog.cc:182
+msgid ""
+"Export has been aborted due to an error!\n"
+"See the Log for details."
+msgstr ""
+"Das Exportieren wurde aufgrund eines Fehlers abgebrochen!\n"
+"Details dazu stehen in der Log."
+
+#: export_dialog.cc:251
+msgid "Files that will be overwritten"
+msgstr "Dateien, die überschrieben werden"
+
+#: export_dialog.cc:296
+msgid "Export initialization failed: %1"
+msgstr "Exportinitialisierung gescheitert: %1"
+
+#: export_dialog.cc:306
+msgid "Stop Export"
+msgstr "Export Abbrechen"
+
+#: export_dialog.cc:327
+msgid "export"
+msgstr "Exportieren"
+
+#: export_dialog.cc:346
+msgid "Normalizing '%3' (timespan %1 of %2)"
+msgstr "Normalisiere '%3' (Zeitspanne %1 von %2)"
+
+#: export_dialog.cc:350
+msgid "Exporting '%3' (timespan %1 of %2)"
+msgstr "Exportiere '%3' (Zeitspanne %1 von %2)"
+
+#: export_dialog.cc:373 export_dialog.cc:375
+msgid "<span color=\"#ffa755\">Error: "
+msgstr "<span color=\"#ffa755\">Fehler: "
+
+#: export_dialog.cc:385
+msgid "<span color=\"#ffa755\">Warning: "
+msgstr "<span color=\"#ffa755\">Warnung: "
+
+#: export_dialog.cc:387
+msgid ""
+"\n"
+"<span color=\"#ffa755\">Warning: "
+msgstr ""
+"\n"
+"<span color=\"#ffa755\">Warnung: "
+
+#: export_dialog.cc:411
+msgid "Export Selection"
+msgstr "Auswahl exportieren"
+
+#: export_dialog.cc:425
+msgid "Export Region"
+msgstr "Region exportieren"
+
+#: export_dialog.cc:434
+msgid "Source"
+msgstr "Quelle"
+
+#: export_dialog.cc:450
+msgid "Stem Export"
+msgstr "Stem Export"
+
+#: export_file_notebook.cc:39
+msgid "Add another format"
+msgstr "Ein weiteres Format hinzuzufügen"
+
+#: export_file_notebook.cc:193
+msgid "Format"
+msgstr "Format"
+
+#: export_file_notebook.cc:194
+msgid "Location"
+msgstr "Ort"
+
+#: export_file_notebook.cc:195
+msgid "Upload to Soundcloud"
+msgstr "Zu Soundcloud hochladen"
+
+#: export_file_notebook.cc:273
+msgid "No format!"
+msgstr "Kein Format!"
+
+#: export_file_notebook.cc:291
+msgid "Format %1: %2"
+msgstr "Format: %1: %2"
+
+#: export_filename_selector.cc:32
+msgid "Label:"
+msgstr "Name:"
+
+#: export_filename_selector.cc:33
+msgid "Session Name"
+msgstr "Projektname"
+
+#: export_filename_selector.cc:34
+msgid "Revision:"
+msgstr "Revision:"
+
+#: export_filename_selector.cc:36
+msgid "Folder:"
+msgstr "Ordner:"
+
+#: export_filename_selector.cc:37 session_import_dialog.cc:45
+#: transcode_video_dialog.cc:59 video_server_dialog.cc:54
+#: video_server_dialog.cc:56 export_video_dialog.cc:77
+#: export_video_dialog.cc:79
+msgid "Browse"
+msgstr "Durchsuchen"
+
+#: export_filename_selector.cc:41
+msgid "<i>Build filename(s) from these components:</i>"
+msgstr "<i>Dateiname(n) aus diesen Bestandteilen erzeugen:</i>"
+
+#: export_filename_selector.cc:212
+msgid ""
+"<small><i>Sorry, no example filename can be shown at the moment</i></small>"
+msgstr ""
+"<small><i>Leider kann zur Zeit kein Dateinamen-Beispiel gezeigt werden</i></"
+"small>"
+
+#: export_filename_selector.cc:214
+msgid "<small><i>Current (approximate) filename: \"%1\"</i></small>"
+msgstr "<small><i>Momentaner (ungefährer) Dateiname: \"%1\"</i></small>"
+
+#: export_filename_selector.cc:250 export_filename_selector.cc:336
+msgid ""
+"%1: this is only the directory/folder name, not the filename.\n"
+"The filename will be chosen from the information just above the folder "
+"selector."
+msgstr ""
+"%1: dies ist nur der Verzeichnisname, nicht der Dateiname.\n"
+"Der Dateiname wird aus den Informationen über der "
+"Verzeichnisauswahlgeneriert."
+
+#: export_filename_selector.cc:322
+msgid "Choose export folder"
+msgstr "Wähle den Exportordner"
+
+#: export_format_dialog.cc:31
+msgid "New Export Format Profile"
+msgstr "Neues Exportformat-Profil"
+
+#: export_format_dialog.cc:31
+msgid "Edit Export Format Profile"
+msgstr "Exportformat-Profil bearbeiten"
+
+#: export_format_dialog.cc:38
+msgid "Label: "
+msgstr "Name:"
+
+#: export_format_dialog.cc:41 normalize_dialog.cc:42
+msgid "Normalize to:"
+msgstr "Normalisieren auf:"
+
+#: export_format_dialog.cc:46
+msgid "Trim silence at start"
+msgstr "Stille am Anfang abschneiden"
+
+#: export_format_dialog.cc:47
+msgid "Add silence at start:"
+msgstr "Füge Stille am Anfang hinzu:"
+
+#: export_format_dialog.cc:50
+msgid "Trim silence at end"
+msgstr "Stille am Ende abschneiden"
+
+#: export_format_dialog.cc:51
+msgid "Add silence at end:"
+msgstr "Füge Stille am Ende hinzu:"
+
+#: export_format_dialog.cc:54
+msgid ""
+"Command to run post-export\n"
+"(%f=full path & filename, %d=directory, %b=basename):"
+msgstr ""
+"Kommando, das nach dem Export ausgeführt werden soll\n"
+"(%f=full path & filename, %d=directory, %b=basename):"
+
+#: export_format_dialog.cc:57
+msgid "Compatibility"
+msgstr "Kompatibilität"
+
+#: export_format_dialog.cc:58
+msgid "Quality"
+msgstr "Qualität"
+
+#: export_format_dialog.cc:61
+msgid "Sample rate conversion quality:"
+msgstr "Qualität bei Konvertierung der Samplerate:"
+
+#: export_format_dialog.cc:68
+msgid "Dithering"
+msgstr "Dithering"
+
+#: export_format_dialog.cc:70
+msgid "Create CUE file for disk-at-once CD/DVD creation"
+msgstr "Schreibe CUE-Datei für Disk-at-once CD/DVD Erzeugung"
+
+#: export_format_dialog.cc:71
+msgid "Create TOC file for disk-at-once CD/DVD creation"
+msgstr "Schreibe TOC-Datei für Disk-at-once CD/DVD Erzeugung"
+
+#: export_format_dialog.cc:72
+msgid "Create chapter mark file for MP4 chapter marks"
+msgstr "Erzeuge Kapitelmarkierungsdatei für MP4 Kapitelmarkierungen"
+
+#: export_format_dialog.cc:74
+msgid "Tag file with session's metadata"
+msgstr "Datei mit den Metadaten des Projekt taggen"
+
+#: export_format_dialog.cc:474
+msgid "Best (sinc)"
+msgstr "Beste (sinc)"
+
+#: export_format_dialog.cc:479
+msgid "Medium (sinc)"
+msgstr "Mittel (sinc)"
+
+#: export_format_dialog.cc:484
+msgid "Fast (sinc)"
+msgstr "Schnellste (sinc)"
+
+#: export_format_dialog.cc:494
+msgid "Zero order hold"
+msgstr "Halteglied nullter Ordnung (ZOH)"
+
+#: export_format_dialog.cc:904
+msgid "Linear encoding options"
+msgstr "Optionen für lineare Codierung"
+
+#: export_format_dialog.cc:920
+msgid "Ogg Vorbis options"
+msgstr "Ogg Vorbis Optionen"
+
+#: export_format_dialog.cc:931
+msgid "FLAC options"
+msgstr "FLAC Optionen"
+
+#: export_format_dialog.cc:948
+msgid "Broadcast Wave options"
+msgstr "Broadcast Wave Optionen"
+
+#: export_format_selector.cc:136
+msgid "Do you really want to remove the format?"
+msgstr "Wollen Sie das Format wirklich entfernen?"
+
+#: export_preset_selector.cc:28
+msgid "Preset"
+msgstr "Preset"
+
+#: export_preset_selector.cc:104
+msgid ""
+"The selected preset did not load successfully!\n"
+"Perhaps it references a format that has been removed?"
+msgstr ""
+"Das ausgewählte Preset konnte nicht geladen werden!\n"
+"Möglicherweise verwendet es ein Format, das entfernt wurde."
+
+#: export_preset_selector.cc:156
+msgid "Do you really want to remove this preset?"
+msgstr "Wollen Sie dieses Preset wirklich entfernen?"
+
+#: export_timespan_selector.cc:46
+msgid "Show Times as:"
+msgstr "Zeitanzeige:"
+
+#: export_timespan_selector.cc:53 processor_box.cc:2533
+msgid "Select All"
+msgstr "Alles auswählen"
+
+#: export_timespan_selector.cc:223 transform_dialog.cc:93
+msgid " to "
+msgstr " bis"
+
+#: export_timespan_selector.cc:367 export_timespan_selector.cc:426
+msgid "Range"
+msgstr "Bereiche"
+
+#: sfdb_freesound_mootcher.cc:189 sfdb_freesound_mootcher.cc:324
+msgid "curl error %1 (%2)"
+msgstr "curl Fehler %1 (%2)"
+
+#: sfdb_freesound_mootcher.cc:266
+msgid "getSoundResourceFile: There is no valid root in the xml file"
+msgstr "getSoundResourceFile: Keine gültige Wurzel in der XML-Datei"
+
+#: sfdb_freesound_mootcher.cc:271
+msgid "getSoundResourceFile: root = %1, != response"
+msgstr "getSoundResourceFile: Wurzel = %1, != Antwort"
+
+#: sfdb_freesound_mootcher.cc:410 rc_option_editor.cc:2298
+msgid "%1"
+msgstr "%1"
+
+#: gain_meter.cc:134 gain_meter.cc:402 gain_meter.cc:507 gain_meter.cc:898
+msgid "-inf"
+msgstr "-inf"
+
+#: gain_meter.cc:149 gain_meter.cc:962
+msgid "Fader automation mode"
+msgstr "Fader Automationsmodus"
+
+#: gain_meter.cc:150 gain_meter.cc:963
+msgid "Fader automation type"
+msgstr "Fader-Automationstyp"
+
+#: gain_meter.cc:159 gain_meter.cc:831 panner_ui.cc:177 panner_ui.cc:639
+msgid "Abs"
+msgstr "Abs"
+
+#: gain_meter.cc:795
+msgid "M"
+msgstr "M"
+
+#: gain_meter.cc:798
+msgid "P"
+msgstr "P"
+
+#: gain_meter.cc:801
+msgid "T"
+msgstr "T"
+
+#: gain_meter.cc:804
+msgid "W"
+msgstr "W"
+
+#: generic_pluginui.cc:83
+msgid "<span size=\"large\">Presets</span>"
+msgstr "<span size=\"large\">Voreinstellungen</span>"
+
+#: generic_pluginui.cc:98
+msgid "Manual"
+msgstr "Manuell"
+
+#: generic_pluginui.cc:107
+msgid "All Automation"
+msgstr "Alle Automation"
+
+#: generic_pluginui.cc:251
+msgid "Switches"
+msgstr "Schalter"
+
+#: generic_pluginui.cc:261 generic_pluginui.cc:437 processor_box.cc:2507
+msgid "Controls"
+msgstr "Steuerelemente"
+
+#: generic_pluginui.cc:294
+msgid "Plugin Editor: could not build control element for port %1"
+msgstr "Plugin Editor: konnte kein Steuerelement für Port %1 erzeugen"
+
+#: generic_pluginui.cc:319
+msgid "Plugin Editor: no control for property %1"
+msgstr "Plugin Editor: kein Regler für Eigenschaft %1"
+
+#: generic_pluginui.cc:325
+msgid "Plugin Editor: could not build control element for property %1"
+msgstr "Plugin Editor: konnte kein Kontrollelement für Eigenschaft %1 erzeugen"
+
+#: generic_pluginui.cc:469
+msgid "Meters"
+msgstr "Pegelanzeigen"
+
+#: generic_pluginui.cc:491
+msgid "Automation control"
+msgstr "Automation"
+
+#: generic_pluginui.cc:498
+msgid "Mgnual"
+msgstr "Mgnuell"
+
+#: global_port_matrix.cc:158
+msgid "Audio Connection Manager"
+msgstr "Audio Verbindungsmanager"
+
+#: global_port_matrix.cc:161
+msgid "MIDI Connection Manager"
+msgstr "Midi Verbindungsmanager"
+
+#: global_port_matrix.cc:201 io_selector.cc:211 mixer_strip.cc:826
+#: mixer_strip.cc:927 monitor_section.cc:1279 monitor_selector.cc:189
+msgid "Disconnect"
+msgstr "Trenne"
+
+#: global_port_matrix.cc:207 io_selector.cc:217 monitor_selector.cc:195
+msgid "port"
+msgstr "Port"
+
+#: group_tabs.cc:312
+msgid "Selection..."
+msgstr "Ausgewählten Spuren"
+
+#: group_tabs.cc:313
+msgid "Record Enabled..."
+msgstr "Spuren, deren Aufnahme aktiviert ist"
+
+#: group_tabs.cc:314
+msgid "Soloed..."
+msgstr "Solo-Spuren/Busse"
+
+#: group_tabs.cc:320
+msgid "Create New Group ..."
+msgstr "Neue Gruppe erzeugen ..."
+
+#: group_tabs.cc:321
+msgid "Create New Group From"
+msgstr "Neue Gruppe erzeugen aus"
+
+#: group_tabs.cc:324
+msgid "Edit Group..."
+msgstr "Gruppe bearbeiten..."
+
+#: group_tabs.cc:325
+msgid "Collect Group"
+msgstr "Gruppe sammeln"
+
+#: group_tabs.cc:326
+msgid "Remove Group"
+msgstr "Gruppe entfernen"
+
+#: group_tabs.cc:329
+msgid "Remove Subgroup Bus"
+msgstr "Subgruppen-Bus entfernen"
+
+#: group_tabs.cc:331
+msgid "Add New Subgroup Bus"
+msgstr "Subgruppen-Bus hinzufügen"
+
+#: group_tabs.cc:333
+msgid "Add New Aux Bus (pre-fader)"
+msgstr "Aux-Send zur Subgruppe hinzufügen (Pre-Fader)"
+
+#: group_tabs.cc:334
+msgid "Add New Aux Bus (post-fader)"
+msgstr "Aux-Send zur Subgruppe hinzufügen (Post-Fader)"
+
+#: group_tabs.cc:340
+msgid "Enable All Groups"
+msgstr "Alle Gruppen aktivieren"
+
+#: group_tabs.cc:341
+msgid "Disable All Groups"
+msgstr "Alle Gruppen deaktivieren"
+
+#: insert_remove_time_dialog.cc:52
+msgid "Time to remove"
+msgstr "Zu entfernende Zeit"
+
+#: insert_remove_time_dialog.cc:52
+msgid "Time to insert:"
+msgstr "Einzufügende Zeit:"
+
+#: insert_remove_time_dialog.cc:61
+msgid "Intersected regions should:"
+msgstr "Regionen am Positionsmarker:"
+
+#: insert_remove_time_dialog.cc:64
+msgid "stay in position"
+msgstr "Unverändert lassen"
+
+#: insert_remove_time_dialog.cc:65
+msgid "move"
+msgstr "Verschieben"
+
+#: insert_remove_time_dialog.cc:66
+msgid "be split"
+msgstr "Aufteilen"
+
+#: insert_remove_time_dialog.cc:73
+msgid "Apply to all the track's playlists"
+msgstr "Auf alle Wiedergabelisten der Spur anwenden"
+
+#: insert_remove_time_dialog.cc:76
+msgid "Move glued regions"
+msgstr "Taktgebundene Regionen mitbewegen"
+
+#: insert_remove_time_dialog.cc:78
+msgid "Move markers"
+msgstr "Marker mitbewegen"
+
+#: insert_remove_time_dialog.cc:81
+msgid "Move glued markers"
+msgstr "Taktgebundene Marker mitbewegen"
+
+#: insert_remove_time_dialog.cc:86
+msgid "Move locked markers"
+msgstr "Gesperrte Marker mitbewegen"
+
+#: insert_remove_time_dialog.cc:91
+msgid ""
+"Move tempo and meter changes\n"
+"<i>(may cause oddities in the tempo map)</i>"
+msgstr ""
+"Bewege Tempo- und Taktartänderungen\n"
+"<i>(kann in der Tempo-Tabelle seltsames Verhalten verursachen)</i>"
+
+#: insert_remove_time_dialog.cc:99
+msgid "Remove time"
+msgstr "Zeit entfernen"
+
+#: insert_remove_time_dialog.cc:99
+msgid "Insert time"
+msgstr "Stille einfügen"
+
+#: instrument_selector.cc:62
+msgid "-none-"
+msgstr "-keine-"
+
+#: interthread_progress_window.cc:103
+msgid "Importing file: %1 of %2"
+msgstr "Importiere Datei: %1 von %2"
+
+#: io_selector.cc:221
+msgid "I/O selector"
+msgstr "E/A Auswahl"
+
+#: io_selector.cc:266 monitor_selector.cc:244
+msgid "%1 input"
+msgstr "%1 Eingang"
+
+#: io_selector.cc:268 monitor_selector.cc:246
+msgid "%1 output"
+msgstr "%1 Ausgang"
+
+#: keyboard.cc:78
+msgid "your own"
+msgstr "Eigenes"
+
+#: keyboard.cc:141 keyboard.cc:165
+msgid "Default keybindings not found - %1 will be hard to use!"
+msgstr ""
+"Keine Tastatur-Standardbelegung gefunden - %1 wird sich schwer bedienen "
+"lassen!"
+
+#: keyboard.cc:144
+msgid "Key bindings file \"%1\" not found. Default bindings used instead"
+msgstr ""
+"Die Datei  \"%1\" für Tastaturkürzel  wurde nicht gefunden. Stattdessen wird "
+"die Standard-Belegung verwendet."
+
+#: keyeditor.cc:54
+msgid "Remove shortcut"
+msgstr "Tastenkürzel entfernen"
+
+#: keyeditor.cc:63
+msgid "Action"
+msgstr "Aktion"
+
+#: keyeditor.cc:64
+msgid "Shortcut"
+msgstr "Tastenkürzel"
+
+#: keyeditor.cc:84
+msgid "Select an action, then press the key(s) to (re)set its shortcut"
+msgstr ""
+"Wählen Sie eine Aktion und drücken Sie dann die Taste(n) \n"
+"um das Tastaturkürzel zu setzen"
+
+#: keyeditor.cc:98
+msgid "Reset Bindings to Defaults"
+msgstr "Setze Kürzel auf Vorgabewerte zurück"
+
+#: keyeditor.cc:263
+msgid "Main_menu"
+msgstr "Hauptmenü"
+
+#: keyeditor.cc:265
+msgid "redirectmenu"
+msgstr "Umleitungsmenü"
+
+#: keyeditor.cc:267
+msgid "Editor_menus"
+msgstr "Editor-Menü"
+
+#: keyeditor.cc:269
+msgid "RegionList"
+msgstr "Regionenliste"
+
+#: keyeditor.cc:271
+msgid "ProcessorMenu"
+msgstr "Prozessor-Menü"
+
+#: latency_gui.cc:40
+msgid "msec"
+msgstr "ms"
+
+#: latency_gui.cc:41
+msgid "period"
+msgstr "Periode"
+
+#: latency_gui.cc:55
+msgid "%1 sample"
+msgid_plural "%1 samples"
+msgstr[0] "%1 Sample"
+msgstr[1] "%1 Samples"
+
+#: latency_gui.cc:72 panner_ui.cc:409 plugin_ui.cc:421
+msgid "Reset"
+msgstr "Reset"
+
+#: latency_gui.cc:149 rhythm_ferret.cc:273 sfdb_ui.cc:1911
+msgid "programming error: %1 (%2)"
+msgstr "Programmierfehler: %1 (%2)"
+
+#: location_ui.cc:52 location_ui.cc:54
+msgid "Use PH"
+msgstr "zu PZ"
+
+#: location_ui.cc:59
+msgid "Glue"
+msgstr "Bindung"
+
+#: location_ui.cc:87
+msgid "Performer:"
+msgstr "Performer:"
+
+#: location_ui.cc:88
+msgid "Composer:"
+msgstr "Komponist:"
+
+#: location_ui.cc:90
+msgid "Pre-Emphasis"
+msgstr "Präemphase"
+
+#: location_ui.cc:317
+msgid "Remove this range"
+msgstr "Diesen Bereich entfernen"
+
+#: location_ui.cc:318
+msgid "Start time - middle click to locate here"
+msgstr "Startzeit - Mittelklick, um hierher zu positionieren"
+
+#: location_ui.cc:319
+msgid "End time - middle click to locate here"
+msgstr "Endzeit - Mittelklick, um hierher zu positionieren"
+
+#: location_ui.cc:322
+msgid "Set range start from playhead location"
+msgstr "Bereichsbeginn auf Positionszeiger setzen"
+
+#: location_ui.cc:323
+msgid "Set range end from playhead location"
+msgstr "Bereichsende auf Positionszeiger setzen"
+
+#: location_ui.cc:327
+msgid "Remove this marker"
+msgstr "Diesen Marker entfernen"
+
+#: location_ui.cc:328
+msgid "Position - middle click to locate here"
+msgstr "Position - Mittelklick, um hierher zu positionieren"
+
+#: location_ui.cc:330
+msgid "Set marker time from playhead location"
+msgstr "Markerposition auf Positionszeiger setzen"
+
+#: location_ui.cc:499
+msgid "You cannot put a CD marker at the start of the session"
+msgstr "Sie können keinen CD-Marker am Anfang des Projekts erstellen"
+
+#: location_ui.cc:725
+msgid "New Marker"
+msgstr "Neuer Marker"
+
+#: location_ui.cc:726
+msgid "New Range"
+msgstr "Neuer Bereich"
+
+#: location_ui.cc:739
+msgid "<b>Loop/Punch Ranges</b>"
+msgstr "<b>Schleifen/Punchbereiche</b>"
+
+#: location_ui.cc:764
+msgid "<b>Markers (Including CD Index)</b>"
+msgstr "<b>Marker (auch CD-Index)</b>"
+
+#: location_ui.cc:799
+msgid "<b>Ranges (Including CD Track Ranges)</b>"
+msgstr "<b>Bereiche (auch CD-Track-Bereichen)</b>"
+
+#: location_ui.cc:1042
+msgid "add range marker"
+msgstr "Bereich hinzufügen"
+
+#: main.cc:82
+msgid "%1 could not connect to the audio backend."
+msgstr "%1 konnte nicht zum Audiobackend verbinden."
+
+#: main.cc:129 main.cc:145
+msgid "The audio backend (%1) has failed, or terminated"
+msgstr "Das Audiobackend (%1) funktioniert nicht oder wurde beendet"
+
+#: main.cc:132
+msgid ""
+"%2 exited unexpectedly, and without notifying %1.\n"
+"\n"
+"This could be due to misconfiguration or to an error inside %2.\n"
+"\n"
+"Click OK to exit %1."
+msgstr ""
+"%2 wurde unerwartet und ohne %1 zu benachrichtigen beendet .\n"
+"\n"
+"Dies liegt entweder an einer fehlerhaften Konfiguration oder an einem Fehler "
+"in %2.\n"
+"\n"
+"Klicke OK, um %1 zu verlassen."
+
+#: main.cc:146
+msgid "%2 exited unexpectedly, and without notifying %1."
+msgstr "%2 wurde unerwartet und ohne %1 zu benachrichtigen beendet "
+
+#: main.cc:241
+msgid ""
+"\n"
+"   %1 could not understand your command line      "
+msgstr ""
+"\n"
+"   %1 konnte Ihre Kommandozeile nicht verstehen      "
+
+#: main.cc:243
+msgid "An error was encountered while launching %1"
+msgstr "Während des Programmstarts von %1 ist ein Fehler aufgetreten"
+
+#: main.cc:332
+msgid " (built using "
+msgstr " (kompiliert mit Version "
+
+#: main.cc:335
+msgid " and GCC version "
+msgstr " und GCC Version"
+
+#: main.cc:345
+msgid "Copyright (C) 1999-2015 Paul Davis"
+msgstr "Copyright (C) 1999-2015 Paul Davis"
+
+#: main.cc:346
+msgid ""
+"Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
+"Baker, Robin Gareus"
+msgstr ""
+"Einige Teile Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
+"Baker, Robin Gareus"
+
+#: main.cc:348
+msgid "%1 comes with ABSOLUTELY NO WARRANTY"
+msgstr "%1 wird Ihnen ohne jegliche Gewährleistung"
+
+#: main.cc:349
+msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+msgstr ""
+"für allgemeine oder spezielle Gebrauchstauglichkeit zur Verfügung gestellt."
+
+#: main.cc:350
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Dies ist freie Software, die Sie gerne weitergeben dürfen,"
+
+#: main.cc:351
+msgid "under certain conditions; see the source for copying conditions."
+msgstr ""
+"solange Sie sich an die Bedingungen, die in der Datei COPYING aufgeführt "
+"sind, halten."
+
+#: main.cc:356
+msgid "could not initialize %1."
+msgstr "Konnte %1 nicht initialisieren."
+
+#: main.cc:366
+msgid "Cannot xinstall SIGPIPE error handler"
+msgstr "Kann die SIGPIPE Fehlerbehandlung nicht installieren"
+
+#: main.cc:373
+msgid "Could not complete pre-GUI initialization"
+msgstr "Konnte Initialisierung (pre-GUI) nicht abschließen"
+
+#: main.cc:380
+msgid "could not create %1 GUI"
+msgstr "konnte das %1 GUI nicht erstellen"
+
+#: main_clock.cc:50
+msgid "Display delta to edit cursor"
+msgstr "Zeige Abstand zu Arbeitspunkt"
+
+#: main_clock.cc:65 tempo_dialog.cc:54
+msgid "Edit Tempo"
+msgstr "Tempo bearbeiten"
+
+#: main_clock.cc:66 tempo_dialog.cc:326
+msgid "Edit Meter"
+msgstr "Taktart bearbeiten"
+
+#: main_clock.cc:67
+msgid "Insert Tempo Change"
+msgstr "Tempowechsel einfügen"
+
+#: main_clock.cc:68
+msgid "Insert Meter Change"
+msgstr "Taktartwechsel einfügen"
+
+#: marker.cc:276
+msgid "MarkerText"
+msgstr "MarkerText"
+
+#: midi_channel_selector.cc:161 midi_channel_selector.cc:400
+#: midi_channel_selector.cc:436 rc_option_editor.cc:2044
+#: rc_option_editor.cc:2677 sfdb_ui.cc:664
+msgid "None"
+msgstr "Kein"
+
+#: midi_channel_selector.cc:165 midi_channel_selector.cc:405
+#: midi_channel_selector.cc:441
+msgid "Invert"
+msgstr "Invert"
+
+#: midi_channel_selector.cc:169
+msgid "Force"
+msgstr "Force"
+
+#: midi_channel_selector.cc:328 midi_channel_selector.cc:370
+msgid "MIDI Channel Control"
+msgstr "MIDI-Kanalkontrolle"
+
+#: midi_channel_selector.cc:330
+msgid "Playback all channels"
+msgstr "Alle Kanäle wiedergeben"
+
+#: midi_channel_selector.cc:331
+msgid "Play only selected channels"
+msgstr "Nur ausgewählte Kanäle abspielen"
+
+#: midi_channel_selector.cc:332
+msgid "Use a single fixed channel for all playback"
+msgstr "Benutze einen einzelnen festen Kanal für gesamte Wiedergabe"
+
+#: midi_channel_selector.cc:333
+msgid "Record all channels"
+msgstr "Alle Kanäle aufnehmen"
+
+#: midi_channel_selector.cc:334
+msgid "Record only selected channels"
+msgstr "Nur ausgewählte Kanäle aufnehmen"
+
+#: midi_channel_selector.cc:335
+msgid "Force all channels to 1 channel"
+msgstr "Alle Kanäle auf einem Kanal wiedergeben"
+
+#: midi_channel_selector.cc:376
+msgid "Inbound"
+msgstr "Eingehend"
+
+#: midi_channel_selector.cc:396
+msgid "Click to enable recording all channels"
+msgstr "Klicke, um Aufnahme aller Kanäle zuzulassen"
+
+#: midi_channel_selector.cc:401
+msgid "Click to disable recording all channels"
+msgstr "Klicke, um Aufnahme für alle Kanäle abzuschalten"
+
+#: midi_channel_selector.cc:406
+msgid "Click to invert currently selected recording channels"
+msgstr ""
+"Klicke, um die gegenwärtige Auswahl der aufnehmenden Kanäle zu invertieren"
+
+#: midi_channel_selector.cc:413
+msgid "Playback"
+msgstr "Wiedergabe"
+
+#: midi_channel_selector.cc:432
+msgid "Click to enable playback of all channels"
+msgstr "Klicke, um Wiedergabe aller Kanäle zuzulassen"
+
+#: midi_channel_selector.cc:437
+msgid "Click to disable playback of all channels"
+msgstr "Klicke, um Wiedergabe aller Kanäle abzuschalten"
+
+#: midi_channel_selector.cc:442
+msgid "Click to invert current selected playback channels"
+msgstr ""
+"Klicke, um die gegenwärtige Auswahl der wiedergebenden Kanäle zu invertieren"
+
+#: midi_channel_selector.cc:620
+msgid "Click to toggle playback of channel %1"
+msgstr "Klicke, um die Wiedergabe von Kanal %1 umzuschalten"
+
+#: midi_channel_selector.cc:628
+msgid "Click to force all MIDI channel messages to channel %1"
+msgstr "Klicke, um alle MIDI Channel Messages auf Kanal %1 auszugeben"
+
+#: midi_channel_selector.cc:718
+msgid "Click to toggle recording of channel %1"
+msgstr "Klicke, um die Aufnahme von Kanal %1 umzuschalten"
+
+#: midi_channel_selector.cc:726
+msgid "Click to force all recorded channels to %1"
+msgstr "Klicke, um alle aufgenommenen Kanäle an %1 zu zwingen"
+
+#: midi_export_dialog.cc:35
+msgid "Export MIDI: %1"
+msgstr "Exportiere MIDI: %1"
+
+#: midi_list_editor.cc:56
+msgid "Whole"
+msgstr "Ganze"
+
+#: midi_list_editor.cc:57
+msgid "Half"
+msgstr "Halbe"
+
+#: midi_list_editor.cc:58
+msgid "Triplet"
+msgstr "Triole"
+
+#: midi_list_editor.cc:59
+msgid "Quarter"
+msgstr "Viertel"
+
+#: midi_list_editor.cc:60
+msgid "Eighth"
+msgstr "Achtel"
+
+#: midi_list_editor.cc:61
+msgid "Sixteenth"
+msgstr "Sechzehntel"
+
+#: midi_list_editor.cc:62
+msgid "Thirty-second"
+msgstr "Zweiunddreissigstel"
+
+#: midi_list_editor.cc:63
+msgid "Sixty-fourth"
+msgstr "Vierundsechzigstel"
+
+#: midi_list_editor.cc:106
+msgid "Num"
+msgstr "Nr."
+
+#: midi_list_editor.cc:108
+msgid "Vel"
+msgstr "Vel"
+
+#: midi_list_editor.cc:216
+msgid "edit note start"
+msgstr "Notenbeginn bearbeiten"
+
+#: midi_list_editor.cc:225
+msgid "edit note channel"
+msgstr "Kanal bearbeiten"
+
+#: midi_list_editor.cc:235
+msgid "edit note number"
+msgstr "Notennummer bearbeiten"
+
+#: midi_list_editor.cc:245
+msgid "edit note velocity"
+msgstr "Velocity bearbeiten"
+
+#: midi_list_editor.cc:259
+msgid "edit note length"
+msgstr "Notenlänge ändern"
+
+#: midi_list_editor.cc:463
+msgid "insert new note"
+msgstr "Neue Note einfügen"
+
+#: midi_list_editor.cc:527
+msgid "delete notes (from list)"
+msgstr "Noten (aus Liste) löschen"
+
+#: midi_list_editor.cc:602
+msgid "change note channel"
+msgstr "Kanal ändern"
+
+#: midi_list_editor.cc:610
+msgid "change note number"
+msgstr "Notennummerändern"
+
+#: midi_list_editor.cc:620
+msgid "change note velocity"
+msgstr "Velocity ändern"
+
+#: midi_list_editor.cc:690
+msgid "change note length"
+msgstr "Notenlänge ändern"
+
+#: midi_port_dialog.cc:39
+msgid "Add MIDI Port"
+msgstr "Neuen MIDI-Port hinzufügen"
+
+#: midi_port_dialog.cc:40
+msgid "Port name:"
+msgstr "Portname:"
+
+#: midi_port_dialog.cc:45
+msgid "MidiPortDialog"
+msgstr "MidiPortDialog"
+
+#: midi_region_view.cc:863
+msgid "channel edit"
+msgstr "Kanal editieren"
+
+#: midi_region_view.cc:899
+msgid "velocity edit"
+msgstr "Velocity bearbeiten"
+
+#: midi_region_view.cc:958
+msgid "add note"
+msgstr "Note hinzufügen"
+
+#: midi_region_view.cc:1890
+msgid "step add"
+msgstr "Schritt hinzufügen"
+
+#: midi_region_view.cc:1984 midi_region_view.cc:2007
+msgid "alter patch change"
+msgstr "Patch Change ändern"
+
+#: midi_region_view.cc:2043
+msgid "add patch change"
+msgstr "Patch Change hinzufügen"
+
+#: midi_region_view.cc:2065 midi_region_view.cc:2066
+msgid "move patch change"
+msgstr "Patch Change verschieben"
+
+#: midi_region_view.cc:2078 midi_region_view.cc:2079
+msgid "delete patch change"
+msgstr "Patch Change löschen"
+
+#: midi_region_view.cc:2117
+msgid "delete selection"
+msgstr "Auswahl löschen"
+
+#: midi_region_view.cc:2133
+msgid "delete note"
+msgstr "Note löschen"
+
+#: midi_region_view.cc:2592
+msgid "move notes"
+msgstr "Noten verschieben"
+
+#: midi_region_view.cc:3123
+msgid "change velocities"
+msgstr "Velocity ändern"
+
+#: midi_region_view.cc:3189
+msgid "transpose"
+msgstr "Transponieren"
+
+#: midi_region_view.cc:3217
+msgid "change note lengths"
+msgstr "Notenlänge ändern"
+
+#: midi_region_view.cc:3293
+msgid "nudge"
+msgstr "Verschieben"
+
+#: midi_region_view.cc:3308
+msgid "change channel"
+msgstr "Kanal ändern"
+
+#: midi_region_view.cc:3348
+msgid "Bank "
+msgstr "Bank"
+
+#: midi_region_view.cc:3349
+msgid "Program "
+msgstr "Programm"
+
+#: midi_region_view.cc:3350
+msgid "Channel "
+msgstr "Kanal"
+
+#: midi_region_view.cc:3537
+msgid "paste"
+msgstr "Einfügen"
+
+#: midi_streamview.cc:185
+msgid "attempt to display MIDI region with no source"
+msgstr "versuche, eine MIDI Region ohne Datenquelle darzustellen"
+
+#: midi_streamview.cc:195
+msgid "attempt to display MIDI region with no model"
+msgstr "versuche, eine MIDI Region ohne Datenmodell darzustellen"
+
+#: midi_streamview.cc:506
+msgid "failed to create MIDI region"
+msgstr "konnte MIDI-Region nicht erzeugen"
+
+#: midi_time_axis.cc:309
+msgid "External MIDI Device"
+msgstr "Externes MIDI-Gerät"
+
+#: midi_time_axis.cc:310
+msgid "External Device Mode"
+msgstr "Modus Externes Gerät"
+
+#: midi_time_axis.cc:318
+msgid "Chns"
+msgstr "Chns"
+
+#: midi_time_axis.cc:320
+msgid "Click to edit channel settings"
+msgstr "Klicke, um Kanaleinstellungen zu bearbeiten"
+
+#: midi_time_axis.cc:519
+msgid "Show Full Range"
+msgstr "Ganzen Bereich anzeigen"
+
+#: midi_time_axis.cc:524
+msgid "Fit Contents"
+msgstr "Auf Inhalt anpassen"
+
+#: midi_time_axis.cc:528
+msgid "Note Range"
+msgstr "Notenbereich"
+
+#: midi_time_axis.cc:529
+msgid "Note Mode"
+msgstr "Noten-Modus"
+
+#: midi_time_axis.cc:530
+msgid "Channel Selector"
+msgstr "Kanalauswahl"
+
+#: midi_time_axis.cc:535
+msgid "Color Mode"
+msgstr "Farbmodus"
+
+#: midi_time_axis.cc:594
+msgid "Bender"
+msgstr "Bender"
+
+#: midi_time_axis.cc:598
+msgid "Pressure"
+msgstr "Druckdaten"
+
+#: midi_time_axis.cc:610
+msgid "Controllers"
+msgstr "Controller"
+
+#: midi_time_axis.cc:615
+msgid "No MIDI Channels selected"
+msgstr "Keine MIDI-Kanäle ausgewählt"
+
+#: midi_time_axis.cc:672 midi_time_axis.cc:801
+msgid "Hide all channels"
+msgstr "Alle Kanäle verbergen"
+
+#: midi_time_axis.cc:676 midi_time_axis.cc:805
+msgid "Show all channels"
+msgstr "Alle Kanäle anzeigen"
+
+#: midi_time_axis.cc:687 midi_time_axis.cc:816
+msgid "Channel %1"
+msgstr "Kanal %1"
+
+#: midi_time_axis.cc:942 midi_time_axis.cc:974
+msgid "Controllers %1-%2"
+msgstr "Controller %1-%2"
+
+#: midi_time_axis.cc:965 midi_time_axis.cc:968
+msgid "Controller %1"
+msgstr "Controller %1"
+
+#: midi_time_axis.cc:991
+msgid "Sustained"
+msgstr "Sustain"
+
+#: midi_time_axis.cc:998
+msgid "Percussive"
+msgstr "Perkussiv"
+
+#: midi_time_axis.cc:1018
+msgid "Meter Colors"
+msgstr "Nach Lautstärke"
+
+#: midi_time_axis.cc:1025
+msgid "Channel Colors"
+msgstr "Kanalfarben"
+
+#: midi_time_axis.cc:1032
+msgid "Track Color"
+msgstr "Spurfarbe"
+
+#: midi_time_axis.cc:1607 midi_time_axis.cc:1613 midi_time_axis.cc:1623
+#: midi_time_axis.cc:1629
+msgid "all"
+msgstr "alle"
+
+#: midi_time_axis.cc:1610 midi_time_axis.cc:1626
+msgid "some"
+msgstr "einige"
+
+#: midi_tracer.cc:48
+msgid "Line history: "
+msgstr "Aktionsliste:"
+
+#: midi_tracer.cc:55
+msgid "Auto-Scroll"
+msgstr "Auto-Scroll"
+
+#: midi_tracer.cc:56
+msgid "Decimal"
+msgstr "Dezimal"
+
+#: midi_tracer.cc:57 rc_option_editor.cc:1191
+msgid "Enabled"
+msgstr "Aktiviert"
+
+#: midi_tracer.cc:58
+msgid "Delta times"
+msgstr "Deltazeiten"
+
+#: midi_tracer.cc:71
+msgid "Port:"
+msgstr "Port:"
+
+#: midi_velocity_dialog.cc:31
+msgid "New velocity"
+msgstr "Neue Velocity"
+
+#: missing_file_dialog.cc:35
+msgid "Missing File"
+msgstr "Fehlende Datei"
+
+#: missing_file_dialog.cc:37
+msgid "Select a folder to search"
+msgstr "Ordner zum Suchen auswählen"
+
+#: missing_file_dialog.cc:38
+msgid "Add chosen folder to search path, and try again"
+msgstr "Ausgewählten Ordner zur Suche hinzufügen und es nochmal versuchen"
+
+#: missing_file_dialog.cc:40
+msgid "Stop loading this session"
+msgstr "Laden des Projekts abbrechen"
+
+#: missing_file_dialog.cc:41
+msgid "Skip all missing files"
+msgstr "Alle fehlenden Dateien überspringen"
+
+#: missing_file_dialog.cc:42
+msgid "Skip this file"
+msgstr "Diese Datei überspringen"
+
+#: missing_file_dialog.cc:53
+msgid "audio"
+msgstr "Audio"
+
+#: missing_file_dialog.cc:70
+msgid ""
+"%1 cannot find the %2 file\n"
+"\n"
+"<i>%3</i>\n"
+"\n"
+"in any of these folders:\n"
+"\n"
+"<tt>%4</tt>\n"
+"\n"
+msgstr ""
+"%1 kann die %2datei\n"
+"\n"
+"<i>%3</i>\n"
+"\n"
+"in keinem dieser Ordner finden:\n"
+"\n"
+"<tt>%4</tt>\n"
+"\n"
+
+#: missing_file_dialog.cc:104
+msgid "Click to choose an additional folder"
+msgstr "Einen weiteren Ordner für die Suche auswählen"
+
+#: missing_plugin_dialog.cc:29
+msgid "Missing Plugins"
+msgstr "Fehlende Plugins"
+
+#: missing_plugin_dialog.cc:33 transcode_video_dialog.cc:60
+msgid "OK"
+msgstr "OK"
+
+#: mixer_actor.cc:55
+msgid "Toggle Solo on Mixer-Selected Tracks/Busses"
+msgstr "Im Mixer ausgewählte Spuren/Busse auf Solo schalten"
+
+#: mixer_actor.cc:56
+msgid "Toggle Mute on Mixer-Selected Tracks/Busses"
+msgstr "Stummschaltung der im Mixer ausgewählten Spuren/Busse ändern"
+
+#: mixer_actor.cc:57
+msgid "Toggle Rec-enable on Mixer-Selected Tracks/Busses"
+msgstr "Aufnahmebereitschaft auf im Mixer ausgewählten Spuren ändern"
+
+#: mixer_actor.cc:58
+msgid "Decrease Gain on Mixer-Selected Tracks/Busses"
+msgstr "Lautstärke im Mixer ausgewählter Spuren/Busse reduzieren"
+
+#: mixer_actor.cc:59
+msgid "Increase Gain on Mixer-Selected Tracks/Busses"
+msgstr "Lautstärke im Mixer ausgewählter Spuren/Busse erhöhen"
+
+#: mixer_actor.cc:60
+msgid "Set Gain to 0dB on Mixer-Selected Tracks/Busses"
+msgstr "Lautstärke im Mixer ausgewählter Spuren/Busse auf 0dB setzen"
+
+#: mixer_actor.cc:63
+msgid "Copy Selected Processors"
+msgstr "Ausgewählte Prozessoren kopieren"
+
+#: mixer_actor.cc:64
+msgid "Cut Selected Processors"
+msgstr "Ausgewählte Prozessoren ausschneiden"
+
+#: mixer_actor.cc:65
+msgid "Paste Selected Processors"
+msgstr "Ausgewählte Prozessoren einfügen"
+
+#: mixer_actor.cc:66
+msgid "Delete Selected Processors"
+msgstr "Ausgewählte Prozessoren löschen"
+
+#: mixer_actor.cc:67
+msgid "Select All (visible) Processors"
+msgstr "Alle (sichtbaren) Prozessoren auswählen"
+
+#: mixer_actor.cc:68
+msgid "Toggle Selected Processors"
+msgstr "Ausgewählte Prozessoren umschalten"
+
+#: mixer_actor.cc:69
+msgid "Toggle Selected Plugins"
+msgstr "Ausgewählte Plugins umschalten "
+
+#: mixer_actor.cc:70
+msgid "Deselect all strips and processors"
+msgstr "Alle Kanalzüge und Prozessoren deselektieren"
+
+#: mixer_actor.cc:72 mixer_actor.cc:73
+msgid "Scroll Mixer Window to the left"
+msgstr "Mixerfenster nach links scrollen"
+
+#: mixer_actor.cc:75
+msgid "Toggle MIDI Input Active for Mixer-Selected Tracks/Busses"
+msgstr "MIDI Eingang für im Mixer ausgewählte Spuren/Busse de/aktivieren"
+
+#: mixer_actor.cc:90
+msgid "Loaded mixer bindings from %1"
+msgstr "Mixer-Tastenkürzel aus %1 geladen"
+
+#: mixer_actor.cc:92
+msgid "Could not find mixer.bindings in search path %1"
+msgstr "Konnte mixer.bindings im Suchpfad %1 nicht finden"
+
+#: mixer_strip.cc:97 mixer_strip.cc:127
+msgid "pre"
+msgstr "Pre"
+
+#: mixer_strip.cc:99 mixer_strip.cc:129 mixer_strip.cc:384 mixer_strip.cc:1456
+#: rc_option_editor.cc:2833
+msgid "Comments"
+msgstr "Kommentare"
+
+#: mixer_strip.cc:152
+msgid "Click to toggle the width of this mixer strip."
+msgstr "Klicken Sie, um die Breite dieses Kanalzuges umzuschalten"
+
+#: mixer_strip.cc:154
+msgid ""
+"\n"
+"%1-%2-click to toggle the width of all strips."
+msgstr ""
+"\n"
+"%1-%2-Klicken Sie, um die Breite aller Kanalzüge umzuschalten."
+
+#: mixer_strip.cc:161
+msgid "Hide this mixer strip"
+msgstr "Diesen Kanalzug verbergen"
+
+#: mixer_strip.cc:172
+msgid "Click to select metering point"
+msgstr "Abgreifpunkt der Pegelanzeige auswählen"
+
+#: mixer_strip.cc:188
+msgid "Isolate Solo"
+msgstr "Solo isolieren"
+
+#: mixer_strip.cc:196
+msgid "Lock Solo Status"
+msgstr "Solostatus sperren"
+
+#: mixer_strip.cc:198 mixer_strip.cc:2090
+msgid "SoloLock|Lock"
+msgstr "Lock"
+
+#: mixer_strip.cc:199 mixer_strip.cc:2089
+msgid "Iso"
+msgstr "Iso"
+
+#: mixer_strip.cc:253
+msgid "Mix group"
+msgstr "Bearbeitungsgruppe"
+
+#: mixer_strip.cc:263
+msgid "Trim: "
+msgstr "Anpassen: "
+
+#: mixer_strip.cc:380 rc_option_editor.cc:2829
+msgid "Phase Invert"
+msgstr "Phaseninvertierung"
+
+#: mixer_strip.cc:381 rc_option_editor.cc:2830
+msgid "Record & Monitor"
+msgstr "Aufnahme & Monitor..."
+
+#: mixer_strip.cc:382 rc_option_editor.cc:2831
+msgid "Solo Iso / Lock"
+msgstr "Solo Iso / Sperre"
+
+#: mixer_strip.cc:546
+msgid "Enable/Disable MIDI input"
+msgstr "Aktiviert/Deaktiviert MIDI Input"
+
+#: mixer_strip.cc:712
+msgid "Aux"
+msgstr "Aux"
+
+#: mixer_strip.cc:738
+msgid "Snd"
+msgstr "Snd"
+
+#: mixer_strip.cc:809 mixer_strip.cc:912 processor_box.cc:2449
+msgid "Not connected to audio engine - no I/O changes are possible"
+msgstr ""
+"Nicht mit Audioengine verbunden - es sind keine Änderungen an Ein-/Ausgängen "
+"möglich"
+
+#: mixer_strip.cc:866 mixer_strip.cc:968
+msgid "Add %1 port"
+msgstr "%1-Port hinzufügen"
+
+#: mixer_strip.cc:873 mixer_strip.cc:975 monitor_section.cc:1315
+msgid "Routing Grid"
+msgstr "Verbindungsraster"
+
+#: mixer_strip.cc:1204
+msgid "MIDI "
+msgstr "MIDI"
+
+#: mixer_strip.cc:1209
+msgid "<b>INPUT</b> to %1"
+msgstr "<b>EINGANG</b> zu %1"
+
+#: mixer_strip.cc:1212 monitor_section.cc:1366
+msgid "<b>OUTPUT</b> from %1"
+msgstr "<b>AUSGANG</b> von %1"
+
+#: mixer_strip.cc:1330 monitor_section.cc:1453
+msgid "Disconnected"
+msgstr "Getrennt"
+
+#: mixer_strip.cc:1459
+msgid "*Comments*"
+msgstr "*Kommentare*"
+
+#: mixer_strip.cc:1466
+msgid "Cmt"
+msgstr "Kmt"
+
+#: mixer_strip.cc:1469
+msgid "*Cmt*"
+msgstr "*Kmt*"
+
+#: mixer_strip.cc:1475
+msgid "Click to Add/Edit Comments"
+msgstr "Kommentare hinzufügen/ändern"
+
+#: mixer_strip.cc:1519
+msgid "Grp"
+msgstr "Grp"
+
+#: mixer_strip.cc:1522
+msgid "~G"
+msgstr "~G"
+
+#: mixer_strip.cc:1551 route_time_axis.cc:572
+msgid "Color..."
+msgstr "Farbe..."
+
+#: mixer_strip.cc:1553 route_time_axis.cc:574
+msgid "Comments..."
+msgstr "Kommentare"
+
+#: mixer_strip.cc:1555 route_time_axis.cc:576
+msgid "Inputs..."
+msgstr "Eingänge..."
+
+#: mixer_strip.cc:1557 route_time_axis.cc:578
+msgid "Outputs..."
+msgstr "Ausgänge..."
+
+#: mixer_strip.cc:1562
+msgid "Save As Template..."
+msgstr "Als Vorlage Speichern..."
+
+#: mixer_strip.cc:1568 route_group_dialog.cc:45 route_time_axis.cc:852
+msgid "Active"
+msgstr "Aktiv"
+
+#: mixer_strip.cc:1576
+msgid "Adjust Latency..."
+msgstr "Latenz einstellen..."
+
+#: mixer_strip.cc:1579
+msgid "Protect Against Denormals"
+msgstr "Schütze vor Denormals"
+
+#: mixer_strip.cc:1585 route_time_axis.cc:591
+msgid "Remote Control ID..."
+msgstr "ID für Fernsteuerung..."
+
+#: mixer_strip.cc:1885
+msgid "Pre"
+msgstr "Pre"
+
+#: mixer_strip.cc:1889
+msgid "Post"
+msgstr "Post"
+
+#: mixer_strip.cc:1905
+msgid "Meter|In"
+msgstr "In"
+
+#: mixer_strip.cc:1909
+msgid "Meter|Pr"
+msgstr "Pr"
+
+#: mixer_strip.cc:1913
+msgid "Meter|Po"
+msgstr "Po"
+
+#: mixer_strip.cc:1917
+msgid "Meter|O"
+msgstr "O"
+
+#: mixer_strip.cc:1922
+msgid "Meter|C"
+msgstr "C"
+
+#: mixer_strip.cc:2070 route_ui.cc:170
+msgid "Disk"
+msgstr "Disk"
+
+#: mixer_strip.cc:2082 monitor_section.cc:76
+msgid "AFL"
+msgstr "AFL"
+
+#: mixer_strip.cc:2085 monitor_section.cc:77
+msgid "PFL"
+msgstr "PFL"
+
+#: mixer_strip.cc:2095 meter_strip.cc:387
+msgid "MonitorInput|I"
+msgstr "I"
+
+#: mixer_strip.cc:2096 meter_strip.cc:388
+msgid "MonitorDisk|D"
+msgstr "D"
+
+#: mixer_strip.cc:2108 meter_strip.cc:379 route_time_axis.cc:2729
+msgid "AfterFader|A"
+msgstr "A"
+
+#: mixer_strip.cc:2111
+msgid "Prefader|P"
+msgstr "P"
+
+#: mixer_strip.cc:2116
+msgid "SoloIso|I"
+msgstr "I"
+
+#: mixer_strip.cc:2117
+msgid "SoloLock|L"
+msgstr "L"
+
+#: mixer_strip.cc:2303
+msgid "Pre Fader"
+msgstr "Pre Fader"
+
+#: mixer_strip.cc:2304
+msgid "Post Fader"
+msgstr "Post Fader"
+
+#: mixer_strip.cc:2349 meter_strip.cc:860
+msgid "Change all in Group to %1"
+msgstr "Alle in Gruppe zu %1 ändern"
+
+#: mixer_strip.cc:2351 meter_strip.cc:862
+msgid "Change all to %1"
+msgstr "Alle zu %1 ändern"
+
+#: mixer_strip.cc:2353 meter_strip.cc:864
+msgid "Change same track-type to %1"
+msgstr "Gleichen Spurtyp zu %1 ändern"
+
+#: mixer_ui.cc:130 route_time_axis.cc:829
+msgid "Group"
+msgstr "Gruppe"
+
+#: mixer_ui.cc:1242
+msgid "track display list item for renamed strip not found!"
+msgstr ""
+"Konnte Bezeichnung für umbenannten Kanalzug nicht in der Spurliste finden!"
+
+#: mixer_ui.cc:1336
+msgid "-all-"
+msgstr "-alle-"
+
+#: mixer_ui.cc:1873
+msgid "Strips"
+msgstr "Kanalzüge"
+
+#: meter_strip.cc:161
+msgid "Reset Peak"
+msgstr "Peaks zurücksetzen"
+
+#: meter_strip.cc:382 route_time_axis.cc:2733
+msgid "PreFader|P"
+msgstr "P"
+
+#: meter_strip.cc:896
+msgid "Variable height"
+msgstr "Variable Höhe"
+
+#: meter_strip.cc:897
+msgid "Short"
+msgstr "Short"
+
+#: meter_strip.cc:898
+msgid "Tall"
+msgstr "Tall"
+
+#: meter_strip.cc:899
+msgid "Grande"
+msgstr "Grande"
+
+#: meter_strip.cc:900
+msgid "Venti"
+msgstr "Venti"
+
+#: meter_patterns.cc:82
+msgid "Peak (+6dBFS)"
+msgstr "Spitzenwert (+6dBFS)"
+
+#: meter_patterns.cc:85
+msgid "Peak (0dBFS)"
+msgstr "Spitzenwert (0dBFS)"
+
+#: meter_patterns.cc:88
+msgid "RMS + Peak"
+msgstr "RMS + Spitzenwert"
+
+#: meter_patterns.cc:91
+msgid "IEC1/DIN"
+msgstr "IEC1/DIN"
+
+#: meter_patterns.cc:94
+msgid "IEC1/Nordic"
+msgstr "IEC1/Nordisch"
+
+#: meter_patterns.cc:97
+msgid "IEC2/BBC"
+msgstr "IEC2/BBC"
+
+#: meter_patterns.cc:100
+msgid "IEC2/EBU"
+msgstr "IEC2/EBU"
+
+#: meter_patterns.cc:103
+msgid "K20/RMS"
+msgstr "K20/RMS"
+
+#: meter_patterns.cc:106
+msgid "K14/RMS"
+msgstr "K14/RMS"
+
+#: meter_patterns.cc:109
+msgid "K12/RMS"
+msgstr "K12/RMS"
+
+#: meter_patterns.cc:112
+msgid "VU"
+msgstr "VU"
+
+#: monitor_section.cc:75
+msgid "SiP"
+msgstr "SiP"
+
+#: monitor_section.cc:102 route_group_dialog.cc:49
+msgid "Soloing"
+msgstr "Soloing"
+
+#: monitor_section.cc:106
+msgid "Isolated"
+msgstr "Isoliert"
+
+#: monitor_section.cc:110
+msgid "Auditioning"
+msgstr "Vorhören"
+
+#: monitor_section.cc:120
+msgid ""
+"When active, something is solo-isolated.\n"
+"Click to de-isolate everything"
+msgstr ""
+"Wenn aktiv, ist etwas auf isoliertes Solo geschalten.\n"
+"Klick, schaltet isoliertes Solo überall aus."
+
+#: monitor_section.cc:123
+msgid ""
+"When active, auditioning is active.\n"
+"Click to stop the audition"
+msgstr ""
+"Wird beim Vorhören aktiv.\n"
+"Klicken stoppt das Vorhören."
+
+#: monitor_section.cc:140
+msgid "Solo controls affect solo-in-place"
+msgstr "Solo-Kontrollelemente beeinflussen solo-in-place"
+
+#: monitor_section.cc:146
+msgid "Solo controls toggle after-fader-listen"
+msgstr "Solo-Kontrollelemente schalten AFL um"
+
+#: monitor_section.cc:152
+msgid "Solo controls toggle pre-fader-listen"
+msgstr "Solo-Kontrollelemente schalten PFL um"
+
+#: monitor_section.cc:162
+msgid "Gain increase for soloed signals (0dB is normal)"
+msgstr "Erhöhung der Lautstärke für Solosignale (0dB ist üblich)"
+
+#: monitor_section.cc:167 monitor_section.cc:196 monitor_section.cc:222
+#: monitor_section.cc:322
+msgid "0 dB"
+msgstr "0 dB"
+
+#: monitor_section.cc:168
+msgid "3 dB"
+msgstr "3 dB"
+
+#: monitor_section.cc:169
+msgid "6 dB"
+msgstr "6 dB"
+
+#: monitor_section.cc:170
+msgid "10 dB"
+msgstr "10 dB"
+
+#: monitor_section.cc:176
+msgid "Solo Boost"
+msgstr "Solo Boost"
+
+#: monitor_section.cc:191
+msgid ""
+"Gain reduction non-soloed signals\n"
+"A value above -inf dB causes \"solo-in-front\""
+msgstr ""
+"Reduzierung der Lautstärke für Signale, die nicht Solo geschalten sind.\n"
+"Ein Wert über -inf dB bedeutet \"solo-in-front\""
+
+#: monitor_section.cc:197 monitor_section.cc:224 monitor_section.cc:324
+msgid "-6 dB"
+msgstr "-6 dB"
+
+#: monitor_section.cc:198 monitor_section.cc:225 monitor_section.cc:325
+msgid "-12 dB"
+msgstr "-12 dB"
+
+#: monitor_section.cc:199 monitor_section.cc:226 monitor_section.cc:326
+msgid "-20 dB"
+msgstr "-20 dB"
+
+#: monitor_section.cc:200
+msgid "OFF"
+msgstr "OFF"
+
+#: monitor_section.cc:202
+msgid "SiP Cut"
+msgstr "SiP Cut"
+
+#: monitor_section.cc:217
+msgid "Gain reduction to use when dimming monitor outputs"
+msgstr "Lautstärkereduzierung beim Abschwächen der Monitorausgänge"
+
+#: monitor_section.cc:223 monitor_section.cc:323
+msgid "-3 dB"
+msgstr "-3 dB"
+
+#: monitor_section.cc:231 monitor_section.cc:289 monitor_section.cc:372
+msgid "Dim"
+msgstr "Dim"
+
+#: monitor_section.cc:241
+msgid "Excl. Solo"
+msgstr "Exkl. Solo"
+
+#: monitor_section.cc:243
+msgid "Exclusive solo means that only 1 solo is active at a time"
+msgstr ""
+"Exklusives Solo bedeutet, daß nur ein Solo zu einem Zeitpunkt aktiv ist"
+
+#: monitor_section.cc:250
+msgid "Solo » Mute"
+msgstr "Solo » Mute"
+
+#: monitor_section.cc:252
+msgid ""
+"If enabled, solo will override mute\n"
+"(a soloed & muted track or bus will be audible)"
+msgstr ""
+"Wenn aktiviert, hat Solo Priorität über Mute\n"
+"(eine Spur mit aktiviertem Mute & Solo ist hörbar)"
+
+#: monitor_section.cc:327
+msgid "-30 dB"
+msgstr "-30 dB"
+
+#: monitor_section.cc:341
+msgid "Monitor"
+msgstr "Monitor"
+
+#: monitor_section.cc:380
+msgid "Inv"
+msgstr "Inv"
+
+#: monitor_section.cc:784
+msgid "Switch monitor to mono"
+msgstr "Monitor auf Mono schalten"
+
+#: monitor_section.cc:787
+msgid "Cut monitor"
+msgstr "Monitor stummschalten"
+
+#: monitor_section.cc:790
+msgid "Dim monitor"
+msgstr "Monitor abschwächen"
+
+#: monitor_section.cc:793
+msgid "Toggle exclusive solo mode"
+msgstr "Exklusives Solo umschalten"
+
+#: monitor_section.cc:799
+msgid "Toggle mute overrides solo mode"
+msgstr "Mute-Status hat höhere Priorität als Solo-Modus"
+
+#: monitor_section.cc:811
+msgid "Cut monitor channel %1"
+msgstr "Monitorkanal %1 stummschalten"
+
+#: monitor_section.cc:816
+msgid "Dim monitor channel %1"
+msgstr "Monitorkanal %1 abschwächen"
+
+#: monitor_section.cc:821
+msgid "Solo monitor channel %1"
+msgstr "Monitorkanal %1 Solo"
+
+#: monitor_section.cc:826
+msgid "Invert monitor channel %1"
+msgstr "Invertiere Monitorkanal %1"
+
+#: monitor_section.cc:836
+msgid "In-place solo"
+msgstr "In-Place Solo"
+
+#: monitor_section.cc:838
+msgid "After Fade Listen (AFL) solo"
+msgstr "Solo nach Fader (AFL) abhören"
+
+#: monitor_section.cc:840
+msgid "Pre Fade Listen (PFL) solo"
+msgstr "Solo vor Fader (PFL) abhören"
+
+#: monitor_section.cc:1262
+msgid "No session - no I/O changes are possible"
+msgstr "Kein Projekt - es sind keine Änderungen an Ein-/Ausgängen möglich"
+
+#: monitor_selector.cc:199
+msgid "Monitor output selector"
+msgstr "Auswahl des Monitorausgangs"
+
+#: mono_panner.cc:104 stereo_panner.cc:114
+msgid "bypassed"
+msgstr "überbrückt"
+
+#: mono_panner.cc:118
+#, c-format
+msgid "L:%3d R:%3d"
+msgstr "L:%3d R:%3d"
+
+#: mono_panner.cc:202 panner2d.cc:277 stereo_panner.cc:251
+#: stereo_panner.cc:274
+msgid "Panner|L"
+msgstr "L"
+
+#: mono_panner.cc:219 panner2d.cc:278 stereo_panner.cc:249
+#: stereo_panner.cc:276
+msgid "Panner|R"
+msgstr "R"
+
+#: mono_panner_editor.cc:33
+msgid "Mono Panner"
+msgstr "Mono Panner"
+
+#: mono_panner_editor.cc:44 mono_panner_editor.cc:49
+#: stereo_panner_editor.cc:46 stereo_panner_editor.cc:51
+msgid "%"
+msgstr "%"
+
+#: nag.cc:41
+msgid "Support %1 Development"
+msgstr "Unterstütze die Entwicklung von %1"
+
+#: nag.cc:42
+msgid "I'd like to make a one-time donation"
+msgstr "Ich möchte etwas spenden"
+
+#: nag.cc:43
+msgid "Tell me more about becoming a subscriber"
+msgstr "Ich möchte mehr über eine dauerhafte Unterstützung (Abonnement) wissen"
+
+#: nag.cc:44
+msgid "I'm already a subscriber!"
+msgstr "Ich bin schon Abonnent!"
+
+#: nag.cc:45
+msgid "Ask about this the next time I export"
+msgstr "Frage mich nach dem nächsten Export"
+
+#: nag.cc:46
+msgid "Never ever ask me about this again"
+msgstr "Frage nicht mehr danach"
+
+#: nag.cc:49
+msgid ""
+"Congratulations on your session export.\n"
+"\n"
+"It looks as if you may already be a subscriber. If so, thanks, and sorry\n"
+"to bother you again about this - I'm working on improving our subscriber "
+"system\n"
+"so that I don't have to keep annoying you with this message.\n"
+"\n"
+"If you're not a subscriber, perhaps you might consider supporting my work\n"
+"on Ardour with either a one-time donation or subscription. Nothing will \n"
+"happen if you choose not to do so. However Ardour's continuing development\n"
+"relies on a stable, sustainable income stream. Thanks for using Ardour!"
+msgstr ""
+"Herzlichen Glückwunsch zu Ihrem Projektexport.\n"
+"\n"
+"Es sieht so aus, als wären Sie schon ein Abonnent/eine Abonnentin. Wenn ja,\n"
+"dann vielen Dank und Entschuldigung für die Störung - ich arbeite daran, "
+"das\n"
+"Abo-System zu verbessern, damit ich Sie nicht dauernd störe.\n"
+"\n"
+"Wenn Sie Ardour noch nicht regelmäßig finanziell unterstützen, wäre es "
+"schön\n"
+"wenn Sie sich überlegen würden, meine Arbeit mit einer einmaligen Spende "
+"oder\n"
+"einem Abonnement zu unterstützen. Falls Sie das nicht tun, wird nichts "
+"passieren.\n"
+"Die weitere Entwicklung hängt allerdings von einem stabilen und "
+"verlässlichen Einkommen ab.\n"
+"Danke, dass Sie Ardour verwenden!"
+
+#: nag.cc:58
+msgid ""
+"Congratulations on your session export.\n"
+"\n"
+"I hope you find Ardour a useful tool. I'd like to ask you to consider "
+"supporting\n"
+"its development with either a one-time donation or subscription. Nothing\n"
+"will happen if you choose not to do so. However Ardour's continuing "
+"development\n"
+"relies on a stable, sustainable income stream. Thanks for using Ardour!"
+msgstr ""
+"Herzlichen Glückwunsch zu Ihrem Projektexport.\n"
+"\n"
+"Ich hoffe, dass Ardour ein nützliches Werkzeug für Sie ist. Ich möchte Sie\n"
+"darum bitten, Ardours Entwicklung entweder durch eine einmalige Spende\n"
+"oder ein Abonnement zu unterstützen. Falls Sie das nicht tun, wird nichts\n"
+"passieren. Die weitere Entwicklung hängt allerdings von einem stabilen\n"
+"und verlässlichen Einkommen ab. Danke, dass Sie Ardour verwenden!"
+
+#: new_plugin_preset_dialog.cc:29
+msgid "New Preset"
+msgstr "Neues Preset"
+
+#: new_plugin_preset_dialog.cc:30
+msgid "Replace existing preset with this name"
+msgstr "Ersetze vorhandenes Preset mit diesem Namen"
+
+#: new_plugin_preset_dialog.cc:34
+msgid "Name of new preset"
+msgstr "Name für neues Preset"
+
+#: normalize_dialog.cc:34
+msgid "Normalize regions"
+msgstr "Regionen normalisieren"
+
+#: normalize_dialog.cc:34
+msgid "Normalize region"
+msgstr "Region normalisieren"
+
+#: normalize_dialog.cc:49 strip_silence_dialog.cc:66
+msgid "dbFS"
+msgstr "dbFS"
+
+#: normalize_dialog.cc:56
+msgid "Normalize each region using its own peak value"
+msgstr "Normalisiere jede Region mit ihrem eigenen Spitzenwert"
+
+#: normalize_dialog.cc:58
+msgid "Normalize each region using the peak value of all regions"
+msgstr "Normalisiere jede Region mit dem Spitzenwert aller Regionen"
+
+#: normalize_dialog.cc:73
+msgid "Normalize"
+msgstr "Normalisieren"
+
+#: note_select_dialog.cc:33
+msgid "Select Note"
+msgstr "Note auswählen"
+
+#: opts.cc:57
+msgid "Usage: "
+msgstr "Aufruf:"
+
+#: opts.cc:58
+msgid "  [SESSION_NAME]              Name of session to load\n"
+msgstr "  [PROJEKTNAME]                   Name des zu ladenden Projekts\n"
+
+#: opts.cc:59
+msgid "  -v, --version               Show version information\n"
+msgstr "  -v, --version                    Versionsinformation ausgeben\n"
+
+#: opts.cc:60
+msgid "  -h, --help                  Print this message\n"
+msgstr "  -h, --help                       Diese Hinweise ausgeben\n"
+
+#: opts.cc:61
+msgid ""
+"  -a, --no-announcements      Do not contact website for announcements\n"
+msgstr ""
+"  -a, --no-announcements      Webseite nicht für Neuigkeiten kontaktieren\n"
+
+#: opts.cc:62
+msgid ""
+"  -b, --bindings              Print all possible keyboard binding names\n"
+msgstr ""
+"  -b, --bindings                   Alle möglichen Tastaturkürzelnamen "
+"ausgeben\n"
+
+#: opts.cc:63
+msgid ""
+"  -c, --name <name>           Use a specific backend client name, default is "
+"ardour\n"
+msgstr ""
+"  -c, --name  name                 Benutze speziellen Backend-Clientnamen, "
+"Voreinstellung: ardour\n"
+
+#: opts.cc:64
+msgid ""
+"  -d, --disable-plugins       Disable all plugins in an existing session\n"
+msgstr ""
+"-d, --disable-plugins            Alle Plugins eines bestehenden Projekts "
+"deaktivieren\n"
+
+#: opts.cc:65
+msgid ""
+"  -D, --debug <options>       Set debug flags. Use \"-D list\" to see "
+"available options\n"
+msgstr ""
+"  -D, --debug <options>       Setze Debug-flags. Verwende \"-D list\" um die "
+"verfügbaren Optionen zu sehen\n"
+
+#: opts.cc:66
+msgid "  -n, --no-splash             Do not show splash screen\n"
+msgstr "  -n, --no-splash               Splashscreen nicht anzeigen\n"
+
+#: opts.cc:67
+msgid "  -m, --menus file            Use \"file\" to define menus\n"
+msgstr "  -m, --menus file                 Benutze \"file\" für die Menüs\n"
+
+#: opts.cc:68
+msgid ""
+"  -N, --new session-name      Create a new session from the command line\n"
+msgstr ""
+"  -N, --new session-name           Erstelle neues Projekt aus der "
+"Kommandozeile\n"
+
+#: opts.cc:69
+msgid "  -O, --no-hw-optimizations   Disable h/w specific optimizations\n"
+msgstr ""
+"  -O, --no-hw-optimizations        Hardwarespezifische Optimierungen "
+"deaktivieren\n"
+
+#: opts.cc:70
+msgid "  -P, --no-connect-ports      Do not connect any ports at startup\n"
+msgstr ""
+"  -P, --no-connect-ports      beim Programmstart keine Ports verbinden\n"
+
+#: opts.cc:71
+msgid "  -S, --sync                  Draw the gui synchronously \n"
+msgstr "  -S, --sync\t                      Zeichne die GUI synchron \n"
+
+#: opts.cc:73
+msgid "  -V, --novst                 Do not use VST support\n"
+msgstr "  -V, --novst                      VST-Unterstützung ausschalten\n"
+
+#: opts.cc:75
+msgid ""
+"  -E, --save <file>           Load the specified session, save it to <file> "
+"and then quit\n"
+msgstr ""
+"  -E, --save <file>           Lädt das angegebene Projekt, speichert es "
+"unter <file> und beendet sich\n"
+
+#: opts.cc:76
+msgid "  -C, --curvetest filename    Curve algorithm debugger\n"
+msgstr "  -C, --curvetest filename    Curve algorithm debugger\n"
+
+#: opts.cc:77
+msgid "  -k, --keybindings filename  Name of key bindings to load\n"
+msgstr ""
+"  -k, --keybindings dateiname       Dateiname für die Tastaturbelegungen"
+
+#: panner2d.cc:897
+msgid "Panner (2D)"
+msgstr "Panner (2D)"
+
+#: panner2d.cc:899 panner_ui.cc:400 plugin_ui.cc:458
+msgid "Bypass"
+msgstr "Bypass"
+
+#: panner2d.cc:905
+msgid "Panner"
+msgstr "Panner"
+
+#: panner_ui.cc:70
+msgid "Pan automation mode"
+msgstr "Pan-Automationsmodus"
+
+#: panner_ui.cc:71
+msgid "Pan automation type"
+msgstr "Pan-Automationstyp"
+
+#: panner_ui.cc:603
+msgid "Manual|M"
+msgstr "M"
+
+#: panner_ui.cc:606
+msgid "Play|P"
+msgstr "P"
+
+#: panner_ui.cc:609
+msgid "Touch|T"
+msgstr "T"
+
+#: panner_ui.cc:612
+msgid "Write|W"
+msgstr "W"
+
+#: playlist_selector.cc:43
+msgid "Playlists"
+msgstr "Wiedergabelisten"
+
+#: playlist_selector.cc:54
+msgid "Playlists grouped by track"
+msgstr "Wiedergabelisten, nach Spur gruppiert"
+
+#: playlist_selector.cc:101
+msgid "Playlist for %1"
+msgstr "Wiedergabeliste für %1"
+
+#: playlist_selector.cc:114
+msgid "Other tracks"
+msgstr "Andere Spuren"
+
+#: playlist_selector.cc:139
+msgid "unassigned"
+msgstr "nicht zugewiesen"
+
+#: playlist_selector.cc:194
+msgid "Imported"
+msgstr "Importierte"
+
+#: plugin_eq_gui.cc:85 plugin_eq_gui.cc:109
+msgid "dB scale"
+msgstr "dB Skala"
+
+#: plugin_eq_gui.cc:116
+msgid "Show phase"
+msgstr "Zeige Phase"
+
+#: plugin_selector.cc:53 plugin_selector.cc:225
+msgid "Name contains"
+msgstr "Name enthält"
+
+#: plugin_selector.cc:54 plugin_selector.cc:229
+msgid "Type contains"
+msgstr "Typ enthält"
+
+#: plugin_selector.cc:55 plugin_selector.cc:227
+msgid "Category contains"
+msgstr "Kategorie enthält"
+
+#: plugin_selector.cc:56 plugin_selector.cc:249
+msgid "Author contains"
+msgstr "Autor enthält"
+
+#: plugin_selector.cc:57 plugin_selector.cc:251
+msgid "Library contains"
+msgstr "Katalog enthält"
+
+#: plugin_selector.cc:58 plugin_selector.cc:215 plugin_selector.cc:527
+msgid "Favorites only"
+msgstr "nur Favoriten"
+
+#: plugin_selector.cc:59 plugin_selector.cc:219 plugin_selector.cc:527
+msgid "Hidden only"
+msgstr "Nur versteckte"
+
+#: plugin_selector.cc:64
+msgid "Plugin Manager"
+msgstr "Alle Plugins ..."
+
+#: plugin_selector.cc:85
+msgid "Fav"
+msgstr "Fav"
+
+#: plugin_selector.cc:87
+msgid "Available Plugins"
+msgstr "Verfügbare Plugins"
+
+#: plugin_selector.cc:88
+msgid "Type"
+msgstr "Typ"
+
+#: plugin_selector.cc:89
+msgid "Category"
+msgstr "Kategorie"
+
+#: plugin_selector.cc:90
+msgid "Creator"
+msgstr "Ersteller"
+
+#: plugin_selector.cc:91
+msgid "# Audio In"
+msgstr "# Audio In"
+
+#: plugin_selector.cc:92
+msgid "# Audio Out"
+msgstr "# Audio Out"
+
+#: plugin_selector.cc:93
+msgid "# MIDI In"
+msgstr "# MIDI In"
+
+#: plugin_selector.cc:94
+msgid "# MIDI Out"
+msgstr "# MIDI Out"
+
+#: plugin_selector.cc:116
+msgid "Plugins to be connected"
+msgstr "Plugins, die verbunden werden"
+
+#: plugin_selector.cc:129
+msgid "Add a plugin to the effect list"
+msgstr "Plugin zur Effektliste hinzufügen"
+
+#: plugin_selector.cc:133
+msgid "Remove a plugin from the effect list"
+msgstr "Plugin aus der Effektliste entfernen"
+
+#: plugin_selector.cc:169
+msgid "Insert Plugin(s)"
+msgstr "Plugin(s) einfügen"
+
+#: plugin_selector.cc:333 plugin_selector.cc:334 plugin_selector.cc:335
+#: plugin_selector.cc:336
+msgid "variable"
+msgstr "variabel"
+
+#: plugin_selector.cc:486
+msgid ""
+"The plugin \"%1\" could not be loaded\n"
+"\n"
+"See the Log window for more details (maybe)"
+msgstr ""
+"Das Plugin \"%1\" konnte nicht geladen werden\n"
+"\n"
+"Im Logfenster befinden sich möglicherweise mehr Informationen"
+
+#: plugin_selector.cc:634
+msgid "Favorites"
+msgstr "Favoriten"
+
+#: plugin_selector.cc:636
+msgid "Plugin Manager..."
+msgstr "Plugin Manager..."
+
+#: plugin_selector.cc:640
+msgid "By Creator"
+msgstr "Nach Urheber"
+
+#: plugin_selector.cc:643
+msgid "By Category"
+msgstr "Nach Kategorie"
+
+#: plugin_ui.cc:113
+msgid "Eh? LADSPA plugins don't have editors!"
+msgstr "Merkwürdig... LADSPA-Plugins sollten kein GUI haben!"
+
+#: plugin_ui.cc:122 plugin_ui.cc:227
+msgid ""
+"unknown type of editor-supplying plugin (note: no VST support in this "
+"version of %1)"
+msgstr ""
+"Unbekannter Plugintyp mit eigenem Editor (Hinweis: diese %1-Version "
+"unterstützt keine VST-Plugins)"
+
+#: plugin_ui.cc:125
+msgid "unknown type of editor-supplying plugin"
+msgstr "Unbekannter Plugintyp"
+
+#: plugin_ui.cc:257
+msgid ""
+"unknown type of editor-supplying plugin (note: no linuxVST support in this "
+"version of %1)"
+msgstr ""
+"Unbekannter Plugintyp mit eigenem Editor (Hinweis: diese %1-Version "
+"unterstützt keine linuxVST-Plugins)"
+
+#: plugin_ui.cc:329
+msgid "create_lv2_editor called on non-LV2 plugin"
+msgstr "create_lv2_editor auf nicht-LV2-Plugin angewandt"
+
+#: plugin_ui.cc:418
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: plugin_ui.cc:423
+msgid "Description"
+msgstr "Beschreibung"
+
+#: plugin_ui.cc:424
+msgid "Plugin analysis"
+msgstr "Pluginanalyse"
+
+#: plugin_ui.cc:431
+msgid ""
+"Presets (if any) for this plugin\n"
+"(Both factory and user-created)"
+msgstr ""
+"Presets (falls existent) für dieses Plugin\n"
+"(Hersteller- und Benutzerpresets)"
+
+#: plugin_ui.cc:432
+msgid "Save a new preset"
+msgstr "Neues Preset speichern"
+
+#: plugin_ui.cc:433
+msgid "Save the current preset"
+msgstr "Momentanes Preset speichern"
+
+#: plugin_ui.cc:434
+msgid "Delete the current preset"
+msgstr "Lösche das aktuelle Preset"
+
+#: plugin_ui.cc:435
+msgid ""
+"Reset parameters to default (if no parameters are in automation play mode)"
+msgstr ""
+"Parameter auf Vorgabewert zurücksetzen (falls keine Parameter im "
+"Automations-Wiedergabemodus sind)"
+
+#: plugin_ui.cc:436
+msgid "Disable signal processing by the plugin"
+msgstr "Deaktiviere die Signalverarbeitung des Plugins"
+
+#: plugin_ui.cc:473 plugin_ui.cc:685
+msgid ""
+"Click to allow the plugin to receive keyboard events that %1 would normally "
+"use as a shortcut"
+msgstr ""
+"Klicke, damit das Plugin Tastaturbefehle erhält, die %1 sonst als "
+"Tastenkürzel verwenden würde"
+
+#: plugin_ui.cc:474
+msgid "Click to enable/disable this plugin"
+msgstr "Klicke, um dieses Plugin zu ein/auszuschalten"
+
+#: plugin_ui.cc:517
+msgid "latency (%1 sample)"
+msgid_plural "latency (%1 samples)"
+msgstr[0] "Latenz (%1 Sample)"
+msgstr[1] "Latenz (%1 Samples)"
+
+#: plugin_ui.cc:519
+msgid "latency (%1 ms)"
+msgstr "Latenz (%1 ms)"
+
+#: plugin_ui.cc:530
+msgid "Edit Latency"
+msgstr "Latenz bearbeiten"
+
+#: plugin_ui.cc:576
+msgid ""
+"Plugin presets are not supported in this build of %1. Consider paying for a "
+"full version"
+msgstr ""
+"Pluginpresets werden in diesem Version von %1 nicht unterstützt. Erwägen "
+"Sie, für eine Vollversion zu zahlen"
+
+#: plugin_ui.cc:584
+msgid ""
+"Plugin presets are not supported in this build, see the Log window for more "
+"information."
+msgstr ""
+"Pluginpresets werden von dieser Ausgabe des Programms nicht unterstützt, "
+"weitere Informationen sind im Logfenster zu finden."
+
+#: plugin_ui.cc:692
+msgid "Click to allow normal use of %1 keyboard shortcuts"
+msgstr "Klicke, um die normale Verwendung von %1 Tastaturkürzeln zu aktivieren"
+
+#: plugin_ui.cc:789
+msgid "(none)"
+msgstr "(kein)"
+
+#: port_group.cc:337
+msgid "%1 Busses"
+msgstr "%1 Busse"
+
+#: port_group.cc:338
+msgid "%1 Tracks"
+msgstr "%1 Spuren"
+
+#: port_group.cc:339
+msgid "Hardware"
+msgstr "Hardware"
+
+#: port_group.cc:340
+msgid "%1 Misc"
+msgstr "%1 Sonstige"
+
+#: port_group.cc:341
+msgid "Other"
+msgstr "Andere"
+
+#: port_group.cc:432 port_group.cc:433
+msgid "LTC Out"
+msgstr "LTC Out"
+
+#: port_group.cc:436 port_group.cc:437
+msgid "LTC In"
+msgstr "LTC In"
+
+#: port_group.cc:463
+msgid "MTC in"
+msgstr "MTC in"
+
+#: port_group.cc:466
+msgid "MIDI control in"
+msgstr "MIDI control in"
+
+#: port_group.cc:469
+msgid "MIDI clock in"
+msgstr "MIDI clock in"
+
+#: port_group.cc:472
+msgid "MMC in"
+msgstr "MMC in"
+
+#: port_group.cc:476
+msgid "MTC out"
+msgstr "MTC out"
+
+#: port_group.cc:479
+msgid "MIDI control out"
+msgstr "MIDI control out"
+
+#: port_group.cc:482
+msgid "MIDI clock out"
+msgstr "MIDI clock out"
+
+#: port_group.cc:485
+msgid "MMC out"
+msgstr "MMC out"
+
+#: port_group.cc:532
+msgid ":monitor"
+msgstr ":monitor"
+
+#: port_group.cc:544
+msgid "system:"
+msgstr "system:"
+
+#: port_group.cc:545
+msgid "alsa_pcm"
+msgstr "alsa_pcm"
+
+#: port_insert_ui.cc:39
+msgid "Measure Latency"
+msgstr "Latenz messen"
+
+#: port_insert_ui.cc:50
+msgid "Send/Output"
+msgstr "Send/Ausgang"
+
+#: port_insert_ui.cc:51
+msgid "Return/Input"
+msgstr "Return/Input"
+
+#: port_insert_ui.cc:85
+msgid "No signal detected"
+msgstr "Kein Signal erkannt"
+
+#: port_insert_ui.cc:165
+msgid "Port Insert "
+msgstr "Port Insert "
+
+#: port_matrix.cc:340 port_matrix.cc:366
+msgid "<b>Sources</b>"
+msgstr "<b>Quellen</b>"
+
+#: port_matrix.cc:341 port_matrix.cc:367
+msgid "<b>Destinations</b>"
+msgstr "<b>Ziele</b>"
+
+#: port_matrix.cc:449 port_matrix.cc:457
+#, c-format
+msgid "Add %s %s"
+msgstr "Füge %s %s hinzu"
+
+#: port_matrix.cc:465
+#, c-format
+msgid "Rename '%s'..."
+msgstr "Benenne '%s' um..."
+
+#: port_matrix.cc:481
+msgid "Remove all"
+msgstr "Alle löschen"
+
+#: port_matrix.cc:501 port_matrix.cc:513
+#, c-format
+msgid "%s all"
+msgstr "%s alle"
+
+#: port_matrix.cc:536
+msgid "Rescan"
+msgstr "Aktualisieren"
+
+#: port_matrix.cc:538
+msgid "Show individual ports"
+msgstr "Individuelle Ports anzeigen"
+
+#: port_matrix.cc:544
+msgid "Flip"
+msgstr "Drehen"
+
+#: port_matrix.cc:731
+msgid ""
+"It is not possible to add a port here, as the first processor in the track "
+"or buss cannot support the new configuration."
+msgstr ""
+"Hier kann kein Port hinzugefügt werden, da der erste Prozessor der Spur/des "
+"Busses die neue Portanzahl nicht unterstützt."
+
+#: port_matrix.cc:734
+msgid "Cannot add port"
+msgstr "Kann Port nicht hinzufügen"
+
+#: port_matrix.cc:756
+msgid "Port removal not allowed"
+msgstr "Entfernen des Ports nicht erlaubt"
+
+#: port_matrix.cc:757
+msgid ""
+"This port cannot be removed.\n"
+"Either the first plugin in the track or buss cannot accept\n"
+"the new number of inputs or the last plugin has more outputs."
+msgstr ""
+"Dieser Port kann nicht entfernt werden.\n"
+"Entweder kann das erste Plugin auf der Spur oder dem Bus \n"
+"die neue Anzahl an Eingängen nicht verarbeiten, oder das \n"
+"letzte Plugin hat mehr Ausgänge."
+
+#: port_matrix.cc:974
+#, c-format
+msgid "Remove '%s'"
+msgstr "Lösche '%s'"
+
+#: port_matrix.cc:989
+#, c-format
+msgid "%s all from '%s'"
+msgstr "%s alle von '%s'"
+
+#: port_matrix.cc:1055 transform_dialog.cc:62
+msgid "channel"
+msgstr "Kanal"
+
+#: port_matrix_body.cc:82
+msgid "There are no ports to connect."
+msgstr "Es gibt keine Ports, zu denen verbunden werden kann."
+
+#: port_matrix_body.cc:84
+msgid "There are no %1 ports to connect."
+msgstr "Es gibt keine %1 Ports, zu denen verbunden werden kann."
+
+#: processor_box.cc:150
+msgid "Send"
+msgstr "Send"
+
+#: processor_box.cc:152
+msgid "Return"
+msgstr "Return"
+
+#: processor_box.cc:310
+msgid ""
+"\n"
+"This mono plugin has been replicated %1 times."
+msgstr ""
+"\n"
+"Dieses Mono-Plugin wurde %1 mal repliziert."
+
+#: processor_box.cc:314
+msgid ""
+"<b>%1</b>\n"
+"Double-click to show GUI.\n"
+"Alt+double-click to show generic GUI.%2"
+msgstr ""
+"<b>%1</b>\n"
+"Doppelklick, um GUI zu zeigen.\n"
+"Alt+Doppelklick, um einfaches GUI zu zeigen.%2"
+
+#: processor_box.cc:317
+msgid ""
+"<b>%1</b>\n"
+"Double-click to show generic GUI.%2"
+msgstr ""
+"<b>%1</b>\n"
+"Doppelklick, um einfaches GUI zu zeigen.%2"
+
+#: processor_box.cc:361
+#, c-format
+msgid "(%1x1) "
+msgstr "(%1x1) "
+
+#: processor_box.cc:437
+msgid "Show All Controls"
+msgstr "Alle Regler zeigen"
+
+#: processor_box.cc:441
+msgid "Hide All Controls"
+msgstr "Alle Regler verbergen"
+
+#: processor_box.cc:475
+msgid "Link panner controls"
+msgstr "Panner-Elemente verknüpfen"
+
+#: processor_box.cc:573
+msgid "on"
+msgstr "an"
+
+#: processor_box.cc:573 rc_option_editor.cc:2862 rc_option_editor.cc:2876
+msgid "off"
+msgstr "Aus"
+
+#: processor_box.cc:1021
+msgid ""
+"Right-click to add/remove/edit\n"
+"plugins,inserts,sends and more"
+msgstr ""
+"Rechtsklick, um Plugins, Inserts, Sends etc.\n"
+"hinzuzufügen/zu editieren/zu löschen"
+
+#: processor_box.cc:1495 processor_box.cc:1870
+msgid "Plugin Incompatibility"
+msgstr "Plugin-Inkompatibilität"
+
+#: processor_box.cc:1498
+msgid "You attempted to add the plugin \"%1\" in slot %2.\n"
+msgstr "Sie haben versucht, das Plugin \"%1\" im Einschub %2 hinzuzufügen.\n"
+
+#: processor_box.cc:1504
+msgid ""
+"\n"
+"This plugin has:\n"
+msgstr ""
+"\n"
+"Dieses Plugin hat:\n"
+
+#: processor_box.cc:1507
+msgid "\t%1 MIDI input\n"
+msgid_plural "\t%1 MIDI inputs\n"
+msgstr[0] "\t%1 MIDI Eingang\n"
+msgstr[1] "\t%1 MIDI Eingänge\n"
+
+#: processor_box.cc:1511
+msgid "\t%1 audio input\n"
+msgid_plural "\t%1 audio inputs\n"
+msgstr[0] "\t%1 Audio-Eingang\n"
+msgstr[1] "\t%1 Audio-Eingänge\n"
+
+#: processor_box.cc:1514
+msgid ""
+"\n"
+"but at the insertion point, there are:\n"
+msgstr ""
+"\n"
+"aber am Einfügepunkt gibt es:\n"
+
+#: processor_box.cc:1517
+msgid "\t%1 MIDI channel\n"
+msgid_plural "\t%1 MIDI channels\n"
+msgstr[0] "\t%1 MIDI-Kanal\n"
+msgstr[1] "\t%1 MIDI-Kanäle\n"
+
+#: processor_box.cc:1521
+msgid "\t%1 audio channel\n"
+msgid_plural "\t%1 audio channels\n"
+msgstr[0] "\t%1 Audio-Kanal\n"
+msgstr[1] "\t%1 Audio-Kanäle\n"
+
+#: processor_box.cc:1524
+msgid ""
+"\n"
+"%1 is unable to insert this plugin here.\n"
+msgstr ""
+"\n"
+"%1 kann dieses Plugin hier nicht einfügen.\n"
+
+#: processor_box.cc:1561
+msgid "Cannot set up new send: %1"
+msgstr "Kann keinen neuen Send erstellen: %1"
+
+#: processor_box.cc:1873
+msgid ""
+"You cannot reorder these plugins/sends/inserts\n"
+"in that way because the inputs and\n"
+"outputs will not work correctly."
+msgstr ""
+"Sie können diese Plugins/Sends/Inserts\n"
+"nicht auf diese Weise verändern, sonst würden\n"
+"die Ein-/Ausgänge nicht mehr richtig funktionieren."
+
+#: processor_box.cc:2057
+msgid "Rename Processor"
+msgstr "Prozessor umbenennen"
+
+#: processor_box.cc:2088
+msgid "At least 100 IO objects exist with a name like %1 - name not changed"
+msgstr ""
+"Es gibt mindestens 100 E/A-Objekte mit einem Namen wie %1 - Name nicht "
+"geändert"
+
+#: processor_box.cc:2226
+msgid "plugin insert constructor failed"
+msgstr "Einfügen des Plugins gescheitert"
+
+#: processor_box.cc:2237
+msgid ""
+"Copying the set of processors on the clipboard failed,\n"
+"probably because the I/O configuration of the plugins\n"
+"could not match the configuration of this track."
+msgstr ""
+"Konnte die Prozessoren aus der Zwischenablage nicht\n"
+"kopieren, vermutlich weil die E/A Konfiguration der Plugins\n"
+"nicht mit der dieser Spur übereinstimmt."
+
+#: processor_box.cc:2283
+msgid ""
+"Do you really want to remove all processors from %1?\n"
+"(this cannot be undone)"
+msgstr ""
+"Wollen Sie wirklich alle Prozessoren von %1 entfernen?\n"
+"(Dies kann nicht rückgängig gemacht werden)"
+
+#: processor_box.cc:2287 processor_box.cc:2312
+msgid "Yes, remove them all"
+msgstr "Ja, alle löschen"
+
+#: processor_box.cc:2289 processor_box.cc:2314
+msgid "Remove processors"
+msgstr "Prozessoren entfernen"
+
+#: processor_box.cc:2304
+msgid ""
+"Do you really want to remove all pre-fader processors from %1?\n"
+"(this cannot be undone)"
+msgstr ""
+"Wollen Sie wirklich alle Pre-Fader-Prozessoren von %1 entfernen?\n"
+"(Dies kann nicht rückgängig gemacht werden)"
+
+#: processor_box.cc:2307
+msgid ""
+"Do you really want to remove all post-fader processors from %1?\n"
+"(this cannot be undone)"
+msgstr ""
+"Wollen Sie wirklich alle Post-Fader-Prozessoren von %1 entfernen?\n"
+"(Dies kann nicht rückgängig gemacht werden)"
+
+#: processor_box.cc:2495
+msgid "New Plugin"
+msgstr "Plugin einfügen"
+
+#: processor_box.cc:2498
+msgid "New Insert"
+msgstr "Insert einfügen"
+
+#: processor_box.cc:2501
+msgid "New External Send ..."
+msgstr "Neuer externer Send..."
+
+#: processor_box.cc:2505
+msgid "New Aux Send ..."
+msgstr "Neuer Aux-Send..."
+
+#: processor_box.cc:2508
+msgid "Send Options"
+msgstr "Send Optionen"
+
+#: processor_box.cc:2510
+msgid "Clear (all)"
+msgstr "Leeren (alle)"
+
+#: processor_box.cc:2512
+msgid "Clear (pre-fader)"
+msgstr "Leeren (Pre-Fader)"
+
+#: processor_box.cc:2514
+msgid "Clear (post-fader)"
+msgstr "Leeren (Post-Fader)"
+
+#: processor_box.cc:2540
+msgid "Activate All"
+msgstr "Alle aktivieren"
+
+#: processor_box.cc:2542
+msgid "Deactivate All"
+msgstr "Alle deaktivieren"
+
+#: processor_box.cc:2544
+msgid "A/B Plugins"
+msgstr "A/B Plugins"
+
+#: processor_box.cc:2553
+msgid "Edit with generic controls..."
+msgstr "Mit einfachen Kontrollelementen editieren..."
+
+#: processor_box.cc:2856
+msgid "%1: %2 (by %3)"
+msgstr "%1: %2 (von %3)"
+
+#: processor_box.cc:2858
+msgid "%1 (by %2)"
+msgstr "%1 (von %2)"
+
+#: patch_change_dialog.cc:50
+msgid "Patch Change"
+msgstr "Patch Change"
+
+#: patch_change_dialog.cc:76
+msgid "Patch Bank"
+msgstr "Patch Bank"
+
+#: patch_change_dialog.cc:83
+msgid "Patch"
+msgstr "Patch"
+
+#: patch_change_dialog.cc:98 step_entry.cc:430
+msgid "Program"
+msgstr "Programm"
+
+#: patch_change_dialog.cc:106 step_entry.cc:422
+msgid "Bank"
+msgstr "Bank"
+
+#: quantize_dialog.cc:36
+msgid "main grid"
+msgstr "Hauptraster"
+
+#: quantize_dialog.cc:52 quantize_dialog.cc:109
+msgid "Quantize"
+msgstr "Quantisieren"
+
+#: quantize_dialog.cc:56
+msgid "Strength"
+msgstr "Stärke"
+
+#: quantize_dialog.cc:59
+msgid "Swing"
+msgstr "Swing"
+
+#: quantize_dialog.cc:62
+msgid "Threshold (ticks)"
+msgstr "Threshold (ticks)"
+
+#: quantize_dialog.cc:63
+msgid "Snap note start"
+msgstr "Notenanfang einrasten an"
+
+#: quantize_dialog.cc:64
+msgid "Snap note end"
+msgstr "Notenende einrasten an"
+
+#: rc_option_editor.cc:80
+msgid "Click audio file:"
+msgstr "Audiodatei für Klick"
+
+#: rc_option_editor.cc:83 rc_option_editor.cc:90
+msgid "Browse..."
+msgstr "Durchsuchen..."
+
+#: rc_option_editor.cc:87
+msgid "Click emphasis audio file:"
+msgstr "Audiodatei für Klick-Betonung"
+
+#: rc_option_editor.cc:119
+msgid "Choose Click"
+msgstr "Click auswählen"
+
+#: rc_option_editor.cc:142
+msgid "Choose Click Emphasis"
+msgstr "Click-Betonung auswählen"
+
+#: rc_option_editor.cc:173
+msgid "Limit undo history to"
+msgstr "Limitiere Aktionsliste auf"
+
+#: rc_option_editor.cc:174
+msgid "Save undo history of"
+msgstr "Speichere Aktionsliste von"
+
+#: rc_option_editor.cc:183 rc_option_editor.cc:190
+msgid "commands"
+msgstr "Aktionen"
+
+#: rc_option_editor.cc:333
+msgid "Select Keyboard layout:"
+msgstr "Tastaturlayout wählen:"
+
+#: rc_option_editor.cc:352
+msgid "When Clicking:"
+msgstr "Bei Klick:"
+
+#: rc_option_editor.cc:359
+msgid "Edit using:"
+msgstr "Bearbeiten mit:"
+
+#: rc_option_editor.cc:365 rc_option_editor.cc:394 rc_option_editor.cc:423
+msgid "+ button"
+msgstr "+ Maustaste"
+
+#: rc_option_editor.cc:388
+msgid "Delete using:"
+msgstr "Entfernen mit:"
+
+#: rc_option_editor.cc:417
+msgid "Insert note using:"
+msgstr "Note einfügen:"
+
+#: rc_option_editor.cc:435
+msgid "When Beginning a Drag:"
+msgstr "Bei Mauszieh-Beginn:"
+
+#: rc_option_editor.cc:453
+msgid "Copy items using:"
+msgstr "Kopiere Objekte mittels:"
+
+#: rc_option_editor.cc:473
+msgid "Constrain drag using:"
+msgstr "Beschränke Mausziehen mittels:"
+
+#: rc_option_editor.cc:481
+msgid "When Beginning a Trim:"
+msgstr "Bei Beginn einer Anpassung (Trim):"
+
+#: rc_option_editor.cc:499
+msgid "Trim contents using:"
+msgstr "Inhalte anpassen mittels:"
+
+#: rc_option_editor.cc:519
+msgid "Anchored trim using:"
+msgstr "Verankertes Anpassen mittels:"
+
+#: rc_option_editor.cc:562
+msgid "Resize notes relatively using:"
+msgstr "Relative Notenlängenänderung mittels:"
+
+#: rc_option_editor.cc:571
+msgid "While Dragging:"
+msgstr "Währens Mausziehens:"
+
+#: rc_option_editor.cc:589
+msgid "Ignore snap using:"
+msgstr "Einrasten ignorieren mittels:"
+
+#: rc_option_editor.cc:609
+msgid "Snap relatively using:"
+msgstr "Relativ Einrasten mittels:"
+
+#: rc_option_editor.cc:617
+msgid "While Trimming:"
+msgstr "Während des Anpassens:"
+
+#: rc_option_editor.cc:635
+msgid "Resize overlaped regions using:"
+msgstr "Längenänderung überlappender Regionen mittels:"
+
+#: rc_option_editor.cc:643
+msgid "While Dragging Control Points:"
+msgstr "Beim Mausziehen von Kontrollpunkten:"
+
+#: rc_option_editor.cc:661
+msgid "Fine adjust using:"
+msgstr "Feinjustierung mittels:"
+
+#: rc_option_editor.cc:681
+msgid "Push points using:"
+msgstr "Punkte \"stoßen\" mittels:"
+
+#: rc_option_editor.cc:922
+msgid "GUI and Font scaling:"
+msgstr "GUI- und Zeichensatzskalierung:"
+
+#: rc_option_editor.cc:925
+msgid "Default"
+msgstr "Voreinstellung"
+
+#: rc_option_editor.cc:951
+msgid "Adjusting the scale require an application restart to re-layout."
+msgstr ""
+"Änderungen an der Skalierung verlangen einen Neustart des Programms, um das "
+"Layout anzupassen."
+
+#: rc_option_editor.cc:992
+msgid "Waveform Clip Level (dBFS):"
+msgstr "Wellenform Clipping-Wert (dBFS):"
+
+#: rc_option_editor.cc:1046
+msgid "Small sessions (4-16 tracks)"
+msgstr "Kleine Projekte (4-16 Spuren)"
+
+#: rc_option_editor.cc:1047
+msgid "Medium sessions (16-64 tracks)"
+msgstr "Mittlere Projekte (16 - 64 Spuren)"
+
+#: rc_option_editor.cc:1048
+msgid "Large sessions (64+ tracks)"
+msgstr "Große Projekte (64+ Spuren)"
+
+#: rc_option_editor.cc:1049
+msgid "Custom (set by sliders below)"
+msgstr "Benutzerdefiniert (setze über untere Schieberegler)"
+
+#: rc_option_editor.cc:1053 export_video_dialog.cc:168
+msgid "Preset:"
+msgstr "Preset:"
+
+#: rc_option_editor.cc:1065
+msgid "Playback (seconds of buffering):"
+msgstr "Wiedergabe (gepufferte Sekunden):"
+
+#: rc_option_editor.cc:1078
+msgid "Recording (seconds of buffering):"
+msgstr "Aufnahme (gepufferte Sekunden):"
+
+#: rc_option_editor.cc:1156
+msgid "programming error: unknown buffering preset string, index = %1"
+msgstr ""
+"Programmierfehler: unbekannte Zeichenkette für Puffer-Voreinstellung, index  "
+"= %1"
+
+#: rc_option_editor.cc:1188
+msgid "Control Surface Protocol"
+msgstr "Eingabegeräteprotokoll"
+
+#: rc_option_editor.cc:1197
+msgid "Double-click on a name to edit settings for an enabled protocol"
+msgstr ""
+"Doppelklick auf einen Namen editiert Einstellungen für ein aktiviertes "
+"Protokoll"
+
+#: rc_option_editor.cc:1354
+msgid "Show Video Export Info before export"
+msgstr "Zeige Video-Exportinformationen vor dem Exportieren"
+
+#: rc_option_editor.cc:1355
+msgid "Show Video Server Startup Dialog"
+msgstr "Zeige den Videoserver-Startdialog"
+
+#: rc_option_editor.cc:1356
+msgid "Advanced Setup (remote video server)"
+msgstr "Ausführliche Einrichtung (entfernter Videoserver)"
+
+#: rc_option_editor.cc:1364
+msgid ""
+"<b>When enabled</b> you can speficify a custom video-server URL and docroot. "
+"- Do not enable this option unless you know what you are doing."
+msgstr ""
+"<b>Wenn aktiviert</b>, können Sie eine benutzerdefinierte URL und docroot "
+"für den Videoserver eingeben. - Aktivieren Sie diese Option nur, wenn Sie "
+"wissen, was Sie tun."
+
+#: rc_option_editor.cc:1366
+msgid "Video Server URL:"
+msgstr "Videoserver URL:"
+
+#: rc_option_editor.cc:1371
+msgid ""
+"Base URL of the video-server including http prefix. This is usually 'http://"
+"hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when "
+"the video-server is running locally"
+msgstr ""
+"Basis-URL des Videoservers mit http-Prefix. Dies ist normalerweise 'http://"
+"hostname.example.org:1554/' und ist auf 'http://localhost:1554/' "
+"voreingestellt, wenn der Videoserver lokal läuft"
+
+#: rc_option_editor.cc:1373
+msgid "Video Folder:"
+msgstr "Videoordner:"
+
+#: rc_option_editor.cc:1378
+msgid ""
+"Local path to the video-server document-root. Only files below this "
+"directory will be accessible by the video-server. If the server run on a "
+"remote host, it should point to a network mounted folder of the server's "
+"docroot or be left empty if it is unvailable. It is used for the local video-"
+"monitor and file-browsing when opening/adding a video file."
+msgstr ""
+"Lokaler Pfad zum document-root des Videoservers. Nur Dateien unterhalb "
+"dieses Verzeichnisses sind dem Videoserver zugänglich.Falls der Server auf "
+"einem entfernten Rechner läuft, sollte der Pfad auf ein im Netzwerk "
+"gemountetes Verzeichnis der docroot des Servers verweisen, oder leergelassen "
+"werden, falls es nicht zugänglich ist. Wird für den lokalen Videomonitor und "
+"die Dateisuche beim Öffnen/Hinzufügen einer Videodatei benutzt."
+
+#: rc_option_editor.cc:1385
+msgid ""
+"<b>When enabled</b> an information window with details is displayed before "
+"the video-export dialog."
+msgstr ""
+"<b>Wenn aktiviert</b> , wird vor dem Videoexport-Dialog ein "
+"Informationsfenster mit Details angezeigt."
+
+#: rc_option_editor.cc:1390
+msgid ""
+"<b>When enabled</b> the video server is never launched automatically without "
+"confirmation"
+msgstr ""
+"<b>Wenn aktiviert</b>, wird der Videoserver nie ohne Bestätigung gestartet"
+
+#: rc_option_editor.cc:1473
+msgid "Always Display Plugin Scan Progress"
+msgstr "Plugin Scan-Fortschritt immer anzeigen"
+
+#: rc_option_editor.cc:1474
+msgid "Scan for [new] VST Plugins on Application Start"
+msgstr "Bei Programmstart nach [neuen] VST Plugins scannen"
+
+#: rc_option_editor.cc:1475
+msgid "Scan for AudioUnit Plugins on Application Start"
+msgstr "Bei Programmstart nach AudioUnit Plugins scannen"
+
+#: rc_option_editor.cc:1476
+msgid "Verbose Plugin Scan"
+msgstr "Gesprächiger Plugin-Scan"
+
+#: rc_option_editor.cc:1487
+msgid "General"
+msgstr "Allgemein"
+
+#: rc_option_editor.cc:1493 startup.cc:349
+msgid "Scan for Plugins"
+msgstr "Scanne nach Plugins"
+
+#: rc_option_editor.cc:1500
+msgid ""
+"<b>When enabled</b> a popup window showing plugin scan progress is displayed "
+"for indexing (cache load) and discovery (detect new plugins)"
+msgstr ""
+"<b>Wenn aktiviert,</b> wird ein Popupfenster dargestellt, um Plugin Scan-"
+"Fortschritt, Indizierung(Laden des Cace) und Entdeckung (neue Plugins "
+"finden) anzuzeigen"
+
+#: rc_option_editor.cc:1507
+msgid ""
+"Specify the default timeout for plugin instantiation in 1/10 seconds. "
+"Plugins that require more time to load will be blacklisted. A value of 0 "
+"disables the timeout."
+msgstr ""
+"Geben Sie die Voreinstellung für das Timeout bei der Plugin-Instanzierung in "
+"1/10 Sekunden an. Plugins, die mehr Zeit benötigen um zu laden, werden auf "
+"die schwarze Liste gesetzt. Ein Wert von 0 deaktiviert das Timeout."
+
+#: rc_option_editor.cc:1509
+msgid "Scan Time Out [deciseconds]"
+msgstr "Scan-Timeout [Zehntelsekunden]"
+
+#: rc_option_editor.cc:1517
+msgid "VST"
+msgstr "VST"
+
+#: rc_option_editor.cc:1523
+msgid "Clear VST Cache"
+msgstr "VST Cache leeren"
+
+#: rc_option_editor.cc:1527
+msgid "Clear VST Blacklist"
+msgstr "VST Blacklist leeren"
+
+#: rc_option_editor.cc:1535
+msgid ""
+"<b>When enabled</b> new VST plugins are searched, tested and added to the "
+"cache index on application start. When disabled new plugins will only be "
+"available after triggering a 'Scan' manually"
+msgstr ""
+"<b>Wenn aktiviert<b>, werden bei Programmstart neue VST Plugins gesucht, "
+"getestet und dem Cache-Index hinzugefügt. Wenn nicht aktiviert, werden neue "
+"Plugins nur nach einem manuellen Scan verfügbar sein"
+
+#: rc_option_editor.cc:1538
+msgid "Linux VST Path:"
+msgstr "Linux VST Pfad:"
+
+#: rc_option_editor.cc:1545
+msgid "Windows VST Path:"
+msgstr "Windows VST Pfad:"
+
+#: rc_option_editor.cc:1554
+msgid ""
+"<b>When enabled</b> additional information for every plugin is added to the "
+"Log Window."
+msgstr ""
+"<b>Wenn aktiviert</b>, wird zusätzliche Information für jedes Plugin ins "
+"Logfenster geschrieben."
+
+#: rc_option_editor.cc:1560
+msgid "Audio Unit"
+msgstr "Audio Unit"
+
+#: rc_option_editor.cc:1569
+msgid ""
+"<b>When enabled</b> Audio Unit Plugins are discovered on application start. "
+"When disabled AU plugins will only be available after triggering a 'Scan' "
+"manually. The first successful scan will enable AU auto-scan, Any crash "
+"during plugin discovery will disable it."
+msgstr ""
+"<b>Wenn aktiviert<b>, werden bei Programmstart AudioUnit Plugins entdeckt. "
+"Wenn nicht aktiviert, werden neue Plugins nur nach einem manuellen Scan "
+"verfügbar sein. Der erste erfolgreiche Scan wird weitere automatische AU-"
+"Scans aktivieren, ein Crash während der Pluginentdeckung wird sie "
+"deaktivieren."
+
+#: rc_option_editor.cc:1572
+msgid "Clear AU Cache"
+msgstr "AU Cache leeren"
+
+#: rc_option_editor.cc:1576
+msgid "Clear AU Blacklist"
+msgstr "AU Blacklist leeren"
+
+#: rc_option_editor.cc:1670
+msgid "Set Windows VST Search Path"
+msgstr "Windows VST Suchpfad setzen"
+
+#: rc_option_editor.cc:1685
+msgid "Set Linux VST Search Path"
+msgstr "Linux VST Suchpfad setzen"
+
+#: rc_option_editor.cc:1766
+msgid "%1 Preferences"
+msgstr "%1 Einstellungen"
+
+#: rc_option_editor.cc:1778
+msgid "DSP CPU Utilization"
+msgstr "DSP CPU Nutzung"
+
+#: rc_option_editor.cc:1782
+msgid "Signal processing uses"
+msgstr "Die Signalverarbeitung verwendet"
+
+#: rc_option_editor.cc:1787
+msgid "all but one processor"
+msgstr "Alle außer einem Prozessor"
+
+#: rc_option_editor.cc:1788
+msgid "all available processors"
+msgstr "Alle verfügbaren Prozessoren"
+
+#: rc_option_editor.cc:1791
+msgid "%1 processors"
+msgstr "%1 Prozessoren"
+
+#: rc_option_editor.cc:1794
+msgid "This setting will only take effect when %1 is restarted."
+msgstr "Diese Einstellung wird erst nach einem Neustart von %1 wirksam."
+
+#: rc_option_editor.cc:1799
+msgid "Options|Undo"
+msgstr "Undo"
+
+#: rc_option_editor.cc:1806
+msgid "Verify removal of last capture"
+msgstr "Verwerfen der letzten Aufnahme bestätigen"
+
+#: rc_option_editor.cc:1814
+msgid "Make periodic backups of the session file"
+msgstr "Erstelle regelmäßig Backups der Projektdatei"
+
+#: rc_option_editor.cc:1819
+msgid "Session Management"
+msgstr "Projektmanagement:"
+
+#: rc_option_editor.cc:1824
+msgid "Always copy imported files"
+msgstr "Importierte Dateien immer kopieren"
+
+#: rc_option_editor.cc:1831
+msgid "Default folder for new sessions:"
+msgstr "Standardordner für neue Projekte"
+
+#: rc_option_editor.cc:1839
+msgid "Maximum number of recent sessions"
+msgstr "Maximale Anzahl kürzlich geöffneter Projekte"
+
+#: rc_option_editor.cc:1852
+msgid "Click gain level"
+msgstr "Lautstärke für Klick"
+
+#: rc_option_editor.cc:1857 route_time_axis.cc:268 route_time_axis.cc:832
+msgid "Automation"
+msgstr "Automationen"
+
+#: rc_option_editor.cc:1862
+msgid "Thinning factor (larger value => less data)"
+msgstr "Ausdünnungsfaktor (größerer Wert => weniger Daten)"
+
+#: rc_option_editor.cc:1871
+msgid "Automation sampling interval (milliseconds)"
+msgstr "Meßintervall für Automation (Millisekunden)"
+
+#: rc_option_editor.cc:1879
+msgid "Transport Options"
+msgstr "Transport Optionen"
+
+#: rc_option_editor.cc:1885
+msgid "Keep record-enable engaged on stop"
+msgstr "Aufnahme bleibt nach Stopp aktiviert"
+
+#: rc_option_editor.cc:1894
+msgid "Play loop is a transport mode"
+msgstr "Schleifenwiedergabe ist ein Transportmodus"
+
+#: rc_option_editor.cc:1899
+msgid ""
+"<b>When enabled</b> the loop button does not start playback but forces "
+"playback to always play the loop\n"
+"\n"
+"<b>When disabled</b> the loop button starts playing the loop, but stop then "
+"cancels loop playback"
+msgstr ""
+"<b>Wenn aktiviert<b>, startet die Schleifen-Schaltfläche nicht die "
+"Wiedergabe, zwingt aber die Wiedergabe, immer die Schleife zu spielen\n"
+"\n"
+"<b>Wenn deaktiviert<b>, startet die Schleifen-Schaltfläche die Wiedergabe, "
+"ein späteres \"Stop\" beendet aber die Wiedergabe als Schleife"
+
+#: rc_option_editor.cc:1905
+msgid "Stop recording when an xrun occurs"
+msgstr "Aufnahme bei xrun stoppen"
+
+#: rc_option_editor.cc:1910
+msgid ""
+"<b>When enabled</b> %1 will stop recording if an over- or underrun is "
+"detected by the audio engine"
+msgstr ""
+"<b>Falls an</b>, wird %1 Aufnahmen bei Auftreten von Over- oder Underruns  "
+"abbrechen"
+
+#: rc_option_editor.cc:1916
+msgid "Create markers where xruns occur"
+msgstr "Bei xrun Marker erzeugen"
+
+#: rc_option_editor.cc:1925
+msgid "Stop at the end of the session"
+msgstr "Am Ende des Projektes anhalten"
+
+#: rc_option_editor.cc:1930
+msgid ""
+"<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the "
+"transport when it reaches the current session end marker\n"
+"\n"
+"<b>When disabled</b> %1 will continue to roll past the session end marker at "
+"all times"
+msgstr ""
+"<b>Falls an</b>, und %1 </b>nimmt nicht auf</b>, wird es bei Erreichen ds "
+"Projektende-Markers die Wiedergabe stoppen\n"
+"\n"
+"<b>Falls aus</b> , wird %1 am Ende des Projektes immer weiterlaufen"
+
+#: rc_option_editor.cc:1938
+msgid "Do seamless looping (not possible when slaved to MTC, LTC etc)"
+msgstr "Nahtlose Schleifen (nicht möglich, wenn an MTC, LTC o.ä. gekoppelt)"
+
+#: rc_option_editor.cc:1943
+msgid ""
+"<b>When enabled</b> this will loop by reading ahead and wrapping around at "
+"the loop point, preventing any need to do a transport locate at the end of "
+"the loop\n"
+"\n"
+"<b>When disabled</b> looping is done by locating back to the start of the "
+"loop when %1 reaches the end which will often cause a small click or delay"
+msgstr ""
+"<b>Falls an</b>, wird dies vorauslesen und am Schleifenendpunkt "
+"zurückspringen, wodurch eine Neupositionierung am Schleifenende vermieden "
+"wird\n"
+"\n"
+"<b>Falls aus</b>, wird %1 bei Erreichen des Schleifenendes zum Anfang der "
+"Schleife springen, was oft einen hörbaren Klick oder kurze Verzögerung "
+"verursacht"
+
+#: rc_option_editor.cc:1951
+msgid "Disable per-track record disarm while rolling"
+msgstr "Während der Aufnahme Aufnahmestatus einzelner Spuren sperren"
+
+#: rc_option_editor.cc:1955
+msgid ""
+"<b>When enabled</b> this will prevent you from accidentally stopping "
+"specific tracks recording during a take"
+msgstr ""
+"<b>Wenn eingeschaltet</b> , hindert Sie dies daran, während eines "
+"Aufnahmevorgangs unabsichtlich bei einzelnen Spuren die Aufnahme zu beenden"
+
+#: rc_option_editor.cc:1960
+msgid "12dB gain reduction during fast-forward and fast-rewind"
+msgstr "Beim Spulen Pegel um 12dB absenken"
+
+#: rc_option_editor.cc:1964
+msgid ""
+"This will reduce the unpleasant increase in perceived volume that occurs "
+"when fast-forwarding or rewinding through some kinds of audio"
+msgstr ""
+"Dies wird die unangenehme Steigerung der wahrgenommenen Lautstärke "
+"verringern, die bei manchem Material bei Vor/Rücklauf auftritt"
+
+#: rc_option_editor.cc:1968
+msgid "Sync/Slave"
+msgstr "Sync/Slave"
+
+#: rc_option_editor.cc:1972
+msgid "External timecode source"
+msgstr "Externe Timecode-Quelle"
+
+#: rc_option_editor.cc:1981
+msgid "Match session video frame rate to external timecode"
+msgstr "Videoframerate des Projekts an externen Timecode anpassen"
+
+#: rc_option_editor.cc:1987
+msgid ""
+"This option controls the value of the video frame rate <i>while chasing</i> "
+"an external timecode source.\n"
+"\n"
+"<b>When enabled</b> the session video frame rate will be changed to match "
+"that of the selected external timecode source.\n"
+"\n"
+"<b>When disabled</b> the session video frame rate will not be changed to "
+"match that of the selected external timecode source.Instead the frame rate "
+"indication in the main clock will flash red and %1 will convert between the "
+"external timecode standard and the session standard."
+msgstr ""
+"Diese Option bestimmt den Wert der Videoframerate <i>während der "
+"Synchronisation</i> mit einer externen Timecode-Quelle. \n"
+"\n"
+"<b>Falls an</b>, wird die Videoframerate des Projektes an die der externen "
+"Timecode-Quelle angepasst. \n"
+"\n"
+"<b>Falls aus</b>, wird die Videoframerate des Projektes nicht geändert. "
+"Stattdessen wird die Anzeige der Framerate in der Uhr rot blinken und %1 "
+"wird zwischen den Standards der externen Quelle und des Projektes "
+"konvertieren."
+
+#: rc_option_editor.cc:1997
+msgid "Sync-lock timecode to clock (disable drift compensation)"
+msgstr ""
+"Starre Synchronisation von Timecode und Uhr (unterbinde Driftkompensation)"
+
+#: rc_option_editor.cc:2003
+msgid ""
+"<b>When enabled</b> %1 will never varispeed when slaved to external "
+"timecode. Sync Lock indicates that the selected external timecode source "
+"shares clock-sync (Black & Burst, Wordclock, etc) with the audio "
+"interface. This option disables drift compensation. The transport speed is "
+"fixed at 1.0. Vari-speed LTC will be ignored and cause drift.\n"
+"\n"
+"<b>When disabled</b> %1 will compensate for potential drift, regardless if "
+"the timecode sources shares clock sync."
+msgstr ""
+"<b>Wenn aktiviert</b>, wird  %1 niemals mit variabler Geschwindigkeit "
+"abspielen, während zu externem Timecode synchronisiert wird. Starre "
+"Synchronisation zeigt an, dass die ausgewählte externe Timecodequelle mit "
+"dem Audiointerface Clock-Sync teilt (Black & Burst, Wordclock, etc.) "
+"Diese Option deaktiviert Driftkompensation. Die Transportgeschwindigkeit ist "
+"auf 1,0 fixiert. Varispeed LTC wird ignoriert und wird Drift verursachen.\n"
+"\n"
+"<b>Wenn deaktiviert</b>, wird  %1 potentiellen Drift kompensieren, "
+"ungeachtet, ob die Timecodequellen Clock Sync teilen."
+
+#: rc_option_editor.cc:2018
+msgid "Lock to 29.9700 fps instead of 30000/1001"
+msgstr "Fest auf 29.9700 fps statt 30000/1001"
+
+#: rc_option_editor.cc:2024
+msgid ""
+"<b>When enabled</b> the external timecode source is assumed to use 29.97 fps "
+"instead of 30000/1001.\n"
+"SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions "
+"that drop-frame timecode has an accumulated error of -86ms over a 24-hour "
+"period.\n"
+"Drop-frame timecode would compensate exactly for a NTSC color frame rate of "
+"30 * 0.9990 (ie 29.970000). That is not the actual rate. However, some "
+"vendors use that rate - despite it being against the specs - because the "
+"variant of using exactly 29.97 fps has zero timecode drift.\n"
+msgstr ""
+"<b>Wenn aktiv</b>, wird erwartet, daß die externe Timecode-Quelle 29.97 fps "
+"statt 30000/1001 benutzt.\n"
+"SMPTE 12M-1999 spezifiziert 29.97df as 30000/1001. Die Spezifikation erwähnt "
+"darüber hinaus, daß Drop-frame Timecode einen Fehler von -86ms im Zeitraum "
+"von 24 Stunden akkumuliert.\n"
+"Drop-frame Timecode würde eine NTSC Farb-Framerate von 30 * 0.9990 "
+"(entspricht29.970000) exakt kompensieren. Das ist nicht die tatsächliche "
+"Rate, jedoch benutzen manche Hersteller diese - der Spezifikation "
+"widersprechend - da bei der Variante mit exakt 29.97 fps kein Timecode-Drift "
+"auftritt.\n"
+
+#: rc_option_editor.cc:2034
+msgid "LTC Reader"
+msgstr "LTC-Leser"
+
+#: rc_option_editor.cc:2038
+msgid "LTC incoming port"
+msgstr "LTC Eingangsport"
+
+#: rc_option_editor.cc:2053
+msgid "LTC Generator"
+msgstr "LTC-Generator"
+
+#: rc_option_editor.cc:2058
+msgid "Enable LTC generator"
+msgstr "LTC-Generator aktivieren"
+
+#: rc_option_editor.cc:2065
+msgid "Send LTC while stopped"
+msgstr "LTC senden, während Transport stillsteht"
+
+#: rc_option_editor.cc:2071
+msgid ""
+"<b>When enabled</b> %1 will continue to send LTC information even when the "
+"transport (playhead) is not moving"
+msgstr ""
+"<b>Falls an</b>, wird %1 weiterhin LTC-Information senden, sogar wenn der "
+"Transport (Positionszeiger) stillsteht"
+
+#: rc_option_editor.cc:2077
+msgid "LTC generator level"
+msgstr "LTC-Generator-Lautstärke"
+
+#: rc_option_editor.cc:2081
+msgid ""
+"Specify the Peak Volume of the generated LTC signal in dbFS. A good value "
+"is  0dBu ^= -18dbFS in an EBU calibrated system"
+msgstr ""
+"Geben Sie den Spitzenwert des erzeugten LTC-Signals in dbFS an. Ein guter "
+"Wert für ein EBU-kalibriertes System ist 0dBu ^= -18dbFS"
+
+#: rc_option_editor.cc:2093
+msgid "Allow dragging of playhead"
+msgstr "Erlaube Ziehen des Positionszeigers"
+
+#: rc_option_editor.cc:2101
+msgid "Move relevant automation when audio regions are moved"
+msgstr "Verschiebe relevante Automationen mit Region"
+
+#: rc_option_editor.cc:2109
+msgid "Show meters on tracks in the editor"
+msgstr "Aktiviere Pegelanzeigen im Editor"
+
+#: rc_option_editor.cc:2117
+msgid "Display master-meter in the toolbar"
+msgstr "Master-Pegelanzeige in der Werkzeugleiste anzeigen"
+
+#: rc_option_editor.cc:2124
+msgid "Default fade shape"
+msgstr "Voreingestellte Fade-Art"
+
+#: rc_option_editor.cc:2143
+msgid "Regions in active edit groups are edited together"
+msgstr "Regionen der aktiven Bearbeitungsgruppen werden gemeinsam bearbeitet"
+
+#: rc_option_editor.cc:2144
+msgid "whenever they overlap in time"
+msgstr "immer, wenn sie sich auf der Zeitachse überlappen"
+
+#: rc_option_editor.cc:2145
+msgid "only if they have identical length, position and origin"
+msgstr "nur bei identischer Länge, Position und Herkunft"
+
+#: rc_option_editor.cc:2154
+msgid "Layering model"
+msgstr "Layering-Modell"
+
+#: rc_option_editor.cc:2159
+msgid "later is higher"
+msgstr "später ist höher"
+
+#: rc_option_editor.cc:2160
+msgid "manual layering"
+msgstr "manuelles Layering"
+
+#: rc_option_editor.cc:2166
+msgid "Make rubberband selection rectangle snap to the grid"
+msgstr "Gummiband-Auswahl an Raster ausrichten"
+
+#: rc_option_editor.cc:2174
+msgid "Show waveforms in regions"
+msgstr "Zeige Wellenformen in Regionen"
+
+#: rc_option_editor.cc:2182
+msgid "Show gain envelopes in audio regions"
+msgstr "Zeige Lautstärkekurven in Regionen an"
+
+#: rc_option_editor.cc:2183
+msgid "in all modes"
+msgstr "in allen Modi"
+
+#: rc_option_editor.cc:2184
+msgid "only in Draw and Internal Edit modes"
+msgstr "nur in Zeichen- und internem Bearbeitungsmodus"
+
+#: rc_option_editor.cc:2191
+msgid "Waveform scale"
+msgstr "Wellenformskalierung"
+
+#: rc_option_editor.cc:2196
+msgid "linear"
+msgstr "Linear"
+
+#: rc_option_editor.cc:2197
+msgid "logarithmic"
+msgstr "Logarithmisch"
+
+#: rc_option_editor.cc:2203
+msgid "Waveform shape"
+msgstr "Wellenform Anzeigeart"
+
+#: rc_option_editor.cc:2208
+msgid "traditional"
+msgstr "Traditionell"
+
+#: rc_option_editor.cc:2209
+msgid "rectified"
+msgstr "Rectified"
+
+#: rc_option_editor.cc:2218
+msgid "Show waveforms for audio while it is being recorded"
+msgstr "Zeige bei Aufnahmen die Wellenformen des aufgenommenen Audiomaterials"
+
+#: rc_option_editor.cc:2226
+msgid "Show zoom toolbar"
+msgstr "Zeige Zoom Toolbar"
+
+#: rc_option_editor.cc:2234
+msgid "Update editor window during drags of the summary"
+msgstr ""
+"Aktualisiere das Editorfenster, während die Projektübersicht verändert wird"
+
+#: rc_option_editor.cc:2241
+msgid "Name new markers"
+msgstr "Neue Marker benennen"
+
+#: rc_option_editor.cc:2247
+msgid ""
+"If enabled, popup a dialog when a new marker is created to allow its name to "
+"be set as it is created.\n"
+"\n"
+"You can always rename markers by right-clicking on them"
+msgstr ""
+"Falls an, wird bei Erzeugung eines neuen Markers ein Dialog eingeblendet, "
+"damit der Name sofort bearbeitet werden kann.\n"
+"\n"
+"Marker können jederzeit per Rechtsklick umbenannt werden"
+
+#: rc_option_editor.cc:2253
+msgid "Auto-scroll editor window when dragging near its edges"
+msgstr "Bei Mausziehen nahe den Rändern das Editorfenster automatisch scrollen"
+
+#: rc_option_editor.cc:2260
+msgid "After splitting selected regions, select"
+msgstr "Nach dem Teilen"
+
+#: rc_option_editor.cc:2265
+msgid "no regions"
+msgstr "keine Regionen"
+
+#: rc_option_editor.cc:2268
+msgid "newly-created regions"
+msgstr "neu erzeugte Regionen"
+
+#: rc_option_editor.cc:2272
+msgid "existing selection and newly-created regions"
+msgstr "existierende Auswahl und neu erzeugte Regionen"
+
+#: rc_option_editor.cc:2279
+msgid "Buffering"
+msgstr "Pufferung"
+
+#: rc_option_editor.cc:2287
+msgid "Record monitoring handled by"
+msgstr "Aufnahmemonitoring wird verwaltet von"
+
+#: rc_option_editor.cc:2293
+msgid "via Audio Driver"
+msgstr "via Audiotreiber"
+
+#: rc_option_editor.cc:2299
+msgid "audio hardware"
+msgstr "Audiohardware"
+
+#: rc_option_editor.cc:2306
+msgid "Tape machine mode"
+msgstr "Bandmaschinen-Modus"
+
+#: rc_option_editor.cc:2311
+msgid "Connection of tracks and busses"
+msgstr "Verbindung von Spuren und Bussen"
+
+#: rc_option_editor.cc:2316
+msgid "Auto-connect master/monitor busses"
+msgstr "Master/Monitor-Busse automatisch verbinden"
+
+#: rc_option_editor.cc:2323
+msgid "Connect track inputs"
+msgstr "Verbinde Spureingänge"
+
+#: rc_option_editor.cc:2328
+msgid "automatically to physical inputs"
+msgstr "automatisch mit Audioeingängen"
+
+#: rc_option_editor.cc:2329 rc_option_editor.cc:2342
+msgid "manually"
+msgstr "manuell"
+
+#: rc_option_editor.cc:2335
+msgid "Connect track and bus outputs"
+msgstr "Verbinde Spur- und Busausgänge"
+
+#: rc_option_editor.cc:2340
+msgid "automatically to physical outputs"
+msgstr "automatisch mit Audioausgängen"
+
+#: rc_option_editor.cc:2341
+msgid "automatically to master bus"
+msgstr "automatisch mit dem Master-Bus"
+
+#: rc_option_editor.cc:2346
+msgid "Denormals"
+msgstr "Denormals"
+
+#: rc_option_editor.cc:2351
+msgid "Use DC bias to protect against denormals"
+msgstr "Nutze DC bias als Schutz vor Denormals"
+
+#: rc_option_editor.cc:2358
+msgid "Processor handling"
+msgstr "Umgang des Prozessors mit Denormals"
+
+#: rc_option_editor.cc:2364
+msgid "no processor handling"
+msgstr "nicht behandeln"
+
+#: rc_option_editor.cc:2370
+msgid "use FlushToZero"
+msgstr "Benutze FlushToZero"
+
+#: rc_option_editor.cc:2377
+msgid "use DenormalsAreZero"
+msgstr "Benutze DenormalsAreZero"
+
+#: rc_option_editor.cc:2384
+msgid "use FlushToZero and DenormalsAreZero"
+msgstr "Benutze FlushToZero & DenormalsAreZero"
+
+#: rc_option_editor.cc:2400
+msgid "Silence plugins when the transport is stopped"
+msgstr "Deaktiviere Plugins, wenn der Transport gestoppt ist."
+
+#: rc_option_editor.cc:2408
+msgid "Make new plugins active"
+msgstr "Neue Plugins sind aktiv"
+
+#: rc_option_editor.cc:2418
+msgid "Enable automatic analysis of audio"
+msgstr "Audiodaten automatisch analysieren"
+
+#: rc_option_editor.cc:2426
+msgid "Replicate missing region channels"
+msgstr "Fehlende Kanäle in Regionen durch Kopien ersetzen"
+
+#: rc_option_editor.cc:2433 rc_option_editor.cc:2435 rc_option_editor.cc:2450
+#: rc_option_editor.cc:2462 rc_option_editor.cc:2474 rc_option_editor.cc:2486
+#: rc_option_editor.cc:2490 rc_option_editor.cc:2498 rc_option_editor.cc:2506
+#: rc_option_editor.cc:2514 rc_option_editor.cc:2516 rc_option_editor.cc:2524
+#: rc_option_editor.cc:2532 rc_option_editor.cc:2540 rc_option_editor.cc:2548
+#: rc_option_editor.cc:2550
+msgid "Solo / mute"
+msgstr "Solo / Mute"
+
+#: rc_option_editor.cc:2438
+msgid "Solo-in-place mute cut (dB)"
+msgstr "Solo-in-Place Mute Dämpfung (dB)"
+
+#: rc_option_editor.cc:2445
+msgid "Solo controls are Listen controls"
+msgstr "Solo-Schalter arbeiten als AFL/PFL"
+
+#: rc_option_editor.cc:2454
+msgid "Listen Position"
+msgstr "Abhörpunkt"
+
+#: rc_option_editor.cc:2459
+msgid "after-fader (AFL)"
+msgstr "After-Fader (AFL)"
+
+#: rc_option_editor.cc:2460
+msgid "pre-fader (PFL)"
+msgstr "Pre-Fader (PFL)"
+
+#: rc_option_editor.cc:2466
+msgid "PFL signals come from"
+msgstr "Abgreifpunkt der PFL Signale"
+
+#: rc_option_editor.cc:2471
+msgid "before pre-fader processors"
+msgstr "Vor den Pre-Fader Prozessoren"
+
+#: rc_option_editor.cc:2472
+msgid "pre-fader but after pre-fader processors"
+msgstr "Pre-Fader, aber nach den Prozessoren"
+
+#: rc_option_editor.cc:2478
+msgid "AFL signals come from"
+msgstr "Abgreifpunkt der AFL Signale"
+
+#: rc_option_editor.cc:2483
+msgid "immediately post-fader"
+msgstr "Direkt nach dem Fader"
+
+#: rc_option_editor.cc:2484
+msgid "after post-fader processors (before pan)"
+msgstr "Nach den Post-Fader Prozessoren (vor Pan)"
+
+#: rc_option_editor.cc:2493
+msgid "Exclusive solo"
+msgstr "Exclusives Solo"
+
+#: rc_option_editor.cc:2501
+msgid "Show solo muting"
+msgstr "Solo auf anderen Kanälen als Mute anzeigen"
+
+#: rc_option_editor.cc:2509
+msgid "Soloing overrides muting"
+msgstr "Solo ist trotz Mute hörbar"
+
+#: rc_option_editor.cc:2514
+msgid "Default track / bus muting options"
+msgstr "Standardeinstellungen für Mute von Spuren / Bussen"
+
+#: rc_option_editor.cc:2519
+msgid "Mute affects pre-fader sends"
+msgstr "Mute schaltet Pre-Fader Sends stumm"
+
+#: rc_option_editor.cc:2527
+msgid "Mute affects post-fader sends"
+msgstr "Mute schaltet Post-Fader Sends stumm"
+
+#: rc_option_editor.cc:2535
+msgid "Mute affects control outputs"
+msgstr "Mute schaltet Abhörausgänge stumm"
+
+#: rc_option_editor.cc:2543
+msgid "Mute affects main outputs"
+msgstr "Mute schaltet Hauptausgänge stumm"
+
+#: rc_option_editor.cc:2548
+msgid "Send Routing"
+msgstr "Send Routing"
+
+#: rc_option_editor.cc:2553
+msgid "Link panners of Aux and External Sends with main panner by default"
+msgstr "Verknüpfe Aux- und External-Send-Panner mit Hauptpanner"
+
+#: rc_option_editor.cc:2561
+msgid "MIDI read-ahead time (seconds)"
+msgstr "MIDI read-ahead Zeit (Sekunden)"
+
+#: rc_option_editor.cc:2579
+msgid "Send MIDI Time Code"
+msgstr "Sende MIDI Time Code"
+
+#: rc_option_editor.cc:2587
+msgid "Percentage either side of normal transport speed to transmit MTC"
+msgstr ""
+"Prozentzahl beiderseits der normalen Transportgeschwindigkeit, bis zu der "
+"MTC übertragen wird"
+
+#: rc_option_editor.cc:2596
+msgid "Obey MIDI Machine Control commands"
+msgstr "MIDI Machine Control Commands empfangen"
+
+#: rc_option_editor.cc:2604
+msgid "Send MIDI Machine Control commands"
+msgstr "MIDI Machine Control Commands senden"
+
+#: rc_option_editor.cc:2612
+msgid "Send MIDI control feedback"
+msgstr "MIDI Control Feedback senden"
+
+#: rc_option_editor.cc:2620
+msgid "Inbound MMC device ID"
+msgstr "ID des eingehenden MMC-Geräts"
+
+#: rc_option_editor.cc:2629
+msgid "Outbound MMC device ID"
+msgstr "ID des ausgehenden MMC-Geräts"
+
+#: rc_option_editor.cc:2638
+msgid "Initial program change"
+msgstr "Erstmaliger Programmwechsel"
+
+#: rc_option_editor.cc:2647
+msgid "Display first MIDI bank/program as 0"
+msgstr "Erste(s) MIDI Bank/Programm als 0 anzeigen"
+
+#: rc_option_editor.cc:2655
+msgid "Never display periodic MIDI messages (MTC, MIDI Clock)"
+msgstr "Periodische MIDI Nachrichten nie anzeigen (MTC, MIDI Clock)"
+
+#: rc_option_editor.cc:2663
+msgid "Sound MIDI notes as they are selected"
+msgstr "MIDI Noten ertönen bei Auswahl"
+
+#: rc_option_editor.cc:2668
+msgid "Midi Audition"
+msgstr "Midi vorhören"
+
+#: rc_option_editor.cc:2672
+msgid "Midi Audition Synth (LV2)"
+msgstr "Midi Vorhör-Synth (LV2)"
+
+#: rc_option_editor.cc:2703 rc_option_editor.cc:2713 rc_option_editor.cc:2715
+msgid "User interaction"
+msgstr "Benutzerinteraktion"
+
+#: rc_option_editor.cc:2706
+msgid ""
+"Use translations of %1 messages\n"
+"   <i>(requires a restart of %1 to take effect)</i>\n"
+"   <i>(if available for your language preferences)</i>"
+msgstr ""
+"Benutze Übersetzung der %1-Oberfläche\n"
+"   <i>(erfordert Neustart von %1)</i>\n"
+"   <i>(falls für Ihre gewünschte Sprache verfügbar)</i>"
+
+#: rc_option_editor.cc:2713
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#: rc_option_editor.cc:2723
+msgid "Control surface remote ID"
+msgstr "Remote ID des Eingabegeräts"
+
+#: rc_option_editor.cc:2728
+msgid "assigned by user"
+msgstr "vom Benutzer festgelegt"
+
+#: rc_option_editor.cc:2729
+msgid "follows order of mixer"
+msgstr "folgt Reihenfolge im Mixer"
+
+#: rc_option_editor.cc:2746
+msgid "Possibly improve slow graphical performance"
+msgstr "Versuche, langsame Grafikperformance zu verbessern"
+
+#: rc_option_editor.cc:2751
+msgid "This requires restarting %1 before having an effect"
+msgstr "Diese Einstellung wird erst nach einem Neustart von %1 wirksam"
+
+#: rc_option_editor.cc:2752 rc_option_editor.cc:2755 rc_option_editor.cc:2764
+#: rc_option_editor.cc:2773 rc_option_editor.cc:2783 rc_option_editor.cc:2808
+#: rc_option_editor.cc:2823 rc_option_editor.cc:2836 rc_option_editor.cc:2845
+msgid "Preferences|GUI"
+msgstr "GUI"
+
+#: rc_option_editor.cc:2758
+msgid "Graphically indicate mouse pointer hovering over various widgets"
+msgstr "Mouseover-Effekt über verschiedenen Anzeigen"
+
+#: rc_option_editor.cc:2767
+msgid "Show tooltips if mouse hovers over a control"
+msgstr "Zeige Tooltips, wenn die Maus über einem Element schwebt"
+
+#: rc_option_editor.cc:2776
+msgid "Use name highlight bars in region displays (requires a restart)"
+msgstr ""
+"Verwende Farbbalken zur Namenshervorhebung in der Regionendarstellung "
+"(erfordert Neustart)"
+
+#: rc_option_editor.cc:2789
+msgid "update transport clock display at FPS instead of every 100ms"
+msgstr "Auffrischen der Transport-Uhranzeige in FPS statt alle 100 ms"
+
+#: rc_option_editor.cc:2799
+msgid "Waveform image cache size (megabytes)"
+msgstr "Wellenformbild Cachegröße (Megabyte)"
+
+#: rc_option_editor.cc:2807
+msgid ""
+"Increasing the cache size uses more memory to store waveform images, which "
+"can improve graphical performance."
+msgstr ""
+"Ein größerer Cache benutzt mehr RAM-Speicher, was die Grafikperformance "
+"verbessern kann."
+
+#: rc_option_editor.cc:2814
+msgid "Lock timeout (seconds)"
+msgstr "Sperr-Timeout (Sekunden)"
+
+#: rc_option_editor.cc:2822
+msgid "Lock GUI after this many idle seconds (zero to never lock)"
+msgstr "Sperre GUI nach so vielen untätigen Sekunden (null, um nie zu sperren)"
+
+#: rc_option_editor.cc:2838
+msgid "Mixer Strip"
+msgstr "Anzeige im Kanalzug"
+
+#: rc_option_editor.cc:2848
+msgid "Use narrow strips in the mixer by default"
+msgstr "Standardmäßig schmale Kanalzüge verwenden"
+
+#: rc_option_editor.cc:2853 rc_option_editor.cc:2867 rc_option_editor.cc:2884
+#: rc_option_editor.cc:2900 rc_option_editor.cc:2916 rc_option_editor.cc:2930
+#: rc_option_editor.cc:2956 rc_option_editor.cc:2974 rc_option_editor.cc:2985
+#: rc_option_editor.cc:2992 rc_option_editor.cc:2994
+msgid "Preferences|Metering"
+msgstr "Pegelanzeige"
+
+#: rc_option_editor.cc:2857
+msgid "Peak hold time"
+msgstr "Haltezeit für Spitzenwert"
+
+#: rc_option_editor.cc:2863
+msgid "short"
+msgstr "Kurz"
+
+#: rc_option_editor.cc:2864
+msgid "medium"
+msgstr "Mittel"
+
+#: rc_option_editor.cc:2865
+msgid "long"
+msgstr "Lange"
+
+#: rc_option_editor.cc:2871
+msgid "DPM fall-off"
+msgstr "Abfall der digitalen Pegelanzeige"
+
+#: rc_option_editor.cc:2877
+msgid "slowest [6.6dB/sec]"
+msgstr "am langsamsten [6.6dB/sec]"
+
+#: rc_option_editor.cc:2878
+msgid "slow [8.6dB/sec] (BBC PPM, EBU PPM)"
+msgstr "langsam [8.6dB/sec] (BBC PPM, EBU PPM)"
+
+#: rc_option_editor.cc:2879
+msgid "moderate [12.0dB/sec] (DIN)"
+msgstr "moderat [12.0dB/sec] (DIN)"
+
+#: rc_option_editor.cc:2880
+msgid "medium [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
+msgstr "mittel [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
+
+#: rc_option_editor.cc:2881
+msgid "fast [20dB/sec]"
+msgstr "schnell [20dB/sec]"
+
+#: rc_option_editor.cc:2882
+msgid "very fast [32dB/sec]"
+msgstr "sehr schnell [32dB/sec]"
+
+#: rc_option_editor.cc:2888
+msgid "Meter line-up level; 0dBu"
+msgstr "Ausrichtung der Pegelanzeige; 0dBu"
+
+#: rc_option_editor.cc:2893 rc_option_editor.cc:2909
+msgid "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
+msgstr "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
+
+#: rc_option_editor.cc:2894 rc_option_editor.cc:2910
+msgid "-20dBFS (SMPTE RP.0155)"
+msgstr "-20dBFS (SMPTE RP.0155)"
+
+#: rc_option_editor.cc:2895 rc_option_editor.cc:2911
+msgid "-18dBFS (EBU, BBC)"
+msgstr "-18dBFS (EBU, BBC)"
+
+#: rc_option_editor.cc:2896 rc_option_editor.cc:2912
+msgid "-15dBFS (DIN)"
+msgstr "-15dBFS (DIN)"
+
+#: rc_option_editor.cc:2898
+msgid ""
+"Configure meter-marks and color-knee point for dBFS scale DPM, set reference "
+"level for IEC1/Nordic, IEC2 PPM and VU meter."
+msgstr ""
+"Konfiguriere Skalierung und Farbschwellwert für DPM mit dBFS-Skala, "
+"setzeReferenzpegel  für IEC1/Nordisch, IEC2 PPM und VU Pegelanzeigen."
+
+#: rc_option_editor.cc:2904
+msgid "IEC1/DIN Meter line-up level; 0dBu"
+msgstr "Ausrichtung der IEC1/DIN Pegelanzeige; 0dBu"
+
+#: rc_option_editor.cc:2914
+msgid "Reference level for IEC1/DIN meter."
+msgstr "Referenzpegel  für IEC1/DIN Pegelanzeige."
+
+#: rc_option_editor.cc:2920
+msgid "VU Meter standard"
+msgstr "Standard für VU-Pegelanzeige"
+
+#: rc_option_editor.cc:2925
+msgid "0VU = -2dBu (France)"
+msgstr "0VU = -2dBu (Frankreich)"
+
+#: rc_option_editor.cc:2926
+msgid "0VU = 0dBu (North America, Australia)"
+msgstr "0VU = 0dBu (Nordamerika, Australien)"
+
+#: rc_option_editor.cc:2927
+msgid "0VU = +4dBu (standard)"
+msgstr "0VU = +4dBu (Standard)"
+
+#: rc_option_editor.cc:2928
+msgid "0VU = +8dBu"
+msgstr "0VU = +8dBu"
+
+#: rc_option_editor.cc:2934
+msgid "Peak threshold [dBFS]"
+msgstr "Schwelle für Spitzenwert [dBFS]"
+
+#: rc_option_editor.cc:2943
+msgid "Default Meter Type for Master Bus"
+msgstr "Voreingestellter Metertyp für Masterbus"
+
+#: rc_option_editor.cc:2961
+msgid "Default Meter Type for Busses"
+msgstr "Voreingestellter Metertyp für Busse"
+
+#: rc_option_editor.cc:2978
+msgid "Default Meter Type for Tracks"
+msgstr "Voreingestellter Metertyp für Spuren"
+
+#: rc_option_editor.cc:2990
+msgid ""
+"Specify the audio signal level in dbFS at and above which the meter-peak "
+"indicator will flash red."
+msgstr ""
+"Geben Sie den Signalpegel in dbFS an, bei dessen Erreichen oder "
+"Überschreitung die Spitzenwertanzeige in der Pegelanzeige rot blinkt"
+
+#: rc_option_editor.cc:2997
+msgid "LED meter style"
+msgstr "Pegelanzeigen im LED-Stil"
+
+#: rc_option_editor.cc:3005
+msgid "Theme"
+msgstr "Thema"
+
+#: region_editor.cc:79
+msgid "audition this region"
+msgstr "Diese Region vorhören"
+
+#: region_editor.cc:88 region_layering_order_editor.cc:75
+msgid "Position:"
+msgstr "Position:"
+
+#: region_editor.cc:90 add_video_dialog.cc:155
+msgid "End:"
+msgstr "Ende:"
+
+#: region_editor.cc:92 sfdb_ui.cc:144
+msgid "Length:"
+msgstr "Länge:"
+
+#: region_editor.cc:94
+msgid "Sync point (relative to region):"
+msgstr "Synchronisationspunkt (relativ zur Region)"
+
+#: region_editor.cc:96
+msgid "Sync point (absolute):"
+msgstr "Synchronisationspunkt (absolut)"
+
+#: region_editor.cc:98
+msgid "File start:"
+msgstr "Dateibeginn:"
+
+#: region_editor.cc:102
+msgid "Sources:"
+msgstr "Quellen:"
+
+#: region_editor.cc:104
+msgid "Source:"
+msgstr "Quelle:"
+
+#: region_editor.cc:166
+msgid "Region '%1'"
+msgstr "Region '%1'"
+
+#: region_editor.cc:277
+msgid "change region start position"
+msgstr "Startposition der Region ändern"
+
+#: region_editor.cc:297
+msgid "change region end position"
+msgstr "Endposition der Region ändern"
+
+#: region_editor.cc:320
+msgid "change region length"
+msgstr "Länge der Region verändern"
+
+#: region_editor.cc:414 region_editor.cc:426
+msgid "change region sync point"
+msgstr "Synchronisationspunkt der Region ändern"
+
+#: region_layering_order_editor.cc:42
+msgid "RegionLayeringOrderEditor"
+msgstr "RegionenLayeringOrdnungEditor"
+
+#: region_layering_order_editor.cc:55
+msgid "Region Name"
+msgstr "Name der Region"
+
+#: region_layering_order_editor.cc:72
+msgid "Track:"
+msgstr "Spur:"
+
+#: region_layering_order_editor.cc:104
+msgid "Choose Top Region"
+msgstr "Oberste Region auswählen"
+
+#: region_view.cc:277
+msgid "SilenceText"
+msgstr "StilleText"
+
+#: region_view.cc:292 region_view.cc:311
+msgid "minutes"
+msgstr "Minuten"
+
+#: region_view.cc:295 region_view.cc:314
+msgid "msecs"
+msgstr "ms"
+
+#: region_view.cc:298 region_view.cc:317
+msgid "secs"
+msgstr "s"
+
+#: region_view.cc:301
+msgid "%1 silent segment"
+msgid_plural "%1 silent segments"
+msgstr[0] "%1 stilles Segment"
+msgstr[1] "%1 stille Segmente"
+
+#: region_view.cc:303
+msgid "shortest = %1 %2"
+msgstr "kürzestes = %1 %2"
+
+#: region_view.cc:320
+msgid ""
+"\n"
+"  (shortest audible segment = %1 %2)"
+msgstr ""
+"\n"
+"  (kürzestes hörbares Segment = %1 %2)"
+
+#: return_ui.cc:102
+msgid "Return "
+msgstr "Return "
+
+#: rhythm_ferret.cc:48
+msgid "Percussive Onset"
+msgstr "Percussive Onset"
+
+#: rhythm_ferret.cc:49
+msgid "Note Onset"
+msgstr "Note Onset"
+
+#: rhythm_ferret.cc:54
+msgid "Energy Based"
+msgstr "Energy Based"
+
+#: rhythm_ferret.cc:55
+msgid "Spectral Difference"
+msgstr "Spectral Difference"
+
+#: rhythm_ferret.cc:56
+msgid "High-Frequency Content"
+msgstr "High-Frequency Content"
+
+#: rhythm_ferret.cc:57
+msgid "Complex Domain"
+msgstr "Complex Domain"
+
+#: rhythm_ferret.cc:58
+msgid "Phase Deviation"
+msgstr "Phasenabweichung"
+
+#: rhythm_ferret.cc:59
+msgid "Kullback-Liebler"
+msgstr "Kullback-Liebler"
+
+#: rhythm_ferret.cc:60
+msgid "Modified Kullback-Liebler"
+msgstr "Modified Kullback-Liebler"
+
+#: rhythm_ferret.cc:65
+msgid "Split region"
+msgstr "Region teilen"
+
+#: rhythm_ferret.cc:66
+msgid "Snap regions"
+msgstr "Regionen einrasten"
+
+#: rhythm_ferret.cc:67
+msgid "Conform regions"
+msgstr "Region angleichen"
+
+#: rhythm_ferret.cc:72
+msgid "Rhythm Ferret"
+msgstr "Rhythm Ferret"
+
+#: rhythm_ferret.cc:78
+msgid "Analyze"
+msgstr "Daten analysieren"
+
+#: rhythm_ferret.cc:113
+msgid "Detection function"
+msgstr "Erkennungsfunktion"
+
+#: rhythm_ferret.cc:117
+msgid "Trigger gap"
+msgstr "Mindestauslöseabstand"
+
+#: rhythm_ferret.cc:122 strip_silence_dialog.cc:64
+msgid "Threshold"
+msgstr "Threshold"
+
+#: rhythm_ferret.cc:127
+msgid "Peak threshold"
+msgstr "Schwelle für Spitzenwert"
+
+#: rhythm_ferret.cc:132
+msgid "Silence threshold"
+msgstr "Silence threshold"
+
+#: rhythm_ferret.cc:137
+msgid "Sensitivity"
+msgstr "Empfindlichkeit"
+
+#: rhythm_ferret.cc:141
+msgid "Operation"
+msgstr "Aktionen"
+
+#: rhythm_ferret.cc:355
+msgid "split regions (rhythm ferret)"
+msgstr "Regionen teilen (rhythm ferret)"
+
+#: route_group_dialog.cc:42
+msgid "Track/bus Group"
+msgstr "Spur/Bus-Gruppe"
+
+#: route_group_dialog.cc:47
+msgid "Relative"
+msgstr "Relativ"
+
+#: route_group_dialog.cc:48
+msgid "Muting"
+msgstr "Muting"
+
+#: route_group_dialog.cc:50
+msgid "Record enable"
+msgstr "Aufnahmestatus"
+
+#: route_group_dialog.cc:52
+msgid "Active state"
+msgstr "Aktiv-Status"
+
+#: route_group_dialog.cc:53 route_group_dialog.cc:82 theme_manager.cc:92
+msgid "Color"
+msgstr "Farbe"
+
+#: route_group_dialog.cc:59
+msgid "RouteGroupDialog"
+msgstr "Bearbeitungsgruppendialog"
+
+#: route_group_dialog.cc:100
+msgid "<b>Sharing</b>"
+msgstr "<b>Geteilte Funktionen</b>"
+
+#: route_group_dialog.cc:200
+msgid "The group name is not unique. Please use a different name."
+msgstr ""
+"Der Gruppenname ist nicht einzigartig. Bitte benutzen Sie einen anderen "
+"Namen."
+
+#: route_params_ui.cc:84
+msgid "Tracks/Busses"
+msgstr "Spuren/Busse"
+
+#: route_params_ui.cc:103
+msgid "Inputs"
+msgstr "Eingänge"
+
+#: route_params_ui.cc:104
+msgid "Outputs"
+msgstr "Ausgänge"
+
+#: route_params_ui.cc:105
+msgid "Plugins, Inserts & Sends"
+msgstr "Plugins, Inserts & Sends"
+
+#: route_params_ui.cc:209
+msgid "route display list item for renamed route not found!"
+msgstr ""
+"Konnte Bezeichnung für umbenannten Verbindung nicht in der Liste der "
+"Verbindungen finden!"
+
+#: route_params_ui.cc:279 route_params_ui.cc:307
+#, c-format
+msgid "Playback delay: %<PRId64> samples"
+msgstr "Wiedergabeverzögerung: %<PRId64> Samples"
+
+#: route_params_ui.cc:499
+msgid "NO TRACK"
+msgstr "KEINE SPUR"
+
+#: route_params_ui.cc:637 route_params_ui.cc:638
+msgid "No Track or Bus Selected"
+msgstr "Keine Spuren oder Busse ausgewählt"
+
+#: route_time_axis.cc:104
+msgid "RTAV|G"
+msgstr "G"
+
+#: route_time_axis.cc:105
+msgid "RTAV|P"
+msgstr "P"
+
+#: route_time_axis.cc:106
+msgid "RTAV|A"
+msgstr "A"
+
+#: route_time_axis.cc:183
+msgid "Record (Right-click for Step Edit)"
+msgstr "Aufnahme (Rechtsklick für Step Entry)"
+
+#: route_time_axis.cc:186
+msgid "Record"
+msgstr "Aufnahme"
+
+#: route_time_axis.cc:256
+msgid "Route Group"
+msgstr "Bearbeitungsgruppe"
+
+#: route_time_axis.cc:266
+msgid "MIDI Controllers and Automation"
+msgstr "MIDI-Controller und Automation"
+
+#: route_time_axis.cc:497
+msgid "Show All Automation"
+msgstr "Alle Automationen anzeigen"
+
+#: route_time_axis.cc:500
+msgid "Show Existing Automation"
+msgstr "Genutzte Automationen zeigen"
+
+#: route_time_axis.cc:503
+msgid "Hide All Automation"
+msgstr "Alle Automationen verbergen"
+
+#: route_time_axis.cc:512
+msgid "Processor automation"
+msgstr "Prozessorautomation"
+
+#: route_time_axis.cc:519
+msgid "Fader"
+msgstr "Fader"
+
+#: route_time_axis.cc:546
+msgid "Pan"
+msgstr "Pan"
+
+#: route_time_axis.cc:637
+msgid "Overlaid"
+msgstr "Overlaid"
+
+#: route_time_axis.cc:643
+msgid "Stacked"
+msgstr "Stacked"
+
+#: route_time_axis.cc:651
+msgid "Layers"
+msgstr "Layers"
+
+#: route_time_axis.cc:720
+msgid "Automatic (based on I/O connections)"
+msgstr "Automatisch (auf den I/O Verbindungen basierend)"
+
+#: route_time_axis.cc:729
+msgid "(Currently: Existing Material)"
+msgstr "(Momentan: An vorhandenem Material ausrichten)"
+
+#: route_time_axis.cc:732
+msgid "(Currently: Capture Time)"
+msgstr "(Momentan: An Aufnahmezeit ausrichten)"
+
+#: route_time_axis.cc:740
+msgid "Align With Existing Material"
+msgstr "An vorhandenem Material ausrichten"
+
+#: route_time_axis.cc:745
+msgid "Align With Capture Time"
+msgstr "An Aufnahmezeit ausrichten"
+
+#: route_time_axis.cc:750
+msgid "Alignment"
+msgstr "Ausrichtung"
+
+#: route_time_axis.cc:785
+msgid "Normal Mode"
+msgstr "Normaler Modus"
+
+#: route_time_axis.cc:791
+msgid "Tape Mode"
+msgstr "Band-Modus"
+
+#: route_time_axis.cc:797
+msgid "Non-Layered Mode"
+msgstr "Non-Layered Mode"
+
+#: route_time_axis.cc:803
+msgid "Record Mode"
+msgstr "Aufnahmemodus"
+
+#: route_time_axis.cc:810 route_time_axis.cc:1801
+msgid "Playlist"
+msgstr "Wiedergabeliste"
+
+#: route_time_axis.cc:1104
+msgid "Rename Playlist"
+msgstr "Wiedergabeliste umbenennen"
+
+#: route_time_axis.cc:1105
+msgid "New name for playlist:"
+msgstr "Neuer Name für Wiedergabeliste:"
+
+#: route_time_axis.cc:1190
+msgid "New Copy Playlist"
+msgstr "Neue Kopie der Wiedergabeliste"
+
+#: route_time_axis.cc:1191 route_time_axis.cc:1244
+msgid "Name for new playlist:"
+msgstr "Name für die neue Wiedergabeliste:"
+
+#: route_time_axis.cc:1243
+msgid "New Playlist"
+msgstr "Neue Wiedergabeliste"
+
+#: route_time_axis.cc:1447
+msgid "You cannot create a track with that name as it is reserved for %1"
+msgstr ""
+"Sie können keine Spur mit einem Namen erstellen, der für %1 reserviert ist."
+
+#: route_time_axis.cc:1690
+msgid "New Copy..."
+msgstr "Neue Kopie..."
+
+#: route_time_axis.cc:1694
+msgid "New Take"
+msgstr "Neuer Take"
+
+#: route_time_axis.cc:1695
+msgid "Copy Take"
+msgstr "Take kopieren"
+
+#: route_time_axis.cc:1700
+msgid "Clear Current"
+msgstr "Aktuelle leeren"
+
+#: route_time_axis.cc:1703
+msgid "Select From All..."
+msgstr "Aus allen auswählen..."
+
+#: route_time_axis.cc:1791
+msgid "Take: %1.%2"
+msgstr "Take: %1.%2"
+
+#: route_time_axis.cc:2197 selection.cc:1007 selection.cc:1061
+msgid "programming error: "
+msgstr "Programmierfehler:"
+
+#: route_time_axis.cc:2613
+msgid "Underlays"
+msgstr "Darunterliegende"
+
+#: route_time_axis.cc:2616
+msgid "Remove \"%1\""
+msgstr "Lösche \"%1\""
+
+#: route_time_axis.cc:2666 route_time_axis.cc:2703
+msgid "programming error: underlay reference pointer pairs are inconsistent!"
+msgstr "programming error: underlay reference pointer pairs are inconsistent!"
+
+#: route_time_axis.cc:2730
+msgid "After-fade listen (AFL)"
+msgstr "After-Fader (AFL)"
+
+#: route_time_axis.cc:2734
+msgid "Pre-fade listen (PFL)"
+msgstr "Pre-Fader (PFL)"
+
+#: route_ui.cc:142
+msgid "Mute this track"
+msgstr "Diese Spur stummschalten"
+
+#: route_ui.cc:146
+msgid "Mute other (non-soloed) tracks"
+msgstr "Andere (nicht Solo-)Spuren stummschalten"
+
+#: route_ui.cc:152
+msgid "Enable recording on this track"
+msgstr "Aktiviere die Aufnahme auf dieser Spur"
+
+#: route_ui.cc:160
+msgid "make mixer strips show sends to this bus"
+msgstr "Kanalzüge zeigen Sends zu diesem Bus"
+
+#: route_ui.cc:165
+msgid "Monitor input"
+msgstr "Eingang abhören"
+
+#: route_ui.cc:171
+msgid "Monitor playback"
+msgstr "Vorhandenes Material abhören"
+
+#: route_ui.cc:678
+msgid "Not connected to AudioEngine - cannot engage record"
+msgstr "Nicht mit Audio-Engine verbunden - Aufnahme nicht möglich"
+
+#: route_ui.cc:877
+msgid "Step Entry"
+msgstr "Eingabemodus (Step Entry)"
+
+#: route_ui.cc:950
+msgid "Assign all tracks (prefader)"
+msgstr "Alle Audiospuren zuweisen (Pre-Fader)"
+
+#: route_ui.cc:954
+msgid "Assign all tracks and buses (prefader)"
+msgstr "Alle Audiospuren und Busse zuweisen (Pre-Fader)"
+
+#: route_ui.cc:958
+msgid "Assign all tracks (postfader)"
+msgstr "Alle Audiospuren zuweisen (Post-Fader)"
+
+#: route_ui.cc:962
+msgid "Assign all tracks and buses (postfader)"
+msgstr "Alle Audiospuren und Busse zuweisen (Post-Fader)"
+
+#: route_ui.cc:966
+msgid "Assign selected tracks (prefader)"
+msgstr "Ausgewählte Audiospuren zuweisen (Pre-Fader)"
+
+#: route_ui.cc:970
+msgid "Assign selected tracks and buses (prefader)"
+msgstr "Ausgewählte Audiospuren und Busse zuweisen (Pre-Fader)"
+
+#: route_ui.cc:973
+msgid "Assign selected tracks (postfader)"
+msgstr "Ausgewählte Audiospuren zuweisen (Post-Fader)"
+
+#: route_ui.cc:977
+msgid "Assign selected tracks and buses (postfader)"
+msgstr "Ausgewählte Audiospuren und Busse zuweisen (Post-Fader)"
+
+#: route_ui.cc:980
+msgid "Copy track/bus gains to sends"
+msgstr "Lautstärken der Spuren/Busse auf ihre Sends kopieren"
+
+#: route_ui.cc:981
+msgid "Set sends gain to -inf"
+msgstr "Setze Sends-Lautstärken to -inf"
+
+#: route_ui.cc:982
+msgid "Set sends gain to 0dB"
+msgstr "Setze Sends-Lautstärken to 0dB"
+
+#: route_ui.cc:1301
+msgid "Solo Isolate"
+msgstr "Isoliertes Solo"
+
+#: route_ui.cc:1308
+msgid "Solo Safe"
+msgstr "Solo sperren"
+
+#: route_ui.cc:1330
+msgid "Pre Fader Sends"
+msgstr "Pre-Fader Sends"
+
+#: route_ui.cc:1336
+msgid "Post Fader Sends"
+msgstr "Post-Fader Sends"
+
+#: route_ui.cc:1342
+msgid "Control Outs"
+msgstr "Vorhörausgang"
+
+#: route_ui.cc:1348
+msgid "Main Outs"
+msgstr "Hauptausgänge"
+
+#: route_ui.cc:1485
+msgid "Color Selection"
+msgstr "Farbauswahl"
+
+#: route_ui.cc:1550
+msgid ""
+"The use of colons (':') is discouraged in track and bus names.\n"
+"Do you want to use this new name?"
+msgstr ""
+"Die Verwendung von Doppelpunkten (':') in Spur- und Busnamen\n"
+"wird nicht empfohlen.\n"
+"Wollen Sie diesen neuen Namen verwenden?"
+
+#: route_ui.cc:1554
+msgid "Use the new name"
+msgstr "Neuen Namen verwenden"
+
+#: route_ui.cc:1555
+msgid "Re-edit the name"
+msgstr "Namen bearbeiten"
+
+#: route_ui.cc:1568
+msgid "Rename Track"
+msgstr "Spur umbenennen"
+
+#: route_ui.cc:1570
+msgid "Rename Bus"
+msgstr "Bus umbenennen"
+
+#: route_ui.cc:1638
+msgid ": comment editor"
+msgstr ": Kommentare bearbeiten"
+
+#: route_ui.cc:1804
+msgid " latency"
+msgstr " Latenz"
+
+#: route_ui.cc:1817
+msgid "Cannot create route template directory %1"
+msgstr "Kann das Vorlagenverzeichnis für Spuren/Busse %1 nicht erzeugen"
+
+#: route_ui.cc:1823
+msgid "Save As Template"
+msgstr "Als Vorlage speichern"
+
+#: route_ui.cc:1824
+msgid "Template name:"
+msgstr "Name der Vorlage:"
+
+#: route_ui.cc:1905
+msgid "Remote Control ID"
+msgstr "ID für Fernsteuerung"
+
+#: route_ui.cc:1915
+msgid "Remote control ID:"
+msgstr "ID für Fernsteuerung:"
+
+#: route_ui.cc:1929
+msgid ""
+"The remote control ID of %1 is: %2\n"
+"\n"
+"\n"
+"The remote control ID of %3 cannot be changed."
+msgstr ""
+"Die Fernbedienungs-ID von %1 ist: %2\n"
+"\n"
+"\n"
+"Die Fernbedienungs-ID von %3 kann nicht geändert werden."
+
+#: route_ui.cc:1933
+msgid "the master bus"
+msgstr "der Master-Bus"
+
+#: route_ui.cc:1933
+msgid "the monitor bus"
+msgstr "der Monitor-Bus"
+
+#: route_ui.cc:1935
+msgid ""
+"The remote control ID of %5 is: %2\n"
+"\n"
+"\n"
+"Remote Control IDs are currently determined by track/bus ordering in %6.\n"
+"\n"
+"%3Use the User Interaction tab of the Preferences window if you want to "
+"change this%4"
+msgstr ""
+"Die Fernbedienungs-ID von %5 ist: %2\n"
+"\n"
+"\n"
+"Fernbedienungs-IDs werden zur Zeit durch die Reihenfolge der Spuren/Busse in "
+"%6 bestimmt.\n"
+"\n"
+"%3Benutzen Sie den Reiter GUI im Fenster \"Einstellungen\", um dies zu ändern"
+"%4"
+
+#: route_ui.cc:1992
+msgid ""
+"Left-click to invert (phase reverse) channel %1 of this track.  Right-click "
+"to show menu."
+msgstr ""
+"Linksklick, um die Phase von Kanal %1 zu invertieren. Rechtsklick zeigt das "
+"Menü."
+
+#: route_ui.cc:1994
+msgid "Click to show a menu of channels for inversion (phase reverse)"
+msgstr ""
+"Klicken, um ein Menü zum Invertieren der Kanäle (Phasendrehung) anzuzeigen"
+
+#: save_as_dialog.cc:34
+msgid "Switch to newly-saved version"
+msgstr "Zu neu erzeugter Version wechseln"
+
+#: save_as_dialog.cc:35
+msgid "Copy media to new session"
+msgstr "Medien in das neue Projekt kopieren"
+
+#: save_as_dialog.cc:36
+msgid "Copy external media into new session"
+msgstr "Externe Medien in das neue Projekt kopieren"
+
+#: save_as_dialog.cc:37
+msgid "Newly-saved session should be empty"
+msgstr "Das neu gesicherte Projekt sollte leer sein"
+
+#: save_as_dialog.cc:48
+msgid "Save as session name"
+msgstr "Sichern als Projektname"
+
+#: save_as_dialog.cc:55
+msgid "Parent directory/folder"
+msgstr "Übergeordnetes Verzeichnis"
+
+#: search_path_option.cc:35
+msgid "Select folder to search for media"
+msgstr "Verzeichnis zur Mediensuche auswählen"
+
+#: search_path_option.cc:44
+msgid "Click to add a new location"
+msgstr "Hier klicken, um einen Pfad hinzuzufügen"
+
+#: search_path_option.cc:51
+msgid "the session folder"
+msgstr "Projektordner"
+
+#: send_ui.cc:134
+msgid "Send "
+msgstr "Send "
+
+#: session_dialog.cc:61
+msgid "Session Setup"
+msgstr "Projekteinrichtung"
+
+#: session_dialog.cc:66
+msgid "Advanced options ..."
+msgstr "Erweiterte Einstellungen..."
+
+#: session_dialog.cc:263
+msgid "New Session"
+msgstr "Neues Projekt"
+
+#: session_dialog.cc:301
+msgid "Check the website for more..."
+msgstr "Informieren Sie sich auf der Webseite weiter..."
+
+#: session_dialog.cc:304
+msgid "Click to open the program website in your web browser"
+msgstr "Klicken Sie, um die Webseite in Ihrem Web-Browse zu öffnen"
+
+#: session_dialog.cc:324
+msgid "Sample Rate"
+msgstr "Samplerate"
+
+#: session_dialog.cc:325
+msgid "Disk Format"
+msgstr "Dateiformat"
+
+#: session_dialog.cc:343
+msgid "Select session file"
+msgstr "Projektdatei auswählen"
+
+#: session_dialog.cc:358
+msgid "Other Sessions"
+msgstr "Andere Projekte"
+
+#: session_dialog.cc:384
+msgid "Open"
+msgstr "Öffnen"
+
+#: session_dialog.cc:451
+msgid "Session name:"
+msgstr "Projektname:"
+
+#: session_dialog.cc:473
+msgid "Create session folder in:"
+msgstr "Ort des Projektverzeichnisses:"
+
+#: session_dialog.cc:496
+msgid "Select folder for session"
+msgstr "Ordner für Projekt wählen"
+
+#: session_dialog.cc:525
+msgid "Use this template"
+msgstr "Diese Vorlage verwenden"
+
+#: session_dialog.cc:528
+msgid "no template"
+msgstr "keine Vorlage"
+
+#: session_dialog.cc:663 session_dialog.cc:699
+msgid "32 bit float"
+msgstr "32 Bit float"
+
+#: session_dialog.cc:666 session_dialog.cc:702
+msgid "24 bit"
+msgstr "24 Bit"
+
+#: session_dialog.cc:669 session_dialog.cc:705
+msgid "16 bit"
+msgstr "16 Bit"
+
+#: session_dialog.cc:747 session_dialog.cc:748 session_dialog.cc:749
+msgid "channels"
+msgstr "Kanäle"
+
+#: session_dialog.cc:763
+msgid "<b>Busses</b>"
+msgstr "<b>Busse</b>"
+
+#: session_dialog.cc:764
+msgid "<b>Inputs</b>"
+msgstr "<b>Eingänge</b>"
+
+#: session_dialog.cc:765
+msgid "<b>Outputs</b>"
+msgstr "<b>Ausgänge</b>"
+
+#: session_dialog.cc:773
+msgid "Create master bus"
+msgstr "Master-Bus erstellen"
+
+#: session_dialog.cc:783
+msgid "Automatically connect to physical inputs"
+msgstr "Automatisch mit Audioeingängen verbinden"
+
+#: session_dialog.cc:790 session_dialog.cc:849
+msgid "Use only"
+msgstr "Benutze nur"
+
+#: session_dialog.cc:843
+msgid "Automatically connect outputs"
+msgstr "Ausgänge automatisch verbinden"
+
+#: session_dialog.cc:865
+msgid "... to master bus"
+msgstr "... mit dem Master-Bus"
+
+#: session_dialog.cc:875
+msgid "... to physical outputs"
+msgstr "... mit den Audioausgängen"
+
+#: session_import_dialog.cc:65
+msgid "Import from Session"
+msgstr "Aus Projekt importieren"
+
+#: session_import_dialog.cc:74
+msgid "Elements"
+msgstr "Elemente"
+
+#: session_import_dialog.cc:111
+msgid "Cannot load XML for session from %1"
+msgstr "Konnte XML für das Projekt von %1 nicht laden"
+
+#: session_import_dialog.cc:128 session_import_dialog.cc:212
+msgid "Some elements had errors in them. Please see the log for details"
+msgstr ""
+"Einige Elemente beinhalteten Fehler. Für Einzelheiten lesen Sie bitte das Log"
+
+#: session_import_dialog.cc:164
+msgid "Import from session"
+msgstr "Aus Projekt importieren"
+
+#: session_import_dialog.cc:228
+msgid "This will select all elements of this type!"
+msgstr "Dies wird alle Elemente dieses Typs auswählen!"
+
+#: session_metadata_dialog.cc:285
+msgid "EAN Check digit OK"
+msgstr "EAN Prüfziffer OK"
+
+#: session_metadata_dialog.cc:289
+msgid "EAN Check digit error"
+msgstr "EAN Prüfziffernfehler"
+
+#: session_metadata_dialog.cc:289
+msgid "expected"
+msgstr "erwartet"
+
+#: session_metadata_dialog.cc:294
+msgid "EAN Length error"
+msgstr "EAN Längenfehler"
+
+#: session_metadata_dialog.cc:423
+msgid "Field"
+msgstr "Feld"
+
+#: session_metadata_dialog.cc:427
+msgid "Values (current value on top)"
+msgstr "Werte (aktueller oben)"
+
+#: session_metadata_dialog.cc:641
+msgid "User"
+msgstr "Benutzer"
+
+#: session_metadata_dialog.cc:649
+msgid "Email"
+msgstr "E-Mail"
+
+#: session_metadata_dialog.cc:652
+msgid "Web"
+msgstr "Web"
+
+#: session_metadata_dialog.cc:655
+msgid "Organization"
+msgstr "Organisation"
+
+#: session_metadata_dialog.cc:658
+msgid "Country"
+msgstr "Land"
+
+#: session_metadata_dialog.cc:672
+msgid "Title"
+msgstr "Titel"
+
+#: session_metadata_dialog.cc:675
+msgid "Track Number"
+msgstr "Liednummer"
+
+#: session_metadata_dialog.cc:678
+msgid "Subtitle"
+msgstr "Untertitel"
+
+#: session_metadata_dialog.cc:681
+msgid "Grouping"
+msgstr "Gruppierung"
+
+#: session_metadata_dialog.cc:684
+msgid "Artist"
+msgstr "Künstler"
+
+#: session_metadata_dialog.cc:687
+msgid "Genre"
+msgstr "Genre"
+
+#: session_metadata_dialog.cc:690
+msgid "Comment"
+msgstr "Kommentar"
+
+#: session_metadata_dialog.cc:693
+msgid "Copyright"
+msgstr "Copyright"
+
+#: session_metadata_dialog.cc:701 session_metadata_dialog.cc:706
+msgid "Album"
+msgstr "Album"
+
+#: session_metadata_dialog.cc:709
+msgid "Year"
+msgstr "Jahr"
+
+#: session_metadata_dialog.cc:712
+msgid "Album Artist"
+msgstr "Albumkünstler"
+
+#: session_metadata_dialog.cc:715
+msgid "Total Tracks"
+msgstr "Spuranzahl"
+
+#: session_metadata_dialog.cc:718
+msgid "Disc Subtitle"
+msgstr "CD-Untertitel"
+
+#: session_metadata_dialog.cc:721
+msgid "Disc Number"
+msgstr "CD-Nummer"
+
+#: session_metadata_dialog.cc:724
+msgid "Total Discs"
+msgstr "CDs insgesamt"
+
+#: session_metadata_dialog.cc:727
+msgid "Compilation"
+msgstr "Compilation"
+
+#: session_metadata_dialog.cc:730
+msgid "ISRC"
+msgstr "ISRC"
+
+#: session_metadata_dialog.cc:733
+msgid "EAN barcode"
+msgstr "EAN Strichcode"
+
+#: session_metadata_dialog.cc:746
+msgid "People"
+msgstr "Mitwirkenden"
+
+#: session_metadata_dialog.cc:751
+msgid "Lyricist"
+msgstr "Texter"
+
+#: session_metadata_dialog.cc:754
+msgid "Composer"
+msgstr "Komponist"
+
+#: session_metadata_dialog.cc:757
+msgid "Conductor"
+msgstr "Leiter"
+
+#: session_metadata_dialog.cc:760
+msgid "Remixer"
+msgstr "Remixer"
+
+#: session_metadata_dialog.cc:763
+msgid "Arranger"
+msgstr "Arranger"
+
+#: session_metadata_dialog.cc:766
+msgid "Engineer"
+msgstr "Bearbeiter"
+
+#: session_metadata_dialog.cc:769
+msgid "Producer"
+msgstr "Produzent"
+
+#: session_metadata_dialog.cc:772
+msgid "DJ Mixer"
+msgstr "DJ Mixer"
+
+#: session_metadata_dialog.cc:775
+msgid "Metadata|Mixer"
+msgstr "Mixer"
+
+#: session_metadata_dialog.cc:783
+msgid "School"
+msgstr "Schule"
+
+#: session_metadata_dialog.cc:788
+msgid "Instructor"
+msgstr "Lehrender"
+
+#: session_metadata_dialog.cc:791
+msgid "Course"
+msgstr "Kurs"
+
+#: session_metadata_dialog.cc:799
+msgid "Edit Session Metadata"
+msgstr "Projekt-Metadaten bearbeiten"
+
+#: session_metadata_dialog.cc:830
+msgid "Import session metadata"
+msgstr "Projekt-Metadaten importieren"
+
+#: session_metadata_dialog.cc:851
+msgid "Choose session to import metadata from"
+msgstr "Wählen Sie das Projekt, aus dem Metadaten importiert werden sollen"
+
+#: session_metadata_dialog.cc:889
+msgid "This session file could not be read!"
+msgstr "Diese Projektdatei konnte nicht gelesen werden!"
+
+#: session_metadata_dialog.cc:899
+msgid ""
+"The session file didn't contain metadata!\n"
+"Maybe this is an old session format?"
+msgstr ""
+"Das Projekt enthält keine Metadaten!\n"
+"Eventuell ein altes Projektformat?"
+
+#: session_metadata_dialog.cc:918
+msgid "Import all from:"
+msgstr "Alles importieren von:"
+
+#: session_option_editor.cc:32
+msgid "Session Properties"
+msgstr "Projekteinstellungen"
+
+#: session_option_editor.cc:41
+msgid "Timecode Settings"
+msgstr "Timecode Einstellungen"
+
+#: session_option_editor.cc:45
+msgid "Timecode frames-per-second"
+msgstr "Timecode frames-per-second"
+
+#: session_option_editor.cc:50
+msgid "23.976"
+msgstr "23,976"
+
+#: session_option_editor.cc:51
+msgid "24"
+msgstr "24"
+
+#: session_option_editor.cc:52
+msgid "24.975"
+msgstr "24,976"
+
+#: session_option_editor.cc:53
+msgid "25"
+msgstr "25"
+
+#: session_option_editor.cc:54
+msgid "29.97"
+msgstr "29,97"
+
+#: session_option_editor.cc:55
+msgid "29.97 drop"
+msgstr "29,97 (drop)"
+
+#: session_option_editor.cc:56
+msgid "30"
+msgstr "30"
+
+#: session_option_editor.cc:57
+msgid "30 drop"
+msgstr "30 (drop)"
+
+#: session_option_editor.cc:58
+msgid "59.94"
+msgstr "59,94"
+
+#: session_option_editor.cc:59
+msgid "60"
+msgstr "60"
+
+#: session_option_editor.cc:65
+msgid "Pull-up / pull-down"
+msgstr "Pull-Up / Pull-Down"
+
+#: session_option_editor.cc:70
+msgid "4.1667 + 0.1%"
+msgstr "+4,1667 + 0,1%"
+
+#: session_option_editor.cc:71
+msgid "4.1667"
+msgstr "+4,1667"
+
+#: session_option_editor.cc:72
+msgid "4.1667 - 0.1%"
+msgstr "+4,1667 - 0,1%"
+
+#: session_option_editor.cc:73
+msgid "0.1"
+msgstr "0,1"
+
+#: session_option_editor.cc:74
+msgid "none"
+msgstr "keine"
+
+#: session_option_editor.cc:75
+msgid "-0.1"
+msgstr "-0,1"
+
+#: session_option_editor.cc:76
+msgid "-4.1667 + 0.1%"
+msgstr "-4,1667% + 0,1%"
+
+#: session_option_editor.cc:77
+msgid "-4.1667"
+msgstr "-4,1667"
+
+#: session_option_editor.cc:78
+msgid "-4.1667 - 0.1%"
+msgstr "-4,1667 - 0,1%"
+
+#: session_option_editor.cc:84
+msgid ""
+"Use Video File's FPS Instead of Timecode Value for Timeline and Video "
+"Monitor."
+msgstr ""
+"Benutze FPS aus Videodatei statt des Timecode-Wertes für Zeitleiste und "
+"Videomonitor."
+
+#: session_option_editor.cc:91
+msgid ""
+"Apply Pull-Up/Down to Video Timeline and Video Monitor (Unless using JACK-"
+"sync)."
+msgstr ""
+"Pull-Up/Down auf Video-Zeitleiste und Videomonitor anwenden (außer wenn JACK "
+"Sync verwendet wird)."
+
+#: session_option_editor.cc:96
+msgid "Ext Timecode Offsets"
+msgstr "Ext. Timecode Offsets"
+
+#: session_option_editor.cc:100
+msgid "Slave Timecode offset"
+msgstr "Slave Timecode Offset"
+
+#: session_option_editor.cc:107
+msgid "The specified offset is added to the received timecode (MTC or LTC)."
+msgstr ""
+"Der angegebene Offset wird dem empfangenen Timecode hinzuaddiert (MTC oder "
+"LTC)."
+
+#: session_option_editor.cc:113
+msgid "Timecode Generator offset"
+msgstr "Timecode-Generator Offset"
+
+#: session_option_editor.cc:120
+msgid ""
+"Specify an offset which is added to the generated timecode (so far only LTC)."
+msgstr ""
+"Geben Sie einen Offset an, der dem generierten Timecode hinzuaddiert wird "
+"(derzeit nur LTC)."
+
+#: session_option_editor.cc:124
+msgid "JACK Transport/Time Settings"
+msgstr "JACK Transport/Time Einstellungen"
+
+#: session_option_editor.cc:128
+msgid ""
+"%1 is JACK Time Master (provides Bar|Beat|Tick and other information to JACK)"
+msgstr ""
+"%1 ist JACK Time Master (übergibt Takt|Schlag|Tick und andere Information an "
+"JACK)"
+
+#: session_option_editor.cc:136
+msgid "destructive-xfade-seconds"
+msgstr "destruktive Xfade-Sekunden"
+
+#: session_option_editor.cc:137
+msgid "Destructive crossfade length"
+msgstr "Länge für destruktive Crossfades"
+
+#: session_option_editor.cc:146
+msgid "Region fades active"
+msgstr "Regionen Fade-Ins/Fade-Outs sind aktiv"
+
+#: session_option_editor.cc:153
+msgid "Region fades visible"
+msgstr "Regionen Fade-Ins/Fade-Outs sind sichtbar"
+
+#: session_option_editor.cc:160 session_option_editor.cc:173
+#: session_option_editor.cc:187
+msgid "Media"
+msgstr "Medien"
+
+#: session_option_editor.cc:160
+msgid "Audio file format"
+msgstr "Audio-Dateiformat"
+
+#: session_option_editor.cc:164
+msgid "Sample format"
+msgstr "Sampleformat"
+
+#: session_option_editor.cc:169
+msgid "32-bit floating point"
+msgstr "32-bit floating point"
+
+#: session_option_editor.cc:170
+msgid "24-bit integer"
+msgstr "24-bit integer"
+
+#: session_option_editor.cc:171
+msgid "16-bit integer"
+msgstr "16-bit integer"
+
+#: session_option_editor.cc:177
+msgid "File type"
+msgstr "Dateiformat"
+
+#: session_option_editor.cc:182
+msgid "Broadcast WAVE"
+msgstr "Broadcast WAVE"
+
+#: session_option_editor.cc:183
+msgid "WAVE"
+msgstr "WAVE"
+
+#: session_option_editor.cc:184
+msgid "WAVE-64"
+msgstr "WAVE-64"
+
+#: session_option_editor.cc:189
+msgid "File locations"
+msgstr "Dateipfade"
+
+#: session_option_editor.cc:191
+msgid "Search for audio files in:"
+msgstr "Suche hier nach Audiodateien:"
+
+#: session_option_editor.cc:197
+msgid "Search for MIDI files in:"
+msgstr "Suche hier nach MIDI-Dateien:"
+
+#: session_option_editor.cc:206 session_option_editor.cc:218
+#: session_option_editor.cc:228 session_option_editor.cc:239
+msgid "Filenames"
+msgstr "Dateinamen"
+
+#: session_option_editor.cc:206
+msgid "File Naming"
+msgstr "Dateibenennung"
+
+#: session_option_editor.cc:212
+msgid "Prefix Track number"
+msgstr "Füge Spurnummer vorne ein"
+
+#: session_option_editor.cc:217
+msgid ""
+"Adds the current track number to the beginning of the recorded file name."
+msgstr ""
+"Fügt die momentane Spurnummer am Beginn des Dateinamens der Aufnahme hinzu."
+
+#: session_option_editor.cc:222
+msgid "Prefix Take Name"
+msgstr "Füge Takenamen vorne ein"
+
+#: session_option_editor.cc:227
+msgid "Adds the Take Name to the beginning of the recorded file name."
+msgstr "Fügt den Take-Namen am Beginn des Dateinamens der Aufnahme hinzu."
+
+#: session_option_editor.cc:232
+msgid "Take Name"
+msgstr "Name übernehmen"
+
+#: session_option_editor.cc:245
+msgid ""
+"Track Input Monitoring automatically follows transport state (\"auto-input\")"
+msgstr ""
+"Spur-Eingangs-Monitoring folgt automatisch dem Transportstatus (\"auto-input"
+"\")"
+
+#: session_option_editor.cc:252
+msgid "Use monitor section in this session"
+msgstr "In diesem Projekt eine Monitorsektion verwenden"
+
+#: session_option_editor.cc:257 session_option_editor.cc:259
+#: session_option_editor.cc:266 session_option_editor.cc:273
+#: session_option_editor.cc:280 session_option_editor.cc:282
+#: session_option_editor.cc:289 session_option_editor.cc:296
+#: session_option_editor.cc:303 session_option_editor.cc:310
+#: session_option_editor.cc:312
+msgid "Meterbridge"
+msgstr "Meterbridge"
+
+#: session_option_editor.cc:257
+msgid "Route Display"
+msgstr "Routenanzeige"
+
+#: session_option_editor.cc:261
+msgid "Show Midi Tracks"
+msgstr "Zeige MIDI-Spuren"
+
+#: session_option_editor.cc:268
+msgid "Show Busses"
+msgstr "Zeige Busse"
+
+#: session_option_editor.cc:275
+msgid "Include Master Bus"
+msgstr "Zeige Master-Bus"
+
+#: session_option_editor.cc:280
+msgid "Button Area"
+msgstr "Schaltflächenbereich"
+
+#: session_option_editor.cc:284
+msgid "Rec-enable Button"
+msgstr "Schaltfläche für Aufnahmebereitschaft"
+
+#: session_option_editor.cc:291
+msgid "Mute Button"
+msgstr "Schaltfläche für Stummschaltung"
+
+#: session_option_editor.cc:298
+msgid "Solo Button"
+msgstr "Schaltfläche für Solostatus"
+
+#: session_option_editor.cc:305
+msgid "Monitor Buttons"
+msgstr "Monitor-Knöpfe"
+
+#: session_option_editor.cc:310
+msgid "Name Labels"
+msgstr "Namensfelder"
+
+#: session_option_editor.cc:314
+msgid "Track Name"
+msgstr "Spurname"
+
+#: session_option_editor.cc:325
+msgid "MIDI region copies are independent"
+msgstr "Kopien von MIDI Regionen sind unabhängig"
+
+#: session_option_editor.cc:332
+msgid ""
+"Policy for handling overlapping notes\n"
+" on the same MIDI channel"
+msgstr ""
+"Vorgehen bei überlappenden Noten\n"
+"am selben MIDI-Kanal"
+
+#: session_option_editor.cc:337
+msgid "never allow them"
+msgstr "Niemals erlauben"
+
+#: session_option_editor.cc:338
+msgid "don't do anything in particular"
+msgstr "Nichts bestimmtes tun"
+
+#: session_option_editor.cc:339
+msgid "replace any overlapped existing note"
+msgstr "Überlagerte Note ersetzen"
+
+#: session_option_editor.cc:340
+msgid "shorten the overlapped existing note"
+msgstr "Überlagerte Note kürzen"
+
+#: session_option_editor.cc:341
+msgid "shorten the overlapping new note"
+msgstr "Die überlagernde neue Note kürzen"
+
+#: session_option_editor.cc:342
+msgid "replace both overlapping notes with a single note"
+msgstr "Überlagernde Note mit einer einzelnen ersetzen"
+
+#: session_option_editor.cc:346
+msgid "Glue to bars and beats"
+msgstr "An Takte und Schläge binden"
+
+#: session_option_editor.cc:350
+msgid "Glue new markers to bars and beats"
+msgstr "Neue Marker an Takte und Schläge binden"
+
+#: session_option_editor.cc:357
+msgid "Glue new regions to bars and beats"
+msgstr "Neue Regionen an Takte und Schläge binden"
+
+#: session_option_editor.cc:362
+msgid "Defaults"
+msgstr "Voreinstellungen"
+
+#: session_option_editor.cc:364
+msgid "Use these settings as defaults"
+msgstr "Diese Einstellungen als Voreinstellungen nehmen"
+
+#: sfdb_ui.cc:89 sfdb_ui.cc:109 sfdb_ui.cc:118
+msgid "as new tracks"
+msgstr "als neue Spuren"
+
+#: sfdb_ui.cc:91 sfdb_ui.cc:111
+msgid "to selected tracks"
+msgstr "zu ausgewählten Spuren"
+
+#: sfdb_ui.cc:93 sfdb_ui.cc:113
+msgid "to region list"
+msgstr "zur Liste der Regionen"
+
+#: sfdb_ui.cc:95 sfdb_ui.cc:115
+msgid "as new tape tracks"
+msgstr "als neue Band-Spuren"
+
+#: sfdb_ui.cc:99
+msgid "programming error: unknown import mode string %1"
+msgstr "Programmierfehler: unbekannter Importmodus %1"
+
+#: sfdb_ui.cc:126
+msgid "Auto-play"
+msgstr "Auto-Play"
+
+#: sfdb_ui.cc:134 sfdb_ui.cc:323
+msgid "<b>Sound File Information</b>"
+msgstr "<b>Eigenschaften der Audiodatei</b>"
+
+#: sfdb_ui.cc:146
+msgid "Timestamp:"
+msgstr "Zeitstempel:"
+
+#: sfdb_ui.cc:148
+msgid "Format:"
+msgstr "Format:"
+
+#: sfdb_ui.cc:187 sfdb_ui.cc:652
+msgid "Tags:"
+msgstr "Stichworte:"
+
+#: sfdb_ui.cc:292 sfdb_ui.cc:408
+msgid "Could not read file: %1 (%2)."
+msgstr "Konnte Datei nicht lesen: %1 (%2)."
+
+#: sfdb_ui.cc:296
+msgid "<b>Midi File Information</b>"
+msgstr "<b>Midi Datei Information</b>"
+
+#: sfdb_ui.cc:457
+msgid "Could not access soundfile: "
+msgstr "Konnte auf Audiodatei nicht zugreifen: "
+
+#: sfdb_ui.cc:529
+msgid "SoundFileBox: Could not tokenize string: "
+msgstr "SoundFileBox: Konnte Zeichenkette nicht zerlegen: "
+
+#: sfdb_ui.cc:549 sfdb_ui.cc:551
+msgid "Search"
+msgstr "Suchen"
+
+#: sfdb_ui.cc:575
+msgid "Audio and MIDI files"
+msgstr "Audio- und MIDIdateien"
+
+#: sfdb_ui.cc:578
+msgid "Audio files"
+msgstr "Audiodateien"
+
+#: sfdb_ui.cc:581
+msgid "MIDI files"
+msgstr "MIDI-Dateien"
+
+#: sfdb_ui.cc:584 add_video_dialog.cc:123
+msgid "All files"
+msgstr "Alle Dateien"
+
+#: sfdb_ui.cc:603 add_video_dialog.cc:246
+msgid "Browse Files"
+msgstr "Durchsuchen"
+
+#: sfdb_ui.cc:632
+msgid "Paths"
+msgstr "Pfade"
+
+#: sfdb_ui.cc:641
+msgid "Search Tags"
+msgstr "Stichwortsuche"
+
+#: sfdb_ui.cc:657
+msgid "Sort:"
+msgstr "Sortierung:"
+
+#: sfdb_ui.cc:665
+msgid "Longest"
+msgstr "Längste"
+
+#: sfdb_ui.cc:666
+msgid "Shortest"
+msgstr "Kürzeste"
+
+#: sfdb_ui.cc:667
+msgid "Newest"
+msgstr "Neueste"
+
+#: sfdb_ui.cc:668
+msgid "Oldest"
+msgstr "Ältestes"
+
+#: sfdb_ui.cc:669
+msgid "Most downloaded"
+msgstr "Am häufigsten heruntergeladen"
+
+#: sfdb_ui.cc:670
+msgid "Least downloaded"
+msgstr "Am seltensten heruntergeladen"
+
+#: sfdb_ui.cc:671
+msgid "Highest rated"
+msgstr "Bestbewertetes"
+
+#: sfdb_ui.cc:672
+msgid "Lowest rated"
+msgstr "Am schlechtesten bewertetes"
+
+#: sfdb_ui.cc:677
+msgid "More"
+msgstr "Mehr"
+
+#: sfdb_ui.cc:681
+msgid "Similar"
+msgstr "Ähnlich"
+
+#: sfdb_ui.cc:693
+msgid "ID"
+msgstr "ID"
+
+#: sfdb_ui.cc:694 add_video_dialog.cc:83
+msgid "Filename"
+msgstr "Dateiname"
+
+#: sfdb_ui.cc:696
+msgid "Duration"
+msgstr "Dauer"
+
+#: sfdb_ui.cc:697
+msgid "Size"
+msgstr "Größe"
+
+#: sfdb_ui.cc:698
+msgid "Samplerate"
+msgstr "Samplerate"
+
+#: sfdb_ui.cc:699
+msgid "License"
+msgstr "Lizenz"
+
+#: sfdb_ui.cc:717
+msgid "Search Freesound"
+msgstr "Freesound durchsuchen"
+
+#: sfdb_ui.cc:737
+msgid "Press to import selected files and close this window"
+msgstr ""
+"Drücken Sie hier, um die angewählten Dateien zu importieren und dieses "
+"Fenster zu schließen"
+
+#: sfdb_ui.cc:738
+msgid "Press to import selected files and leave this window open"
+msgstr ""
+"Drücken Sie hier, um die angewählten Dateien zu importieren und dieses "
+"Fenster offen zu lassen"
+
+#: sfdb_ui.cc:739
+msgid "Press to close this window without importing any files"
+msgstr ""
+"Drücken Sie hier, um dieses Fenster zu schließen, ohne Dateien zu importieren"
+
+#: sfdb_ui.cc:935
+msgid "SoundFileBrowser: Could not tokenize string: "
+msgstr "SoundFileBrowser: Konnte Zeichenkete nicht zerlegen:"
+
+#: sfdb_ui.cc:1135
+msgid "%1 more page of 100 results available"
+msgid_plural "%1 more pages of 100 results available"
+msgstr[0] "%1 weitere Seite von 100 Ergebnissen verfügbar"
+msgstr[1] "%1 weitere Seiten von 100 Ergebnissen verfügbar"
+
+#: sfdb_ui.cc:1140
+msgid "No more results available"
+msgstr "Keine weiteren Ergebnisse verfügbar"
+
+#: sfdb_ui.cc:1204
+msgid "B"
+msgstr "B"
+
+#: sfdb_ui.cc:1206
+msgid "kB"
+msgstr "kB"
+
+#: sfdb_ui.cc:1208 sfdb_ui.cc:1210
+msgid "MB"
+msgstr "MB"
+
+#: sfdb_ui.cc:1212
+msgid "GB"
+msgstr "GB"
+
+#: sfdb_ui.cc:1424 sfdb_ui.cc:1737 sfdb_ui.cc:1800 sfdb_ui.cc:1818
+msgid "one track per file"
+msgstr "eine Spur pro Datei"
+
+#: sfdb_ui.cc:1427 sfdb_ui.cc:1801 sfdb_ui.cc:1819
+msgid "one track per channel"
+msgstr "eine Spur pro Kanal"
+
+#: sfdb_ui.cc:1435 sfdb_ui.cc:1803 sfdb_ui.cc:1820
+msgid "sequence files"
+msgstr "Dateien aneinanderreihen"
+
+#: sfdb_ui.cc:1438 sfdb_ui.cc:1808
+msgid "all files in one track"
+msgstr "Alle Dateien in eine Spur"
+
+#: sfdb_ui.cc:1439 sfdb_ui.cc:1802
+msgid "merge files"
+msgstr "Dateien zusammenfügen"
+
+#: sfdb_ui.cc:1445 sfdb_ui.cc:1805
+msgid "one region per file"
+msgstr "eine Region pro Datei"
+
+#: sfdb_ui.cc:1448 sfdb_ui.cc:1806
+msgid "one region per channel"
+msgstr "eine Region pro Kanal"
+
+#: sfdb_ui.cc:1453 sfdb_ui.cc:1807 sfdb_ui.cc:1821
+msgid "all files in one region"
+msgstr "alle Dateien in einer Region"
+
+#: sfdb_ui.cc:1520
+msgid ""
+"One or more of the selected files\n"
+"cannot be used by %1"
+msgstr ""
+"Eine oder mehrere der ausgewählten Dateien\n"
+"können von %1 nicht verwendet werden"
+
+#: sfdb_ui.cc:1664
+msgid "Copy files to session"
+msgstr "Kopiere Dateien in Projekt"
+
+#: sfdb_ui.cc:1681 sfdb_ui.cc:1858
+msgid "file timestamp"
+msgstr "Zeitstempel"
+
+#: sfdb_ui.cc:1682 sfdb_ui.cc:1860
+msgid "edit point"
+msgstr "Arbeitspunkt"
+
+#: sfdb_ui.cc:1683 sfdb_ui.cc:1862
+msgid "playhead"
+msgstr "Positionszeiger"
+
+#: sfdb_ui.cc:1684
+msgid "session start"
+msgstr "Projektanfang"
+
+#: sfdb_ui.cc:1690
+msgid "<b>Add files as ...</b>"
+msgstr "<b>Füge Dateien hinzu als...</b>"
+
+#: sfdb_ui.cc:1712
+msgid "<b>Insert at</b>"
+msgstr "<b>Einfügen bei</b>"
+
+#: sfdb_ui.cc:1725
+msgid "<b>Mapping</b>"
+msgstr "<b>Zuordnung</b>"
+
+#: sfdb_ui.cc:1743
+msgid "<b>Conversion quality</b>"
+msgstr "<b>Konvertierungsqualität:</b>"
+
+#: sfdb_ui.cc:1755
+msgid "<b>Instrument</b>"
+msgstr "<b>Instrument</b>"
+
+#: sfdb_ui.cc:1767 sfdb_ui.cc:1874
+msgid "Best"
+msgstr "bestmöglich"
+
+#: sfdb_ui.cc:1768 sfdb_ui.cc:1876
+msgid "Good"
+msgstr "gut"
+
+#: sfdb_ui.cc:1769 sfdb_ui.cc:1878
+msgid "Quick"
+msgstr "schnell"
+
+#: sfdb_ui.cc:1771
+msgid "Fastest"
+msgstr "Schnellstmöglich"
+
+#: shuttle_control.cc:56
+msgid "Shuttle speed control (Context-click for options)"
+msgstr "Abspielgeschwindigkeit (Rechtsklick für Optionen)"
+
+#: shuttle_control.cc:183
+msgid "Percent"
+msgstr "Prozent"
+
+#: shuttle_control.cc:191
+msgid "Units"
+msgstr "Einheiten"
+
+#: shuttle_control.cc:197 shuttle_control.cc:620
+msgid "Sprung"
+msgstr "Feder"
+
+#: shuttle_control.cc:201 shuttle_control.cc:623
+msgid "Wheel"
+msgstr "Drehrad"
+
+#: shuttle_control.cc:235
+msgid "Maximum speed"
+msgstr "Max. Geschwindigkeit"
+
+#: shuttle_control.cc:579
+msgid "Playing"
+msgstr "Wiedergabe"
+
+#: shuttle_control.cc:594
+#, c-format
+msgid "<<< %+d semitones"
+msgstr "<<< %+d Halbtöne"
+
+#: shuttle_control.cc:596
+#, c-format
+msgid ">>> %+d semitones"
+msgstr ">>> %+d Halbtöne"
+
+#: shuttle_control.cc:601
+msgid "Stopped"
+msgstr "Gestoppt"
+
+#: soundcloud_export_selector.cc:44
+msgid "User Email"
+msgstr "Benutzer Email"
+
+#: soundcloud_export_selector.cc:45
+msgid "Password"
+msgstr "Passwort"
+
+#: soundcloud_export_selector.cc:46
+msgid "Make files public"
+msgstr "Dateien öffentlich machen"
+
+#: soundcloud_export_selector.cc:47
+msgid "Open uploaded files in browser"
+msgstr "Hochgeladene Dateien in Browser öffnen"
+
+#: soundcloud_export_selector.cc:48
+msgid "Make files downloadable"
+msgstr "Dateien herunterladbar machen"
+
+#: soundcloud_export_selector.cc:107
+msgid "%1: %2 of %3 bytes uploaded"
+msgstr "%1: %2 von %3 bytes hochgeladen"
+
+#: splash.cc:73
+msgid "%1 loading ..."
+msgstr "%1 startet ..."
+
+#: speaker_dialog.cc:40
+msgid "Add Speaker"
+msgstr "Lautsprecher hinzufügen"
+
+#: speaker_dialog.cc:41
+msgid "Remove Speaker"
+msgstr "Lautsprecher entfernen"
+
+#: speaker_dialog.cc:63
+msgid "Azimuth:"
+msgstr "Azimut:"
+
+#: startup.cc:68
+msgid ""
+"Use an external mixer or the hardware mixer of your audio interface.\n"
+"%1 will play NO role in monitoring"
+msgstr ""
+"Verwende einen externen Mixer oder den Hardwaremixer der Audiohardware.\n"
+"%1 wird das Monitoring NICHT übernehmen."
+
+#: startup.cc:70
+msgid "Ask %1 to play back material as it is being recorded"
+msgstr "%1 soll laufende Aufnahmen wiedergeben"
+
+#: startup.cc:143
+msgid ""
+"<span size=\"larger\">%1 is a digital audio workstation. You can use it to "
+"record, edit and mix multi-track audio. You can produce your own CDs, mix "
+"video soundtracks, or experiment with new ideas about music and sound. \n"
+"\n"
+"There are a few things that need to be configured before you start using the "
+"program.</span> "
+msgstr ""
+"<span size=\"larger\">%1 ist eine Digital Audio Workstation (DAW). Sie "
+"können damit Mehrspuraufnahmen aufnehmen, editieren und mischen. Sie können "
+"Ihre eigenen CDs produzieren, Video Soundtracks mischen oder einfach mit "
+"neuen Musik- und Klangideen experimentieren.\n"
+"\n"
+"Es gibt ein paar Dinge, die vor dem ersten Programmstart konfiguriert werden "
+"müssen.</span>"
+
+#: startup.cc:169
+msgid "Welcome to %1"
+msgstr "Willkommen bei %1"
+
+#: startup.cc:192
+msgid "Default folder for %1 sessions"
+msgstr "Standardordner für %1 Projekte"
+
+#: startup.cc:198
+msgid ""
+"Each project that you work on with %1 has its own folder.\n"
+"These can require a lot of disk space if you are recording audio.\n"
+"\n"
+"Where would you like new %1 sessions to be stored by default?\n"
+"\n"
+"<i>(You can put new sessions anywhere, this is just a default)</i>"
+msgstr ""
+"Jedes Projekt in %1 hat seinen eigenen Ordner.\n"
+"Diese Ordner können sehr groß werden, wenn Sie aufnehmen.\n"
+"\n"
+"Wo soll %1 neue Projekte standardmäßig abspeichern?\n"
+"\n"
+"<i>(Neue Projekte können überall abgespeichert werden, dies ist nur die "
+"Vorgabe)</i>"
+
+#: startup.cc:221
+msgid "Default folder for new sessions"
+msgstr "Standardordner für neue Projekte"
+
+#: startup.cc:242
+msgid ""
+"While recording instruments or vocals, you probably want to listen to the\n"
+"signal as well as record it. This is called \"monitoring\". There are\n"
+"different ways to do this depending on the equipment you have and the\n"
+"configuration of that equipment. The two most common are presented here.\n"
+"Please choose whichever one is right for your setup.\n"
+"\n"
+"<i>(You can change this preference at any time, via the Preferences dialog)</"
+"i>\n"
+"\n"
+"<i>If you do not understand what this is about, just accept the default.</i>"
+msgstr ""
+"Während der Aufnahme von Instrumenten oder Gesang soll das Signal\n"
+"wahrscheinlich gleichzeitig abgehört und aufgenommen werden.\n"
+"Dies wird \"Monitoring\" genannt. Ausgehend von Ihrer\n"
+"Hardware gibt es verschiedenen Möglichkeiten hierfür.\n"
+"Die zwei meistgenutzten stehen hier zur Auswahl.\n"
+"Bitte wählen Sie, welche Konfiguration Ihren Wünschen entspricht.\n"
+"\n"
+"<i>(Diese Einstellung kann jederzeit über die globalen Einstellungen "
+"geändert werden)</i> \n"
+"\n"
+"<i>Im Zweifelsfall akzeptieren Sie einfach die Voreinstellung.</i>"
+
+#: startup.cc:263
+msgid "Monitoring Choices"
+msgstr "Auswahl des Monitoring"
+
+#: startup.cc:286
+msgid "Use a Master bus directly"
+msgstr "Nutze den Master-Bus direkt"
+
+#: startup.cc:288
+msgid ""
+"Connect the Master bus directly to your hardware outputs. This is preferable "
+"for simple usage."
+msgstr ""
+"Verbinde den Master-Bus direkt mit den Audioausgängen. Wird für einfache "
+"Anwendungen empfohlen."
+
+#: startup.cc:297
+msgid "Use an additional Monitor bus"
+msgstr "Nutze einen zusätzlichen Monitor-Bus"
+
+#: startup.cc:300
+msgid ""
+"Use a Monitor bus between Master bus and hardware outputs for \n"
+"greater control in monitoring without affecting the mix."
+msgstr ""
+"Nutze einen Monitor-Bus zwischen Master-Bus und Audioausgängen, um mehr\n"
+"Möglichkeiten für das Monitoring zu bekommen, ohne den Mix zu beeinflussen."
+
+#: startup.cc:322
+msgid ""
+"<i>You can change this preference at any time via the Preferences dialog.\n"
+"You can also add or remove the monitor section to/from any session.</i>\n"
+"\n"
+"<i>If you do not understand what this is about, just accept the default.</i>"
+msgstr ""
+"<i>Diese Einstellung können Sie jederzeit über den Dialog "
+"Projekteinstellungen \n"
+"ändern. Sie können auch die Monitorsektion in Ihren Projekten hinzufügen \n"
+"oder entfernen.</i>\n"
+"\n"
+"</i>Im Zweifelsfall akzeptieren Sie einfach die Voreinstellung.</i>"
+
+#: startup.cc:333
+msgid "Monitor Section"
+msgstr "Monitorsektion"
+
+#: step_entry.cc:60
+msgid "Step Entry: %1"
+msgstr "Eingabemodus (Step Entry): %1"
+
+#: step_entry.cc:65
+msgid ">beat"
+msgstr ">Schlag"
+
+#: step_entry.cc:66
+msgid ">bar"
+msgstr ">Takt"
+
+#: step_entry.cc:67
+msgid ">EP"
+msgstr ">AP"
+
+#: step_entry.cc:68
+msgid "sustain"
+msgstr "Sustain"
+
+#: step_entry.cc:69
+msgid "rest"
+msgstr "Pause"
+
+#: step_entry.cc:70
+msgid "g-rest"
+msgstr "R-Pause"
+
+#: step_entry.cc:71
+msgid "back"
+msgstr "zurück"
+
+#: step_entry.cc:82 step_entry.cc:85
+msgid "+"
+msgstr "+"
+
+#: step_entry.cc:191
+msgid "Set note length to a whole note"
+msgstr "Notenwert auf ganze Note setzen"
+
+#: step_entry.cc:192
+msgid "Set note length to a half note"
+msgstr "Notenwert auf halbe Note setzen"
+
+#: step_entry.cc:193
+msgid "Set note length to a quarter note"
+msgstr "Notenwert auf Viertelnote setzen"
+
+#: step_entry.cc:194
+msgid "Set note length to a eighth note"
+msgstr "Notenwert auf Achtelnote setzen"
+
+#: step_entry.cc:195
+msgid "Set note length to a sixteenth note"
+msgstr "Notenwert auf Sechzehntelnote setzen"
+
+#: step_entry.cc:196
+msgid "Set note length to a thirty-second note"
+msgstr "Notenwert auf Zweiunddreißigstelnote setzen"
+
+#: step_entry.cc:197
+msgid "Set note length to a sixty-fourth note"
+msgstr "Notenwert auf Vierundsechzigstelnote setzen"
+
+#: step_entry.cc:276
+msgid "Set volume (velocity) to pianississimo"
+msgstr "Lautstärke (velocity) auf pianississimo setzen"
+
+#: step_entry.cc:277
+msgid "Set volume (velocity) to pianissimo"
+msgstr "Lautstärke (velocity) auf pianissimo setzen"
+
+#: step_entry.cc:278
+msgid "Set volume (velocity) to piano"
+msgstr "Lautstärke (velocity) auf piano setzen"
+
+#: step_entry.cc:279
+msgid "Set volume (velocity) to mezzo-piano"
+msgstr "Lautstärke (velocity) auf mezzo-piano setzen"
+
+#: step_entry.cc:280
+msgid "Set volume (velocity) to mezzo-forte"
+msgstr "Lautstärke (velocity) auf mezzo-forte setzen"
+
+#: step_entry.cc:281
+msgid "Set volume (velocity) to forte"
+msgstr "Lautstärke (velocity) auf forte setzen"
+
+#: step_entry.cc:282
+msgid "Set volume (velocity) to fortissimo"
+msgstr "Lautstärke (Velocity) auf fortissimo setzen"
+
+#: step_entry.cc:283
+msgid "Set volume (velocity) to fortississimo"
+msgstr "Lautstärke (Velocity) auf fortississimo setzen"
+
+#: step_entry.cc:331
+msgid "Stack inserted notes to form a chord"
+msgstr "Einen Akkord eingeben (Noten stapeln)"
+
+#: step_entry.cc:332
+msgid "Extend selected notes by note length"
+msgstr "Ausgewählte Noten um Notenwert verlängern"
+
+#: step_entry.cc:333
+msgid "Use undotted note lengths"
+msgstr "Keine punktierten Notenwerte verwenden"
+
+#: step_entry.cc:334
+msgid "Use dotted (* 1.5) note lengths"
+msgstr "Punktierte Notenwerte (* 1,5)"
+
+#: step_entry.cc:335
+msgid "Use double-dotted (* 1.75) note lengths"
+msgstr "Doppelt punktierte Notenwerte (* 1,75)"
+
+#: step_entry.cc:336
+msgid "Use triple-dotted (* 1.875) note lengths"
+msgstr "Dreifach punktierte Notenwerte (* 1,875)"
+
+#: step_entry.cc:337
+msgid "Insert a note-length's rest"
+msgstr "Eine Pause einfügen"
+
+#: step_entry.cc:338
+msgid "Insert a grid-unit's rest"
+msgstr "Eine Pause in der Länge einer Rastereinheit einfügen"
+
+#: step_entry.cc:339
+msgid "Insert a rest until the next beat"
+msgstr "Eine Pause bis zum nächsten Schlag einfügen"
+
+#: step_entry.cc:340
+msgid "Insert a rest until the next bar"
+msgstr "Eine Pause bis zum nächsten Takt einfügen"
+
+#: step_entry.cc:341
+msgid "Insert a bank change message"
+msgstr "MIDI Bank Change einfügen"
+
+#: step_entry.cc:342
+msgid "Insert a program change message"
+msgstr "MIDI Program Change einfügen"
+
+#: step_entry.cc:343 step_entry.cc:700
+msgid "Move Insert Position Back by Note Length"
+msgstr "Um einen Notenwert zurück gehen"
+
+#: step_entry.cc:344 step_entry.cc:698
+msgid "Move Insert Position to Edit Point"
+msgstr "Eingabepunkt zum Arbeitspunkt verschieben"
+
+#: step_entry.cc:401
+msgid "1/Note"
+msgstr "1/Note"
+
+#: step_entry.cc:415
+msgid "Octave"
+msgstr "Oktave"
+
+#: step_entry.cc:598
+msgid "Insert Note A"
+msgstr "Note A Einfügen"
+
+#: step_entry.cc:599
+msgid "Insert Note A-sharp"
+msgstr "Ais einfügen"
+
+#: step_entry.cc:600
+msgid "Insert Note B"
+msgstr "Note H Einfügen"
+
+#: step_entry.cc:601
+msgid "Insert Note C"
+msgstr "Note C Einfügen"
+
+#: step_entry.cc:602
+msgid "Insert Note C-sharp"
+msgstr "Cis einfügen"
+
+#: step_entry.cc:603
+msgid "Insert Note D"
+msgstr "Note D Einfügen"
+
+#: step_entry.cc:604
+msgid "Insert Note D-sharp"
+msgstr "Dis einfügen"
+
+#: step_entry.cc:605
+msgid "Insert Note E"
+msgstr "Note E Einfügen"
+
+#: step_entry.cc:606
+msgid "Insert Note F"
+msgstr "Note F Einfügen"
+
+#: step_entry.cc:607
+msgid "Insert Note F-sharp"
+msgstr "Fis einfügen"
+
+#: step_entry.cc:608
+msgid "Insert Note G"
+msgstr "Note G Einfügen"
+
+#: step_entry.cc:609
+msgid "Insert Note G-sharp"
+msgstr "Gis einfügen"
+
+#: step_entry.cc:611
+msgid "Insert a Note-length Rest"
+msgstr "Eine Pause einfügen"
+
+#: step_entry.cc:612
+msgid "Insert a Snap-length Rest"
+msgstr "Eine Pause in der Länge einer Rastereinheit einfügen"
+
+#: step_entry.cc:614 step_entry.cc:615
+msgid "Move to next octave"
+msgstr "Zu nächster Oktave gehen"
+
+#: step_entry.cc:617
+msgid "Move to Next Note Length"
+msgstr "Zu nächster Notenlänge gehen"
+
+#: step_entry.cc:618
+msgid "Move to Previous Note Length"
+msgstr "Zu voriger Notenlänge gehen"
+
+#: step_entry.cc:620
+msgid "Increase Note Length"
+msgstr "Notenwert verlängern"
+
+#: step_entry.cc:621
+msgid "Decrease Note Length"
+msgstr "Notenwert kürzen"
+
+#: step_entry.cc:623
+msgid "Move to Next Note Velocity"
+msgstr "Zu nächster Velocity gehen"
+
+#: step_entry.cc:624
+msgid "Move to Previous Note Velocity"
+msgstr "Zu voriger Velocity gehen"
+
+#: step_entry.cc:626
+msgid "Increase Note Velocity"
+msgstr "Velocity erhöhen"
+
+#: step_entry.cc:627
+msgid "Decrease Note Velocity"
+msgstr "Velocity verringern"
+
+#: step_entry.cc:629
+msgid "Switch to the 1st octave"
+msgstr "Zur 1. Oktave wechseln"
+
+#: step_entry.cc:630
+msgid "Switch to the 2nd octave"
+msgstr "Zur 2. Oktave wechseln"
+
+#: step_entry.cc:631
+msgid "Switch to the 3rd octave"
+msgstr "Zur 3. Oktave wechseln"
+
+#: step_entry.cc:632
+msgid "Switch to the 4th octave"
+msgstr "Zur 4. Oktave wechseln"
+
+#: step_entry.cc:633
+msgid "Switch to the 5th octave"
+msgstr "Zur 5. Oktave wechseln"
+
+#: step_entry.cc:634
+msgid "Switch to the 6th octave"
+msgstr "Zur 6. Oktave wechseln"
+
+#: step_entry.cc:635
+msgid "Switch to the 7th octave"
+msgstr "Zur 7. Oktave wechseln"
+
+#: step_entry.cc:636
+msgid "Switch to the 8th octave"
+msgstr "Zur 8. Oktave wechseln"
+
+#: step_entry.cc:637
+msgid "Switch to the 9th octave"
+msgstr "Zur 9. Oktave wechseln"
+
+#: step_entry.cc:638
+msgid "Switch to the 10th octave"
+msgstr "Zur 10. Oktave wechseln"
+
+#: step_entry.cc:639
+msgid "Switch to the 11th octave"
+msgstr "Zur 11. Oktave wechseln"
+
+#: step_entry.cc:644
+msgid "Set Note Length to Whole"
+msgstr "Notenwert auf ganze Note setzen"
+
+#: step_entry.cc:646
+msgid "Set Note Length to 1/2"
+msgstr "Notenwert auf halbe Note setzen"
+
+#: step_entry.cc:648
+msgid "Set Note Length to 1/3"
+msgstr "Notenwert auf drittel Note setzen"
+
+#: step_entry.cc:650
+msgid "Set Note Length to 1/4"
+msgstr "Notenwert auf Viertelnote setzen"
+
+#: step_entry.cc:652
+msgid "Set Note Length to 1/8"
+msgstr "Notenwert auf Achtelnote setzen"
+
+#: step_entry.cc:654
+msgid "Set Note Length to 1/16"
+msgstr "Notenwert auf Sechzehntelnote setzen"
+
+#: step_entry.cc:656
+msgid "Set Note Length to 1/32"
+msgstr "Notenwert auf Zweiunddreißigstelnote setzen"
+
+#: step_entry.cc:658
+msgid "Set Note Length to 1/64"
+msgstr "Notenwert auf Vierundsechzigstelnote setzen"
+
+#: step_entry.cc:663
+msgid "Set Note Velocity to Pianississimo"
+msgstr "Lautstärke (velocity) auf pianississimo setzen"
+
+#: step_entry.cc:665
+msgid "Set Note Velocity to Pianissimo"
+msgstr "Lautstärke (velocity) auf pianissimo setzen"
+
+#: step_entry.cc:667
+msgid "Set Note Velocity to Piano"
+msgstr "Lautstärke (velocity) auf piano setzen"
+
+#: step_entry.cc:669
+msgid "Set Note Velocity to Mezzo-Piano"
+msgstr "Lautstärke (velocity) auf mezzo-piano setzen"
+
+#: step_entry.cc:671
+msgid "Set Note Velocity to Mezzo-Forte"
+msgstr "Lautstärke (velocity) auf mezzo-forte setzen"
+
+#: step_entry.cc:673
+msgid "Set Note Velocity to Forte"
+msgstr "Lautstärke (velocity) auf forte setzen"
+
+#: step_entry.cc:675 step_entry.cc:677
+msgid "Set Note Velocity to Fortississimo"
+msgstr "Lautstärke (velocity) auf fortississimo setzen"
+
+#: step_entry.cc:679
+msgid "Toggle Triple Notes"
+msgstr "Triolen an/aus"
+
+#: step_entry.cc:684
+msgid "No Dotted Notes"
+msgstr "Keine punktierten Noten"
+
+#: step_entry.cc:686
+msgid "Toggled Dotted Notes"
+msgstr "Punktierte Noten an/aus"
+
+#: step_entry.cc:688
+msgid "Toggled Double-Dotted Notes"
+msgstr "Doppelt punktierte Noten an/aus"
+
+#: step_entry.cc:690
+msgid "Toggled Triple-Dotted Notes"
+msgstr "Punktierte Triolen an/aus"
+
+#: step_entry.cc:693
+msgid "Toggle Chord Entry"
+msgstr "Akkordeingabe umschalten"
+
+#: step_entry.cc:695
+msgid "Sustain Selected Notes by Note Length"
+msgstr "Ausgewählte Noten ertönen über Notenlänge"
+
+#: stereo_panner.cc:128
+#, c-format
+msgid "L:%3d R:%3d Width:%d%%"
+msgstr "L:%3d R:%3d Breite:%d%%"
+
+#: stereo_panner.cc:271
+msgid "Panner|M"
+msgstr "M"
+
+#: stereo_panner_editor.cc:35
+msgid "Stereo Panner"
+msgstr "Stereo Panner"
+
+#: stereo_panner_editor.cc:49
+msgid "Width"
+msgstr "Breite"
+
+#: strip_silence_dialog.cc:44
+msgid "Strip Silence"
+msgstr "Stille entfernen"
+
+#: strip_silence_dialog.cc:75
+msgid "Minimum length"
+msgstr "Mindestlänge"
+
+#: strip_silence_dialog.cc:83
+msgid "Fade length"
+msgstr "Fade-Länge"
+
+#: tempo_dialog.cc:41 tempo_dialog.cc:57
+msgid "bar:"
+msgstr "Takt:"
+
+#: tempo_dialog.cc:42 tempo_dialog.cc:58
+msgid "beat:"
+msgstr "Schlag:"
+
+#: tempo_dialog.cc:43 tempo_dialog.cc:59
+msgid "Pulse note"
+msgstr "Pulsnote"
+
+#: tempo_dialog.cc:44 tempo_dialog.cc:60
+msgid "Tap tempo"
+msgstr "Tempo tappen"
+
+#: tempo_dialog.cc:77 tempo_dialog.cc:78 tempo_dialog.cc:343
+#: tempo_dialog.cc:344
+msgid "whole"
+msgstr "Ganze"
+
+#: tempo_dialog.cc:79 tempo_dialog.cc:80 tempo_dialog.cc:345
+#: tempo_dialog.cc:346
+msgid "second"
+msgstr "Halbe"
+
+#: tempo_dialog.cc:81 tempo_dialog.cc:82 tempo_dialog.cc:347
+#: tempo_dialog.cc:348
+msgid "third"
+msgstr "Drittel"
+
+#: tempo_dialog.cc:83 tempo_dialog.cc:84 tempo_dialog.cc:349
+#: tempo_dialog.cc:350
+msgid "quarter"
+msgstr "Viertel"
+
+#: tempo_dialog.cc:85 tempo_dialog.cc:86 tempo_dialog.cc:351
+#: tempo_dialog.cc:352
+msgid "eighth"
+msgstr "Achtel"
+
+#: tempo_dialog.cc:87 tempo_dialog.cc:88 tempo_dialog.cc:353
+#: tempo_dialog.cc:354
+msgid "sixteenth"
+msgstr "Sechzehntel"
+
+#: tempo_dialog.cc:89 tempo_dialog.cc:90 tempo_dialog.cc:355
+#: tempo_dialog.cc:356
+msgid "thirty-second"
+msgstr "Zweiunddreissigstel"
+
+#: tempo_dialog.cc:91 tempo_dialog.cc:92 tempo_dialog.cc:357
+#: tempo_dialog.cc:358
+msgid "sixty-fourth"
+msgstr "Vierundsechzigstelnote"
+
+#: tempo_dialog.cc:93 tempo_dialog.cc:94 tempo_dialog.cc:359
+#: tempo_dialog.cc:360
+msgid "one-hundred-twenty-eighth"
+msgstr "Hundertachtundzwanzigstelnote"
+
+#: tempo_dialog.cc:121
+msgid "Beats per minute:"
+msgstr "Schläge pro Minute:"
+
+#: tempo_dialog.cc:155
+msgid "Tempo begins at"
+msgstr "Tempo beginnt bei"
+
+#: tempo_dialog.cc:254
+msgid "incomprehensible pulse note type (%1)"
+msgstr "Unverständlicher Puls-Notentyp (%1)"
+
+#: tempo_dialog.cc:375
+msgid "Note value:"
+msgstr "Notenwert:"
+
+#: tempo_dialog.cc:376
+msgid "Beats per bar:"
+msgstr "Schläge pro Takt:"
+
+#: tempo_dialog.cc:390
+msgid "Meter begins at bar:"
+msgstr "Taktart beginnt bei Takt:"
+
+#: tempo_dialog.cc:503
+msgid "incomprehensible meter note type (%1)"
+msgstr "Unverständlicher Signatur-Notentyp (%1)"
+
+#: theme_manager.cc:67
+msgid "Dark Theme"
+msgstr "Dunkles Thema"
+
+#: theme_manager.cc:68
+msgid "Light Theme"
+msgstr "Helles Thema"
+
+#: theme_manager.cc:69
+msgid "Restore Defaults"
+msgstr "Standards wiederherstellen"
+
+#: theme_manager.cc:70
+msgid "Draw \"flat\" buttons"
+msgstr "Zeichne \"flache\" Schaltflächen"
+
+#: theme_manager.cc:71
+msgid "Blink Rec-Arm buttons"
+msgstr "Aufnahmebereitschaftsknopf blinkt"
+
+#: theme_manager.cc:72
+msgid "Color regions using their track's color"
+msgstr "Färbe Regionen in der Spurfarbe ein"
+
+#: theme_manager.cc:73
+msgid "Show waveform clipping"
+msgstr "Clipping der Wellenform anzeigen"
+
+#: theme_manager.cc:75
+msgid "Waveforms color gradient depth"
+msgstr "Farbverlaufs-Intensität der Wellenform"
+
+#: theme_manager.cc:77
+msgid "Timeline item gradient depth"
+msgstr "Farbverlaufs-Intensität von Zeitleisten-Objekten "
+
+#: theme_manager.cc:78
+msgid "All floating windows are dialogs"
+msgstr "Alle schwebenden Fenster sind Dialoge"
+
+#: theme_manager.cc:79
+msgid "Transient windows follow front window."
+msgstr "Transientenfenster folgt Hauptfenster"
+
+#: theme_manager.cc:80
+msgid "Icon Set"
+msgstr "Icon-Satz"
+
+#: theme_manager.cc:89
+msgid "Object"
+msgstr "Objekt"
+
+#: theme_manager.cc:165
+msgid "Items"
+msgstr "Objekte"
+
+#: theme_manager.cc:166
+msgid "Palette"
+msgstr "Palette"
+
+#: theme_manager.cc:167
+msgid "Transparency"
+msgstr "Transparenz"
+
+#: theme_manager.cc:197
+msgid ""
+"Mark all floating windows to be type \"Dialog\" rather than using \"Utility"
+"\" for some.\n"
+"This may help with some window managers. This requires a restart of %1 to "
+"take effect"
+msgstr ""
+"Markiere alle schwebenden Fenster als Typ \"Dialog\", statt für einige "
+"\"Utility\"  zu verwenden.\n"
+"Dies kann bei einigen Fenstermanagern helfen. Sie müssen %1 starten, um "
+"diese Option zu aktivieren"
+
+#: theme_manager.cc:201
+msgid ""
+"Make transient windows follow the front window when toggling between the "
+"editor and mixer.\n"
+"This requires a restart of %1 to take effect"
+msgstr ""
+"Kurzlebige Fenster folgen bei Wechsel zwischen Editor und Mixer dem "
+"Vordergrund-Fenster.\n"
+"Dies erfordert einen Neustart von %1."
+
+#: theme_manager.cc:635
+msgid "Color Palette"
+msgstr "Farbpalette"
+
+#: time_axis_view.cc:150
+msgid "Track/Bus name (double click to edit)"
+msgstr "Spur-/Busname (Doppelklick zum Bearbeiten)"
+
+#: time_axis_view_item.cc:333
+msgid "new duration %1 frame is out of bounds for %2"
+msgid_plural "new duration of %1 frames is out of bounds for %2"
+msgstr[0] "neue Dauer %1 Frame ist außerhalb des erlaubten Bereichs für %2"
+msgstr[1] "neue Dauer %1 Frames ist außerhalb des erlaubten Bereichs für %2"
+
+#: time_fx_dialog.cc:62
+msgid "Quick but Ugly"
+msgstr "Schnell, aber hässlich"
+
+#: time_fx_dialog.cc:63
+msgid "Skip Anti-aliasing"
+msgstr "Überspringe Anti-Aliasing"
+
+#: time_fx_dialog.cc:64
+msgid "Contents:"
+msgstr "Inhalt:"
+
+#: time_fx_dialog.cc:65
+msgid "Minimize time distortion"
+msgstr "zeitliche Verzerrung minimieren"
+
+#: time_fx_dialog.cc:66
+msgid "Preserve Formants"
+msgstr "Formanten beibehalten"
+
+#: time_fx_dialog.cc:71
+msgid "TimeFXDialog"
+msgstr "TimeFXDialog"
+
+#: time_fx_dialog.cc:74
+msgid "Pitch Shift Audio"
+msgstr "Tonhöhe ändern"
+
+#: time_fx_dialog.cc:76
+msgid "Time Stretch Audio"
+msgstr "Time Stretch Audio"
+
+#: time_fx_dialog.cc:104 transpose_dialog.cc:41
+msgid "Octaves:"
+msgstr "Oktaven:"
+
+#: time_fx_dialog.cc:109 transpose_dialog.cc:46
+msgid "Semitones:"
+msgstr "Halbtöne:"
+
+#: time_fx_dialog.cc:114
+msgid "Cents:"
+msgstr "Cents:"
+
+#: time_fx_dialog.cc:122
+msgid "Time|Shift"
+msgstr "Tonhöhe ändern"
+
+#: time_fx_dialog.cc:146 time_fx_dialog.cc:149
+msgid "TimeFXButton"
+msgstr "TimeFXButton"
+
+#: time_fx_dialog.cc:154
+msgid "Stretch/Shrink"
+msgstr "Strecken/Stauchen"
+
+#: time_fx_dialog.cc:164
+msgid "<b>Progress</b>"
+msgstr "<b>Fortschritt</b>"
+
+#: time_info_box.cc:124
+msgid "Start recording at auto-punch start"
+msgstr "Aufnahme am Anfang des Punchbereichs starten"
+
+#: time_info_box.cc:125
+msgid "Stop recording at auto-punch end"
+msgstr "Aufnahme am Ende des Punchbereichs beenden"
+
+#: time_selection.cc:40
+msgid "programming error: request for non-existent audio range (%1)!"
+msgstr ""
+"Programmierfehler: nichtexistenter Audiobereich wurde angefordert (%1)!"
+
+#: transform_dialog.cc:39
+msgid "this note's"
+msgstr "dieser Note"
+
+#: transform_dialog.cc:40
+msgid "the previous note's"
+msgstr "der vorigen Note"
+
+#: transform_dialog.cc:41
+msgid "this note's index"
+msgstr "Index der Note"
+
+#: transform_dialog.cc:42
+msgid "the number of notes"
+msgstr "Anzahl der Noten"
+
+#: transform_dialog.cc:43
+msgid "exactly"
+msgstr "genau"
+
+#: transform_dialog.cc:44
+msgid "a random number from"
+msgstr "eine zufällige Nummer von"
+
+#: transform_dialog.cc:55
+msgid "equal steps from"
+msgstr "gleiche Schritte von"
+
+#: transform_dialog.cc:58
+msgid "note number"
+msgstr "Notennummer"
+
+#: transform_dialog.cc:59
+msgid "velocity"
+msgstr "Velocity"
+
+#: transform_dialog.cc:60
+msgid "start time"
+msgstr "Beginnzeit"
+
+#: transform_dialog.cc:61
+msgid "length"
+msgstr "Länge"
+
+#: transform_dialog.cc:82 transform_dialog.cc:113
+msgid "Transform"
+msgstr "Transformiere"
+
+#: transform_dialog.cc:91
+msgid "Set "
+msgstr "Setze"
+
+#: transpose_dialog.cc:30
+msgid "Transpose MIDI"
+msgstr "MIDI Transponieren"
+
+#: transpose_dialog.cc:55
+msgid "Transpose"
+msgstr "Transponieren"
+
+#: ui_config.cc:179 ui_config.cc:317
+msgid "Loading default ui configuration file %1"
+msgstr "lade voreingestellte UI-Konfigurationsdatei %1"
+
+#: ui_config.cc:182 ui_config.cc:320
+msgid "cannot read default ui configuration file \"%1\""
+msgstr "Kann die voreingestellte UI-Konfigurationsdatei \"%1\" nicht lesen"
+
+#: ui_config.cc:185 ui_config.cc:325
+msgid "default ui configuration file \"%1\" not loaded successfully."
+msgstr ""
+"Die voreingestellte UI-Konfigurationsdatei \"%1\" konnte nicht geladen "
+"werden."
+
+#: ui_config.cc:193
+msgid "Could not find default UI configuration file %1"
+msgstr "Konnte UI-Konfigurationsdatei für Voreinstellungen %1 nicht finden"
+
+#: ui_config.cc:236
+msgid "Loading color file %1"
+msgstr "Lade Farbdatei %1"
+
+#: ui_config.cc:239
+msgid "cannot read color file \"%1\""
+msgstr "kann Farbdatei \"%1\" nicht lesen"
+
+#: ui_config.cc:244
+msgid "color file \"%1\" not loaded successfully."
+msgstr "Farbdatei \"%1\" konnte nicht geladen werden."
+
+#: ui_config.cc:250
+msgid "Color file %1 not found"
+msgstr "Farbdatei %1 nicht gefunden"
+
+#: ui_config.cc:299 ui_config.cc:378
+msgid "Color file %1 not saved"
+msgstr "Farbdatei %1 nicght gespeichert"
+
+#: ui_config.cc:334
+msgid "Loading user ui configuration file %1"
+msgstr "Lade benutzerdefinierte UI-Konfigurationsdatei %1"
+
+#: ui_config.cc:337
+msgid "cannot read ui configuration file \"%1\""
+msgstr "kann die UI-Konfigurationsdatei \"%1\" nicht lesen"
+
+#: ui_config.cc:342
+msgid "user ui configuration file \"%1\" not loaded successfully."
+msgstr ""
+"Die benutzerdefinierte UI-Konfigurationsdatei \"%1\" konnte nicht geladen "
+"werden."
+
+#: ui_config.cc:350
+msgid "could not find any ui configuration file, canvas will look broken."
+msgstr ""
+"Konnte keine UI-Konfigurationsdatei finden, die Arbeitsfläche wird nicht "
+"korrekt dargestellt werden."
+
+#: ui_config.cc:368
+msgid "Config file %1 not saved"
+msgstr "Konfigurationsdatei %1 nicht gespeichert"
+
+#: ui_config.cc:609
+msgid "Color %1 not found"
+msgstr "Farbe %1 nicht gefunden"
+
+#: ui_config.cc:679
+msgid "Unable to find UI style file %1 in search path %2. %3 will look strange"
+msgstr ""
+"Kann den UI-Stil Datei %1 im Suchpfad %2 nicht finden. %3 wird merkwürdig "
+"aussehen"
+
+#: utils.cc:117 utils.cc:160
+msgid "bad XPM header %1"
+msgstr "Fehlerhafter XPM Header %1"
+
+#: utils.cc:577
+msgid "cannot find XPM file for %1"
+msgstr "Konnte XPM-Datei für %1 nicht finden"
+
+#: utils.cc:597 utils.cc:627 utils.cc:641
+msgid "default"
+msgstr "voreingestellt"
+
+#: utils.cc:642
+msgid "icon \"%1\" not found for icon set \"%2\", fallback to default"
+msgstr ""
+"Icon \"%1\" wurde im Icon-Satz \"%2\" nicht gefunden, greife auf "
+"Voreinstellung zurück"
+
+#: utils.cc:649
+msgid "cannot find icon image for %1 using %2"
+msgstr "Konnte Icon-Bild für %1 unter %2 nicht finden"
+
+#: utils.cc:666 utils.cc:682
+msgid "Caught exception while loading icon named %1"
+msgstr ""
+"Während des Ladens des Icons mit dem Namen %1 trat ein Ausnahmefehler auf"
+
+#: add_video_dialog.cc:54
+msgid "Set Video Track"
+msgstr "Videospur-Einstellungen"
+
+#: add_video_dialog.cc:62
+msgid "Open Video Monitor Window"
+msgstr "Videomonitorfenster öffnen"
+
+#: add_video_dialog.cc:63
+msgid "Adjust Session Framerate to Match Video Framerate"
+msgstr "Projekt-Framerate an Video-Framerate anpassen"
+
+#: add_video_dialog.cc:65
+msgid "Reload docroot"
+msgstr "docroot neu laden"
+
+#: add_video_dialog.cc:120
+msgid "Video files"
+msgstr "Videodateien"
+
+#: add_video_dialog.cc:149
+msgid "<b>Video Information</b>"
+msgstr "<b>Videoinformationen</b>"
+
+#: add_video_dialog.cc:152
+msgid "Start:"
+msgstr "Start:"
+
+#: add_video_dialog.cc:158
+msgid "Frame rate:"
+msgstr "Framerate:"
+
+#: add_video_dialog.cc:161
+msgid "Aspect Ratio:"
+msgstr "Seitenverhältnis:"
+
+#: add_video_dialog.cc:244
+msgid "VideoServerIndex"
+msgstr "VideoServerIndex"
+
+#: add_video_dialog.cc:675
+msgid " %1 fps"
+msgstr " %1 fps"
+
+#: video_timeline.cc:472
+msgid ""
+"Parsing video file info failed. Is the Video Server running? Is the file "
+"readable by the Video Server? Does the docroot match? Is it a video file?"
+msgstr ""
+"Fehler beim Parsen der Videodatei. Läuft der Videoserver? Ist die Datei für "
+"den Videoserver lesbar? Ist die docroot passend eingestellt? Ist die Datei "
+"tatsächlich eine Videodatei?"
+
+#: video_timeline.cc:510
+msgid ""
+"Failed to set session-framerate: '%1' does not have a corresponding option "
+"setting in %2."
+msgstr ""
+"Setzen der Projektframerate fehlgeschlagen: '%1' hat keine entsprechende "
+"Einstellungsoption in %2."
+
+#: video_timeline.cc:518
+msgid ""
+"Video file's framerate is not equal to %1 session timecode's framerate: '%2' "
+"vs '%3'"
+msgstr ""
+"Framerate der Videodatei entspricht nicht der Framerate des Timecodes im %1-"
+"Projekt: '%2' vs. '%3'"
+
+#: video_timeline.cc:591
+msgid ""
+"Video-server docroot mismatch. %1: '%2', video-server: '%3'. This usually "
+"means that the video server was not started by %1 and uses a different "
+"document-root."
+msgstr ""
+"Docroot des Videoserver stimmt nicht überein. %1: '%2', Videoserver: '%3'. "
+"Das bedeutet üblicherweise, dass der Videoserver nicht von %1 gestartet "
+"wurde und einen anderen Dokumenten-Wurzelpfad verwendet."
+
+#: video_timeline.cc:728
+msgid ""
+"Video-monitor 'xjadeo' was not found. Please install http://xjadeo.sf.net/ "
+"(a custom path to xjadeo can be specified by setting the XJREMOTE "
+"environment variable. It should point to an application compatible with "
+"xjadeo's remote-control interface 'xjremote').\n"
+"\n"
+"see also http://manual.ardour.org/video-timeline/setup/"
+msgstr ""
+"Der Videomonitor 'xjadeo' wurde nicht gefunden. Bitte installieren Sie "
+"http://xjadeo.sf.net/ (ein benutzerspezifischer Pfad für xjadeo kann durch "
+"Setzen der Umgebungsvariablen XJREMOTE angegeben werden. Er sollte auf ein "
+"Programm zeigen, das zu dem Fernsteuerungsprotokoll 'xjremote' von xjadeo "
+"kompatibel ist).\n"
+"\n"
+"Siehe auch http://manual.ardour.org/video-timeline/setup/"
+
+#: video_timeline.cc:743
+msgid "Video-monitor 'xjadeo' cannot be launched."
+msgstr "Videomonitor 'xjadeo' kann nicht gestartet werden."
+
+#: video_timeline.cc:769
+msgid ""
+"Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.8.0 or "
+"later. http://xjadeo.sf.net/"
+msgstr ""
+"Videomonitor 'xjadeo' ist zu alt. Bitte installieren Sie xjadeo in Version "
+"0.8.0 oder "
+"höher. http://xjadeo.sf.net/"
+
+#: video_monitor.cc:285
+msgid "Video Monitor: File Not Found."
+msgstr "Videomonitor: Datei nicht gefunden."
+
+#: transcode_ffmpeg.cc:56
+msgid ""
+"No ffprobe or ffmpeg executables could be found on this system.\n"
+"Video import and export is not possible until you install those tools.\n"
+"%1 requires ffmpeg and ffprobe from ffmpeg.org - version 1.1 or newer.\n"
+"\n"
+"The tools are included with the %1 releases from ardour.org and also "
+"available with the video-server at http://x42.github.com/harvid/\n"
+"\n"
+"Important: the files need to be installed in $PATH and named ffmpeg_harvid "
+"and ffprobe_harvid.\n"
+"If you already have a suitable ffmpeg installation on your system, we "
+"recommend creating symbolic links from ffmpeg to ffmpeg_harvid and from "
+"ffprobe to ffprobe_harvid.\n"
+"\n"
+"see also http://manual.ardour.org/video-timeline/setup/"
+msgstr ""
+"Die Programme ffprobe oder ffmpeg konnten auf diesem System nicht gefunden "
+"werden.\n"
+"Bis diese Werkzeuge installiert sind, ist Videoexport nicht möglich.\n"
+"%1 benötigt ffmpeg und ffprobe von ffmpeg.org in der Version 1.1 oder "
+"neuer.\n"
+"\n"
+"Diese Werkzeuge sind in den %1-Paketen von ardour.org inkludiert und auch "
+"mit dem Videoserver auf http://x42.github.com/harvid/ erhältlich.\n"
+"\n"
+"Wichtig:  die Dateien müssen in $PATH installiert sein und die Namen "
+"ffmpeg_harvid und ffprobe_harvid.\n"
+"Falls Sie bereits eine ffmpeg Installation auf Ihrem System haben, empfehlen "
+"wir, symbolische Links von ffmpeg zu ffmpeg_harvid und von ffprobe zu "
+"ffprobe_harvid anzulegen.\n"
+"\n"
+"Siehe auch http://manual.ardour.org/video-timeline/setup/"
+
+#: transcode_video_dialog.cc:56
+msgid "Transcode/Import Video File "
+msgstr "Videodatei transkodieren/importieren"
+
+#: transcode_video_dialog.cc:58
+msgid "Output File:"
+msgstr "Ausgabedatei:"
+
+#: transcode_video_dialog.cc:61 export_video_dialog.cc:81
+msgid "Abort"
+msgstr "Abbruch"
+
+#: transcode_video_dialog.cc:63
+msgid "Height = "
+msgstr "Höhe ="
+
+#: transcode_video_dialog.cc:66
+msgid "Manual Override"
+msgstr "Manuelle Eingabe"
+
+#: transcode_video_dialog.cc:70 export_video_dialog.cc:99
+msgid "Debug Mode: Print ffmpeg command and output to stdout."
+msgstr "Debug-Modus: gibt die ffmpeg-Befehlszeile und -Ausgabe an stdout aus."
+
+#: transcode_video_dialog.cc:107
+msgid "<b>File Information</b>"
+msgstr "<b>Dateiinformationen</b>"
+
+#: transcode_video_dialog.cc:113
+msgid ""
+"No ffprobe or ffmpeg executables could be found on this system. Video Import "
+"is not possible until you install those tools. See the Log window for more "
+"information."
+msgstr ""
+"Die Programme ffprobe oder ffmpeg konnten auf diesem System nicht gefunden "
+"werden. Bis diese Werkzeuge installiert sind, ist Videoimport nicht möglich. "
+"Sehen Sie im Log-Fenster nach weiteren Informationen."
+
+#: transcode_video_dialog.cc:120
+msgid ""
+"File-info can not be read. Most likely '%1' is not a valid video-file or an "
+"unsupported video codec or format."
+msgstr ""
+"Dateiinformationen können nicht gelesen werden. Vermutlich ist '%1' keine "
+"gültige Videodatei, oder enthält einen nicht unterstützten Videocodec bzw. "
+"ein nicht unterstütztes Videoformat."
+
+#: transcode_video_dialog.cc:137
+msgid "FPS:"
+msgstr "FPS:"
+
+#: transcode_video_dialog.cc:139
+msgid "Duration:"
+msgstr "Dauer:"
+
+#: transcode_video_dialog.cc:141
+msgid "Codec:"
+msgstr "Codec:"
+
+#: transcode_video_dialog.cc:143
+msgid "Geometry:"
+msgstr "Geometrie:"
+
+#: transcode_video_dialog.cc:158
+msgid "??"
+msgstr "??"
+
+#: transcode_video_dialog.cc:179
+msgid "<b>Import Settings</b>"
+msgstr "<b>Importeinstellungen</b>"
+
+#: transcode_video_dialog.cc:186
+msgid "Reference From Current Location (Previously Transcoded Files Only)"
+msgstr ""
+"Referenz von momentaner Position (vorher nur von transkodierten Dateien)"
+
+#: transcode_video_dialog.cc:187
+msgid "Import/Transcode Video to Session"
+msgstr "Video ins Projekt transkodieren/importieren"
+
+#: transcode_video_dialog.cc:190 transcode_video_dialog.cc:200
+msgid "Do Not Import Video (Audio Import Only)"
+msgstr "Video nicht importieren (nur Audio)"
+
+#: transcode_video_dialog.cc:210
+msgid "Do Not Import Video"
+msgstr "Video nicht importieren"
+
+#: transcode_video_dialog.cc:226
+msgid "Scale Video: Width = "
+msgstr "Video skalieren: Breite = "
+
+#: transcode_video_dialog.cc:233
+msgid "Original Width"
+msgstr "Originalbreite"
+
+#: transcode_video_dialog.cc:248
+msgid "Bitrate (KBit/s):"
+msgstr "Bitrate (KBit/s):"
+
+#: transcode_video_dialog.cc:253
+msgid "Extract Audio:"
+msgstr "Audio extrahieren:"
+
+#: transcode_video_dialog.cc:258
+msgid "No Audio Track Present"
+msgstr "Keine Audiospur"
+
+#: transcode_video_dialog.cc:261
+msgid "Do Not Extract Audio"
+msgstr "Audio nicht extrahieren"
+
+#: transcode_video_dialog.cc:376
+msgid "Extracting Audio.."
+msgstr "Extrahiere Audio..."
+
+#: transcode_video_dialog.cc:379
+msgid "Audio Extraction Failed."
+msgstr "Extrahieren des Audio gescheitert."
+
+#: transcode_video_dialog.cc:405
+msgid "Transcoding Video.."
+msgstr "Transkodiere Video.."
+
+#: transcode_video_dialog.cc:439
+msgid "Transcoding Failed."
+msgstr "Transkodieren gescheitert"
+
+#: transcode_video_dialog.cc:529
+msgid "Save Transcoded Video File"
+msgstr "Sichere transkodierte Videodatei"
+
+#: video_server_dialog.cc:52
+msgid "Launch Video Server"
+msgstr "Video-Server starten"
+
+#: video_server_dialog.cc:53
+msgid "Server Executable:"
+msgstr "Server-Datei:"
+
+#: video_server_dialog.cc:55
+msgid "Server Docroot:"
+msgstr "Server Docroot:"
+
+#: video_server_dialog.cc:61
+msgid "Don't show this dialog again. (Reset in Edit->Preferences)."
+msgstr ""
+"Diesen Dialog nicht mehr anzeigen (kann in Einstellungen geändert werden)."
+
+#: video_server_dialog.cc:97
+msgid ""
+"The external video server 'harvid' can not be found.\n"
+"The tool is included with the %1 releases from ardour.org, alternatively you "
+"can download it from http://x42.github.com/harvid/ or acquire it from your "
+"distribution.\n"
+"\n"
+"see also http://manual.ardour.org/video-timeline/setup/"
+msgstr "key"
+
+#: video_server_dialog.cc:129
+msgid "Listen Address:"
+msgstr "Eingehende Adresse:"
+
+#: video_server_dialog.cc:134
+msgid "Listen Port:"
+msgstr "Eingehender Port:"
+
+#: video_server_dialog.cc:139
+msgid "Cache Size:"
+msgstr "Cachegröße"
+
+#: video_server_dialog.cc:145
+msgid ""
+"%1 relies on an external video server for the videotimeline.\n"
+"The server configured in Edit -> Preferences -> Video is not reachable.\n"
+"Do you want %1 to launch 'harvid' on this machine?"
+msgstr ""
+"%1 benötigt einen externen Videoserver für die Video-Zeitleiste.\n"
+"Der in Bearbeiten -> Globale Einstellungen -> Video konfigurierte Server ist "
+"nicht erreichbar.\n"
+"Möchten Sie, daß %1 \"harvid\" auf diesem Computer startet?"
+
+#: video_server_dialog.cc:189
+msgid "Set Video Server Executable"
+msgstr "Setze Video-Serverpfad"
+
+#: video_server_dialog.cc:209
+msgid "Server docroot"
+msgstr "Server-docroot"
+
+#: utils_videotl.cc:60
+msgid "Destination is outside Video Server's docroot. "
+msgstr "Ziel ist ausserhalb der docroot des Videoservers."
+
+#: utils_videotl.cc:61
+msgid ""
+"The destination file path is outside of the Video Server's docroot. The file "
+"will not be readable by the Video Server. Do you still want to continue?"
+msgstr ""
+"Der Dateipfad des Zieles befindet sich ausserhalb der docroot des "
+"Videoservers. Die Datei wird für den Videoserver nicht lesbar sein. Wollen "
+"Sie wirklich fortfahren?"
+
+#: utils_videotl.cc:64
+msgid "Continue"
+msgstr "Fortfahren"
+
+#: utils_videotl.cc:70
+msgid "Confirm Overwrite"
+msgstr "Bestätige das Überschreiben"
+
+#: utils_videotl.cc:71
+msgid "A file with the same name already exists.  Do you want to overwrite it?"
+msgstr ""
+"Eine Datei mit diesem Namen existiert bereits. Wollen Sie sie überschreiben?"
+
+#: utils_videotl.cc:81 utils_videotl.cc:97
+msgid "Cannot create video folder \"%1\" (%2)"
+msgstr "Kann Videoordner \"%1\" nicht erstellen (%2)"
+
+#: export_video_dialog.cc:67
+msgid "Export Video File "
+msgstr "Exportiere Videodatei"
+
+#: export_video_dialog.cc:78
+msgid "Video:"
+msgstr "Video:"
+
+#: export_video_dialog.cc:83
+msgid "Scale Video (W x H):"
+msgstr "Skaliere Video (W x H):"
+
+#: export_video_dialog.cc:84
+msgid "Retain Aspect"
+msgstr "Seitenverhältnis beibehalten"
+
+#: export_video_dialog.cc:89
+msgid "Set Aspect Ratio:"
+msgstr "Seitenverhältnis:"
+
+#: export_video_dialog.cc:90
+msgid "Normalize Audio"
+msgstr "Audio normalisieren"
+
+#: export_video_dialog.cc:91
+msgid "2 Pass Encoding"
+msgstr "Enkodiere in 2 Durchgängen"
+
+#: export_video_dialog.cc:92
+msgid "Codec Optimizations:"
+msgstr "Codec-Optimierungen:"
+
+#: export_video_dialog.cc:94
+msgid "Deinterlace"
+msgstr "Deinterlacing anwenden"
+
+#: export_video_dialog.cc:95
+msgid "Use [2] B-frames (MPEG 2 or 4 only)"
+msgstr "Verwende [2] B-frames (nur MPEG 2 oder 4)"
+
+#: export_video_dialog.cc:96
+msgid "Override FPS (Default is to retain FPS from the input video file):"
+msgstr "FPS erzwingen (Voreinstellung: FPS der Videodatei wird beibehalten):"
+
+#: export_video_dialog.cc:97
+msgid "Include Session Metadata"
+msgstr "Projekt-Metadaten verwenden"
+
+#: export_video_dialog.cc:115
+msgid ""
+"No ffprobe or ffmpeg executables could be found on this system. Video Export "
+"is not possible until you install those tools. See the Log window for more "
+"information."
+msgstr ""
+"Die Programme ffprobe oder ffmpeg konnten auf diesem System nicht gefunden "
+"werden. Bis diese Werkzeuge installiert sind, ist Videoexport nicht möglich. "
+"Sehen Sie im Log-Fenster nach weiteren Informationen."
+
+#: export_video_dialog.cc:126
+msgid "<b>Output:</b> (file extension defines format)"
+msgstr "<b>Ausgabe:</b> (Dateierweiterung definiert das Format)"
+
+#: export_video_dialog.cc:136
+msgid "<b>Input Video:</b>"
+msgstr "<b>Eingabevideo:</b>"
+
+#: export_video_dialog.cc:147
+msgid "Audio:"
+msgstr "Audio:"
+
+#: export_video_dialog.cc:149
+msgid "Master Bus"
+msgstr "Masterbus"
+
+#: export_video_dialog.cc:154
+msgid "from the %1 session's start to the session's end"
+msgstr "von %1 Projektbeginn bis -ende"
+
+#: export_video_dialog.cc:157
+msgid "<b>Settings:</b>"
+msgstr "<b>Einstellungen:</b>"
+
+#: export_video_dialog.cc:165
+msgid "Range:"
+msgstr "Bereich:"
+
+#: export_video_dialog.cc:171
+msgid "Video Codec:"
+msgstr "Videocodec:"
+
+#: export_video_dialog.cc:174
+msgid "Video KBit/s:"
+msgstr "Video KBit/s:"
+
+#: export_video_dialog.cc:177
+msgid "Audio Codec:"
+msgstr "Audiocodec:"
+
+#: export_video_dialog.cc:180
+msgid "Audio KBit/s:"
+msgstr "Audio KBit/s:"
+
+#: export_video_dialog.cc:183
+msgid "Audio Samplerate:"
+msgstr "Audiosamplerate:"
+
+#: export_video_dialog.cc:218 export_video_dialog.cc:227
+#: export_video_dialog.cc:810 export_video_dialog.cc:813
+msgid "(default for format)"
+msgstr "(Voreinstellung für Format)"
+
+#: export_video_dialog.cc:238 export_video_dialog.cc:251
+#: export_video_dialog.cc:817 export_video_dialog.cc:826
+msgid "(default)"
+msgstr "(Voreinstellung)"
+
+#: export_video_dialog.cc:252 export_video_dialog.cc:820
+msgid "(retain)"
+msgstr "(beibehalten)"
+
+#: export_video_dialog.cc:344
+msgid "from 00:00:00:00 to the video's end"
+msgstr "von 00:00:00:00 bis Videoende"
+
+#: export_video_dialog.cc:346
+msgid "from the video's start to the video's end"
+msgstr "von Videostart bis Videoende"
+
+#: export_video_dialog.cc:349
+msgid "Selected range"
+msgstr "Ausgewählter Bereich"
+
+#: export_video_dialog.cc:569
+msgid "Normalizing audio"
+msgstr "Audio normalisieren"
+
+#: export_video_dialog.cc:573
+msgid "Exporting audio"
+msgstr "Exportiere Audio"
+
+#: export_video_dialog.cc:628
+msgid "Exporting Audio..."
+msgstr "Exportiere Audio..."
+
+#: export_video_dialog.cc:685
+msgid ""
+"Export Video: Cannot query duration of video-file, using duration from "
+"timeline instead."
+msgstr ""
+"Exportiere Video: Kann die Dauer der Videodatei nicht eruieren, verwende "
+"statt dessen die Dauer aus der Zeitleiste."
+
+#: export_video_dialog.cc:715
+msgid "Export Video: export-range does not include video."
+msgstr "Video Export: Exportbereich enthält kein Video."
+
+#: export_video_dialog.cc:728
+msgid "Export Video: No Master Out Ports to Connect for Audio Export"
+msgstr ""
+"Exportiere Video: Keine Master-Ausgangsports zum Verbinden für den "
+"Audioexport"
+
+#: export_video_dialog.cc:770
+msgid "Encoding Video..."
+msgstr "Enkodiere Video..."
+
+#: export_video_dialog.cc:790
+msgid "Export Video: Video input file cannot be read."
+msgstr "Exportiere Video: Die Videoquelldatei kann nicht gelesen werden."
+
+#: export_video_dialog.cc:896
+msgid "Encoding Video.. Pass 1/2"
+msgstr "Kodiere Video.. Durchgang 1/2"
+
+#: export_video_dialog.cc:908
+msgid "Encoding Video.. Pass 2/2"
+msgstr "Kodiere Video.. Durchgang 2/2"
+
+#: export_video_dialog.cc:1011
+msgid "Transcoding failed."
+msgstr "Transkodieren fehlgeschlagen."
+
+#: export_video_dialog.cc:1247 export_video_dialog.cc:1267
+msgid "Save Exported Video File"
+msgstr "Sichere exportierte Videodatei"
+
+#: export_video_infobox.cc:33
+msgid "Video Export Info"
+msgstr "Video-Exportinformationen"
+
+#: export_video_infobox.cc:34
+msgid "Do Not Show This Dialog Again (Reset in Edit > Preferences > Video)."
+msgstr ""
+"Diesen Dialog nicht wieder anzeigen (kann in Bearbeiten > Globale "
+"Einstellungen > Video zurückgesetzt werden)."
+
+#: export_video_infobox.cc:46
+msgid "<b>Video Export Info</b>"
+msgstr "<b>Videoexport Informationen</b>"
+
+#: export_video_infobox.cc:51
+msgid ""
+"Video encoding is a non-trivial task with many details.\n"
+"\n"
+"Please see the manual at %1/video-timeline/operations/#export.\n"
+"\n"
+"Open Manual in Browser? "
+msgstr ""
+"Das Kodieren von Video ist eine komplexe Aufgabe mit vielen Details.\n"
+"\n"
+"Lesen Sie bitte darüber im Handbuch unter %1/video-timeline/operations/"
+"#export nach.\n"
+"\n"
+"Handbuch im Browser öffnen? "
diff --git a/gtk2_ardour/po/ru.po b/gtk2_ardour/po/ru.po
index cf4491d..5cfb07a 100644
--- a/gtk2_ardour/po/ru.po
+++ b/gtk2_ardour/po/ru.po
@@ -10,15 +10,15 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Ardour 4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-04-18 20:02+0300\n"
-"PO-Revision-Date: 2015-04-19 00:46+0300\n"
+"POT-Creation-Date: 2015-08-13 09:58+0300\n"
+"PO-Revision-Date: 2015-08-13 10:25+0300\n"
 "Last-Translator: Alexandre Prokoudine <alexandre.prokoudine at gmail.com>\n"
 "Language-Team: русский <>\n"
 "Language: ru\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Gtranslator 2.91.6\n"
+"X-Generator: Gtranslator 2.91.7\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
 "%100>=20) ? 1: 2);\n"
@@ -268,10 +268,14 @@ msgid "Thorsten Wilms"
 msgstr "Thorsten Wilms"
 
 #: about.cc:186
+msgid "Damien Zammit"
+msgstr "Damien Zammit"
+
+#: about.cc:187
 msgid "Grygorii Zharun"
 msgstr "Grygorii Zharun"
 
-#: about.cc:191
+#: about.cc:192
 msgid ""
 "French:\n"
 "\tAlain Fréhel <alain.frehel at free.fr>\n"
@@ -285,7 +289,7 @@ msgstr ""
 "\tMartin Blanchard\n"
 "\tRomain Arnaud <roming22 at gmail.com>\n"
 
-#: about.cc:192
+#: about.cc:193
 msgid ""
 "German:\n"
 "\tKarsten Petersen <kapet at kapet.de>\n"
@@ -305,7 +309,7 @@ msgstr ""
 "\tRichard Oax <richard at pagliacciempire.de>\n"
 "\tRobin Gloster <robin at loc-com.de>\n"
 
-#: about.cc:199
+#: about.cc:200
 msgid ""
 "Italian:\n"
 "\tFilippo Pappalardo <filippo at email.it>\n"
@@ -315,7 +319,7 @@ msgstr ""
 "\tFilippo Pappalardo <filippo at email.it>\n"
 "\tRaffaele Morelli <raffaele.morelli at gmail.com>\n"
 
-#: about.cc:200
+#: about.cc:201
 msgid ""
 "Portuguese:\n"
 "\tRui Nuno Capela <rncbc at rncbc.org>\n"
@@ -323,7 +327,7 @@ msgstr ""
 "Португальский:\n"
 "\tRui Nuno Capela <rncbc at rncbc.org>\n"
 
-#: about.cc:201
+#: about.cc:202
 msgid ""
 "Brazilian Portuguese:\n"
 "\tAlexander da Franca Fernandes <alexander at nautae.eti.br>\n"
@@ -333,7 +337,7 @@ msgstr ""
 "\tAlexander da Franca Fernandes <alexander at nautae.eti.br>\n"
 "\tChris Ross <chris at tebibyte.org>\n"
 
-#: about.cc:203
+#: about.cc:204
 msgid ""
 "Spanish:\n"
 "\t Alex Krohn <alexkrohn at fastmail.fm>\n"
@@ -343,7 +347,7 @@ msgstr ""
 "\t Alex Krohn <alexkrohn at fastmail.fm>\n"
 "\tPablo Fernández <pablo.fbus at gmail.com>\n"
 
-#: about.cc:204
+#: about.cc:205
 msgid ""
 "Russian:\n"
 "\t Igor Blinov <pitstop at nm.ru>\n"
@@ -354,7 +358,7 @@ msgstr ""
 "\tАлександр Прокудин <alexandre.prokoudine at gmail.com>\n"
 "\tАлександр Кольцов <ag1455 at mail.ru>"
 
-#: about.cc:206
+#: about.cc:207
 msgid ""
 "Greek:\n"
 "\t Klearchos Gourgourinis <muadib at in.gr>\n"
@@ -362,7 +366,7 @@ msgstr ""
 "Греческий:\n"
 "\t Klearchos Gourgourinis <muadib at in.gr>\n"
 
-#: about.cc:207
+#: about.cc:208
 msgid ""
 "Swedish:\n"
 "\t Petter Sundlöf <petter.sundlof at gmail.com>\n"
@@ -370,7 +374,7 @@ msgstr ""
 "Шведский:\n"
 "\t Petter Sundlöf <petter.sundlof at gmail.com>\n"
 
-#: about.cc:208
+#: about.cc:209
 msgid ""
 "Polish:\n"
 "\t Piotr Zaryk <pzaryk at gmail.com>\n"
@@ -378,7 +382,7 @@ msgstr ""
 "Польский:\n"
 "\t Piotr Zaryk <pzaryk at gmail.com>\n"
 
-#: about.cc:209
+#: about.cc:210
 msgid ""
 "Czech:\n"
 "\t Pavel Fric <pavelfric at seznam.cz>\n"
@@ -386,7 +390,7 @@ msgstr ""
 "Чешский:\n"
 "\t Pavel Fric <pavelfric at seznam.cz>\n"
 
-#: about.cc:210
+#: about.cc:211
 msgid ""
 "Norwegian:\n"
 "\t Eivind Ødegård\n"
@@ -394,7 +398,7 @@ msgstr ""
 "Норвежский:\n"
 "\t Eivind Ødegård\n"
 
-#: about.cc:211
+#: about.cc:212
 msgid ""
 "Chinese:\n"
 "\t Rui-huai Zhang <zrhzrh at mail.ustc.edu.cn>\n"
@@ -402,15 +406,15 @@ msgstr ""
 "Китайский:\n"
 "\t Rui-huai Zhang <zrhzrh at mail.ustc.edu.cn>\n"
 
-#: about.cc:591
+#: about.cc:592
 msgid "Copyright (C) 1999-2015 Paul Davis\n"
 msgstr "Авторские права (C) 1999-2015 Paul Davis\n"
 
-#: about.cc:595
+#: about.cc:596
 msgid "http://ardour.org/"
 msgstr "http://ardour.org/"
 
-#: about.cc:596
+#: about.cc:597
 msgid ""
 "%1%2\n"
 "(built from revision %3)"
@@ -418,7 +422,7 @@ msgstr ""
 "%1%2\n"
 "(собрано из редакции %3)"
 
-#: about.cc:600
+#: about.cc:601
 msgid "Config"
 msgstr "Конфигурация сборки"
 
@@ -509,23 +513,23 @@ msgid "Insert:"
 msgstr "Вставить:"
 
 #: add_route_dialog.cc:223 add_route_dialog.cc:232 add_route_dialog.cc:306
-#: ardour_ui_ed.cc:539 engine_dialog.cc:238 rc_option_editor.cc:1797
-#: rc_option_editor.cc:1799 rc_option_editor.cc:1801 rc_option_editor.cc:1819
-#: rc_option_editor.cc:1821 rc_option_editor.cc:1829 rc_option_editor.cc:1831
-#: rc_option_editor.cc:1849 rc_option_editor.cc:1862 rc_option_editor.cc:1864
-#: rc_option_editor.cc:1866 rc_option_editor.cc:1911 rc_option_editor.cc:1913
-#: rc_option_editor.cc:1915 rc_option_editor.cc:1923 rc_option_editor.cc:1931
-#: rc_option_editor.cc:1933 rc_option_editor.cc:1941
+#: ardour_ui_ed.cc:548 engine_dialog.cc:240 rc_option_editor.cc:2279
+#: rc_option_editor.cc:2281 rc_option_editor.cc:2283 rc_option_editor.cc:2301
+#: rc_option_editor.cc:2303 rc_option_editor.cc:2311 rc_option_editor.cc:2313
+#: rc_option_editor.cc:2331 rc_option_editor.cc:2344 rc_option_editor.cc:2346
+#: rc_option_editor.cc:2348 rc_option_editor.cc:2393 rc_option_editor.cc:2395
+#: rc_option_editor.cc:2397 rc_option_editor.cc:2405 rc_option_editor.cc:2413
+#: rc_option_editor.cc:2415 rc_option_editor.cc:2423
 msgid "Audio"
 msgstr "Аудио"
 
 #: add_route_dialog.cc:224 add_route_dialog.cc:235 add_route_dialog.cc:307
-#: editor_actions.cc:109 engine_dialog.cc:240 missing_file_dialog.cc:56
-#: rc_option_editor.cc:2076 rc_option_editor.cc:2086 rc_option_editor.cc:2094
-#: rc_option_editor.cc:2102 rc_option_editor.cc:2111 rc_option_editor.cc:2119
-#: rc_option_editor.cc:2127 rc_option_editor.cc:2135 rc_option_editor.cc:2144
-#: rc_option_editor.cc:2153 rc_option_editor.cc:2162 rc_option_editor.cc:2170
-#: rc_option_editor.cc:2178 rc_option_editor.cc:2186 rc_option_editor.cc:2209
+#: editor_actions.cc:109 engine_dialog.cc:242 missing_file_dialog.cc:56
+#: rc_option_editor.cc:2558 rc_option_editor.cc:2568 rc_option_editor.cc:2576
+#: rc_option_editor.cc:2584 rc_option_editor.cc:2593 rc_option_editor.cc:2601
+#: rc_option_editor.cc:2609 rc_option_editor.cc:2617 rc_option_editor.cc:2626
+#: rc_option_editor.cc:2635 rc_option_editor.cc:2644 rc_option_editor.cc:2652
+#: rc_option_editor.cc:2660 rc_option_editor.cc:2668 rc_option_editor.cc:2691
 msgid "MIDI"
 msgstr "MIDI"
 
@@ -552,8 +556,8 @@ msgstr ""
 "Если вы не собираетесь использовать такие плагины, используйте обычные "
 "звуковые и MIDI-дорожки."
 
-#: add_route_dialog.cc:327 add_route_dialog.cc:346 editor_actions.cc:420
-#: editor_rulers.cc:251 time_axis_view.cc:1374
+#: add_route_dialog.cc:327 add_route_dialog.cc:346 editor_actions.cc:431
+#: editor_rulers.cc:251 time_axis_view.cc:1385
 msgid "Normal"
 msgstr "Обычный"
 
@@ -565,7 +569,7 @@ msgstr "Бесслойный"
 msgid "Tape"
 msgstr "Плёночный"
 
-#: add_route_dialog.cc:431 monitor_section.cc:290
+#: add_route_dialog.cc:431 monitor_section.cc:296
 msgid "Mono"
 msgstr "Моно"
 
@@ -597,7 +601,7 @@ msgstr "8 каналов"
 msgid "12 Channel"
 msgstr "3 канала"
 
-#: add_route_dialog.cc:483 mixer_strip.cc:1855 mixer_strip.cc:2263
+#: add_route_dialog.cc:483 mixer_strip.cc:1898 mixer_strip.cc:2306
 msgid "Custom"
 msgstr "На заказ"
 
@@ -671,7 +675,7 @@ msgstr "Нормировать значения"
 msgid "FFT analysis window"
 msgstr "Спектральный анализ"
 
-#: analysis_window.cc:60 editor.cc:1823
+#: analysis_window.cc:60 editor.cc:1835
 msgid "Spectral Analysis"
 msgstr "Спектральный анализ"
 
@@ -679,8 +683,8 @@ msgstr "Спектральный анализ"
 msgid "Track"
 msgstr "Дорожка"
 
-#: analysis_window.cc:68 editor_actions.cc:646 mixer_ui.cc:131
-#: mixer_ui.cc:1854
+#: analysis_window.cc:68 editor_actions.cc:657 mixer_ui.cc:131
+#: mixer_ui.cc:1874
 msgid "Show"
 msgstr "Показать"
 
@@ -688,15 +692,15 @@ msgstr "Показать"
 msgid "Re-analyze data"
 msgstr "Повторно проанализировать данные"
 
-#: ardour_button.cc:1116
+#: ardour_button.cc:820
 msgid "button cannot watch state of non-existing Controllable\n"
 msgstr "Кнопка не может видеть состояние несуществующего управляемого\n"
 
-#: ardour_button.cc:1384
+#: ardour_button.cc:1088
 msgid "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
 msgstr "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
 
-#: ardour_ui.cc:164
+#: ardour_ui.cc:172
 msgid ""
 "%1 %2.x has discovered configuration files from %1 %3.x.\n"
 "\n"
@@ -710,82 +714,82 @@ msgstr ""
 "\n"
 "(%1 придётся перезапустить.)\n"
 
-#: ardour_ui.cc:216 editor_actions.cc:640 region_editor.cc:51
+#: ardour_ui.cc:252 editor_actions.cc:651 region_editor.cc:51
 msgid "Audition"
 msgstr "Контроль"
 
-#: ardour_ui.cc:217 editor_actions.cc:136 mixer_strip.cc:2035
-#: monitor_section.cc:357 rc_option_editor.cc:1951 route_time_axis.cc:252
-#: route_time_axis.cc:2707
+#: ardour_ui.cc:253 editor_actions.cc:136 mixer_strip.cc:2078
+#: monitor_section.cc:376 rc_option_editor.cc:2433 route_time_axis.cc:254
+#: route_time_axis.cc:2739
 msgid "Solo"
 msgstr "Соло"
 
-#: ardour_ui.cc:218 rc_option_editor.cc:741
+#: ardour_ui.cc:254 rc_option_editor.cc:1192
 msgid "Feedback"
 msgstr "Отклик"
 
-#: ardour_ui.cc:224 speaker_dialog.cc:36
+#: ardour_ui.cc:265 speaker_dialog.cc:36
 msgid "Speaker Configuration"
 msgstr "Конфигурация громкоговорителей"
 
-#: ardour_ui.cc:225 keyeditor.cc:53
+#: ardour_ui.cc:266 keyeditor.cc:53
 msgid "Key Bindings"
 msgstr "Клавиатурные комбинации"
 
-#: ardour_ui.cc:226
+#: ardour_ui.cc:267
 msgid "Preferences"
 msgstr "Параметры"
 
-#: ardour_ui.cc:227 ardour_ui.cc:234
+#: ardour_ui.cc:268 ardour_ui.cc:275
 msgid "Add Tracks/Busses"
 msgstr "Добавить дорожки/шины"
 
-#: ardour_ui.cc:228
+#: ardour_ui.cc:269
 msgid "About"
 msgstr "О программе"
 
-#: ardour_ui.cc:229 location_ui.cc:1141 session_option_editor.cc:189
+#: ardour_ui.cc:270 location_ui.cc:1141 session_option_editor.cc:189
 #: session_option_editor.cc:195 session_option_editor.cc:202
 msgid "Locations"
 msgstr "Позиции"
 
-#: ardour_ui.cc:230 route_params_ui.cc:59 route_params_ui.cc:630
+#: ardour_ui.cc:271 route_params_ui.cc:59 route_params_ui.cc:630
 msgid "Tracks and Busses"
 msgstr "Дорожки и шины"
 
-#: ardour_ui.cc:231 engine_dialog.cc:71
+#: ardour_ui.cc:272 engine_dialog.cc:74
 msgid "Audio/MIDI Setup"
 msgstr "Настройка звука и MIDI"
 
-#: ardour_ui.cc:232
+#: ardour_ui.cc:273
 msgid "Video Export Dialog"
 msgstr "Диалог экспорта видео"
 
-#: ardour_ui.cc:233
+#: ardour_ui.cc:274
 msgid "Properties"
 msgstr "Свойства"
 
-#: ardour_ui.cc:235 bundle_manager.cc:264
+#: ardour_ui.cc:276 bundle_manager.cc:264
 msgid "Bundle Manager"
 msgstr "Управление пакетами"
 
-#: ardour_ui.cc:236 big_clock_window.cc:37
+#: ardour_ui.cc:277 big_clock_window.cc:37
 msgid "Big Clock"
 msgstr "Большой счётчик"
 
-#: ardour_ui.cc:237
+#: ardour_ui.cc:278
 msgid "Audio Connections"
 msgstr "Звуковые соединения"
 
-#: ardour_ui.cc:238
+#: ardour_ui.cc:279
 msgid "MIDI Connections"
 msgstr "Соединения MIDI"
 
-#: ardour_ui.cc:247
+#: ardour_ui.cc:293
 msgid "Your configuration files were copied. You can now restart %1."
 msgstr "Ваши файлы с настройками скопированы. Можно перезапустить %1."
 
-#: ardour_ui.cc:486
+#: ardour_ui.cc:519
 msgid ""
 "The audio backend was shutdown because:\n"
 "\n"
@@ -795,7 +799,7 @@ msgstr ""
 "\n"
 "%1"
 
-#: ardour_ui.cc:488
+#: ardour_ui.cc:521
 msgid ""
 "The audio backend has either been shutdown or it\n"
 "disconnected %1 because %1\n"
@@ -807,7 +811,7 @@ msgstr ""
 "работал недостаточно быстро. Попробуйте снова\n"
 "запустить подсистему и сохранить сессию."
 
-#: ardour_ui.cc:512
+#: ardour_ui.cc:545
 msgid ""
 "Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. "
 "Please see the log window for further details."
@@ -815,39 +819,39 @@ msgstr ""
 "Не удалось просканировать плагины Audio Unit. Автоматическое сканирование AU "
 "выключено. Подробности указаны в окне журнала."
 
-#: ardour_ui.cc:513
+#: ardour_ui.cc:546
 msgid "Audio Unit Plugin Scan Failed:"
 msgstr "Не удалось просканировать плагины Audio Unit:"
 
-#: ardour_ui.cc:833
+#: ardour_ui.cc:877
 msgid "NSM server did not announce itself"
 msgstr "Сервер NSM не объявлял о себе"
 
-#: ardour_ui.cc:846
+#: ardour_ui.cc:890
 msgid "NSM: no client ID provided"
 msgstr "NSM: не предоставлен ни один ID-клиент"
 
-#: ardour_ui.cc:853
+#: ardour_ui.cc:897
 msgid "NSM: no session created"
 msgstr "NSM: нет созданной сессии"
 
-#: ardour_ui.cc:876
+#: ardour_ui.cc:920
 msgid "NSM: initialization failed"
 msgstr "NSM: сбой инициализации"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:952
 msgid "Free/Demo Version Warning"
 msgstr "Предупреждение демоверсии"
 
-#: ardour_ui.cc:908
+#: ardour_ui.cc:954
 msgid "Subscribe and support development of %1"
 msgstr "Подписаться и поддержать разработку %1"
 
-#: ardour_ui.cc:909
+#: ardour_ui.cc:955
 msgid "Don't warn me about this again"
 msgstr "Больше не предупреждать"
 
-#: ardour_ui.cc:911
+#: ardour_ui.cc:957
 msgid ""
 "<span weight=\"bold\" size=\"large\">%1</span>\n"
 "\n"
@@ -865,15 +869,15 @@ msgstr ""
 "\n"
 "%4"
 
-#: ardour_ui.cc:912
+#: ardour_ui.cc:958
 msgid "This is a free/demo version of %1"
 msgstr "Это демонстрационная версия %1"
 
-#: ardour_ui.cc:913
+#: ardour_ui.cc:959
 msgid "It will not restore OR save any plugin settings"
 msgstr "Она не сохраняет и не восстанавливает параметры плагинов."
 
-#: ardour_ui.cc:914
+#: ardour_ui.cc:960
 msgid ""
 "If you load an existing session with plugin settings\n"
 "they will not be used and will be lost."
@@ -881,7 +885,7 @@ msgstr ""
 "Если вы загрузите существующую сессию, все собственные \n"
 "параметры плагинов будут сброшены и потеряны при сохранении."
 
-#: ardour_ui.cc:916 plugin_ui.cc:569
+#: ardour_ui.cc:962 plugin_ui.cc:579
 msgid ""
 "To get full access to updates without this limitation\n"
 "consider becoming a subscriber for a low cost every month."
@@ -889,19 +893,19 @@ msgstr ""
 "Чтобы получить полный доступ к обновлениям без ограничений,\n"
 "необходима ежемесячная подписка по низкой цене."
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:972
 msgid "Quit now"
 msgstr "Выйти"
 
-#: ardour_ui.cc:927
+#: ardour_ui.cc:973
 msgid "Continue using %1"
 msgstr "Продолжить работу"
 
-#: ardour_ui.cc:960 startup.cc:345
+#: ardour_ui.cc:1006 startup.cc:346
 msgid "%1 is ready for use"
 msgstr "%1 готов к работе"
 
-#: ardour_ui.cc:1002
+#: ardour_ui.cc:1048
 msgid ""
 "WARNING: Your system has a limit for maximum amount of locked memory. This "
 "might cause %1 to run out of memory before your system runs out of memory. \n"
@@ -916,23 +920,23 @@ msgstr ""
 "Вы можете узнать установленный предел при помощи команды 'ulimit -l'. Обычно "
 "это контролируется в %2."
 
-#: ardour_ui.cc:1019
+#: ardour_ui.cc:1065
 msgid "Do not show this window again"
 msgstr "Больше не показывать это окно"
 
-#: ardour_ui.cc:1063
+#: ardour_ui.cc:1109
 msgid "Don't quit"
 msgstr "Не выходить"
 
-#: ardour_ui.cc:1064
+#: ardour_ui.cc:1110
 msgid "Just quit"
 msgstr "Просто выйти"
 
-#: ardour_ui.cc:1065 ardour_ui.cc:4727
+#: ardour_ui.cc:1111 ardour_ui.cc:4903
 msgid "Save and quit"
 msgstr "Сохранить и выйти"
 
-#: ardour_ui.cc:1075
+#: ardour_ui.cc:1121
 msgid ""
 "%1 was unable to save your session.\n"
 "\n"
@@ -947,11 +951,11 @@ msgstr ""
 "\n"
 "«Просто выйти»."
 
-#: ardour_ui.cc:1125
+#: ardour_ui.cc:1171
 msgid "Unsaved Session"
 msgstr "Сессия не сохранена"
 
-#: ardour_ui.cc:1146
+#: ardour_ui.cc:1192
 msgid ""
 "The session \"%1\"\n"
 "has not been saved.\n"
@@ -969,7 +973,7 @@ msgstr ""
 "\n"
 "Что вы хотите сделать?"
 
-#: ardour_ui.cc:1149
+#: ardour_ui.cc:1195
 msgid ""
 "The snapshot \"%1\"\n"
 "has not been saved.\n"
@@ -987,74 +991,93 @@ msgstr ""
 "\n"
 "Что вы хотите сделать?"
 
-#: ardour_ui.cc:1163
+#: ardour_ui.cc:1209
 msgid "Prompter"
 msgstr "Суфлер"
 
-#: ardour_ui.cc:1275 ardour_ui.cc:1283
+#: ardour_ui.cc:1322 ardour_ui.cc:1330
 msgid "Audio: <span foreground=\"red\">none</span>"
 msgstr "Звук: <span foreground=\"red\">нет</span>"
 
-#: ardour_ui.cc:1287
+#: ardour_ui.cc:1334
 #, c-format
 msgid "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
 msgstr "Звук: <span foreground=\"green\">%.1f КГц / %4.1f мс</span>"
 
-#: ardour_ui.cc:1291
+#: ardour_ui.cc:1338
 #, c-format
 msgid "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
 msgstr "Звук: <span foreground=\"green\">%<PRId64> КГц / %4.1f мс</span>"
 
-#: ardour_ui.cc:1309 export_video_dialog.cc:80
+#: ardour_ui.cc:1356 export_video_dialog.cc:76
 msgid "File:"
 msgstr "Файл:"
 
-#: ardour_ui.cc:1313
+#: ardour_ui.cc:1360
 msgid "BWF"
 msgstr "BWF"
 
-#: ardour_ui.cc:1316
+#: ardour_ui.cc:1363
 msgid "WAV"
 msgstr "WAV"
 
-#: ardour_ui.cc:1319
+#: ardour_ui.cc:1366
 msgid "WAV64"
 msgstr "WAV64"
 
-#: ardour_ui.cc:1322 session_option_editor.cc:185
+#: ardour_ui.cc:1369 session_option_editor.cc:185
 msgid "CAF"
 msgstr "CAF"
 
-#: ardour_ui.cc:1325
+#: ardour_ui.cc:1372
 msgid "AIFF"
 msgstr "AIFF"
 
-#: ardour_ui.cc:1328
+#: ardour_ui.cc:1375
 msgid "iXML"
 msgstr "iXML"
 
-#: ardour_ui.cc:1331
+#: ardour_ui.cc:1378
 msgid "RF64"
 msgstr "RF64"
 
-#: ardour_ui.cc:1339
+#: ardour_ui.cc:1386
 msgid "32-float"
 msgstr "32-float"
 
-#: ardour_ui.cc:1342
+#: ardour_ui.cc:1389
 msgid "24-int"
 msgstr "24-int"
 
-#: ardour_ui.cc:1345
+#: ardour_ui.cc:1392
 msgid "16-int"
 msgstr "16-int"
 
-#: ardour_ui.cc:1364
+#: ardour_ui.cc:1413
+#, c-format
+msgid "X: <span foreground=\"%s\">>10K</span>"
+msgstr ""
+
+#: ardour_ui.cc:1415
+#, c-format
+msgid "X: <span foreground=\"%s\">%u</span>"
+msgstr ""
+
+#: ardour_ui.cc:1418
+#, c-format
+msgid "X: <span foreground=\"%s\">?</span>"
+msgstr ""
+
+#: ardour_ui.cc:1421
+msgid "Audio dropouts. Shift+click to reset"
+msgstr ""
+
+#: ardour_ui.cc:1434
 #, c-format
 msgid "DSP: <span foreground=\"%s\">%5.1f%%</span>"
 msgstr "ЦП: <span foreground=\"%s\">%5.1f%%</span>"
 
-#: ardour_ui.cc:1383
+#: ardour_ui.cc:1453
 #, c-format
 msgid ""
 "Buffers: <span foreground=\"green\">p:</span><span foreground=\"%s\">"
@@ -1065,34 +1088,34 @@ msgstr ""
 "%%</span> <span foreground=\"green\">c:</span><span foreground=\"%s\">"
 "%<PRIu32>%%</span>"
 
-#: ardour_ui.cc:1424
+#: ardour_ui.cc:1494
 msgid "Disk: <span foreground=\"green\">Unknown</span>"
 msgstr "На диске: <span foreground=\"green\">неизвестно</span>"
 
-#: ardour_ui.cc:1426
+#: ardour_ui.cc:1496
 msgid "Disk: <span foreground=\"green\">24hrs+</span>"
 msgstr "На диске: <span foreground=\"green\">24ч+</span>"
 
-#: ardour_ui.cc:1444
+#: ardour_ui.cc:1514
 msgid "Disk: <span foreground=\"green\">>24 hrs</span>"
 msgstr "На диске: <span foreground=\"green\">>24ч</span>"
 
-#: ardour_ui.cc:1455
+#: ardour_ui.cc:1525
 #, c-format
 msgid "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"
 msgstr "На диске:  <span foreground=\"%s\">%02dч:%02dм:%02dс</span>"
 
-#: ardour_ui.cc:1481
+#: ardour_ui.cc:1551
 #, c-format
 msgid "Timecode|TC: <span foreground=\"%s\">%s</span>"
 msgstr "ТК: <span foreground=\"%s\">%s</span>"
 
-#: ardour_ui.cc:1602 ardour_ui.cc:1611 session_dialog.cc:318
+#: ardour_ui.cc:1672 ardour_ui.cc:1681 session_dialog.cc:318
 #: session_dialog.cc:323
 msgid "Recent Sessions"
 msgstr "Недавние сессии"
 
-#: ardour_ui.cc:1690
+#: ardour_ui.cc:1760
 msgid ""
 "%1 is not connected to any audio backend.\n"
 "You cannot open or close sessions in this condition"
@@ -1100,27 +1123,27 @@ msgstr ""
 "%1 не соединен с какой-либо звуковой подсистемой.\n"
 "Открытие и закрытие сессий невозможно."
 
-#: ardour_ui.cc:1714
+#: ardour_ui.cc:1784
 msgid "Open Session"
 msgstr "Открыть сессию"
 
-#: ardour_ui.cc:1739 session_dialog.cc:349 session_import_dialog.cc:170
+#: ardour_ui.cc:1809 session_dialog.cc:349 session_import_dialog.cc:170
 #: session_metadata_dialog.cc:858
 msgid "%1 sessions"
 msgstr "Cеансы %1"
 
-#: ardour_ui.cc:1776
+#: ardour_ui.cc:1846
 msgid "You cannot add a track without a session already loaded."
 msgstr "Вы не можете добавить дорожку без загруженной сессии."
 
-#: ardour_ui.cc:1784
+#: ardour_ui.cc:1854
 msgid "could not create %1 new mixed track"
 msgid_plural "could not create %1 new mixed tracks"
 msgstr[0] "Не удалось создать %1 новую смешанную дорожку"
 msgstr[1] "Не удалось создать %1 новых смешанных дорожки"
 msgstr[2] "Не удалось создать %1 новых смешанных дорожек"
 
-#: ardour_ui.cc:1790 ardour_ui.cc:1851
+#: ardour_ui.cc:1860 ardour_ui.cc:1921
 msgid ""
 "There are insufficient ports available\n"
 "to create a new track or bus.\n"
@@ -1131,25 +1154,25 @@ msgstr ""
 "Вам необходимо сохранить %1 и \n"
 "перезапустить программу с большим количеством портов."
 
-#: ardour_ui.cc:1825
+#: ardour_ui.cc:1895
 msgid "You cannot add a track or bus without a session already loaded."
 msgstr "Вы не можете добавить дорожку или шину без открытой сессии."
 
-#: ardour_ui.cc:1834
+#: ardour_ui.cc:1904
 msgid "could not create %1 new audio track"
 msgid_plural "could not create %1 new audio tracks"
 msgstr[0] "Не удалось создать %1 новую звуковую дорожку"
 msgstr[1] "Не удалось создать %2 новых звуковых дорожки"
 msgstr[2] "Не удалось создать %2 новых звуковых дорожек"
 
-#: ardour_ui.cc:1843
+#: ardour_ui.cc:1913
 msgid "could not create %1 new audio bus"
 msgid_plural "could not create %1 new audio busses"
 msgstr[0] "Не удалось создать %1 новую звуковую шину"
 msgstr[1] "Не удалось создать %1 новых звуковых шины"
 msgstr[2] "Не удалось создать %1 новых звуковых шин"
 
-#: ardour_ui.cc:1996
+#: ardour_ui.cc:2066
 msgid ""
 "Please create one or more tracks before trying to record.\n"
 "You can do this with the \"Add Track or Bus\" option in the Session menu."
@@ -1158,23 +1181,36 @@ msgstr ""
 "как пытаться что-либо записать.\n"
 "Используйте меню «Сессия > Добавить дорожку/шину»."
 
-#: ardour_ui.cc:2382
+#: ardour_ui.cc:2444
+#, c-format
+msgid "Copied %<PRId64> of %<PRId64>"
+msgstr "Скопировано %<PRId64> из %<PRId64>"
+
+#: ardour_ui.cc:2498 save_as_dialog.cc:33
+msgid "Save As"
+msgstr "Сохранить как"
+
+#: ardour_ui.cc:2526
+msgid "Save As failed: %1"
+msgstr "Не удалось сохранить под другим именем: %1"
+
+#: ardour_ui.cc:2548
 msgid "Save as..."
 msgstr "Сохранить как..."
 
-#: ardour_ui.cc:2383 ardour_ui.cc:2462
+#: ardour_ui.cc:2549 ardour_ui.cc:2628
 msgid "New session name"
 msgstr "Новое название сессии"
 
-#: ardour_ui.cc:2385
+#: ardour_ui.cc:2551
 msgid "Take Snapshot"
 msgstr "Создать снимок"
 
-#: ardour_ui.cc:2386
+#: ardour_ui.cc:2552
 msgid "Name of new snapshot"
 msgstr "Название нового снимка"
 
-#: ardour_ui.cc:2411
+#: ardour_ui.cc:2577
 msgid ""
 "To ensure compatibility with various systems\n"
 "snapshot names may not contain a '%1' character"
@@ -1182,23 +1218,23 @@ msgstr ""
 "Для обеспечения совместимости с различными системами\n"
 "названия снимков не могут содержать символ '%1'."
 
-#: ardour_ui.cc:2423
+#: ardour_ui.cc:2589
 msgid "Confirm Snapshot Overwrite"
 msgstr "Подтвердите перезапись снимка"
 
-#: ardour_ui.cc:2424
+#: ardour_ui.cc:2590
 msgid "A snapshot already exists with that name.  Do you want to overwrite it?"
 msgstr "Снимок с таким названием уже есть. Перезаписать его?"
 
-#: ardour_ui.cc:2427 utils_videotl.cc:74
+#: ardour_ui.cc:2593 utils_videotl.cc:74
 msgid "Overwrite"
 msgstr "Перезаписать"
 
-#: ardour_ui.cc:2461
+#: ardour_ui.cc:2627
 msgid "Rename Session"
 msgstr "Переименовать сессию"
 
-#: ardour_ui.cc:2476 ardour_ui.cc:2890 ardour_ui.cc:2928
+#: ardour_ui.cc:2642 ardour_ui.cc:3056 ardour_ui.cc:3094
 msgid ""
 "To ensure compatibility with various systems\n"
 "session names may not contain a '%1' character"
@@ -1206,12 +1242,12 @@ msgstr ""
 "Для обеспечения совместимости с различными системами\n"
 "названия сессий не могут содержать символ '%1'."
 
-#: ardour_ui.cc:2484
+#: ardour_ui.cc:2650
 msgid ""
 "That name is already in use by another directory/folder. Please try again."
 msgstr "Папка с таким названием уже есть. Укажите другое."
 
-#: ardour_ui.cc:2493
+#: ardour_ui.cc:2659
 msgid ""
 "Renaming this session failed.\n"
 "Things could be seriously messed up at this point"
@@ -1219,19 +1255,19 @@ msgstr ""
 "Не удалось переименовать эту сессию.\n"
 "Всё может быть очень, очень плохо."
 
-#: ardour_ui.cc:2608
+#: ardour_ui.cc:2774
 msgid "Save Template"
 msgstr "Сохранить шаблон"
 
-#: ardour_ui.cc:2609
+#: ardour_ui.cc:2775
 msgid "Name for template:"
 msgstr "Название шаблона:"
 
-#: ardour_ui.cc:2610
+#: ardour_ui.cc:2776
 msgid "-template"
 msgstr "-шаблон"
 
-#: ardour_ui.cc:2647
+#: ardour_ui.cc:2813
 msgid ""
 "This session\n"
 "%1\n"
@@ -1241,35 +1277,35 @@ msgstr ""
 "%1\n"
 "уже существует. Открыть её?"
 
-#: ardour_ui.cc:2657
+#: ardour_ui.cc:2823
 msgid "Open Existing Session"
 msgstr "Открыть существующую сессю"
 
-#: ardour_ui.cc:2918
+#: ardour_ui.cc:3084
 msgid "There is no existing session at \"%1\""
 msgstr "По адресу \"%1\" не существующей сессии"
 
-#: ardour_ui.cc:3010
+#: ardour_ui.cc:3176
 msgid "Please wait while %1 loads your session"
 msgstr "Дождитесь завершения загрузки сессии в %1"
 
-#: ardour_ui.cc:3025
+#: ardour_ui.cc:3191
 msgid "Port Registration Error"
 msgstr "Ошибка регистрации порта"
 
-#: ardour_ui.cc:3026
+#: ardour_ui.cc:3192
 msgid "Click the Close button to try again."
 msgstr "Щелкните кнопку «Закрыть» для возврата к предыдущему диалогу."
 
-#: ardour_ui.cc:3047
+#: ardour_ui.cc:3213
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "Не удалось загрузить сессию \"%1 (снимок %2)\""
 
-#: ardour_ui.cc:3053
+#: ardour_ui.cc:3219
 msgid "Loading Error"
 msgstr "Ошибка при загрузке"
 
-#: ardour_ui.cc:3072
+#: ardour_ui.cc:3241
 msgid ""
 "This session has been opened in read-only mode.\n"
 "\n"
@@ -1279,24 +1315,24 @@ msgstr ""
 "\n"
 "Вы не сможете записывать или сохранять."
 
-#: ardour_ui.cc:3077
+#: ardour_ui.cc:3246
 msgid "Read-only Session"
 msgstr "Сессия в режиме чтения"
 
-#: ardour_ui.cc:3143
+#: ardour_ui.cc:3312
 msgid "Could not create session in \"%1\""
 msgstr "Не удалось создать сессию «%1»"
 
-#: ardour_ui.cc:3292
+#: ardour_ui.cc:3461
 msgid "No files were ready for clean-up"
 msgstr "Нет готовых к удалению звуковых файлов"
 
-#: ardour_ui.cc:3296 ardour_ui.cc:3306 ardour_ui.cc:3439 ardour_ui.cc:3446
+#: ardour_ui.cc:3465 ardour_ui.cc:3475 ardour_ui.cc:3608 ardour_ui.cc:3615
 #: ardour_ui_ed.cc:103
 msgid "Clean-up"
 msgstr "Очистить"
 
-#: ardour_ui.cc:3297
+#: ardour_ui.cc:3466
 msgid ""
 "If this seems suprising, \n"
 "check for any existing snapshots.\n"
@@ -1308,19 +1344,19 @@ msgstr ""
 "Они могут включать области, которым\n"
 "нужны неиспользуемые файлы."
 
-#: ardour_ui.cc:3356
+#: ardour_ui.cc:3525
 msgid "kilo"
 msgstr "Кило"
 
-#: ardour_ui.cc:3359
+#: ardour_ui.cc:3528
 msgid "mega"
 msgstr "Мега"
 
-#: ardour_ui.cc:3362
+#: ardour_ui.cc:3531
 msgid "giga"
 msgstr "Гига"
 
-#: ardour_ui.cc:3367
+#: ardour_ui.cc:3536
 msgid ""
 "The following file was deleted from %2,\n"
 "releasing %3 %4bytes of disk space"
@@ -1340,7 +1376,7 @@ msgstr[2] ""
 "освободив при этом %3 %4байт\n"
 "дискового пространства."
 
-#: ardour_ui.cc:3374
+#: ardour_ui.cc:3543
 msgid ""
 "The following file was not in use and \n"
 "has been moved to: %2\n"
@@ -1387,11 +1423,11 @@ msgstr[2] ""
 "\n"
 "дополнительно освободит %3 %4байт дискового пространства.\n"
 
-#: ardour_ui.cc:3434
+#: ardour_ui.cc:3603
 msgid "Are you sure you want to clean-up?"
 msgstr "Вы уверены, что хотите выполнить очистку?"
 
-#: ardour_ui.cc:3441
+#: ardour_ui.cc:3610
 msgid ""
 "Clean-up is a destructive operation.\n"
 "ALL undo/redo information will be lost if you clean-up.\n"
@@ -1402,39 +1438,39 @@ msgstr ""
 "неиспользуемые звуковые файлы\n"
 "будут перемещены в «мертвую» зону."
 
-#: ardour_ui.cc:3449
+#: ardour_ui.cc:3618
 msgid "CleanupDialog"
 msgstr "Очистка"
 
-#: ardour_ui.cc:3479
+#: ardour_ui.cc:3648
 msgid "Cleaned Files"
 msgstr "Очищенные файлы"
 
-#: ardour_ui.cc:3496
+#: ardour_ui.cc:3665
 msgid "deleted file"
 msgstr "Удалён файл"
 
-#: ardour_ui.cc:3634
+#: ardour_ui.cc:3803
 msgid "Video-Server was not launched by %1. The request to stop it is ignored."
 msgstr "Видеосервер не был запущен %1. Запрос его остановки игнорируется."
 
-#: ardour_ui.cc:3638
+#: ardour_ui.cc:3807
 msgid "Stop Video-Server"
 msgstr "Остановить видеосервер"
 
-#: ardour_ui.cc:3639
+#: ardour_ui.cc:3808
 msgid "Do you really want to stop the Video Server?"
 msgstr "Вы действительно хотите остановить видеосервер?"
 
-#: ardour_ui.cc:3642
+#: ardour_ui.cc:3811
 msgid "Yes, Stop It"
 msgstr "Да, остановить"
 
-#: ardour_ui.cc:3668
+#: ardour_ui.cc:3837
 msgid "The Video Server is already started."
 msgstr "Видеосервер уже запущен."
 
-#: ardour_ui.cc:3670
+#: ardour_ui.cc:3839
 msgid ""
 "An external Video Server is configured and can be reached. Not starting a "
 "new instance."
@@ -1442,7 +1478,7 @@ msgstr ""
 "Внешний видеосервер настроен и может быть доступен, не начиная новый "
 "экземпляр."
 
-#: ardour_ui.cc:3678 ardour_ui.cc:3783
+#: ardour_ui.cc:3847 ardour_ui.cc:3952
 msgid ""
 "Could not connect to the Video Server. Start it or configure its access URL "
 "in Preferences."
@@ -1450,35 +1486,39 @@ msgstr ""
 "Не удалось соединиться с видеосервером. Запустите его, либо укажите URL "
 "доступа к нему в диалоге параметров программы."
 
-#: ardour_ui.cc:3708
+#: ardour_ui.cc:3877
 msgid "Specified docroot is not an existing directory."
 msgstr "Указан DOC-корень не существующего каталога."
 
-#: ardour_ui.cc:3714 ardour_ui.cc:3720
+#: ardour_ui.cc:3883 ardour_ui.cc:3889
 msgid "Given Video Server is not an executable file."
 msgstr "Данный видеосервер не является исполняемым файлом."
 
-#: ardour_ui.cc:3754
+#: ardour_ui.cc:3923
 msgid "Cannot launch the video-server"
 msgstr "Не удалось запустить видеосервер"
 
-#: ardour_ui.cc:3764
+#: ardour_ui.cc:3933
 msgid "Video-server was started but does not respond to requests..."
 msgstr "Видеосервер запущен, но не откликается."
 
-#: ardour_ui.cc:3809 editor_audio_import.cc:641
+#: ardour_ui.cc:3978 editor_audio_import.cc:644
 msgid "could not open %1"
 msgstr "Не удалось открыть %1"
 
-#: ardour_ui.cc:3813
+#: ardour_ui.cc:3982
 msgid "no video-file selected"
 msgstr "Не выбран видеофайл"
 
-#: ardour_ui.cc:4011
+#: ardour_ui.cc:4174
+msgid "xrun"
+msgstr ""
+
+#: ardour_ui.cc:4183
 msgid "Recording was stopped because your system could not keep up."
 msgstr "Запись остановлена из-за недостаточного быстродействия системы"
 
-#: ardour_ui.cc:4040
+#: ardour_ui.cc:4212
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with %1.\n"
@@ -1492,23 +1532,23 @@ msgstr ""
 "В частности ей не удалось записать данные на диск\n"
 "достаточно быстро для фиксации захваченных данных.\n"
 
-#: ardour_ui.cc:4110
+#: ardour_ui.cc:4285
 msgid "Scanning for plugins"
 msgstr "Сканирование плагинов"
 
-#: ardour_ui.cc:4112
+#: ardour_ui.cc:4287
 msgid "Cancel plugin scan"
 msgstr "Отменить сканирование плагинов"
 
-#: ardour_ui.cc:4121
+#: ardour_ui.cc:4296
 msgid "Stop Timeout"
 msgstr "Тайм-аут остановки"
 
-#: ardour_ui.cc:4128
+#: ardour_ui.cc:4303
 msgid "Scan Timeout"
 msgstr "Тайм-аут сканирования"
 
-#: ardour_ui.cc:4171
+#: ardour_ui.cc:4347
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with %1.\n"
@@ -1522,11 +1562,11 @@ msgstr ""
 "В частности ей не удалось прочитать данные\n"
 "с диска достаточно быстро для воспроизведения.\n"
 
-#: ardour_ui.cc:4211
+#: ardour_ui.cc:4387
 msgid "Crash Recovery"
 msgstr "Восстановление данных"
 
-#: ardour_ui.cc:4212
+#: ardour_ui.cc:4388
 msgid ""
 "This session appears to have been in the\n"
 "middle of recording when %1 or\n"
@@ -1542,19 +1582,19 @@ msgstr ""
 "%1 может восстановить записанные данные,\n"
 "либо проигнорировать их. Примите решение.\n"
 
-#: ardour_ui.cc:4224
+#: ardour_ui.cc:4400
 msgid "Ignore crash data"
 msgstr "Проигнорировать"
 
-#: ardour_ui.cc:4225
+#: ardour_ui.cc:4401
 msgid "Recover from crash"
 msgstr "Восстановить данные"
 
-#: ardour_ui.cc:4245
+#: ardour_ui.cc:4421
 msgid "Sample Rate Mismatch"
 msgstr "Несовпадение частот сэмплирования"
 
-#: ardour_ui.cc:4246
+#: ardour_ui.cc:4422
 msgid ""
 "This session was created with a sample rate of %1 Hz, but\n"
 "%2 is currently running at %3 Hz.  If you load this session,\n"
@@ -1566,23 +1606,23 @@ msgstr ""
 "Если вы загрузите эту сессию, звуковые данные могут быть\n"
 "воспроизведены с некорректной частотой сэмплирования.\n"
 
-#: ardour_ui.cc:4255
+#: ardour_ui.cc:4431
 msgid "Do not load session"
 msgstr "Не загружать сессию"
 
-#: ardour_ui.cc:4256
+#: ardour_ui.cc:4432
 msgid "Load session anyway"
 msgstr "Все равно загрузить"
 
-#: ardour_ui.cc:4283
+#: ardour_ui.cc:4459
 msgid "Could not disconnect from Audio/MIDI engine"
 msgstr "Не удалось отсоединиться от аудио/MIDI-подсистемы."
 
-#: ardour_ui.cc:4300 ardour_ui.cc:4303
+#: ardour_ui.cc:4476 ardour_ui.cc:4479
 msgid "Could not reconnect to the Audio/MIDI engine"
 msgstr "Не удалось повторно соединиться с аудио/MIDI-подсистемой."
 
-#: ardour_ui.cc:4587
+#: ardour_ui.cc:4763
 msgid ""
 "%4This is a session from an older version of %3%5\n"
 "\n"
@@ -1608,38 +1648,38 @@ msgstr ""
 "\n"
 "Отныне, используйте 2-х версии со старыми сессиями %3"
 
-#: ardour_ui.cc:4696
+#: ardour_ui.cc:4872
 msgid "This is a free/demo copy of %1. It has just switched to silent mode."
 msgstr ""
 "Демонстрационная версия %1 только что переключилась в беззвучный режим."
 
-#: ardour_ui.cc:4702
+#: ardour_ui.cc:4878
 msgid "%1 is now silent"
 msgstr "%1 переключился в беззвучный режим"
 
-#: ardour_ui.cc:4704
+#: ardour_ui.cc:4880
 msgid ""
 "Please consider paying for a copy of %1 - you can pay whatever you want."
 msgstr ""
 "Возможно, вы хотите заплатить за копию %1 — цену вы можете установить сами."
 
-#: ardour_ui.cc:4705
+#: ardour_ui.cc:4881
 msgid "Better yet become a subscriber - subscriptions start at US$1 per month."
 msgstr "Вы также можете выбрать подписку (от US$1 в месяц)."
 
-#: ardour_ui.cc:4706
+#: ardour_ui.cc:4882
 msgid "Pay for a copy (via the web)"
 msgstr "Заплатить один раз"
 
-#: ardour_ui.cc:4707
+#: ardour_ui.cc:4883
 msgid "Become a subscriber (via the web)"
 msgstr "Стать подписчиком"
 
-#: ardour_ui.cc:4726
+#: ardour_ui.cc:4902
 msgid "Remain silent"
 msgstr "Оставить беззвучным"
 
-#: ardour_ui.cc:4728
+#: ardour_ui.cc:4904
 msgid "Give me more time"
 msgstr "Дайте ещё поработать"
 
@@ -1707,7 +1747,7 @@ msgstr "Будьте разумны насчёт входного монитор
 msgid "Enable/Disable audio click"
 msgstr "Включить или выключить метроном"
 
-#: ardour_ui2.cc:140 monitor_section.cc:111
+#: ardour_ui2.cc:140 monitor_section.cc:117
 msgid ""
 "When active, something is soloed.\n"
 "Click to de-solo everything"
@@ -1773,24 +1813,24 @@ msgstr "[ПРЕДУПРЕЖДЕНИЕ]:"
 msgid "[INFO]: "
 msgstr "[СПРАВКА]:"
 
-#: ardour_ui2.cc:253 ardour_ui_ed.cc:403
+#: ardour_ui2.cc:255 ardour_ui_ed.cc:408
 msgid "Auto Return"
 msgstr "Автовозврат"
 
-#: ardour_ui2.cc:255 ardour_ui_ed.cc:406
+#: ardour_ui2.cc:257 ardour_ui_ed.cc:411
 msgid "Follow Edits"
 msgstr "Следовать правкам"
 
-#: ardour_ui2.cc:728 rc_option_editor.cc:2292
+#: ardour_ui2.cc:716 rc_option_editor.cc:2786
 msgid "GUI"
 msgstr "Интерфейс"
 
-#: ardour_ui2.cc:745 rc_option_editor.cc:1309 rc_option_editor.cc:1327
-#: rc_option_editor.cc:1330 rc_option_editor.cc:1332 rc_option_editor.cc:1334
-#: rc_option_editor.cc:1342 rc_option_editor.cc:1350 rc_option_editor.cc:1352
-#: rc_option_editor.cc:1360 rc_option_editor.cc:1367 rc_option_editor.cc:1376
-#: rc_option_editor.cc:1378 rc_option_editor.cc:1380 rc_option_editor.cc:1388
-#: rc_option_editor.cc:1390 rc_option_editor.cc:1399
+#: ardour_ui2.cc:733 rc_option_editor.cc:1778 rc_option_editor.cc:1796
+#: rc_option_editor.cc:1799 rc_option_editor.cc:1801 rc_option_editor.cc:1803
+#: rc_option_editor.cc:1811 rc_option_editor.cc:1819 rc_option_editor.cc:1821
+#: rc_option_editor.cc:1829 rc_option_editor.cc:1836 rc_option_editor.cc:1845
+#: rc_option_editor.cc:1847 rc_option_editor.cc:1849 rc_option_editor.cc:1857
+#: rc_option_editor.cc:1859 rc_option_editor.cc:1868
 #: session_option_editor.cc:321 session_option_editor.cc:323
 #: session_option_editor.cc:344 session_option_editor.cc:346
 #: session_option_editor.cc:348 session_option_editor.cc:355
@@ -1863,15 +1903,15 @@ msgstr "Тип файла"
 msgid "Sample Format"
 msgstr "Формат сэмпла"
 
-#: ardour_ui_ed.cc:113 rc_option_editor.cc:2237 rc_option_editor.cc:2249
+#: ardour_ui_ed.cc:113 rc_option_editor.cc:2719 rc_option_editor.cc:2731
 msgid "Control Surfaces"
 msgstr "Устройства управления"
 
-#: ardour_ui_ed.cc:114 rc_option_editor.cc:1913 rc_option_editor.cc:2256
+#: ardour_ui_ed.cc:114 rc_option_editor.cc:2395 rc_option_editor.cc:2738
 msgid "Plugins"
 msgstr "Плагины"
 
-#: ardour_ui_ed.cc:115 rc_option_editor.cc:2343
+#: ardour_ui_ed.cc:115 rc_option_editor.cc:2853
 msgid "Metering"
 msgstr "Индикаторы"
 
@@ -1887,7 +1927,7 @@ msgstr "Время задержки"
 msgid "Denormal Handling"
 msgstr "Обработка отклонений"
 
-#: ardour_ui_ed.cc:122 route_time_axis.cc:1673
+#: ardour_ui_ed.cc:122 route_time_axis.cc:1689
 msgid "New..."
 msgstr "Создать..."
 
@@ -1920,284 +1960,294 @@ msgid "Export To Video File"
 msgstr "Видеофайл"
 
 #: ardour_ui_ed.cc:144
-msgid "Snapshot..."
-msgstr "Создать снимок..."
+msgid "Snapshot (& keep working on current version) ..."
+msgstr "Сделать снимок и работать с текущей версией..."
 
 #: ardour_ui_ed.cc:148
+msgid "Snapshot (& switch to new version) ..."
+msgstr "Сделать снимок и перейти к новой версии..."
+
+#: ardour_ui_ed.cc:152
 msgid "Save As..."
 msgstr "Сохранить как..."
 
-#: ardour_ui_ed.cc:152 editor_actions.cc:1769 editor_markers.cc:903
-#: editor_snapshots.cc:124 mixer_strip.cc:1521 route_time_axis.cc:1669
+#: ardour_ui_ed.cc:156 editor_actions.cc:1783 editor_markers.cc:896
+#: editor_snapshots.cc:124 mixer_strip.cc:1564 route_time_axis.cc:1685
 msgid "Rename..."
 msgstr "Переименовать..."
 
-#: ardour_ui_ed.cc:156
+#: ardour_ui_ed.cc:160
 msgid "Save Template..."
 msgstr "Сохранить шаблон..."
 
-#: ardour_ui_ed.cc:159
+#: ardour_ui_ed.cc:163
 msgid "Metadata"
 msgstr "Метаданные"
 
-#: ardour_ui_ed.cc:162
+#: ardour_ui_ed.cc:166
 msgid "Edit Metadata..."
 msgstr "Изменить метаданные..."
 
-#: ardour_ui_ed.cc:165
+#: ardour_ui_ed.cc:169
 msgid "Import Metadata..."
 msgstr "Импортировать метаданные..."
 
-#: ardour_ui_ed.cc:168
+#: ardour_ui_ed.cc:172
 msgid "Export To Audio File(s)..."
 msgstr "В звуковые файлы..."
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:175
 msgid "Stem export..."
 msgstr "Каждую дорожку в свой файл..."
 
-#: ardour_ui_ed.cc:174 editor_export_audio.cc:65
-#: export_channel_selector.cc:182 export_channel_selector.cc:564
-#: export_dialog.cc:129 export_video_dialog.cc:84
+#: ardour_ui_ed.cc:178 editor_export_audio.cc:65
+#: export_channel_selector.cc:190 export_channel_selector.cc:576
+#: export_dialog.cc:129 export_video_dialog.cc:80
 msgid "Export"
 msgstr "Экспортировать"
 
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:181
 msgid "Clean-up Unused Sources..."
 msgstr "Очистить неиспользуемые источники..."
 
-#: ardour_ui_ed.cc:181
+#: ardour_ui_ed.cc:185
 msgid "Flush Wastebasket"
 msgstr "Очистить корзину"
 
-#: ardour_ui_ed.cc:188
+#: ardour_ui_ed.cc:192
 msgid "Quit"
 msgstr "Выход"
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:193 automation_time_axis.cc:543 editor_actions.cc:654
+#: editor_markers.cc:895 location_ui.cc:57 plugin_selector.cc:86
+#: route_time_axis.cc:865
+msgid "Hide"
+msgstr "Скрыть"
+
+#: ardour_ui_ed.cc:197
 msgid "Maximise Editor Space"
 msgstr "Редактор на полный экран"
 
-#: ardour_ui_ed.cc:193
+#: ardour_ui_ed.cc:198
 msgid "Maximise Mixer Space"
 msgstr "Развернуть окно микшера"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:199
 msgid "Show Toolbars"
 msgstr "Показывать панели"
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:203
 msgid "Show more UI preferences"
 msgstr "Показать больше предустановок UI"
 
-#: ardour_ui_ed.cc:200 mixer_ui.cc:1925 mixer_ui.cc:1931
+#: ardour_ui_ed.cc:205 mixer_ui.cc:1945 mixer_ui.cc:1951
 msgid "Window|Mixer"
 msgstr "Микшер"
 
-#: ardour_ui_ed.cc:201
+#: ardour_ui_ed.cc:206
 msgid "Toggle Editor+Mixer"
 msgstr "Редактор или микшер на переднем плане"
 
-#: ardour_ui_ed.cc:202 meterbridge.cc:218 meterbridge.cc:224
+#: ardour_ui_ed.cc:207 meterbridge.cc:217 meterbridge.cc:223
 msgid "Window|Meterbridge"
 msgstr "Панель индикаторов"
 
-#: ardour_ui_ed.cc:204
+#: ardour_ui_ed.cc:209
 msgid "Reattach All Tearoffs"
 msgstr "Заново прикрепить разрывы"
 
-#: ardour_ui_ed.cc:206 midi_tracer.cc:45
+#: ardour_ui_ed.cc:211 midi_tracer.cc:45
 msgid "MIDI Tracer"
 msgstr "Журнал MIDI-событий"
 
-#: ardour_ui_ed.cc:208
+#: ardour_ui_ed.cc:213
 msgid "Chat"
 msgstr "Пообщаться"
 
-#: ardour_ui_ed.cc:210
+#: ardour_ui_ed.cc:215
 msgid "Help|Manual"
 msgstr "Справка"
 
-#: ardour_ui_ed.cc:211
+#: ardour_ui_ed.cc:216
 msgid "Reference"
 msgstr "Справка в Интернете"
 
-#: ardour_ui_ed.cc:212
+#: ardour_ui_ed.cc:217
 msgid "Report A Bug"
 msgstr "Сообщить об ошибке"
 
-#: ardour_ui_ed.cc:213
+#: ardour_ui_ed.cc:218
 msgid "Cheat Sheet"
 msgstr "Шпаргалка"
 
-#: ardour_ui_ed.cc:214
+#: ardour_ui_ed.cc:219
 msgid "Ardour Website"
 msgstr "Сайт Ardour"
 
-#: ardour_ui_ed.cc:215
+#: ardour_ui_ed.cc:220
 msgid "Ardour Development"
 msgstr "Разработка Ardour"
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:221
 msgid "User Forums"
 msgstr "Форумы для пользователей"
 
-#: ardour_ui_ed.cc:217
+#: ardour_ui_ed.cc:222
 msgid "How to report a bug"
 msgstr "Как сообщить об ошибке"
 
-#: ardour_ui_ed.cc:219 plugin_ui.cc:419
+#: ardour_ui_ed.cc:224 plugin_ui.cc:419
 msgid "Save"
 msgstr "Сохранить"
 
-#: ardour_ui_ed.cc:227 rc_option_editor.cc:1419 rc_option_editor.cc:1430
-#: rc_option_editor.cc:1441 rc_option_editor.cc:1450 rc_option_editor.cc:1463
-#: rc_option_editor.cc:1476 rc_option_editor.cc:1485 rc_option_editor.cc:1495
-#: rc_option_editor.cc:1497 rc_option_editor.cc:1506 rc_option_editor.cc:1522
-#: rc_option_editor.cc:1543 rc_option_editor.cc:1561 rc_option_editor.cc:1563
-#: rc_option_editor.cc:1579 rc_option_editor.cc:1582 rc_option_editor.cc:1584
-#: rc_option_editor.cc:1601 rc_option_editor.cc:1612
+#: ardour_ui_ed.cc:232 rc_option_editor.cc:1879 rc_option_editor.cc:1890
+#: rc_option_editor.cc:1901 rc_option_editor.cc:1912 rc_option_editor.cc:1921
+#: rc_option_editor.cc:1934 rc_option_editor.cc:1947 rc_option_editor.cc:1956
+#: rc_option_editor.cc:1966 rc_option_editor.cc:1968 rc_option_editor.cc:1977
+#: rc_option_editor.cc:1993 rc_option_editor.cc:2014 rc_option_editor.cc:2032
+#: rc_option_editor.cc:2034 rc_option_editor.cc:2050 rc_option_editor.cc:2053
+#: rc_option_editor.cc:2055 rc_option_editor.cc:2072 rc_option_editor.cc:2083
 msgid "Transport"
 msgstr "Транспорт"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:238
 msgid "Stop"
 msgstr "Стоп"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:241
 msgid "Roll"
 msgstr "Перевернуть"
 
-#: ardour_ui_ed.cc:240 ardour_ui_ed.cc:243
+#: ardour_ui_ed.cc:245 ardour_ui_ed.cc:248
 msgid "Start/Stop"
 msgstr "Старт/Стоп"
 
-#: ardour_ui_ed.cc:246
+#: ardour_ui_ed.cc:251
 msgid "Start/Continue/Stop"
 msgstr "Старт/Продолжить/Стоп"
 
-#: ardour_ui_ed.cc:249
+#: ardour_ui_ed.cc:254
 msgid "Stop and Forget Capture"
 msgstr "Остановиться и забыть захват"
 
-#: ardour_ui_ed.cc:259
+#: ardour_ui_ed.cc:264
 msgid "Transition To Roll"
 msgstr "В обычном направлении"
 
-#: ardour_ui_ed.cc:263
+#: ardour_ui_ed.cc:268
 msgid "Transition To Reverse"
 msgstr "В обратном направлении"
 
-#: ardour_ui_ed.cc:267
+#: ardour_ui_ed.cc:272
 msgid "Play Loop Range"
 msgstr "Воспроизвести петлю"
 
-#: ardour_ui_ed.cc:270
+#: ardour_ui_ed.cc:275
 msgid "Play Selection"
 msgstr "Воспроизводить выделение"
 
-#: ardour_ui_ed.cc:273
+#: ardour_ui_ed.cc:278
 msgid "Play Selection w/Preroll"
 msgstr "Играть выбранный w/Preroll"
 
-#: ardour_ui_ed.cc:277
+#: ardour_ui_ed.cc:282
 msgid "Enable Record"
 msgstr "Разрешить запись"
 
-#: ardour_ui_ed.cc:280 ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:285 ardour_ui_ed.cc:289
 msgid "Start Recording"
 msgstr "Начать запись"
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:293
 msgid "Rewind"
 msgstr "Перемотать назад"
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:296
 msgid "Rewind (Slow)"
 msgstr "Перемотать назад (медленно)"
 
-#: ardour_ui_ed.cc:294
+#: ardour_ui_ed.cc:299
 msgid "Rewind (Fast)"
 msgstr "Перемотать назад (быстро)"
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:302
 msgid "Forward"
 msgstr "Перемотать вперёд"
 
-#: ardour_ui_ed.cc:300
+#: ardour_ui_ed.cc:305
 msgid "Forward (Slow)"
 msgstr "Перемотать вперёд (медленно)"
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:308
 msgid "Forward (Fast)"
 msgstr "Перемотать вперёд (быстро)"
 
-#: ardour_ui_ed.cc:306
+#: ardour_ui_ed.cc:311
 msgid "Go to Zero"
 msgstr "К нулевой отметке"
 
-#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312
+#: ardour_ui_ed.cc:314 ardour_ui_ed.cc:317
 msgid "Go to Start"
 msgstr "К началу"
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:320
 msgid "Go to End"
 msgstr "В конец"
 
-#: ardour_ui_ed.cc:318
+#: ardour_ui_ed.cc:323
 msgid "Go to Wall Clock"
 msgstr "К  текущему времени"
 
-#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326
+#: ardour_ui_ed.cc:328 ardour_ui_ed.cc:331
 msgid "Numpad Decimal"
 msgstr "Десятичный разделитель на цифровой клавиатуре"
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:334
 msgid "Numpad 0"
 msgstr "Numpad 0"
 
-#: ardour_ui_ed.cc:332
+#: ardour_ui_ed.cc:337
 msgid "Numpad 1"
 msgstr "Numpad 1"
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:340
 msgid "Numpad 2"
 msgstr "Numpad 2"
 
-#: ardour_ui_ed.cc:338
+#: ardour_ui_ed.cc:343
 msgid "Numpad 3"
 msgstr "Numpad 3"
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:346
 msgid "Numpad 4"
 msgstr "Numpad 3"
 
-#: ardour_ui_ed.cc:344
+#: ardour_ui_ed.cc:349
 msgid "Numpad 5"
 msgstr "Numpad 5"
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:352
 msgid "Numpad 6"
 msgstr "Numpad 6"
 
-#: ardour_ui_ed.cc:350
+#: ardour_ui_ed.cc:355
 msgid "Numpad 7"
 msgstr "Numpad 7"
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:358
 msgid "Numpad 8"
 msgstr "Numpad 8"
 
-#: ardour_ui_ed.cc:356
+#: ardour_ui_ed.cc:361
 msgid "Numpad 9"
 msgstr "Numpad 9"
 
-#: ardour_ui_ed.cc:360
+#: ardour_ui_ed.cc:365
 msgid "Focus On Clock"
 msgstr "Изменить время вручную"
 
-#: ardour_ui_ed.cc:364 ardour_ui_ed.cc:373 audio_clock.cc:2109 editor.cc:258
-#: editor_actions.cc:567 editor_actions.cc:576 export_timespan_selector.cc:88
+#: ardour_ui_ed.cc:369 ardour_ui_ed.cc:378 audio_clock.cc:2114 editor.cc:259
+#: editor_actions.cc:578 editor_actions.cc:587 export_timespan_selector.cc:88
 #: session_option_editor.cc:41 session_option_editor.cc:61
 #: session_option_editor.cc:80 session_option_editor.cc:96
 #: session_option_editor.cc:109 session_option_editor.cc:122
@@ -2205,121 +2255,129 @@ msgstr "Изменить время вручную"
 msgid "Timecode"
 msgstr "Тайм-код"
 
-#: ardour_ui_ed.cc:366 ardour_ui_ed.cc:375 editor_actions.cc:565
+#: ardour_ui_ed.cc:371 ardour_ui_ed.cc:380 editor_actions.cc:576
 msgid "Bars & Beats"
 msgstr "Такты и доли"
 
-#: ardour_ui_ed.cc:368 ardour_ui_ed.cc:377
+#: ardour_ui_ed.cc:373 ardour_ui_ed.cc:382
 msgid "Minutes & Seconds"
 msgstr "Минуты и секунды"
 
-#: ardour_ui_ed.cc:370 ardour_ui_ed.cc:379 audio_clock.cc:2113 editor.cc:259
-#: editor_actions.cc:566
+#: ardour_ui_ed.cc:375 ardour_ui_ed.cc:384 audio_clock.cc:2118 editor.cc:260
+#: editor_actions.cc:577
 msgid "Samples"
 msgstr "Сэмплы"
 
-#: ardour_ui_ed.cc:382
+#: ardour_ui_ed.cc:387
 msgid "Punch In"
 msgstr "Начало врезки"
 
-#: ardour_ui_ed.cc:383 mixer_strip.cc:1838 mixer_strip.cc:2026 route_ui.cc:165
+#: ardour_ui_ed.cc:388 mixer_strip.cc:1881 mixer_strip.cc:2069 route_ui.cc:164
 #: time_info_box.cc:116
 msgid "In"
 msgstr "Вход"
 
-#: ardour_ui_ed.cc:386
+#: ardour_ui_ed.cc:391
 msgid "Punch Out"
 msgstr "Конец врезки"
 
-#: ardour_ui_ed.cc:387 mixer_strip.cc:1850 time_info_box.cc:117
+#: ardour_ui_ed.cc:392 mixer_strip.cc:1893 time_info_box.cc:117
 msgid "Out"
 msgstr "Выход"
 
-#: ardour_ui_ed.cc:390
+#: ardour_ui_ed.cc:395
 msgid "Punch In/Out"
 msgstr "Врезка"
 
-#: ardour_ui_ed.cc:391
+#: ardour_ui_ed.cc:396
 msgid "In/Out"
 msgstr "Вх/Вых"
 
-#: ardour_ui_ed.cc:394 rc_option_editor.cc:1376
+#: ardour_ui_ed.cc:399 rc_option_editor.cc:1845
 msgid "Click"
 msgstr "Метроном"
 
-#: ardour_ui_ed.cc:397
+#: ardour_ui_ed.cc:402
 msgid "Auto Input"
 msgstr "Автовход"
 
-#: ardour_ui_ed.cc:400
+#: ardour_ui_ed.cc:405
 msgid "Auto Play"
 msgstr "Автовоспр."
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:416
 msgid "Sync Startup to Video"
 msgstr "Синхронизировать начало с видео"
 
-#: ardour_ui_ed.cc:413
+#: ardour_ui_ed.cc:418
 msgid "Time Master"
 msgstr "Ведущий времени"
 
 #: ardour_ui_ed.cc:420
+msgid "Use External Positional Sync Source"
+msgstr ""
+
+#: ardour_ui_ed.cc:425
 msgid "Toggle Record Enable Track %1"
 msgstr "Переключить записываемость дорожки %1"
 
-#: ardour_ui_ed.cc:427
+#: ardour_ui_ed.cc:432
 msgid "Percentage"
 msgstr "Проценты"
 
-#: ardour_ui_ed.cc:428 shuttle_control.cc:178
+#: ardour_ui_ed.cc:433 shuttle_control.cc:187
 msgid "Semitones"
 msgstr "Полутона"
 
-#: ardour_ui_ed.cc:432
+#: ardour_ui_ed.cc:437
 msgid "Send MTC"
 msgstr "Передавать MTC"
 
-#: ardour_ui_ed.cc:434
+#: ardour_ui_ed.cc:439
 msgid "Send MMC"
 msgstr "Передавать MMC"
 
-#: ardour_ui_ed.cc:436
+#: ardour_ui_ed.cc:441
 msgid "Use MMC"
 msgstr "Использовать MMC"
 
-#: ardour_ui_ed.cc:438 rc_option_editor.cc:2089
+#: ardour_ui_ed.cc:443 rc_option_editor.cc:2571
 msgid "Send MIDI Clock"
 msgstr "Отправлять MIDI Clock"
 
-#: ardour_ui_ed.cc:440
+#: ardour_ui_ed.cc:445
 msgid "Send MIDI Feedback"
 msgstr "Отправлять MIDI Feedback"
 
-#: ardour_ui_ed.cc:446
+#: ardour_ui_ed.cc:451
 msgid "Panic"
 msgstr "Паника"
 
-#: ardour_ui_ed.cc:534
+#: ardour_ui_ed.cc:542
 msgid "Wall Clock"
 msgstr "Текущее время"
 
-#: ardour_ui_ed.cc:536
+#: ardour_ui_ed.cc:544
 msgid "Disk Space"
 msgstr "Диск. пространство"
 
-#: ardour_ui_ed.cc:537
+#: ardour_ui_ed.cc:545
 msgid "DSP"
 msgstr "DSP"
 
-#: ardour_ui_ed.cc:538
+#: ardour_ui_ed.cc:546
+msgid "X-run"
+msgstr ""
+
+#: ardour_ui_ed.cc:547
 msgid "Buffers"
 msgstr "Буферы"
 
-#: ardour_ui_ed.cc:540
+#: ardour_ui_ed.cc:549
 msgid "Timecode Format"
 msgstr "Формат тайм-кода"
 
-#: ardour_ui_ed.cc:541
+#: ardour_ui_ed.cc:550
 msgid "File Format"
 msgstr "Формат файлов"
 
@@ -2335,69 +2393,69 @@ msgstr ""
 msgid "Internal"
 msgstr "Внутр. синхронизация"
 
-#: ardour_ui_options.cc:498
+#: ardour_ui_options.cc:503
 msgid "Enable/Disable external positional sync"
 msgstr "Включить или выключить внешнюю синхронизацию позиционирования"
 
-#: ardour_ui_options.cc:500
+#: ardour_ui_options.cc:505
 msgid "Sync to JACK is not possible: video pull up/down is set"
 msgstr ""
 "Синхронизация с JACK не возможна: установлена растяжка видео вверх/вниз"
 
-#: audio_clock.cc:1047 audio_clock.cc:1066
+#: audio_clock.cc:1052 audio_clock.cc:1071
 msgid "--pending--"
 msgstr "--в ожидании--"
 
-#: audio_clock.cc:1118
+#: audio_clock.cc:1123
 msgid "SR"
 msgstr "SR"
 
-#: audio_clock.cc:1124 audio_clock.cc:1128
+#: audio_clock.cc:1129 audio_clock.cc:1133
 msgid "Pull"
 msgstr "Подтягивание"
 
-#: audio_clock.cc:1126
+#: audio_clock.cc:1131
 #, c-format
 msgid "%+.4f%%"
 msgstr "%+.4f%%"
 
-#: audio_clock.cc:1282 editor.cc:260 editor_actions.cc:139
-#: editor_actions.cc:559
+#: audio_clock.cc:1287 editor.cc:261 editor_actions.cc:139
+#: editor_actions.cc:570
 msgid "Tempo"
 msgstr "Темп"
 
-#: audio_clock.cc:1286 editor.cc:261 editor_actions.cc:560
+#: audio_clock.cc:1291 editor.cc:262 editor_actions.cc:571
 msgid "Meter"
 msgstr "Размер"
 
-#: audio_clock.cc:1864 audio_streamview.cc:115 editor_actions.cc:1087
+#: audio_clock.cc:1869 audio_streamview.cc:116 editor_actions.cc:1101
 #: session_metadata_dialog.cc:452 session_metadata_dialog.cc:500
 #: session_metadata_dialog.cc:556 session_metadata_dialog.cc:845
 #: streamview.cc:470
 msgid "programming error: %1"
 msgstr "Ошибка в программе: %1"
 
-#: audio_clock.cc:1997 audio_clock.cc:2025
+#: audio_clock.cc:2002 audio_clock.cc:2030
 msgid "programming error: %1 %2"
 msgstr "Ошибка в программе: %1 %2"
 
-#: audio_clock.cc:2111 editor.cc:257 export_timespan_selector.cc:98
+#: audio_clock.cc:2116 editor.cc:258 export_timespan_selector.cc:98
 msgid "Bars:Beats"
 msgstr "Такты : Доли"
 
-#: audio_clock.cc:2112 export_timespan_selector.cc:93
+#: audio_clock.cc:2117 export_timespan_selector.cc:93
 msgid "Minutes:Seconds"
 msgstr "Минуты : Секунды"
 
-#: audio_clock.cc:2117
+#: audio_clock.cc:2122
 msgid "Set From Playhead"
 msgstr "По указателю воспроизведения"
 
-#: audio_clock.cc:2118
+#: audio_clock.cc:2123
 msgid "Locate to This Time"
 msgstr "Перейти к этой позиции"
 
-#: audio_clock.cc:2121
+#: audio_clock.cc:2126
 msgid "Copy to clipboard"
 msgstr "Скопировать в буфер обмена"
 
@@ -2422,7 +2480,7 @@ msgstr "Пиковая амплитуда:"
 msgid "Calculating..."
 msgstr "Производится вычисление..."
 
-#: audio_region_view.cc:1243
+#: audio_region_view.cc:1254
 msgid "add gain control point"
 msgstr "Добавление точки контроля усиления"
 
@@ -2445,23 +2503,19 @@ msgstr[0] "Сделать равным %1 удару"
 msgstr[1] "Сделать равным %1 ударам"
 msgstr[2] "Сделать равным %1 ударам"
 
-#: automation_line.cc:286 automation_line.cc:462
+#: automation_line.cc:287 editor_drag.cc:4129
 msgid "automation event move"
 msgstr "Смещение события автоматизации"
 
-#: automation_line.cc:488 automation_line.cc:508
-msgid "automation range move"
-msgstr "Смещение выделения автоматизации"
-
-#: automation_line.cc:880 region_gain_line.cc:72
+#: automation_line.cc:884 region_gain_line.cc:75
 msgid "remove control point"
 msgstr "Удаление контрольной точки"
 
-#: automation_line.cc:1003
+#: automation_line.cc:1008
 msgid "Ignoring illegal points on AutomationLine \"%1\""
 msgstr "Игнорирование некорреткных точек на линии автоматизации \"%1\""
 
-#: automation_region_view.cc:190 automation_time_axis.cc:645
+#: automation_region_view.cc:190 automation_time_axis.cc:644
 msgid "add automation event"
 msgstr "Новое событие автоматизации"
 
@@ -2469,71 +2523,66 @@ msgstr "Новое событие автоматизации"
 msgid "unable to display automation region for control without list"
 msgstr "без списка невозможно показать область автоматизации для управления"
 
-#: automation_time_axis.cc:164
+#: automation_time_axis.cc:163
 msgid "automation state"
 msgstr "Состояние автоматизации"
 
-#: automation_time_axis.cc:165
+#: automation_time_axis.cc:164
 msgid "hide track"
 msgstr "Скрыть дорожку"
 
-#: automation_time_axis.cc:309 automation_time_axis.cc:361
-#: automation_time_axis.cc:555 gain_meter.cc:220 generic_pluginui.cc:523
-#: generic_pluginui.cc:817 panner_ui.cc:151
+#: automation_time_axis.cc:308 automation_time_axis.cc:360
+#: automation_time_axis.cc:554 gain_meter.cc:222 generic_pluginui.cc:524
+#: generic_pluginui.cc:818 panner_ui.cc:149
 msgid "Automation|Manual"
 msgstr "Вручную"
 
-#: automation_time_axis.cc:311 automation_time_axis.cc:372
-#: automation_time_axis.cc:560 editor.cc:1904 editor.cc:1981
-#: editor_actions.cc:122 editor_actions.cc:1918 gain_meter.cc:223
-#: generic_pluginui.cc:99 generic_pluginui.cc:526 generic_pluginui.cc:819
-#: midi_time_axis.cc:1606 midi_time_axis.cc:1609 midi_time_axis.cc:1612
-#: panner_ui.cc:154
+#: automation_time_axis.cc:310 automation_time_axis.cc:371
+#: automation_time_axis.cc:559 editor.cc:1916 editor.cc:1994
+#: editor_actions.cc:122 editor_actions.cc:1932 gain_meter.cc:225
+#: generic_pluginui.cc:100 generic_pluginui.cc:527 generic_pluginui.cc:820
+#: midi_time_axis.cc:1607 midi_time_axis.cc:1610 midi_time_axis.cc:1613
+#: panner_ui.cc:152
 msgid "Play"
 msgstr "Проигрывание"
 
-#: automation_time_axis.cc:313 automation_time_axis.cc:383
-#: automation_time_axis.cc:565 gain_meter.cc:226 generic_pluginui.cc:101
-#: generic_pluginui.cc:529 generic_pluginui.cc:821 panner_ui.cc:157
+#: automation_time_axis.cc:312 automation_time_axis.cc:382
+#: automation_time_axis.cc:564 gain_meter.cc:228 generic_pluginui.cc:102
+#: generic_pluginui.cc:530 generic_pluginui.cc:822 panner_ui.cc:155
 msgid "Write"
 msgstr "Запись"
 
-#: automation_time_axis.cc:315 automation_time_axis.cc:394
-#: automation_time_axis.cc:570 gain_meter.cc:229 generic_pluginui.cc:103
-#: generic_pluginui.cc:532 generic_pluginui.cc:823 panner_ui.cc:160
+#: automation_time_axis.cc:314 automation_time_axis.cc:393
+#: automation_time_axis.cc:569 gain_meter.cc:231 generic_pluginui.cc:104
+#: generic_pluginui.cc:533 generic_pluginui.cc:824 panner_ui.cc:158
 msgid "Touch"
 msgstr "Касание"
 
-#: automation_time_axis.cc:405 generic_pluginui.cc:535 meter_patterns.cc:112
+#: automation_time_axis.cc:404 generic_pluginui.cc:536 meter_patterns.cc:116
 msgid "???"
 msgstr "???"
 
-#: automation_time_axis.cc:446
+#: automation_time_axis.cc:445
 msgid "clear automation"
 msgstr "Очистить автоматизацию"
 
-#: automation_time_axis.cc:544 editor_actions.cc:643 editor_markers.cc:902
-#: location_ui.cc:57 plugin_selector.cc:86 route_time_axis.cc:854
-msgid "Hide"
-msgstr "Скрыть"
-
-#: automation_time_axis.cc:546
+#: automation_time_axis.cc:545
 msgid "Clear"
 msgstr "Очистить"
 
-#: automation_time_axis.cc:577
+#: automation_time_axis.cc:576
 msgid "State"
 msgstr "Состояние"
 
-#: automation_time_axis.cc:593
+#: automation_time_axis.cc:592
 msgid "Discrete"
 msgstr "Дискретный"
 
-#: automation_time_axis.cc:599 export_format_dialog.cc:485
+#: automation_time_axis.cc:598 export_format_dialog.cc:489
 msgid "Linear"
 msgstr "Линейная"
 
-#: automation_time_axis.cc:605 rhythm_ferret.cc:109 shuttle_control.cc:197
+#: automation_time_axis.cc:604 rhythm_ferret.cc:109 shuttle_control.cc:206
 msgid "Mode"
 msgstr "Режим"
 
@@ -2549,30 +2598,31 @@ msgstr "Изменение пакета"
 msgid "Direction:"
 msgstr "Направление:"
 
-#: bundle_manager.cc:206 bundle_manager.cc:210 engine_dialog.cc:686
-#: mixer_strip.cc:164 mixer_strip.cc:369 mixer_strip.cc:2259
-#: rc_option_editor.cc:2318
+#: bundle_manager.cc:206 bundle_manager.cc:210 engine_dialog.cc:881
+#: mixer_strip.cc:165 mixer_strip.cc:379 mixer_strip.cc:2302
+#: rc_option_editor.cc:2828
 msgid "Input"
 msgstr "Вход"
 
 #: bundle_manager.cc:207 bundle_manager.cc:212 bundle_manager.cc:246
-#: engine_dialog.cc:688 mixer_strip.cc:168 mixer_strip.cc:373
-#: mixer_strip.cc:2262 rc_option_editor.cc:2322
+#: engine_dialog.cc:883 mixer_strip.cc:169 mixer_strip.cc:383
+#: mixer_strip.cc:2305 monitor_section.cc:329 monitor_section.cc:333
+#: rc_option_editor.cc:2832
 msgid "Output"
 msgstr "Выход"
 
-#: bundle_manager.cc:265 editor.cc:1945 editor_actions.cc:94
-#: editor_actions.cc:104 rc_option_editor.cc:1087 rc_option_editor.cc:1094
+#: bundle_manager.cc:265 editor.cc:1958 editor_actions.cc:94
+#: editor_actions.cc:104 rc_option_editor.cc:1539 rc_option_editor.cc:1546
 msgid "Edit"
 msgstr "Правка"
 
-#: bundle_manager.cc:266 editor.cc:5902 editor.cc:5930 editor_actions.cc:338
-#: editor_actions.cc:339 plugin_ui.cc:420 processor_box.cc:2460
+#: bundle_manager.cc:266 editor.cc:5921 editor.cc:5949 editor_actions.cc:345
+#: editor_actions.cc:346 plugin_ui.cc:420 processor_box.cc:2525
 msgid "Delete"
 msgstr "Удалить"
 
 #: bundle_manager.cc:272 bundle_manager.cc:439 editor_route_groups.cc:97
-#: editor_routes.cc:206 midi_list_editor.cc:107 session_metadata_dialog.cc:646
+#: editor_routes.cc:207 midi_list_editor.cc:107 session_metadata_dialog.cc:646
 msgid "Name"
 msgstr "Имя"
 
@@ -2655,578 +2705,582 @@ msgstr "Длительность"
 msgid "edit note"
 msgstr "Правка ноты"
 
-#: editor.cc:147
+#: editor.cc:148
 msgid "CD Frames"
 msgstr "Выборки CD"
 
-#: editor.cc:148
+#: editor.cc:149
 msgid "TC Frames"
 msgstr "TC кадры"
 
-#: editor.cc:149
+#: editor.cc:150
 msgid "TC Seconds"
 msgstr "TC секунды"
 
-#: editor.cc:150
+#: editor.cc:151
 msgid "TC Minutes"
 msgstr "TC минуты"
 
-#: editor.cc:151
+#: editor.cc:152
 msgid "Seconds"
 msgstr "Секунды"
 
-#: editor.cc:152
+#: editor.cc:153
 msgid "Minutes"
 msgstr "Минуты"
 
-#: editor.cc:153 quantize_dialog.cc:37 quantize_dialog.cc:141
+#: editor.cc:154 quantize_dialog.cc:37 quantize_dialog.cc:141
 msgid "Beats/128"
 msgstr "Доли/128"
 
-#: editor.cc:154 quantize_dialog.cc:38 quantize_dialog.cc:143
+#: editor.cc:155 quantize_dialog.cc:38 quantize_dialog.cc:143
 msgid "Beats/64"
 msgstr "Доли/64"
 
-#: editor.cc:155 quantize_dialog.cc:39 quantize_dialog.cc:145
+#: editor.cc:156 quantize_dialog.cc:39 quantize_dialog.cc:145
 msgid "Beats/32"
 msgstr "Доли/32"
 
-#: editor.cc:156
+#: editor.cc:157
 msgid "Beats/28"
 msgstr "Доли/28"
 
-#: editor.cc:157
+#: editor.cc:158
 msgid "Beats/24"
 msgstr "Доли/24"
 
-#: editor.cc:158
+#: editor.cc:159
 msgid "Beats/20"
 msgstr "Доли/20"
 
-#: editor.cc:159 quantize_dialog.cc:40 quantize_dialog.cc:147
+#: editor.cc:160 quantize_dialog.cc:40 quantize_dialog.cc:147
 msgid "Beats/16"
 msgstr "Доли/16"
 
-#: editor.cc:160
+#: editor.cc:161
 msgid "Beats/14"
 msgstr "Доли/14"
 
-#: editor.cc:161
+#: editor.cc:162
 msgid "Beats/12"
 msgstr "Доли/12"
 
-#: editor.cc:162
+#: editor.cc:163
 msgid "Beats/10"
 msgstr "Доли/10"
 
-#: editor.cc:163 quantize_dialog.cc:41 quantize_dialog.cc:149
+#: editor.cc:164 quantize_dialog.cc:41 quantize_dialog.cc:149
 msgid "Beats/8"
 msgstr "Доли/8"
 
-#: editor.cc:164
+#: editor.cc:165
 msgid "Beats/7"
 msgstr "Доли/7"
 
-#: editor.cc:165
+#: editor.cc:166
 msgid "Beats/6"
 msgstr "Доли/6"
 
-#: editor.cc:166
+#: editor.cc:167
 msgid "Beats/5"
 msgstr "Доли/5"
 
-#: editor.cc:167 quantize_dialog.cc:42 quantize_dialog.cc:151
+#: editor.cc:168 quantize_dialog.cc:42 quantize_dialog.cc:151
 msgid "Beats/4"
 msgstr "Доли/4"
 
-#: editor.cc:168 quantize_dialog.cc:43 quantize_dialog.cc:153
+#: editor.cc:169 quantize_dialog.cc:43 quantize_dialog.cc:153
 msgid "Beats/3"
 msgstr "Доли/3"
 
-#: editor.cc:169 quantize_dialog.cc:44 quantize_dialog.cc:155
+#: editor.cc:170 quantize_dialog.cc:44 quantize_dialog.cc:155
 msgid "Beats/2"
 msgstr "Доли/2"
 
-#: editor.cc:170 quantize_dialog.cc:45 quantize_dialog.cc:157
+#: editor.cc:171 quantize_dialog.cc:45 quantize_dialog.cc:157
 msgid "Beats"
 msgstr "Доли"
 
-#: editor.cc:171
+#: editor.cc:172
 msgid "Bars"
 msgstr "Такты"
 
-#: editor.cc:172
+#: editor.cc:173
 msgid "Marks"
 msgstr "Маркеры"
 
-#: editor.cc:173
+#: editor.cc:174
 msgid "Region starts"
 msgstr "Начала областей"
 
-#: editor.cc:174
+#: editor.cc:175
 msgid "Region ends"
 msgstr "Концы областей"
 
-#: editor.cc:175
+#: editor.cc:176
 msgid "Region syncs"
 msgstr "Синхр. областей"
 
-#: editor.cc:176
+#: editor.cc:177
 msgid "Region bounds"
 msgstr "Границы областей"
 
-#: editor.cc:181 editor_actions.cc:508
+#: editor.cc:182 editor_actions.cc:519
 msgid "No Grid"
 msgstr "Без сетки"
 
-#: editor.cc:182 editor_actions.cc:509
+#: editor.cc:183 editor_actions.cc:520
 msgid "Grid"
 msgstr "По сетке"
 
-#: editor.cc:183 editor_actions.cc:510
+#: editor.cc:184 editor_actions.cc:521
 msgid "Magnetic"
 msgstr "Магнит"
 
-#: editor.cc:188 editor.cc:206 editor_actions.cc:121 editor_actions.cc:491
+#: editor.cc:189 editor.cc:207 editor_actions.cc:121 editor_actions.cc:502
 msgid "Playhead"
 msgstr "Указатель воспроизведения"
 
-#: editor.cc:189 editor_actions.cc:493
+#: editor.cc:190 editor_actions.cc:504
 msgid "Marker"
 msgstr "Маркер"
 
-#: editor.cc:190 editor.cc:207 editor_actions.cc:492
+#: editor.cc:191 editor.cc:208 editor_actions.cc:503
 msgid "Mouse"
 msgstr "Мышь"
 
-#: editor.cc:195 editor_actions.cc:500
+#: editor.cc:196 editor_actions.cc:511
 msgid "Slide"
 msgstr "Слайд"
 
-#: editor.cc:196
+#: editor.cc:197
 msgid "Splice"
 msgstr "Стыковка"
 
-#: editor.cc:197 editor_actions.cc:499
+#: editor.cc:198 editor_actions.cc:510
 msgid "Ripple"
 msgstr "Рябь"
 
-#: editor.cc:198 editor_actions.cc:1787 editor_markers.cc:905
+#: editor.cc:199 editor_actions.cc:1801 editor_markers.cc:898
 #: editor_rulers.cc:260 location_ui.cc:58
 msgid "Lock"
 msgstr "Блок"
 
-#: editor.cc:203 mono_panner_editor.cc:42
+#: editor.cc:204 mono_panner_editor.cc:42
 msgid "Left"
 msgstr "Влево"
 
-#: editor.cc:204 mono_panner_editor.cc:47
+#: editor.cc:205 mono_panner_editor.cc:47
 msgid "Right"
 msgstr "Вправо"
 
-#: editor.cc:205
+#: editor.cc:206
 msgid "Center"
 msgstr "По центру"
 
-#: editor.cc:208 editor.cc:3231
+#: editor.cc:209 editor.cc:3248
 msgid "Edit point"
 msgstr "Курсор редактора"
 
-#: editor.cc:214
+#: editor.cc:215
 msgid "Mushy"
 msgstr "Мягкое"
 
-#: editor.cc:215
+#: editor.cc:216
 msgid "Smooth"
 msgstr "Сглаживание"
 
-#: editor.cc:216
+#: editor.cc:217
 msgid "Balanced multitimbral mixture"
 msgstr "Сбалансированный многотембральный микс"
 
-#: editor.cc:217
+#: editor.cc:218
 msgid "Unpitched percussion with stable notes"
 msgstr "Перкуссионное соло без коррекции высоты тона с выделяющимися нотами"
 
-#: editor.cc:218
+#: editor.cc:219
 msgid "Crisp monophonic instrumental"
 msgstr "Чистое монофоническое инструментальное соло"
 
-#: editor.cc:219
+#: editor.cc:220
 msgid "Unpitched solo percussion"
 msgstr "Перкуссионное соло без коррекции высоты тона"
 
-#: editor.cc:220
+#: editor.cc:221
 msgid "Resample without preserving pitch"
 msgstr "Ресэмплировать, не сохраняя высоту тона"
 
-#: editor.cc:256
+#: editor.cc:257
 msgid "Mins:Secs"
 msgstr "Минуты:Секунды"
 
-#: editor.cc:262
+#: editor.cc:263
 msgid "Location Markers"
 msgstr "Маркеры позиций"
 
-#: editor.cc:263
+#: editor.cc:264
 msgid "Range Markers"
 msgstr "Маркеры выделений"
 
-#: editor.cc:264
+#: editor.cc:265
 msgid "Loop/Punch Ranges"
 msgstr "Диапазоны петель/врезок"
 
-#: editor.cc:265 editor_actions.cc:563
+#: editor.cc:266 editor_actions.cc:574
 msgid "CD Markers"
 msgstr "Маркеры CD"
 
-#: editor.cc:266
+#: editor.cc:267
 msgid "Video Timeline"
 msgstr "Видеолинейка"
 
-#: editor.cc:283
+#: editor.cc:284
 msgid "mode"
 msgstr "Режим"
 
-#: editor.cc:459 editor_actions.cc:114 editor_actions.cc:562
+#: editor.cc:462 editor_actions.cc:114 editor_actions.cc:573
 msgid "Markers"
 msgstr "Маркеры"
 
-#: editor.cc:577 rc_option_editor.cc:1931
+#: editor.cc:580 rc_option_editor.cc:2413
 msgid "Regions"
 msgstr "Области"
 
-#: editor.cc:578
+#: editor.cc:581
 msgid "Tracks & Busses"
 msgstr "Дорожки и шины"
 
-#: editor.cc:579
+#: editor.cc:582
 msgid "Snapshots"
 msgstr "Снимки"
 
-#: editor.cc:580
+#: editor.cc:583
 msgid "Track & Bus Groups"
 msgstr "Группы дорожек и шин"
 
-#: editor.cc:581
+#: editor.cc:584
 msgid "Ranges & Marks"
 msgstr "Области и маркеры"
 
-#: editor.cc:728 editor.cc:5754 rc_option_editor.cc:1619
-#: rc_option_editor.cc:1627 rc_option_editor.cc:1635 rc_option_editor.cc:1643
-#: rc_option_editor.cc:1667 rc_option_editor.cc:1679 rc_option_editor.cc:1681
-#: rc_option_editor.cc:1689 rc_option_editor.cc:1697 rc_option_editor.cc:1717
-#: rc_option_editor.cc:1729 rc_option_editor.cc:1731 rc_option_editor.cc:1733
-#: rc_option_editor.cc:1741 rc_option_editor.cc:1749 rc_option_editor.cc:1764
-#: rc_option_editor.cc:1768 rc_option_editor.cc:1792
+#: editor.cc:731 editor.cc:5773 rc_option_editor.cc:2090
+#: rc_option_editor.cc:2098 rc_option_editor.cc:2106 rc_option_editor.cc:2114
+#: rc_option_editor.cc:2138 rc_option_editor.cc:2150 rc_option_editor.cc:2161
+#: rc_option_editor.cc:2163 rc_option_editor.cc:2171 rc_option_editor.cc:2179
+#: rc_option_editor.cc:2199 rc_option_editor.cc:2211 rc_option_editor.cc:2213
+#: rc_option_editor.cc:2215 rc_option_editor.cc:2223 rc_option_editor.cc:2231
+#: rc_option_editor.cc:2246 rc_option_editor.cc:2250 rc_option_editor.cc:2274
 msgid "Editor"
 msgstr "Редактор"
 
-#: editor.cc:1331 editor.cc:4735 editor_actions.cc:134 editor_actions.cc:1863
+#: editor.cc:1335 editor.cc:4757 editor_actions.cc:134 editor_actions.cc:1877
 msgid "Loop"
 msgstr "Петля"
 
-#: editor.cc:1337 editor.cc:4762 editor_actions.cc:135 time_info_box.cc:68
+#: editor.cc:1341 editor.cc:4784 editor_actions.cc:135 time_info_box.cc:68
 msgid "Punch"
 msgstr "Врезка"
 
-#: editor.cc:1449 rc_option_editor.cc:1661
+#: editor.cc:1453 rc_option_editor.cc:2132
 msgid "Linear (for highly correlated material)"
 msgstr "Линейно (для схожего материала)"
 
-#: editor.cc:1459 rc_option_editor.cc:1662
+#: editor.cc:1463 rc_option_editor.cc:2133
 msgid "Constant power"
 msgstr "С постоянной силой"
 
-#: editor.cc:1468 rc_option_editor.cc:1663
+#: editor.cc:1472 rc_option_editor.cc:2134
 msgid "Symmetric"
 msgstr "Симметрично"
 
-#: editor.cc:1478 rc_option_editor.cc:1664
+#: editor.cc:1482 rc_option_editor.cc:2135
 msgid "Slow"
 msgstr "Медленно"
 
-#: editor.cc:1487 rc_option_editor.cc:1665 sfdb_ui.cc:1771 sfdb_ui.cc:1881
+#: editor.cc:1491 rc_option_editor.cc:2136 sfdb_ui.cc:1770 sfdb_ui.cc:1880
 msgid "Fast"
 msgstr "Быстро"
 
-#: editor.cc:1509 editor.cc:1534
+#: editor.cc:1513 editor.cc:1538
 msgid "Deactivate"
 msgstr "Деактивировать"
 
-#: editor.cc:1511 editor.cc:1536
+#: editor.cc:1515 editor.cc:1540
 msgid "Activate"
 msgstr "Активировать"
 
-#: editor.cc:1637 editor.cc:1645 editor_ops.cc:3824
+#: editor.cc:1641 editor.cc:1649 editor_ops.cc:3933
 msgid "Freeze"
 msgstr "Заморозить"
 
-#: editor.cc:1641
+#: editor.cc:1645
 msgid "Unfreeze"
 msgstr "Разморозить"
 
-#: editor.cc:1780
+#: editor.cc:1784
 msgid "Selected Regions"
 msgstr "Выделенные области"
 
-#: editor.cc:1816 editor_markers.cc:940
+#: editor.cc:1828 editor_markers.cc:933
 msgid "Play Range"
 msgstr "Воспроизвести выделение"
 
-#: editor.cc:1817 editor_markers.cc:943
+#: editor.cc:1829 editor_markers.cc:936
 msgid "Loop Range"
 msgstr "Создать петлю из выделения"
 
-#: editor.cc:1820 editor_markers.cc:950
+#: editor.cc:1832 editor_markers.cc:943
 msgid "Zoom to Range"
 msgstr "Масштабировать в выделение"
 
-#: editor.cc:1829 editor_actions.cc:369
+#: editor.cc:1841 editor_actions.cc:376
 msgid "Move Range Start to Previous Region Boundary"
 msgstr "Переместить начало выделения к границе предыдущей области"
 
-#: editor.cc:1836 editor_actions.cc:376
+#: editor.cc:1848 editor_actions.cc:383
 msgid "Move Range Start to Next Region Boundary"
 msgstr "Переместить начало выделения к границе следующей области"
 
-#: editor.cc:1843 editor_actions.cc:383
+#: editor.cc:1855 editor_actions.cc:390
 msgid "Move Range End to Previous Region Boundary"
 msgstr "Переместить конец выделения к границе предыдущей области"
 
-#: editor.cc:1850 editor_actions.cc:390
+#: editor.cc:1862 editor_actions.cc:397
 msgid "Move Range End to Next Region Boundary"
 msgstr "Переместить конец выделения к границе следующей области"
 
-#: editor.cc:1856 editor_actions.cc:133 editor_actions.cc:325
+#: editor.cc:1868 editor_actions.cc:133 editor_actions.cc:332
 msgid "Separate"
 msgstr "Разделить"
 
-#: editor.cc:1857
+#: editor.cc:1869
 msgid "Convert to Region in Region List"
 msgstr "Преобразовать в область в списке областей"
 
-#: editor.cc:1860 editor_markers.cc:970
+#: editor.cc:1872 editor_markers.cc:963
 msgid "Select All in Range"
 msgstr "Выбрать всё в выделении"
 
-#: editor.cc:1863 editor_actions.cc:297
+#: editor.cc:1875 editor_actions.cc:304
 msgid "Set Loop from Selection"
 msgstr "Создать петлю из выделения"
 
-#: editor.cc:1864 editor_actions.cc:298
+#: editor.cc:1876 editor_actions.cc:305
 msgid "Set Punch from Selection"
 msgstr "Создать врезку из выделения"
 
-#: editor.cc:1865 editor_actions.cc:299
+#: editor.cc:1877 editor_actions.cc:306
 msgid "Set Session Start/End from Selection"
 msgstr "Задать начало и конец по выделению"
 
-#: editor.cc:1868
+#: editor.cc:1880
 msgid "Add Range Markers"
 msgstr "Добавить маркеры областей"
 
-#: editor.cc:1871
+#: editor.cc:1883
 msgid "Crop Region to Range"
 msgstr "Обрезать область по выделению"
 
-#: editor.cc:1872
+#: editor.cc:1884
 msgid "Fill Range with Region"
 msgstr "Заполнить диапазон областью"
 
-#: editor.cc:1873 editor_actions.cc:311
+#: editor.cc:1885 editor_actions.cc:318
 msgid "Duplicate Range"
 msgstr "Продублировать диапазон"
 
-#: editor.cc:1876
+#: editor.cc:1888
 msgid "Consolidate Range"
 msgstr "Объединить диапазон"
 
-#: editor.cc:1877
+#: editor.cc:1889
 msgid "Consolidate Range With Processing"
 msgstr "Объединить диапазон с обработкой"
 
-#: editor.cc:1878
+#: editor.cc:1890
 msgid "Bounce Range to Region List"
 msgstr "Свести диапазон в список областей"
 
-#: editor.cc:1879
+#: editor.cc:1891
 msgid "Bounce Range to Region List With Processing"
 msgstr "Свести выделение в список областей с обработкой"
 
-#: editor.cc:1880 editor_markers.cc:953
+#: editor.cc:1892 editor_markers.cc:946
 msgid "Export Range..."
 msgstr "Экспортировать выделение…"
 
-#: editor.cc:1882
+#: editor.cc:1894
 msgid "Export Video Range..."
 msgstr "Экспортировать фрагмент видео..."
 
-#: editor.cc:1898 editor.cc:1979 editor_actions.cc:303
+#: editor.cc:1910 editor.cc:1992 editor_actions.cc:310
 msgid "Play From Edit Point"
 msgstr "Воспроизвести от курсора редактора"
 
-#: editor.cc:1899 editor.cc:1980
+#: editor.cc:1911 editor.cc:1993
 msgid "Play From Start"
 msgstr "Воспроизвести с начала"
 
-#: editor.cc:1900
+#: editor.cc:1912
 msgid "Play Region"
 msgstr "Воспроизвести область"
 
-#: editor.cc:1902
+#: editor.cc:1914
 msgid "Loop Region"
 msgstr "Создать петлю из области"
 
-#: editor.cc:1912 editor.cc:1989
+#: editor.cc:1924 editor.cc:2002
 msgid "Select All in Track"
 msgstr "Выделить всё на дорожке"
 
-#: editor.cc:1913 editor.cc:1990 editor_actions.cc:194
+#: editor.cc:1925 editor.cc:2003 editor_actions.cc:194
 msgid "Select All Objects"
 msgstr "Выделить все объекты"
 
-#: editor.cc:1914 editor.cc:1991
+#: editor.cc:1926 editor.cc:2004
 msgid "Invert Selection in Track"
 msgstr "Обратить выделение на дорожке"
 
-#: editor.cc:1915 editor.cc:1992 editor_actions.cc:197
+#: editor.cc:1927 editor.cc:2005 editor_actions.cc:197
 msgid "Invert Selection"
 msgstr "Обратить выделение"
 
-#: editor.cc:1917
+#: editor.cc:1929
 msgid "Set Range to Loop Range"
 msgstr "Установить диапазон по диапазону петли"
 
-#: editor.cc:1918
+#: editor.cc:1930 editor_actions.cc:200
 msgid "Set Range to Punch Range"
 msgstr "Установить диапазон по диапазону врезки"
 
-#: editor.cc:1920 editor.cc:1994 editor_actions.cc:199 editor_actions.cc:200
+#: editor.cc:1931 editor_actions.cc:201
+msgid "Set Range to Selected Regions"
+msgstr ""
+
+#: editor.cc:1933 editor.cc:2007 editor_actions.cc:203 editor_actions.cc:204
 msgid "Select All After Edit Point"
 msgstr "Выделить всё после курсора редактора"
 
-#: editor.cc:1921 editor.cc:1995 editor_actions.cc:201 editor_actions.cc:202
+#: editor.cc:1934 editor.cc:2008 editor_actions.cc:205 editor_actions.cc:206
 msgid "Select All Before Edit Point"
 msgstr "Выделить всё до курсора редактора"
 
-#: editor.cc:1922 editor.cc:1996
+#: editor.cc:1935 editor.cc:2009
 msgid "Select All After Playhead"
 msgstr "Выделить всё после указателя"
 
-#: editor.cc:1923 editor.cc:1997
+#: editor.cc:1936 editor.cc:2010
 msgid "Select All Before Playhead"
 msgstr "Выделить всё до указателя"
 
-#: editor.cc:1924
+#: editor.cc:1937
 msgid "Select All Between Playhead and Edit Point"
 msgstr "Выделить всё между указателем и курсором редактора"
 
-#: editor.cc:1925
+#: editor.cc:1938
 msgid "Select All Within Playhead and Edit Point"
 msgstr "Выделить всё между указателем и точкой редактирования"
 
-#: editor.cc:1926
+#: editor.cc:1939
 msgid "Select Range Between Playhead and Edit Point"
 msgstr "Создать выделение между указателем и курсором редактора"
 
-#: editor.cc:1928 editor.cc:1999 editor_actions.cc:131 editor_actions.cc:132
+#: editor.cc:1941 editor.cc:2012 editor_actions.cc:131 editor_actions.cc:132
 msgid "Select"
 msgstr "Выделить"
 
-#: editor.cc:1936 editor.cc:2007 editor_actions.cc:337 processor_box.cc:2453
+#: editor.cc:1949 editor.cc:2020 editor_actions.cc:344 processor_box.cc:2518
 msgid "Cut"
 msgstr "Вырезать"
 
-#: editor.cc:1937 editor.cc:2008 editor_actions.cc:341 processor_box.cc:2456
+#: editor.cc:1950 editor.cc:2021 editor_actions.cc:348 processor_box.cc:2521
 msgid "Copy"
 msgstr "Копировать"
 
-#: editor.cc:1938 editor.cc:2009 editor_actions.cc:342 processor_box.cc:2464
+#: editor.cc:1951 editor.cc:2022 editor_actions.cc:349 processor_box.cc:2529
 msgid "Paste"
 msgstr "Вставить"
 
-#: editor.cc:1942 editor_actions.cc:91
+#: editor.cc:1955 editor_actions.cc:91
 msgid "Align"
 msgstr "Выровнять"
 
-#: editor.cc:1943
+#: editor.cc:1956
 msgid "Align Relative"
 msgstr "Выровнять относительно"
 
-#: editor.cc:1950
+#: editor.cc:1963
 msgid "Insert Selected Region"
 msgstr "Вставить выделенную область"
 
-#: editor.cc:1951
+#: editor.cc:1964
 msgid "Insert Existing Media"
 msgstr "Вставить существующие данные"
 
-#: editor.cc:1960 editor.cc:2016
+#: editor.cc:1973 editor.cc:2029
 msgid "Nudge Entire Track Later"
 msgstr "Толкнуть всю дорожку вперёд"
 
-#: editor.cc:1961 editor.cc:2017
+#: editor.cc:1974 editor.cc:2030
 msgid "Nudge Track After Edit Point Later"
 msgstr "Толкнуть дорожку вперёд после курсора редактора"
 
-#: editor.cc:1962 editor.cc:2018
+#: editor.cc:1975 editor.cc:2031
 msgid "Nudge Entire Track Earlier"
 msgstr "Толкнуть всю дорожку назад"
 
-#: editor.cc:1963 editor.cc:2019
+#: editor.cc:1976 editor.cc:2032
 msgid "Nudge Track After Edit Point Earlier"
 msgstr "Толкнуть дорожку назад после курсора редактора"
 
-#: editor.cc:1965 editor.cc:2021
+#: editor.cc:1978 editor.cc:2034
 msgid "Nudge"
 msgstr "Толкнуть"
 
-#: editor.cc:2235
+#: editor.cc:2249
 msgid ""
 "Playhead position stored with a negative value - ignored (use zero instead)"
 msgstr ""
 "Позиция указателя воспроизведения сохранена с негативным значением и будет "
 "проигнорирована. Вместо неё будет использовано начало сеанса."
 
-#: editor.cc:3006 editor.cc:3707 editor.cc:3778 midi_channel_selector.cc:157
+#: editor.cc:3027 editor.cc:3724 editor.cc:3795 midi_channel_selector.cc:157
 #: midi_channel_selector.cc:395 midi_channel_selector.cc:431
 msgid "All"
 msgstr "Все"
 
-#: editor.cc:3210
+#: editor.cc:3227
 msgid "Smart Mode (add Range functions to Grab mode)"
 msgstr "Универсальный режим (захват + работа с диапазонами)"
 
-#: editor.cc:3211
+#: editor.cc:3228
 msgid "Grab Mode (select/move objects)"
 msgstr "Захват (выделение и перемещение объектов)"
 
-#: editor.cc:3212
+#: editor.cc:3229
 msgid "Cut Mode (split regions)"
 msgstr "Нарезка (разделение областей)"
 
-#: editor.cc:3213
+#: editor.cc:3230
 msgid "Range Mode (select time ranges)"
 msgstr "Диапазоны (выделение диапазонов времени)"
 
-#: editor.cc:3214
+#: editor.cc:3231
 msgid "Draw Mode (draw and edit gain/notes/automation)"
 msgstr "Рисование (рисование и правка усиления, нот и автоматизации)"
 
-#: editor.cc:3215
+#: editor.cc:3232
 msgid "Stretch Mode (time-stretch audio and midi regions, preserving pitch)"
 msgstr "Растягивание (аудио и MIDI во времени с сохранением высоты тона)"
 
-#: editor.cc:3216
+#: editor.cc:3233
 msgid "Audition Mode (listen to regions)"
 msgstr "Прослушивание (областей)"
 
-#: editor.cc:3217
-msgid "Internal Edit Mode (edit notes and gain curves inside regions)"
-msgstr "Правка внутри областей (нот и кривых усиления)"
+#: editor.cc:3234
+msgid "Internal Edit Mode (edit notes and automation points)"
+msgstr "Правка содержимого областей (правка нот и точек автоматизации)"
 
-#: editor.cc:3218
+#: editor.cc:3235
 msgid ""
 "Groups: click to (de)activate\n"
 "Context-click for other operations"
@@ -3234,59 +3288,59 @@ msgstr ""
 "Группы: щёлкните для (де)активации\n"
 "Щелчок другой клавишей вызывает контекстное меню"
 
-#: editor.cc:3219
+#: editor.cc:3236
 msgid "Nudge Region/Selection Later"
 msgstr "Толкнуть область или выделение вперёд"
 
-#: editor.cc:3220
+#: editor.cc:3237
 msgid "Nudge Region/Selection Earlier"
 msgstr "Толкнуть область или выделение назад"
 
-#: editor.cc:3221 editor_actions.cc:262
+#: editor.cc:3238 editor_actions.cc:269
 msgid "Zoom In"
 msgstr "Увеличить"
 
-#: editor.cc:3222 editor_actions.cc:261
+#: editor.cc:3239 editor_actions.cc:268
 msgid "Zoom Out"
 msgstr "Уменьшить"
 
-#: editor.cc:3223
+#: editor.cc:3240
 msgid "Zoom to Time Scale"
 msgstr "Увеличить до шкалы времени"
 
-#: editor.cc:3224 editor.cc:3729 editor_actions.cc:263
+#: editor.cc:3241 editor.cc:3746 editor_actions.cc:270
 msgid "Zoom to Session"
 msgstr "Показать всё"
 
-#: editor.cc:3225
+#: editor.cc:3242
 msgid "Zoom focus"
 msgstr "Фокус при масштабировании"
 
-#: editor.cc:3226
+#: editor.cc:3243
 msgid "Expand Tracks"
 msgstr "Увеличить дорожки по высоте"
 
-#: editor.cc:3227
+#: editor.cc:3244
 msgid "Shrink Tracks"
 msgstr "Уменьшить дорожки по высоте"
 
-#: editor.cc:3228
+#: editor.cc:3245
 msgid "Number of visible tracks"
 msgstr "Количество видимых дорожек"
 
-#: editor.cc:3229
+#: editor.cc:3246
 msgid "Snap/Grid Units"
 msgstr "Единица привязки/сетки"
 
-#: editor.cc:3230
+#: editor.cc:3247
 msgid "Snap/Grid Mode"
 msgstr "Режим привязки/сетки"
 
-#: editor.cc:3232
+#: editor.cc:3249
 msgid "Edit Mode"
 msgstr "Режим редактирования"
 
-#: editor.cc:3233
+#: editor.cc:3250
 msgid ""
 "Nudge Clock\n"
 "(controls distance used to nudge regions and selections)"
@@ -3294,124 +3348,124 @@ msgstr ""
 "Сдвиг часов\n"
 "(расстояние, на которое подтолкнуть области и выделения)"
 
-#: editor.cc:3501 editor_actions.cc:313
+#: editor.cc:3518 editor_actions.cc:320
 msgid "Command|Undo"
 msgstr "Отменить"
 
-#: editor.cc:3503
+#: editor.cc:3520
 msgid "Command|Undo (%1)"
 msgstr "Отменить (%1)"
 
-#: editor.cc:3510 editor_actions.cc:315 editor_actions.cc:316
-#: editor_actions.cc:317
+#: editor.cc:3527 editor_actions.cc:322 editor_actions.cc:323
+#: editor_actions.cc:324
 msgid "Redo"
 msgstr "Вернуть"
 
-#: editor.cc:3512
+#: editor.cc:3529
 msgid "Redo (%1)"
 msgstr "Вернуть (%1)"
 
-#: editor.cc:3531 editor.cc:3555 editor_actions.cc:110 editor_actions.cc:1844
+#: editor.cc:3548 editor.cc:3572 editor_actions.cc:110 editor_actions.cc:1858
 msgid "Duplicate"
 msgstr "Продублировать"
 
-#: editor.cc:3532
+#: editor.cc:3549
 msgid "Number of duplications:"
 msgstr "Количество копий:"
 
-#: editor.cc:3706 route_group_dialog.cc:51 time_info_box.cc:67
+#: editor.cc:3723 route_group_dialog.cc:51 time_info_box.cc:67
 msgid "Selection"
 msgstr "Выделение"
 
-#: editor.cc:3709
+#: editor.cc:3726
 msgid "Fit 1 track"
 msgstr "Уместить 1 дорожку"
 
-#: editor.cc:3710
+#: editor.cc:3727
 msgid "Fit 2 tracks"
 msgstr "Уместить 2 дорожки"
 
-#: editor.cc:3711
+#: editor.cc:3728
 msgid "Fit 4 tracks"
 msgstr "Уместить 4 дорожки"
 
-#: editor.cc:3712
+#: editor.cc:3729
 msgid "Fit 8 tracks"
 msgstr "Уместить 8 дорожек"
 
-#: editor.cc:3713
+#: editor.cc:3730
 msgid "Fit 16 tracks"
 msgstr "Уместить 16 дорожек"
 
-#: editor.cc:3714
+#: editor.cc:3731
 msgid "Fit 24 tracks"
 msgstr "Уместить 24 дорожки"
 
-#: editor.cc:3715
+#: editor.cc:3732
 msgid "Fit 32 tracks"
 msgstr "Уместить 32 дорожки"
 
-#: editor.cc:3716
+#: editor.cc:3733
 msgid "Fit 48 tracks"
 msgstr "Уместить 48 дорожек"
 
-#: editor.cc:3717
+#: editor.cc:3734
 msgid "Fit All tracks"
 msgstr "Уместить все дорожки"
 
-#: editor.cc:3718
+#: editor.cc:3735
 msgid "Fit Selection"
 msgstr "Уместить выделение"
 
-#: editor.cc:3720
+#: editor.cc:3737
 msgid "Zoom to 10 ms"
 msgstr "Отмасштабировать до 10 мс"
 
-#: editor.cc:3721
+#: editor.cc:3738
 msgid "Zoom to 100 ms"
 msgstr "Отмасштабировать до 100 мс"
 
-#: editor.cc:3722
+#: editor.cc:3739
 msgid "Zoom to 1 sec"
 msgstr "Отмасштабировать до 1 сек"
 
-#: editor.cc:3723
+#: editor.cc:3740
 msgid "Zoom to 10 sec"
 msgstr "Отмасштабировать до 10 сек"
 
-#: editor.cc:3724
+#: editor.cc:3741
 msgid "Zoom to 1 min"
 msgstr "Отмасштабировать до 1 мин"
 
-#: editor.cc:3725
+#: editor.cc:3742
 msgid "Zoom to 10 min"
 msgstr "Отмасштабировать до 10 мин"
 
-#: editor.cc:3726
+#: editor.cc:3743
 msgid "Zoom to 1 hour"
 msgstr "Отмасштабировать до 1 часа"
 
-#: editor.cc:3727
+#: editor.cc:3744
 msgid "Zoom to 8 hours"
 msgstr "Отмасштабировать до 8 час"
 
-#: editor.cc:3728
+#: editor.cc:3745
 msgid "Zoom to 24 hours"
 msgstr "Отмасштабировать до 24 час"
 
-#: editor.cc:3730
+#: editor.cc:3747
 msgid "Zoom to Range/Region Selection"
 msgstr "Отмасштабировать до выбранного диапазона/области"
 
-#: editor.cc:3800
+#: editor.cc:3817
 msgid "*"
 msgstr "*"
 
-#: editor.cc:4120
+#: editor.cc:4137
 msgid "Playlist Deletion"
 msgstr "Удаление списка воспроизведения"
 
-#: editor.cc:4121
+#: editor.cc:4138
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If it is kept, its audio files will not be cleaned.\n"
@@ -3421,54 +3475,54 @@ msgstr ""
 "Если его оставить, связанные звуковые файлы не будут подчищены.\n"
 "Если его удалить, будут подчищены и связанные звуковые файлы."
 
-#: editor.cc:4131
+#: editor.cc:4148
 msgid "Delete Playlist"
 msgstr "Удалить список"
 
-#: editor.cc:4132
+#: editor.cc:4149
 msgid "Keep Playlist"
 msgstr "Сохранить список"
 
-#: editor.cc:4133 editor_audio_import.cc:594 editor_ops.cc:6174
-#: engine_dialog.cc:2107 sfdb_freesound_mootcher.cc:69 processor_box.cc:2221
-#: processor_box.cc:2246
+#: editor.cc:4150 editor_audio_import.cc:597 editor_ops.cc:6407
+#: engine_dialog.cc:2679 sfdb_freesound_mootcher.cc:69 processor_box.cc:2286
+#: processor_box.cc:2311
 msgid "Cancel"
 msgstr "Отмена"
 
-#: editor.cc:4275
+#: editor.cc:4292
 msgid "new playlists"
 msgstr "Создать списки воспроизведения"
 
-#: editor.cc:4291
+#: editor.cc:4308
 msgid "copy playlists"
 msgstr "Скопировать списки воспроизведения"
 
-#: editor.cc:4306
+#: editor.cc:4323
 msgid "clear playlists"
 msgstr "Очистить списки воспроизведения"
 
-#: editor.cc:5046
+#: editor.cc:5068
 msgid "Please wait while %1 loads visual data."
 msgstr "Дождитесь загрузки визуальных данных в %1."
 
-#: editor.cc:5901 editor.cc:5932 editor_markers.cc:985 panner_ui.cc:410
-#: processor_box.cc:2484
+#: editor.cc:5920 editor.cc:5951 editor_markers.cc:978 panner_ui.cc:410
+#: processor_box.cc:2549
 msgid "Edit..."
 msgstr "Изменить"
 
-#: editor.cc:5934 editor_actions.cc:1939
+#: editor.cc:5953 editor_actions.cc:1953
 msgid "Legatize"
 msgstr "Добавить легато"
 
-#: editor.cc:5936 editor_actions.cc:1938
+#: editor.cc:5955 editor_actions.cc:1952
 msgid "Quantize..."
 msgstr "Квантование..."
 
-#: editor.cc:5938 editor_actions.cc:1941
+#: editor.cc:5957 editor_actions.cc:1955
 msgid "Remove Overlap"
 msgstr "Убрать перекрытие"
 
-#: editor.cc:5940 editor_actions.cc:1940
+#: editor.cc:5959 editor_actions.cc:1954
 msgid "Transform..."
 msgstr "Преобразовать..."
 
@@ -3516,8 +3570,8 @@ msgstr "Слои"
 msgid "Position"
 msgstr "Положение"
 
-#: editor_actions.cc:105 gain_meter.cc:156 gain_meter.cc:825 panner_ui.cc:178
-#: panner_ui.cc:635
+#: editor_actions.cc:105 gain_meter.cc:158 gain_meter.cc:827 panner_ui.cc:176
+#: panner_ui.cc:635 route_time_axis.cc:528
 msgid "Trim"
 msgstr "Обрезать"
 
@@ -3525,11 +3579,11 @@ msgstr "Обрезать"
 msgid "Gain"
 msgstr "Усиление"
 
-#: editor_actions.cc:107 editor_actions.cc:561
+#: editor_actions.cc:107 editor_actions.cc:572
 msgid "Ranges"
 msgstr "Выделения"
 
-#: editor_actions.cc:108 editor_actions.cc:1840 session_option_editor.cc:135
+#: editor_actions.cc:108 editor_actions.cc:1854 session_option_editor.cc:135
 #: session_option_editor.cc:144 session_option_editor.cc:151
 msgid "Fades"
 msgstr "Фейды"
@@ -3562,7 +3616,7 @@ msgstr "Параметры MIDI"
 msgid "Misc Options"
 msgstr "Прочие параметры"
 
-#: editor_actions.cc:119 rc_option_editor.cc:1801 route_group_dialog.cc:54
+#: editor_actions.cc:119 rc_option_editor.cc:2283 route_group_dialog.cc:54
 #: session_option_editor.cc:243 session_option_editor.cc:250
 msgid "Monitoring"
 msgstr "Мониторинг"
@@ -3607,7 +3661,7 @@ msgstr "Подвыборки"
 msgid "Timecode fps"
 msgstr "Скорость (FPS) тайм-кода"
 
-#: editor_actions.cc:141 route_time_axis.cc:575
+#: editor_actions.cc:141 route_time_axis.cc:586
 msgid "Height"
 msgstr "Высота"
 
@@ -3739,978 +3793,998 @@ msgstr "К концу области"
 msgid "Select All Tracks"
 msgstr "Выбрать все дорожки"
 
-#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2470
+#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2535
 msgid "Deselect All"
 msgstr "Снять все выделения"
 
-#: editor_actions.cc:204
+#: editor_actions.cc:199
+msgid "Set Range in Loop Range"
+msgstr ""
+
+#: editor_actions.cc:208
 msgid "Select All Overlapping Edit Range"
 msgstr "Выделить всю пересекающуюся область правки"
 
-#: editor_actions.cc:205
+#: editor_actions.cc:209
 msgid "Select All Inside Edit Range"
 msgstr "Выделить всё внутри области правки"
 
-#: editor_actions.cc:207
+#: editor_actions.cc:211
 msgid "Select Edit Range"
 msgstr "Выделить область правки"
 
-#: editor_actions.cc:209
+#: editor_actions.cc:213
 msgid "Select All in Punch Range"
 msgstr "Выделить все в области врезки"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:214
 msgid "Select All in Loop Range"
 msgstr "Выделить всё в закольцованной области"
 
-#: editor_actions.cc:212
+#: editor_actions.cc:216
 msgid "Select Next Track or Bus"
 msgstr "Выбрать следующую дорожку или шину"
 
-#: editor_actions.cc:213
+#: editor_actions.cc:217
 msgid "Select Previous Track or Bus"
 msgstr "Выбрать предыдущую дорожку или шину"
 
-#: editor_actions.cc:215
+#: editor_actions.cc:219
 msgid "Toggle Record Enable"
 msgstr "Переключить готовность к записи"
 
-#: editor_actions.cc:217
+#: editor_actions.cc:221
 msgid "Toggle Solo"
 msgstr "Переключить соло"
 
-#: editor_actions.cc:219
+#: editor_actions.cc:223
 msgid "Toggle Mute"
 msgstr "Переключить приглушение"
 
-#: editor_actions.cc:221
+#: editor_actions.cc:225
 msgid "Toggle Solo Isolate"
 msgstr "Переключить изолирование солирования"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:230
 msgid "Save View %1"
 msgstr "Сохранить вид %1"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:236
 msgid "Go to View %1"
 msgstr "Перейти к виду %1"
 
-#: editor_actions.cc:238
+#: editor_actions.cc:242
 msgid "Locate to Mark %1"
 msgstr "Перейти к маркеру %1"
 
-#: editor_actions.cc:242 editor_actions.cc:243
+#: editor_actions.cc:246 editor_actions.cc:247
 msgid "Jump to Next Mark"
 msgstr "К следующему маркеру"
 
-#: editor_actions.cc:244 editor_actions.cc:245
+#: editor_actions.cc:248 editor_actions.cc:249
 msgid "Jump to Previous Mark"
 msgstr "К предыдущему маркеру"
 
-#: editor_actions.cc:247 editor_actions.cc:248
+#: editor_actions.cc:251
+msgid "Set Session Start from Playhead"
+msgstr ""
+
+#: editor_actions.cc:252
+msgid "Set Session End from Playhead"
+msgstr ""
+
+#: editor_actions.cc:254 editor_actions.cc:255
 msgid "Add Mark from Playhead"
 msgstr "Добавить маркер по указателю"
 
-#: editor_actions.cc:250 editor_actions.cc:251
+#: editor_actions.cc:257 editor_actions.cc:258
 msgid "Remove Mark at Playhead"
 msgstr "Удалить маркер воспроизведения"
 
-#: editor_actions.cc:253
+#: editor_actions.cc:260
 msgid "Nudge Next Later"
 msgstr "Сдвиг следующего позже"
 
-#: editor_actions.cc:254
+#: editor_actions.cc:261
 msgid "Nudge Next Earlier"
 msgstr "Сдвиг следующего раньше"
 
-#: editor_actions.cc:256
+#: editor_actions.cc:263
 msgid "Nudge Playhead Forward"
 msgstr "Толкнуть указатель вперёд"
 
-#: editor_actions.cc:257
+#: editor_actions.cc:264
 msgid "Nudge Playhead Backward"
 msgstr "Толкнуть указатель назад"
 
-#: editor_actions.cc:258
+#: editor_actions.cc:265
 msgid "Playhead To Next Grid"
 msgstr "К следующему делению сетки"
 
-#: editor_actions.cc:259
+#: editor_actions.cc:266
 msgid "Playhead To Previous Grid"
 msgstr "К предыдущему делению сетки"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:271
 msgid "Zoom to Selection"
 msgstr "Масштабировать до выделения"
 
-#: editor_actions.cc:265
+#: editor_actions.cc:272
 msgid "Toggle Zoom State"
 msgstr "Переключить состояния масштаба"
 
-#: editor_actions.cc:267
+#: editor_actions.cc:274
 msgid "Expand Track Height"
 msgstr "Увеличить высоту дорожки"
 
-#: editor_actions.cc:268
+#: editor_actions.cc:275
 msgid "Shrink Track Height"
 msgstr "Уменьшить высоту дорожки"
 
-#: editor_actions.cc:270
+#: editor_actions.cc:277
 msgid "Move Selected Tracks Up"
 msgstr "Поднять выбранные дорожки"
 
-#: editor_actions.cc:272
+#: editor_actions.cc:279
 msgid "Move Selected Tracks Down"
 msgstr "Опустить выбранные дорожки"
 
-#: editor_actions.cc:275
+#: editor_actions.cc:282
 msgid "Scroll Tracks Up"
 msgstr "Прокрутить дорожки вверх"
 
-#: editor_actions.cc:277
+#: editor_actions.cc:284
 msgid "Scroll Tracks Down"
 msgstr "Прокрутить дорожки вниз"
 
-#: editor_actions.cc:279
+#: editor_actions.cc:286
 msgid "Step Tracks Up"
 msgstr "Перейти на дорожку выше"
 
-#: editor_actions.cc:281
+#: editor_actions.cc:288
 msgid "Step Tracks Down"
 msgstr "Перейти на дорожку ниже"
 
-#: editor_actions.cc:284
+#: editor_actions.cc:291
 msgid "Scroll Backward"
 msgstr "Прокрутить назад"
 
-#: editor_actions.cc:285
+#: editor_actions.cc:292
 msgid "Scroll Forward"
 msgstr "Прокрутить вперёд"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:293
 msgid "Center Playhead"
 msgstr "Указатель по центру"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:294
 msgid "Center Edit Point"
 msgstr "Центрировать точку редактирования"
 
-#: editor_actions.cc:289
+#: editor_actions.cc:296
 msgid "Playhead Forward"
 msgstr "Указатель вперёд"
 
-#: editor_actions.cc:290
+#: editor_actions.cc:297
 msgid "Playhead Backward"
 msgstr "Указатель назад"
 
-#: editor_actions.cc:292
+#: editor_actions.cc:299
 msgid "Playhead to Active Mark"
 msgstr "Указатель к активному маркеру"
 
-#: editor_actions.cc:293
+#: editor_actions.cc:300
 msgid "Active Mark to Playhead"
 msgstr "Активный маркер к указателю воспроизведения"
 
-#: editor_actions.cc:295
+#: editor_actions.cc:302
 msgid "Use Skip Ranges"
 msgstr "Исп. пропуск диапазонов"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:309
 msgid "Play Selected Regions"
 msgstr "Воспроизвести выбранные области"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:311
 msgid "Play from Edit Point and Return"
 msgstr "Воспроизвести от курсора редактора и вернуться"
 
-#: editor_actions.cc:306
+#: editor_actions.cc:313
 msgid "Play Edit Range"
 msgstr "Воспроизвести изменяемое выделение"
 
-#: editor_actions.cc:308
+#: editor_actions.cc:315
 msgid "Playhead to Mouse"
 msgstr "Указатель к курсору мыши"
 
-#: editor_actions.cc:309
+#: editor_actions.cc:316
 msgid "Active Marker to Mouse"
 msgstr "Активный маркер к указателю мыши"
 
-#: editor_actions.cc:319
+#: editor_actions.cc:326
 msgid "Undo Selection Change"
 msgstr "Отменить смену выделения"
 
-#: editor_actions.cc:320
+#: editor_actions.cc:327
 msgid "Redo Selection Change"
 msgstr "Повторить смену выделения"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:329
 msgid "Export Audio"
 msgstr "Экспортировать звук"
 
-#: editor_actions.cc:323 export_dialog.cc:396
+#: editor_actions.cc:330 export_dialog.cc:396
 msgid "Export Range"
 msgstr "Экспортировать область"
 
-#: editor_actions.cc:328
+#: editor_actions.cc:335
 msgid "Separate Using Punch Range"
 msgstr "Разделить по выделению врезки"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:338
 msgid "Separate Using Loop Range"
 msgstr "Разделить по выделению петли"
 
-#: editor_actions.cc:334 editor_actions.cc:356
+#: editor_actions.cc:341 editor_actions.cc:363
 msgid "Crop"
 msgstr "Обрезать"
 
-#: editor_actions.cc:344
+#: editor_actions.cc:351
 msgid "Fade Range Selection"
 msgstr "Диапазон появления"
 
-#: editor_actions.cc:346
+#: editor_actions.cc:353
 msgid "Set Tempo from Edit Range = Bar"
 msgstr "Установить темп, считая что диапазон редактирования = такт"
 
-#: editor_actions.cc:348
+#: editor_actions.cc:355
 msgid "Log"
 msgstr "Журнал"
 
-#: editor_actions.cc:351 editor_actions.cc:353
+#: editor_actions.cc:358 editor_actions.cc:360
 msgid "Move to Next Transient"
 msgstr "Перейти к следующей переменной"
 
-#: editor_actions.cc:352 editor_actions.cc:354
+#: editor_actions.cc:359 editor_actions.cc:361
 msgid "Move to Previous Transient"
 msgstr "Перейти к предыдущей переменной"
 
-#: editor_actions.cc:358 editor_actions.cc:361
+#: editor_actions.cc:365 editor_actions.cc:368
 msgid "Start Range"
 msgstr "Начать выделение"
 
-#: editor_actions.cc:359 editor_actions.cc:362
+#: editor_actions.cc:366 editor_actions.cc:369
 msgid "Finish Range"
 msgstr "Закончить выделение"
 
-#: editor_actions.cc:394
+#: editor_actions.cc:401
 msgid "Follow Playhead"
 msgstr "Следовать за указателем"
 
-#: editor_actions.cc:395
+#: editor_actions.cc:402
 msgid "Remove Last Capture"
 msgstr "Удалить последнюю запись"
 
-#: editor_actions.cc:397
+#: editor_actions.cc:404
 msgid "Stationary Playhead"
 msgstr "Неподвижный указатель"
 
-#: editor_actions.cc:399 insert_time_dialog.cc:32
+#: editor_actions.cc:406 insert_remove_time_dialog.cc:32
 msgid "Insert Time"
 msgstr "Вставить промежуток времени"
 
-#: editor_actions.cc:402
+#: editor_actions.cc:408 insert_remove_time_dialog.cc:32
+msgid "Remove Time"
+msgstr ""
+
+#: editor_actions.cc:413
 msgid "Toggle Active"
 msgstr "Переключить активность"
 
-#: editor_actions.cc:404 editor_actions.cc:1766 editor_markers.cc:921
-#: editor_markers.cc:986 editor_snapshots.cc:122 mixer_strip.cc:1560
-#: route_time_axis.cc:856
+#: editor_actions.cc:415 editor_actions.cc:1780 editor_markers.cc:914
+#: editor_markers.cc:979 editor_snapshots.cc:122 mixer_strip.cc:1603
+#: route_time_axis.cc:867
 msgid "Remove"
 msgstr "Удалить"
 
-#: editor_actions.cc:409
+#: editor_actions.cc:420
 msgid "Fit Selection (Vertical)"
 msgstr "Уместить выделение по вертикали"
 
-#: editor_actions.cc:411 time_axis_view.cc:1371
+#: editor_actions.cc:422 time_axis_view.cc:1382
 msgid "Largest"
 msgstr "Огромная"
 
-#: editor_actions.cc:414 time_axis_view.cc:1372
+#: editor_actions.cc:425 time_axis_view.cc:1383
 msgid "Larger"
 msgstr "Больше"
 
-#: editor_actions.cc:417 editor_rulers.cc:249 time_axis_view.cc:1373
+#: editor_actions.cc:428 editor_rulers.cc:249 time_axis_view.cc:1384
 msgid "Large"
 msgstr "Большая"
 
-#: editor_actions.cc:423 editor_rulers.cc:253 time_axis_view.cc:1375
+#: editor_actions.cc:434 editor_rulers.cc:253 time_axis_view.cc:1386
 msgid "Small"
 msgstr "Маленькая"
 
-#: editor_actions.cc:427
+#: editor_actions.cc:438
 msgid "Sound Selected MIDI Notes"
 msgstr "Воспроизводить выделяемые MIDI-ноты"
 
-#: editor_actions.cc:432
+#: editor_actions.cc:443
 msgid "Zoom Focus Left"
 msgstr "Влево"
 
-#: editor_actions.cc:433
+#: editor_actions.cc:444
 msgid "Zoom Focus Right"
 msgstr "Вправо"
 
-#: editor_actions.cc:434
+#: editor_actions.cc:445
 msgid "Zoom Focus Center"
 msgstr "По центру"
 
-#: editor_actions.cc:435
+#: editor_actions.cc:446
 msgid "Zoom Focus Playhead"
 msgstr "По указателю"
 
-#: editor_actions.cc:436
+#: editor_actions.cc:447
 msgid "Zoom Focus Mouse"
 msgstr "По курсору мыши"
 
-#: editor_actions.cc:437
+#: editor_actions.cc:448
 msgid "Zoom Focus Edit Point"
 msgstr "По точке редактирования"
 
-#: editor_actions.cc:439
+#: editor_actions.cc:450
 msgid "Next Zoom Focus"
 msgstr "Следующий вариант фокуса"
 
-#: editor_actions.cc:445
+#: editor_actions.cc:456
 msgid "Smart Object Mode"
 msgstr "Универсальный режим"
 
-#: editor_actions.cc:448
+#: editor_actions.cc:459
 msgid "Smart"
 msgstr "Универсальный"
 
-#: editor_actions.cc:451
+#: editor_actions.cc:462
 msgid "Object Tool"
 msgstr "Объект"
 
-#: editor_actions.cc:456
+#: editor_actions.cc:467
 msgid "Range Tool"
 msgstr "Выделение"
 
-#: editor_actions.cc:461
+#: editor_actions.cc:472
 msgid "Note Drawing Tool"
 msgstr "Инструмент рисования нот"
 
-#: editor_actions.cc:466
+#: editor_actions.cc:477
 msgid "Audition Tool"
 msgstr "Инструмент прослушивания"
 
-#: editor_actions.cc:471
+#: editor_actions.cc:482
 msgid "Time FX Tool"
 msgstr "Растяжение во времени"
 
-#: editor_actions.cc:476
+#: editor_actions.cc:487
 msgid "Content Tool"
 msgstr "Правка содержимого"
 
-#: editor_actions.cc:482
+#: editor_actions.cc:493
 msgid "Cut Tool"
 msgstr "Инструмент обрезки"
 
-#: editor_actions.cc:488
+#: editor_actions.cc:499
 msgid "Step Mouse Mode"
 msgstr "Режим шага мыши"
 
-#: editor_actions.cc:495
+#: editor_actions.cc:506
 msgid "Change Edit Point"
 msgstr "Изменить точку редактирования"
 
-#: editor_actions.cc:496
+#: editor_actions.cc:507
 msgid "Change Edit Point Including Marker"
 msgstr "Изменить точку редактирования, включая маркер"
 
-#: editor_actions.cc:501
+#: editor_actions.cc:512
 msgid "EditMode|Lock"
 msgstr "Блок"
 
-#: editor_actions.cc:502
+#: editor_actions.cc:513
 msgid "Cycle Edit Mode"
 msgstr "Циклически менять режим редактирования"
 
-#: editor_actions.cc:504
+#: editor_actions.cc:515
 msgid "Snap to"
 msgstr "Привязка"
 
-#: editor_actions.cc:505
+#: editor_actions.cc:516
 msgid "Snap Mode"
 msgstr "Режим привязки"
 
-#: editor_actions.cc:512
+#: editor_actions.cc:523
 msgid "Next Snap Mode"
 msgstr "Следующий режим привязки"
 
-#: editor_actions.cc:513
+#: editor_actions.cc:524
 msgid "Next Snap Choice"
 msgstr "Следующий выбор привязки"
 
-#: editor_actions.cc:514
+#: editor_actions.cc:525
 msgid "Next Musical Snap Choice"
 msgstr "Следующий вариант привязки (такты, доли)"
 
-#: editor_actions.cc:515
+#: editor_actions.cc:526
 msgid "Previous Snap Choice"
 msgstr "Предыдущий вариант привязки"
 
-#: editor_actions.cc:516
+#: editor_actions.cc:527
 msgid "Previous Musical Snap Choice"
 msgstr "Предыдущий вариант привязки (такты, доли)"
 
-#: editor_actions.cc:521
+#: editor_actions.cc:532
 msgid "Snap to CD Frame"
 msgstr "К выборкам CD"
 
-#: editor_actions.cc:522
+#: editor_actions.cc:533
 msgid "Snap to Timecode Frame"
 msgstr "К кадрам таймкода"
 
-#: editor_actions.cc:523
+#: editor_actions.cc:534
 msgid "Snap to Timecode Seconds"
 msgstr "К секундам таймкода"
 
-#: editor_actions.cc:524
+#: editor_actions.cc:535
 msgid "Snap to Timecode Minutes"
 msgstr "К минутам таймкода"
 
-#: editor_actions.cc:525
+#: editor_actions.cc:536
 msgid "Snap to Seconds"
 msgstr "К секундам"
 
-#: editor_actions.cc:526
+#: editor_actions.cc:537
 msgid "Snap to Minutes"
 msgstr "К минутам"
 
-#: editor_actions.cc:528
+#: editor_actions.cc:539
 msgid "Snap to One Twenty Eighths"
 msgstr "К 1/28"
 
-#: editor_actions.cc:529
+#: editor_actions.cc:540
 msgid "Snap to Sixty Fourths"
 msgstr "К 1/24"
 
-#: editor_actions.cc:530
+#: editor_actions.cc:541
 msgid "Snap to Thirty Seconds"
 msgstr "К 30 секундам"
 
-#: editor_actions.cc:531
+#: editor_actions.cc:542
 msgid "Snap to Twenty Eighths"
 msgstr "К 1/28"
 
-#: editor_actions.cc:532
+#: editor_actions.cc:543
 msgid "Snap to Twenty Fourths"
 msgstr "К 1/24"
 
-#: editor_actions.cc:533
+#: editor_actions.cc:544
 msgid "Snap to Twentieths"
 msgstr "К 1/20"
 
-#: editor_actions.cc:534
+#: editor_actions.cc:545
 msgid "Snap to Sixteenths"
 msgstr "К 1/16"
 
-#: editor_actions.cc:535
+#: editor_actions.cc:546
 msgid "Snap to Fourteenths"
 msgstr "К 1/14"
 
-#: editor_actions.cc:536
+#: editor_actions.cc:547
 msgid "Snap to Twelfths"
 msgstr "К 1/12"
 
-#: editor_actions.cc:537
+#: editor_actions.cc:548
 msgid "Snap to Tenths"
 msgstr "К 1/10"
 
-#: editor_actions.cc:538
+#: editor_actions.cc:549
 msgid "Snap to Eighths"
 msgstr "К 1/8"
 
-#: editor_actions.cc:539
+#: editor_actions.cc:550
 msgid "Snap to Sevenths"
 msgstr "К 1/7"
 
-#: editor_actions.cc:540
+#: editor_actions.cc:551
 msgid "Snap to Sixths"
 msgstr "К 1/6"
 
-#: editor_actions.cc:541
+#: editor_actions.cc:552
 msgid "Snap to Fifths"
 msgstr "К 1/5"
 
-#: editor_actions.cc:542
+#: editor_actions.cc:553
 msgid "Snap to Quarters"
 msgstr "К 1/4"
 
-#: editor_actions.cc:543
+#: editor_actions.cc:554
 msgid "Snap to Thirds"
 msgstr "К 1/3"
 
-#: editor_actions.cc:544
+#: editor_actions.cc:555
 msgid "Snap to Halves"
 msgstr "К 1/2"
 
-#: editor_actions.cc:546
+#: editor_actions.cc:557
 msgid "Snap to Beat"
 msgstr "К долям"
 
-#: editor_actions.cc:547
+#: editor_actions.cc:558
 msgid "Snap to Bar"
 msgstr "К тактам"
 
-#: editor_actions.cc:548
+#: editor_actions.cc:559
 msgid "Snap to Mark"
 msgstr "К маркерам"
 
-#: editor_actions.cc:549
+#: editor_actions.cc:560
 msgid "Snap to Region Start"
 msgstr "К началам областей"
 
-#: editor_actions.cc:550
+#: editor_actions.cc:561
 msgid "Snap to Region End"
 msgstr "К концам областей"
 
-#: editor_actions.cc:551
+#: editor_actions.cc:562
 msgid "Snap to Region Sync"
 msgstr "К синхронизаторам областей"
 
-#: editor_actions.cc:552
+#: editor_actions.cc:563
 msgid "Snap to Region Boundary"
 msgstr "К границам областей"
 
-#: editor_actions.cc:554
+#: editor_actions.cc:565
 msgid "Show Marker Lines"
 msgstr "Показывать линии маркеров"
 
-#: editor_actions.cc:564
+#: editor_actions.cc:575
 msgid "Loop/Punch"
 msgstr "Петли/Врезки"
 
-#: editor_actions.cc:568
+#: editor_actions.cc:579
 msgid "Min:Sec"
 msgstr "Мин:С"
 
-#: editor_actions.cc:570 editor_actions.cc:573 editor_rulers.cc:271
+#: editor_actions.cc:581 editor_actions.cc:584 editor_rulers.cc:271
 msgid "Video Monitor"
 msgstr "Видеомонитор"
 
-#: editor_actions.cc:572 rc_option_editor.cc:2252
+#: editor_actions.cc:583 rc_option_editor.cc:2734
 msgid "Video"
 msgstr "Видео"
 
-#: editor_actions.cc:575
+#: editor_actions.cc:586
 msgid "Always on Top"
 msgstr "Всегда сверху"
 
-#: editor_actions.cc:577
+#: editor_actions.cc:588
 msgid "Frame number"
 msgstr "Номер кадра"
 
-#: editor_actions.cc:578
+#: editor_actions.cc:589
 msgid "Timecode Background"
 msgstr "Фон тайм-кода"
 
-#: editor_actions.cc:579
+#: editor_actions.cc:590
 msgid "Fullscreen"
 msgstr "Во весь экран"
 
-#: editor_actions.cc:580
+#: editor_actions.cc:591
 msgid "Letterbox"
 msgstr "Уместить в окно"
 
-#: editor_actions.cc:581
+#: editor_actions.cc:592
 msgid "Original Size"
 msgstr "Исходный размер"
 
-#: editor_actions.cc:638
+#: editor_actions.cc:649
 msgid "Sort"
 msgstr "Сортировать"
 
-#: editor_actions.cc:649 editor_routes.cc:476 mixer_ui.cc:1196
+#: editor_actions.cc:660 editor_routes.cc:484 mixer_ui.cc:1212
 msgid "Show All"
 msgstr "Показать всё"
 
-#: editor_actions.cc:650
+#: editor_actions.cc:661
 msgid "Show Automatic Regions"
 msgstr "Показать автомат. области"
 
-#: editor_actions.cc:652
+#: editor_actions.cc:663
 msgid "Ascending"
 msgstr "По возрастанию"
 
-#: editor_actions.cc:654
+#: editor_actions.cc:665
 msgid "Descending"
 msgstr "По убыванию"
 
-#: editor_actions.cc:657
+#: editor_actions.cc:668
 msgid "By Region Name"
 msgstr "По имени области"
 
-#: editor_actions.cc:659
+#: editor_actions.cc:670
 msgid "By Region Length"
 msgstr "По длительности области"
 
-#: editor_actions.cc:661
+#: editor_actions.cc:672
 msgid "By Region Position"
 msgstr "По расположению области"
 
-#: editor_actions.cc:663
+#: editor_actions.cc:674
 msgid "By Region Timestamp"
 msgstr "По времени создания области"
 
-#: editor_actions.cc:665
+#: editor_actions.cc:676
 msgid "By Region Start in File"
 msgstr "По началу области в файле"
 
-#: editor_actions.cc:667
+#: editor_actions.cc:678
 msgid "By Region End in File"
 msgstr "По концу области в файле"
 
-#: editor_actions.cc:669
+#: editor_actions.cc:680
 msgid "By Source File Name"
 msgstr "По имени исходного файла"
 
-#: editor_actions.cc:671
+#: editor_actions.cc:682
 msgid "By Source File Length"
 msgstr "По длительности исходного файла"
 
-#: editor_actions.cc:673
+#: editor_actions.cc:684
 msgid "By Source File Creation Date"
 msgstr "По дате создания исходного файла"
 
-#: editor_actions.cc:675
+#: editor_actions.cc:686
 msgid "By Source Filesystem"
 msgstr "По исходной файловой системе"
 
-#: editor_actions.cc:678
+#: editor_actions.cc:689
 msgid "Remove Unused"
 msgstr "Удаление неиспользуемых"
 
-#: editor_actions.cc:682 editor_audio_import.cc:282
+#: editor_actions.cc:691
+msgid "Import PT session"
+msgstr "Импортировать сессию PT"
+
+#: editor_actions.cc:696 editor_audio_import.cc:282 editor_pt_import.cc:148
 #: session_import_dialog.cc:75 session_import_dialog.cc:95
 #: session_metadata_dialog.cc:418 editor_videotimeline.cc:91
 msgid "Import"
 msgstr "Импортировать"
 
-#: editor_actions.cc:685
+#: editor_actions.cc:699
 msgid "Import to Region List..."
 msgstr "Импортировать в список областей…"
 
-#: editor_actions.cc:688 session_import_dialog.cc:44
+#: editor_actions.cc:702 session_import_dialog.cc:44
 msgid "Import From Session"
 msgstr "Импортировать из сессии"
 
-#: editor_actions.cc:692
+#: editor_actions.cc:706
 msgid "Bring all media into session folder"
 msgstr "Занести все медиа в папку сессии"
 
-#: editor_actions.cc:695
+#: editor_actions.cc:709
 msgid "Show Summary"
 msgstr "Показывать сводку"
 
-#: editor_actions.cc:697
+#: editor_actions.cc:711
 msgid "Show Group Tabs"
 msgstr "Показывать вкладки групп"
 
-#: editor_actions.cc:699
+#: editor_actions.cc:713
 msgid "Show Measure Lines"
 msgstr "Показывать линии тактов и долей"
 
-#: editor_actions.cc:703
+#: editor_actions.cc:717
 msgid "Show Logo"
 msgstr "Показать логотип"
 
-#: editor_actions.cc:707
+#: editor_actions.cc:721
 msgid "Toggle MIDI Input Active for Editor-Selected Tracks/Busses"
 msgstr "Переключить активный вход MIDI для редактора выбранных дорожек/шин"
 
-#: editor_actions.cc:730
+#: editor_actions.cc:744
 msgid "Loaded editor bindings from %1"
 msgstr "Загруженный редактор привязки от %1"
 
-#: editor_actions.cc:732
+#: editor_actions.cc:746
 msgid "Could not find editor.bindings in search path %1"
 msgstr "Не удалось найти редактор привязок в пути поиска %1"
 
-#: editor_actions.cc:1076 editor_actions.cc:1472 editor_actions.cc:1483
-#: editor_actions.cc:1536 editor_actions.cc:1547 editor_actions.cc:1594
-#: editor_actions.cc:1604 editor_regions.cc:1563
+#: editor_actions.cc:1090 editor_actions.cc:1486 editor_actions.cc:1497
+#: editor_actions.cc:1550 editor_actions.cc:1561 editor_actions.cc:1608
+#: editor_actions.cc:1618 editor_regions.cc:1571
 msgid "programming error: %1: %2"
 msgstr "Ошибка в программе: %1: %2"
 
-#: editor_actions.cc:1772
+#: editor_actions.cc:1786
 msgid "Raise"
 msgstr "Поднять"
 
-#: editor_actions.cc:1775
+#: editor_actions.cc:1789
 msgid "Raise to Top"
 msgstr "На самый верх"
 
-#: editor_actions.cc:1778
+#: editor_actions.cc:1792
 msgid "Lower"
 msgstr "Опустить"
 
-#: editor_actions.cc:1781
+#: editor_actions.cc:1795
 msgid "Lower to Bottom"
 msgstr "В самый низ"
 
-#: editor_actions.cc:1784
+#: editor_actions.cc:1798
 msgid "Move to Original Position"
 msgstr "К исходной позиции"
 
-#: editor_actions.cc:1789
+#: editor_actions.cc:1803
 msgid "Lock to Video"
 msgstr "Прикрепить к видео"
 
-#: editor_actions.cc:1794 editor_markers.cc:912
+#: editor_actions.cc:1808 editor_markers.cc:905
 msgid "Glue to Bars and Beats"
 msgstr "Прикрепить к тактам и долям"
 
-#: editor_actions.cc:1799
+#: editor_actions.cc:1813
 msgid "Remove Sync"
 msgstr "Удалить синхронизатор"
 
-#: editor_actions.cc:1802 mixer_strip.cc:2025 monitor_section.cc:272
-#: monitor_section.cc:349 route_time_axis.cc:253 route_time_axis.cc:526
+#: editor_actions.cc:1816 mixer_strip.cc:2068 monitor_section.cc:278
+#: monitor_section.cc:368 route_time_axis.cc:255 route_time_axis.cc:537
 msgid "Mute"
 msgstr "Молча"
 
-#: editor_actions.cc:1805
+#: editor_actions.cc:1819
 msgid "Normalize..."
 msgstr "Нормировать сигнал..."
 
-#: editor_actions.cc:1808
+#: editor_actions.cc:1822
 msgid "Reverse"
 msgstr "Развернуть"
 
-#: editor_actions.cc:1811
+#: editor_actions.cc:1825
 msgid "Make Mono Regions"
 msgstr "Создать моно-области"
 
-#: editor_actions.cc:1814
+#: editor_actions.cc:1828
 msgid "Boost Gain"
 msgstr "Повысить громкость области"
 
-#: editor_actions.cc:1817
+#: editor_actions.cc:1831
 msgid "Cut Gain"
 msgstr "Понизить громкость области"
 
-#: editor_actions.cc:1820
+#: editor_actions.cc:1834
 msgid "Pitch Shift..."
 msgstr "Сменить высоту тона…"
 
-#: editor_actions.cc:1823
+#: editor_actions.cc:1837
 msgid "Transpose..."
 msgstr "Транспозиция…"
 
-#: editor_actions.cc:1826
+#: editor_actions.cc:1840
 msgid "Opaque"
 msgstr "Непрозрачно"
 
-#: editor_actions.cc:1830 editor_regions.cc:117
+#: editor_actions.cc:1844 editor_regions.cc:117
 msgid "Fade In"
 msgstr "Нарастание"
 
-#: editor_actions.cc:1835 editor_regions.cc:118
+#: editor_actions.cc:1849 editor_regions.cc:118
 msgid "Fade Out"
 msgstr "Затухание"
 
-#: editor_actions.cc:1850
+#: editor_actions.cc:1864
 msgid "Multi-Duplicate..."
 msgstr "Продублировать многократно..."
 
-#: editor_actions.cc:1855
+#: editor_actions.cc:1869
 msgid "Fill Track"
 msgstr "Заполнить дорожку"
 
-#: editor_actions.cc:1859 editor_markers.cc:1000
+#: editor_actions.cc:1873 editor_markers.cc:993
 msgid "Set Loop Range"
 msgstr "Установить область петли"
 
-#: editor_actions.cc:1866
+#: editor_actions.cc:1880
 msgid "Set Punch"
 msgstr "Установить врезку"
 
-#: editor_actions.cc:1870
+#: editor_actions.cc:1884
 msgid "Add Single Range Marker"
 msgstr "Добавить маркер текущей области"
 
-#: editor_actions.cc:1875
+#: editor_actions.cc:1889
 msgid "Add Range Marker Per Region"
 msgstr "Добавить по маркеру на каждую область"
 
-#: editor_actions.cc:1879
+#: editor_actions.cc:1893
 msgid "Snap Position To Grid"
 msgstr "Привязать позицию к сетке"
 
-#: editor_actions.cc:1882
+#: editor_actions.cc:1896
 msgid "Close Gaps"
 msgstr "Закрыть интервалы"
 
-#: editor_actions.cc:1885
+#: editor_actions.cc:1899
 msgid "Rhythm Ferret..."
 msgstr "Ритмический хорёк..."
 
-#: editor_actions.cc:1888
+#: editor_actions.cc:1902
 msgid "Export..."
 msgstr "Экспортировать..."
 
-#: editor_actions.cc:1894
+#: editor_actions.cc:1908
 msgid "Separate Under"
 msgstr "Разделить под"
 
-#: editor_actions.cc:1898 editor_actions.cc:1899
+#: editor_actions.cc:1912 editor_actions.cc:1913
 msgid "Set Fade In Length"
 msgstr "Установить длительность нарастания"
 
-#: editor_actions.cc:1900 editor_actions.cc:1901
+#: editor_actions.cc:1914 editor_actions.cc:1915
 msgid "Set Fade Out Length"
 msgstr "Установить длительность затухания"
 
-#: editor_actions.cc:1903
+#: editor_actions.cc:1917
 msgid "Set Tempo from Region = Bar"
 msgstr "Установить темп, считая что область = такт"
 
-#: editor_actions.cc:1908
+#: editor_actions.cc:1922
 msgid "Split at Percussion Onsets"
 msgstr "Разделить по атакам перкуссии"
 
-#: editor_actions.cc:1913
+#: editor_actions.cc:1927
 msgid "List Editor..."
 msgstr "Редактор списка событий"
 
-#: editor_actions.cc:1916
+#: editor_actions.cc:1930
 msgid "Properties..."
 msgstr "Свойства..."
 
-#: editor_actions.cc:1920
+#: editor_actions.cc:1934
 msgid "Bounce (with processing)"
 msgstr "Свести (с обработкой)"
 
-#: editor_actions.cc:1921
+#: editor_actions.cc:1935
 msgid "Bounce (without processing)"
 msgstr "Свести (без обработки)"
 
-#: editor_actions.cc:1922
+#: editor_actions.cc:1936
 msgid "Combine"
 msgstr "Объединить"
 
-#: editor_actions.cc:1923
+#: editor_actions.cc:1937
 msgid "Uncombine"
 msgstr "Снять объединение"
 
-#: editor_actions.cc:1925
+#: editor_actions.cc:1939
 msgid "Spectral Analysis..."
 msgstr "Спектральный анализ..."
 
-#: editor_actions.cc:1927
+#: editor_actions.cc:1941
 msgid "Reset Envelope"
 msgstr "Сбросить огибающую"
 
-#: editor_actions.cc:1929
+#: editor_actions.cc:1943
 msgid "Reset Gain"
 msgstr "Сбросить усиление"
 
-#: editor_actions.cc:1934
+#: editor_actions.cc:1948
 msgid "Envelope Active"
 msgstr "Огибающая активна"
 
-#: editor_actions.cc:1942 editor_actions.cc:1943
+#: editor_actions.cc:1956 editor_actions.cc:1957
 msgid "Insert Patch Change..."
 msgstr "Вставить смену программы..."
 
-#: editor_actions.cc:1944
+#: editor_actions.cc:1958
 msgid "Unlink from other copies"
 msgstr "Отсоединить от других копий"
 
-#: editor_actions.cc:1945
+#: editor_actions.cc:1959
 msgid "Strip Silence..."
 msgstr "Вырезать тишину..."
 
-#: editor_actions.cc:1946
+#: editor_actions.cc:1960
 msgid "Set Range Selection"
 msgstr "Создать выделение из области"
 
-#: editor_actions.cc:1948 editor_actions.cc:1949
+#: editor_actions.cc:1962 editor_actions.cc:1963
 msgid "Nudge Later"
 msgstr "Толкнуть вперёд"
 
-#: editor_actions.cc:1950 editor_actions.cc:1951
+#: editor_actions.cc:1964 editor_actions.cc:1965
 msgid "Nudge Earlier"
 msgstr "Толкнуть назад"
 
-#: editor_actions.cc:1953
+#: editor_actions.cc:1967
 msgid "Sequence Regions"
 msgstr "Выстроить области встык"
 
-#: editor_actions.cc:1958
+#: editor_actions.cc:1972
 msgid "Nudge Later by Capture Offset"
 msgstr "Толкнуть вперёд на смещение захвата"
 
-#: editor_actions.cc:1965
+#: editor_actions.cc:1979
 msgid "Nudge Earlier by Capture Offset"
 msgstr "Толкнуть назад на смещение захвата"
 
-#: editor_actions.cc:1969
+#: editor_actions.cc:1983
 msgid "Trim to Loop"
 msgstr "В петлю"
 
-#: editor_actions.cc:1970
+#: editor_actions.cc:1984
 msgid "Trim to Punch"
 msgstr "Во врезку"
 
-#: editor_actions.cc:1972
+#: editor_actions.cc:1986
 msgid "Trim to Previous"
 msgstr "До предыдущей области"
 
-#: editor_actions.cc:1973
+#: editor_actions.cc:1987
 msgid "Trim to Next"
 msgstr "До следующей области"
 
-#: editor_actions.cc:1980
+#: editor_actions.cc:1994
 msgid "Insert Region From Region List"
 msgstr "Вставить область из списка областей"
 
-#: editor_actions.cc:1986
+#: editor_actions.cc:2000
 msgid "Set Sync Position"
 msgstr "Установить синхронизатор области"
 
-#: editor_actions.cc:1987
+#: editor_actions.cc:2001
 msgid "Place Transient"
 msgstr "Место переходных"
 
-#: editor_actions.cc:1988
+#: editor_actions.cc:2002
 msgid "Split/Separate"
 msgstr "Разбить"
 
-#: editor_actions.cc:1989
+#: editor_actions.cc:2003
 msgid "Trim Start at Edit Point"
 msgstr "Начало по курсору редактора"
 
-#: editor_actions.cc:1990
+#: editor_actions.cc:2004
 msgid "Trim End at Edit Point"
 msgstr "Конец по курсору редактора"
 
-#: editor_actions.cc:1995
+#: editor_actions.cc:2009
 msgid "Align Start"
 msgstr "Выровнять начала областей"
 
-#: editor_actions.cc:2002
+#: editor_actions.cc:2016
 msgid "Align Start Relative"
 msgstr "Выровнять относительно начал областей"
 
-#: editor_actions.cc:2006
+#: editor_actions.cc:2020
 msgid "Align End"
 msgstr "Выровнять концы областей"
 
-#: editor_actions.cc:2011
+#: editor_actions.cc:2025
 msgid "Align End Relative"
 msgstr "Выровнять относительно концов областей"
 
-#: editor_actions.cc:2018
+#: editor_actions.cc:2032
 msgid "Align Sync"
 msgstr "Выровнять по синхронизаторам областей"
 
-#: editor_actions.cc:2025
+#: editor_actions.cc:2039
 msgid "Align Sync Relative"
 msgstr "Выровнять относительно синхронизаторов областей"
 
-#: editor_actions.cc:2029 editor_actions.cc:2032
+#: editor_actions.cc:2043 editor_actions.cc:2046
 msgid "Choose Top..."
 msgstr "Выбрать верхнюю область..."
 
@@ -4738,32 +4812,33 @@ msgstr ""
 "В этой сессии уже есть исходный файл с именем %1. Вы хотите импортировать %2 "
 "как новый источник или пропустить его?"
 
-#: editor_audio_import.cc:282 editor_videotimeline.cc:91
+#: editor_audio_import.cc:282 editor_pt_import.cc:148
+#: editor_videotimeline.cc:91
 msgid "Cancel Import"
 msgstr "Отменить импорт"
 
-#: editor_audio_import.cc:559
+#: editor_audio_import.cc:562
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr "Редактор: не удаётся открыть файл \"%1\", (%2)"
 
-#: editor_audio_import.cc:567
+#: editor_audio_import.cc:570
 msgid "Cancel entire import"
 msgstr "Отменить весь импорт"
 
-#: editor_audio_import.cc:568
+#: editor_audio_import.cc:571
 msgid "Don't embed it"
 msgstr "Не встраивать"
 
-#: editor_audio_import.cc:569
+#: editor_audio_import.cc:572
 msgid "Embed all without questions"
 msgstr "Встроить без лишних вопросов"
 
-#: editor_audio_import.cc:572 editor_audio_import.cc:598
+#: editor_audio_import.cc:575 editor_audio_import.cc:601
 #: export_format_dialog.cc:60
 msgid "Sample rate"
 msgstr "Частота сэмплирования"
 
-#: editor_audio_import.cc:573 editor_audio_import.cc:599
+#: editor_audio_import.cc:576 editor_audio_import.cc:602
 msgid ""
 "%1\n"
 "This audiofile's sample rate doesn't match the session sample rate!"
@@ -4772,96 +4847,134 @@ msgstr ""
 "Выбранный звуковой файл имеет частоту сэмплирования,\n"
 "отличную от частоты активной сессии!"
 
-#: editor_audio_import.cc:595
+#: editor_audio_import.cc:598
 msgid "Embed it anyway"
 msgstr "Всё равно встроить"
 
-#: editor_canvas_events.cc:1306 editor_drag.cc:1381
+#: editor_pt_import.cc:81
+msgid "You can't import a PT session until you have a session loaded."
+msgstr ""
+
+#: editor_pt_import.cc:86
+msgid "Import PT Session"
+msgstr "Импортировать сессию PT"
+
+#: editor_pt_import.cc:97
+msgid "%1: this is only the directory/folder name, not the filename.\n"
+msgstr ""
+
+#: editor_pt_import.cc:131
+msgid "Doesn't seem to be a valid PT session file"
+msgstr ""
+
+#: editor_pt_import.cc:135
+msgid ""
+"PT v%1 Session @ %2Hz\n"
+"\n"
+"%3 audio files\n"
+"%4 regions\n"
+"%5 active regions\n"
+"\n"
+"Continue..."
+msgstr ""
+"Сессия PT v%1 @ %2Hz\n"
+"\n"
+"Звуковых файлов: %3\n"
+"Областей: %4\n"
+"Активных областей: %5\n"
+"\n"
+"Продолжить..."
+
+#: editor_canvas_events.cc:1311 editor_drag.cc:1402
 msgid "Could not create new track after region placed in the drop zone"
 msgstr ""
 "Не удалось создать новую дорожку после области, помещённой в рабочую зону"
 
-#: editor_drag.cc:1266
+#: editor_drag.cc:1294
 msgid "fixed time region drag"
 msgstr "Фиксированная временная область перетаскивания"
 
-#: editor_drag.cc:2214
+#: editor_drag.cc:2228
 msgid "Ripple drag"
 msgstr "Перетаскивание ряби"
 
-#: editor_drag.cc:2365 midi_region_view.cc:2813
+#: editor_drag.cc:2389 midi_region_view.cc:2850
 msgid "resize notes"
 msgstr "Смена размера ноты"
 
-#: editor_drag.cc:2517
+#: editor_drag.cc:2584
 msgid "Video Start:"
 msgstr "Начало видеофайла"
 
-#: editor_drag.cc:2519
+#: editor_drag.cc:2586
 msgid "Diff:"
 msgstr "Разница:"
 
-#: editor_drag.cc:2538
+#: editor_drag.cc:2605
 msgid "Move Video"
 msgstr "Переместить видео"
 
-#: editor_drag.cc:3046
+#: editor_drag.cc:3113
 msgid "copy meter mark"
 msgstr "Скопировать маркер счетчика"
 
-#: editor_drag.cc:3054
+#: editor_drag.cc:3121
 msgid "move meter mark"
 msgstr "Переместить маркер счетчика"
 
-#: editor_drag.cc:3177
+#: editor_drag.cc:3244
 msgid "copy tempo mark"
 msgstr "Скопировать маркер темпа"
 
-#: editor_drag.cc:3185
+#: editor_drag.cc:3252
 msgid "move tempo mark"
 msgstr "Переместить маркер темпа"
 
-#: editor_drag.cc:3412
+#: editor_drag.cc:3504
 msgid "change fade in length"
 msgstr "Смена длительности фейда нарастания"
 
-#: editor_drag.cc:3526
+#: editor_drag.cc:3629
 msgid "change fade out length"
 msgstr "Смена длительности фейда затухания"
 
-#: editor_drag.cc:3880
+#: editor_drag.cc:3991
 msgid "move marker"
 msgstr "Смещение маркера"
 
-#: editor_drag.cc:4490
+#: editor_drag.cc:4239 editor_drag.cc:5622
+msgid "automation range move"
+msgstr "Смещение выделения автоматизации"
+
+#: editor_drag.cc:4596
 msgid "An error occurred while executing time stretch operation"
 msgstr "Произошла ошибка при выполнении операции растяжения времени"
 
-#: editor_drag.cc:4947
+#: editor_drag.cc:5057
 msgid "programming_error: %1"
 msgstr "Ошибка в программе: %1"
 
-#: editor_drag.cc:5016 editor_drag.cc:5026
+#: editor_drag.cc:5126 editor_drag.cc:5136
 msgid "new skip marker"
 msgstr "Новый маркер пропуска"
 
-#: editor_drag.cc:5017
+#: editor_drag.cc:5127
 msgid "skip"
 msgstr "Пропустить"
 
-#: editor_drag.cc:5021 location_ui.cc:56
+#: editor_drag.cc:5131 location_ui.cc:56
 msgid "CD"
 msgstr "CD"
 
-#: editor_drag.cc:5022
+#: editor_drag.cc:5132
 msgid "new CD marker"
 msgstr "Новый CD маркер"
 
-#: editor_drag.cc:5027 editor_route_groups.cc:437 mixer_ui.cc:1493
+#: editor_drag.cc:5137 editor_route_groups.cc:437 mixer_ui.cc:1513
 msgid "unnamed"
 msgstr "Безымянный"
 
-#: editor_drag.cc:5309
+#: editor_drag.cc:5443
 msgid "Automation range drag created for invalid region type"
 msgstr ""
 "Перетаскивание области автоматизации предпринято для неправильного типа "
@@ -4879,7 +4992,7 @@ msgstr "Цвет вкладки группы"
 msgid "Name of Group"
 msgstr "Название группы"
 
-#: editor_route_groups.cc:98 editor_routes.cc:207
+#: editor_route_groups.cc:98 editor_routes.cc:208
 msgid "Visible|V"
 msgstr "В"
 
@@ -4911,9 +5024,9 @@ msgstr "Отн."
 msgid "Relative Gain Changes?"
 msgstr "Относительны ли изменения в усилении"
 
-#: editor_route_groups.cc:102 editor_regions.cc:121 editor_routes.cc:211
-#: mixer_strip.cc:2051 meter_strip.cc:363 route_time_axis.cc:2709
-#: time_axis_view.cc:1190
+#: editor_route_groups.cc:102 editor_regions.cc:121 editor_routes.cc:212
+#: mixer_strip.cc:2094 meter_strip.cc:367 route_time_axis.cc:2741
+#: time_axis_view.cc:1201
 msgid "Mute|M"
 msgstr "М"
 
@@ -4921,8 +5034,8 @@ msgstr "М"
 msgid "Sharing Mute?"
 msgstr "Разделяется ли приглушение"
 
-#: editor_route_groups.cc:103 editor_routes.cc:212 mixer_strip.cc:2061
-#: meter_strip.cc:371 route_time_axis.cc:2706
+#: editor_route_groups.cc:103 editor_routes.cc:213 mixer_strip.cc:2104
+#: meter_strip.cc:375 route_time_axis.cc:2738
 msgid "Solo|S"
 msgstr "С"
 
@@ -4930,8 +5043,8 @@ msgstr "С"
 msgid "Sharing Solo?"
 msgstr "Разделяется ли солирование"
 
-#: editor_route_groups.cc:104 midi_time_axis.cc:1622 midi_time_axis.cc:1625
-#: midi_time_axis.cc:1628
+#: editor_route_groups.cc:104 midi_time_axis.cc:1623 midi_time_axis.cc:1626
+#: midi_time_axis.cc:1629
 msgid "Rec"
 msgstr "Зап"
 
@@ -4955,7 +5068,7 @@ msgstr "Выд."
 msgid "Sharing Selected/Editing Status?"
 msgstr "Разделять статус выделенности"
 
-#: editor_route_groups.cc:107 editor_routes.cc:208
+#: editor_route_groups.cc:107 editor_routes.cc:209
 msgid "Active|A"
 msgstr "А"
 
@@ -4963,13 +5076,13 @@ msgstr "А"
 msgid "Sharing Active Status?"
 msgstr "Разделяется ли активный статус"
 
-#: editor_export_audio.cc:92 editor_markers.cc:740 editor_markers.cc:827
-#: editor_markers.cc:1012 editor_markers.cc:1030 editor_markers.cc:1048
-#: editor_markers.cc:1067 editor_markers.cc:1086 editor_markers.cc:1116
-#: editor_markers.cc:1147 editor_markers.cc:1177 editor_markers.cc:1205
-#: editor_markers.cc:1236 editor_markers.cc:1261 editor_markers.cc:1312
-#: editor_markers.cc:1356 editor_markers.cc:1382 editor_markers.cc:1576
-#: editor_mouse.cc:2120
+#: editor_export_audio.cc:92 editor_markers.cc:733 editor_markers.cc:820
+#: editor_markers.cc:1005 editor_markers.cc:1023 editor_markers.cc:1041
+#: editor_markers.cc:1060 editor_markers.cc:1079 editor_markers.cc:1109
+#: editor_markers.cc:1140 editor_markers.cc:1170 editor_markers.cc:1198
+#: editor_markers.cc:1229 editor_markers.cc:1254 editor_markers.cc:1305
+#: editor_markers.cc:1349 editor_markers.cc:1375 editor_markers.cc:1569
+#: editor_mouse.cc:2140
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr "Ошибка в программе: marker canvas item has no marker object pointer!"
 
@@ -4993,105 +5106,109 @@ msgstr "Начало"
 msgid "end"
 msgstr "Конец"
 
-#: editor_markers.cc:657 editor_ops.cc:2085 editor_ops.cc:2107
-#: editor_ops.cc:2164 editor_ops.cc:2193 location_ui.cc:1023
+#: editor_markers.cc:645
+msgid "mark"
+msgstr ""
+
+#: editor_markers.cc:650 editor_ops.cc:2100 editor_ops.cc:2122
+#: editor_ops.cc:2238 editor_ops.cc:2275 location_ui.cc:1023
 msgid "add marker"
 msgstr "Добавка маркера"
 
-#: editor_markers.cc:689 editor_markers.cc:1456
+#: editor_markers.cc:682 editor_markers.cc:1449
 msgid "set loop range"
 msgstr "Создать петлю из области"
 
-#: editor_markers.cc:705 editor_markers.cc:1462
+#: editor_markers.cc:698 editor_markers.cc:1455
 msgid "set punch range"
 msgstr "Создание выделения врезки"
 
-#: editor_markers.cc:722 editor_ops.cc:4055
+#: editor_markers.cc:715 editor_ops.cc:4169
 msgid "range"
 msgstr "диапазон"
 
-#: editor_markers.cc:725
+#: editor_markers.cc:718
 msgid "new range marker"
 msgstr "Новый маркер диапазона"
 
-#: editor_markers.cc:758 editor_ops.cc:2129 location_ui.cc:859
+#: editor_markers.cc:751 editor_ops.cc:2206 location_ui.cc:859
 msgid "remove marker"
 msgstr "Удаление маркера"
 
-#: editor_markers.cc:894
+#: editor_markers.cc:887
 msgid "Locate to Here"
 msgstr "Переместить сюда указатель"
 
-#: editor_markers.cc:895
+#: editor_markers.cc:888
 msgid "Play from Here"
 msgstr "Воспроизвести отсюда"
 
-#: editor_markers.cc:896
+#: editor_markers.cc:889
 msgid "Move Mark to Playhead"
 msgstr "Маркер к указателю воспроизведения"
 
-#: editor_markers.cc:900
+#: editor_markers.cc:893
 msgid "Create Range to Next Marker"
 msgstr "Создать выделение до след. маркера"
 
-#: editor_markers.cc:941
+#: editor_markers.cc:934
 msgid "Locate to Marker"
 msgstr "Перейти к маркеру"
 
-#: editor_markers.cc:942
+#: editor_markers.cc:935
 msgid "Play from Marker"
 msgstr "Воспроизвести от маркера"
 
-#: editor_markers.cc:945
+#: editor_markers.cc:938
 msgid "Set Marker from Playhead"
 msgstr "Установить маркер по указателю"
 
-#: editor_markers.cc:947
+#: editor_markers.cc:940
 msgid "Set Range from Selection"
 msgstr "Установить диапазон по выделению"
 
-#: editor_markers.cc:957
+#: editor_markers.cc:950
 msgid "Hide Range"
 msgstr "Скрыть выделение"
 
-#: editor_markers.cc:958
+#: editor_markers.cc:951
 msgid "Rename Range..."
 msgstr "Переименовать область…"
 
-#: editor_markers.cc:962
+#: editor_markers.cc:955
 msgid "Remove Range"
 msgstr "Удалить выделение"
 
-#: editor_markers.cc:969
+#: editor_markers.cc:962
 msgid "Separate Regions in Range"
 msgstr "Разделить области в выделении"
 
-#: editor_markers.cc:972
+#: editor_markers.cc:965
 msgid "Select Range"
 msgstr "Выбрать выделение"
 
-#: editor_markers.cc:1001
+#: editor_markers.cc:994
 msgid "Set Punch Range"
 msgstr "Установить область врезки"
 
-#: editor_markers.cc:1407 editor_ops.cc:2040
+#: editor_markers.cc:1400 editor_ops.cc:2055
 msgid "New Name:"
 msgstr "Новое название:"
 
-#: editor_markers.cc:1410
+#: editor_markers.cc:1403
 msgid "Rename Mark"
 msgstr "Переименовать маркер"
 
-#: editor_markers.cc:1412
+#: editor_markers.cc:1405
 msgid "Rename Range"
 msgstr "Переименовать выделение"
 
-#: editor_markers.cc:1419 editor_mouse.cc:2137 processor_box.cc:1996
-#: processor_box.cc:2466 route_time_axis.cc:1096 route_ui.cc:1571
+#: editor_markers.cc:1412 editor_mouse.cc:2157 processor_box.cc:2060
+#: processor_box.cc:2531 route_time_axis.cc:1107 route_ui.cc:1574
 msgid "Rename"
 msgstr "Переименовать"
 
-#: editor_markers.cc:1432
+#: editor_markers.cc:1425
 msgid "rename marker"
 msgstr "Переименование маркера"
 
@@ -5099,21 +5216,21 @@ msgstr "Переименование маркера"
 msgid "This screen is not tall enough to display the editor mixer"
 msgstr "Экран недостаточно высок, чтобы показать окно редактора"
 
-#: editor_mouse.cc:1223 editor_mouse.cc:1241 editor_tempodisplay.cc:270
+#: editor_mouse.cc:1235 editor_mouse.cc:1253 editor_tempodisplay.cc:270
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 "Ошибка в программе: tempo marker canvas item has no marker object pointer!"
 
-#: editor_mouse.cc:1228 editor_tempodisplay.cc:275
+#: editor_mouse.cc:1240 editor_tempodisplay.cc:275
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr "Ошибка в программе: marker for tempo is not a tempo marker!"
 
-#: editor_mouse.cc:1246 editor_tempodisplay.cc:375
+#: editor_mouse.cc:1258 editor_tempodisplay.cc:375
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr "Ошибка в программе: маркер размера таковым не является!"
 
-#: editor_mouse.cc:1885 editor_mouse.cc:1910 editor_mouse.cc:1923
+#: editor_mouse.cc:1905 editor_mouse.cc:1930 editor_mouse.cc:1943
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
@@ -5121,15 +5238,15 @@ msgstr ""
 "ошибка в программе: у контр. точки пункта события нет управления точкой "
 "объектауказатель!"
 
-#: editor_mouse.cc:2058
+#: editor_mouse.cc:2078
 msgid "start point trim"
 msgstr "Обрезка начальной точки"
 
-#: editor_mouse.cc:2083
+#: editor_mouse.cc:2103
 msgid "End point trim"
 msgstr "Конечная точка отделки"
 
-#: editor_mouse.cc:2135
+#: editor_mouse.cc:2155
 msgid "Name for region:"
 msgstr "Название области: "
 
@@ -5145,151 +5262,155 @@ msgstr "Изменение выделения"
 msgid "nudge regions forward"
 msgstr "Толчок областей вперед"
 
-#: editor_ops.cc:404 editor_ops.cc:489
+#: editor_ops.cc:435 editor_ops.cc:526
 msgid "nudge location forward"
 msgstr "Толчок позиции вперед"
 
-#: editor_ops.cc:462
+#: editor_ops.cc:466
 msgid "nudge regions backward"
 msgstr "Толчок областей назад"
 
-#: editor_ops.cc:551
+#: editor_ops.cc:558
 msgid "nudge forward"
 msgstr "Толчок вперед"
 
-#: editor_ops.cc:575
+#: editor_ops.cc:582
 msgid "nudge backward"
 msgstr "Толчок назад"
 
-#: editor_ops.cc:618
+#: editor_ops.cc:647
 msgid "sequence regions"
 msgstr "выстраивание областей встык"
 
-#: editor_ops.cc:694
+#: editor_ops.cc:709
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr "Функция build_region_boundary_cache вызвана с snap_type = %1"
 
-#: editor_ops.cc:2042
+#: editor_ops.cc:2057
 msgid "New Location Marker"
 msgstr "Новый маркер позиции"
 
-#: editor_ops.cc:2164
+#: editor_ops.cc:2148 editor_ops.cc:2172
+msgid "Set session start"
+msgstr ""
+
+#: editor_ops.cc:2238
 msgid "add markers"
 msgstr "Добавка маркера"
 
-#: editor_ops.cc:2274
+#: editor_ops.cc:2334
 msgid "clear markers"
 msgstr "Очистка маркеров"
 
-#: editor_ops.cc:2289
+#: editor_ops.cc:2349
 msgid "clear ranges"
 msgstr "Очистка диапазонов"
 
-#: editor_ops.cc:2305
+#: editor_ops.cc:2365
 msgid "clear locations"
 msgstr "Очистка позиций"
 
-#: editor_ops.cc:2368
+#: editor_ops.cc:2428
 msgid "insert region"
 msgstr "Вставка области"
 
-#: editor_ops.cc:2559
+#: editor_ops.cc:2619
 msgid "raise regions"
 msgstr "Поднятие областей"
 
-#: editor_ops.cc:2561
+#: editor_ops.cc:2621
 msgid "raise region"
 msgstr "Поднятие области"
 
-#: editor_ops.cc:2567
+#: editor_ops.cc:2627
 msgid "raise regions to top"
 msgstr "Поднятие областей наверх"
 
-#: editor_ops.cc:2569
+#: editor_ops.cc:2629
 msgid "raise region to top"
 msgstr "Поднятие области наверх"
 
-#: editor_ops.cc:2575
+#: editor_ops.cc:2635
 msgid "lower regions"
 msgstr "Опускание областей"
 
-#: editor_ops.cc:2577 editor_ops.cc:2585
+#: editor_ops.cc:2637 editor_ops.cc:2645
 msgid "lower region"
 msgstr "Опускание области"
 
-#: editor_ops.cc:2583
+#: editor_ops.cc:2643
 msgid "lower regions to bottom"
 msgstr "Опускание областей вниз"
 
-#: editor_ops.cc:2668
+#: editor_ops.cc:2728
 msgid "Rename Region"
 msgstr "Переименовать область..."
 
-#: editor_ops.cc:2670 processor_box.cc:1994 route_ui.cc:1569
+#: editor_ops.cc:2730 processor_box.cc:2058 route_ui.cc:1572
 msgid "New name:"
 msgstr "Новое название:"
 
-#: editor_ops.cc:2987
+#: editor_ops.cc:3047
 msgid "separate"
 msgstr "разделение"
 
-#: editor_ops.cc:3099
+#: editor_ops.cc:3159
 msgid "separate region under"
 msgstr "разделение области под курсором"
 
-#: editor_ops.cc:3220
+#: editor_ops.cc:3305
 msgid "trim to selection"
 msgstr "Обрезание по выделению"
 
-#: editor_ops.cc:3356
+#: editor_ops.cc:3454
 msgid "set sync point"
 msgstr "Установка точки синхронизации"
 
-#: editor_ops.cc:3380
+#: editor_ops.cc:3478
 msgid "remove region sync"
 msgstr "Удаление синхронизатора области"
 
-#: editor_ops.cc:3402
+#: editor_ops.cc:3500
 msgid "move regions to original position"
 msgstr "Перемещение областей в исходную позицию"
 
-#: editor_ops.cc:3404
+#: editor_ops.cc:3502
 msgid "move region to original position"
 msgstr "Перемещение области в исходную позицию"
 
-#: editor_ops.cc:3425
+#: editor_ops.cc:3523
 msgid "align selection"
 msgstr "Выравнивание выделения"
 
-#: editor_ops.cc:3499
+#: editor_ops.cc:3597
 msgid "align selection (relative)"
 msgstr "Выравнивание выделения (относительное)"
 
-#: editor_ops.cc:3533
+#: editor_ops.cc:3631
 msgid "align region"
 msgstr "Выравнивание области"
 
-#: editor_ops.cc:3584
+#: editor_ops.cc:3682
 msgid "trim front"
 msgstr "Обрезка впереди"
 
-#: editor_ops.cc:3584
+#: editor_ops.cc:3682
 msgid "trim back"
 msgstr "Обрезка сзади"
 
-#: editor_ops.cc:3614
+#: editor_ops.cc:3712
 msgid "trim to loop"
 msgstr "Обрезка в петлю"
 
-#: editor_ops.cc:3624
+#: editor_ops.cc:3722
 msgid "trim to punch"
 msgstr "Обрезка во врезку"
 
-#: editor_ops.cc:3686
+#: editor_ops.cc:3844
 msgid "trim to region"
 msgstr "Обрезка в область"
 
-#: editor_ops.cc:3794
+#: editor_ops.cc:3903
 msgid ""
 "This track/bus cannot be frozen because the signal adds or loses channels "
 "before reaching the outputs.\n"
@@ -5301,11 +5422,11 @@ msgstr ""
 "Это, как правило, вызвано плагинами, которые генерируют выходной "
 "стереосигнал из моновхода или наоборот."
 
-#: editor_ops.cc:3797
+#: editor_ops.cc:3906
 msgid "Cannot freeze"
 msgstr "Невозможно заморозить"
 
-#: editor_ops.cc:3803
+#: editor_ops.cc:3912
 msgid ""
 "<b>%1</b>\n"
 "\n"
@@ -5321,23 +5442,23 @@ msgstr ""
 "Замораживание будет только обрабатывать сигнал как первый посыл/вставку/"
 "возврат."
 
-#: editor_ops.cc:3807
+#: editor_ops.cc:3916
 msgid "Freeze anyway"
 msgstr "Всё равно заморозить"
 
-#: editor_ops.cc:3808
+#: editor_ops.cc:3917
 msgid "Don't freeze"
 msgstr "Не замораживать"
 
-#: editor_ops.cc:3809
+#: editor_ops.cc:3918
 msgid "Freeze Limits"
 msgstr "Пределы заморозки"
 
-#: editor_ops.cc:3824
+#: editor_ops.cc:3933
 msgid "Cancel Freeze"
 msgstr "Отменить замораживание"
 
-#: editor_ops.cc:3854
+#: editor_ops.cc:3963
 msgid ""
 "You can't perform this operation because the processing of the signal will "
 "cause one or more of the tracks to end up with a region with more channels "
@@ -5351,47 +5472,47 @@ msgstr ""
 "\n"
 "Вы можете сделать это без обработки, и это уже другая операция."
 
-#: editor_ops.cc:3858
+#: editor_ops.cc:3967
 msgid "Cannot bounce"
 msgstr "Невозможно выполнить сведение"
 
-#: editor_ops.cc:3869
+#: editor_ops.cc:4018
 msgid "bounce range"
 msgstr "Сведение области"
 
-#: editor_ops.cc:3971
+#: editor_ops.cc:4085
 msgid "delete"
 msgstr "Удаление"
 
-#: editor_ops.cc:3974
+#: editor_ops.cc:4088
 msgid "cut"
 msgstr "Вырезать"
 
-#: editor_ops.cc:3977
+#: editor_ops.cc:4091
 msgid "copy"
 msgstr "Копировать"
 
-#: editor_ops.cc:3980
+#: editor_ops.cc:4094
 msgid "clear"
 msgstr "Очистить"
 
-#: editor_ops.cc:4028
+#: editor_ops.cc:4142
 msgid "objects"
 msgstr "объекты"
 
-#: editor_ops.cc:4238 editor_ops.cc:4270
+#: editor_ops.cc:4352 editor_ops.cc:4437
 msgid "remove region"
 msgstr "Удаление области"
 
-#: editor_ops.cc:4719
+#: editor_ops.cc:4862
 msgid "duplicate selection"
 msgstr "Дублирование выделения"
 
-#: editor_ops.cc:4803
+#: editor_ops.cc:4948
 msgid "nudge track"
 msgstr "Смещение дорожки"
 
-#: editor_ops.cc:4840
+#: editor_ops.cc:4975
 msgid ""
 "Do you really want to destroy the last capture?\n"
 "(This is destructive and cannot be undone)"
@@ -5399,136 +5520,140 @@ msgstr ""
 "Последнюю запись будет удалена. Вы уверены?\n"
 "(отмена операции невозможна)"
 
-#: editor_ops.cc:4843 editor_ops.cc:6845 editor_regions.cc:462
+#: editor_ops.cc:4978 editor_ops.cc:7078 editor_regions.cc:462
 #: editor_snapshots.cc:159
 msgid "No, do nothing."
 msgstr "Нет"
 
-#: editor_ops.cc:4844
+#: editor_ops.cc:4979
 msgid "Yes, destroy it."
 msgstr "Да"
 
-#: editor_ops.cc:4846
+#: editor_ops.cc:4981
 msgid "Destroy last capture"
 msgstr "Уничтожение последней записи"
 
-#: editor_ops.cc:4906
+#: editor_ops.cc:5057
 msgid "normalize"
 msgstr "Нормализация"
 
-#: editor_ops.cc:5000
+#: editor_ops.cc:5155
 msgid "reverse regions"
 msgstr "Разворот областей"
 
-#: editor_ops.cc:5034
+#: editor_ops.cc:5189
 msgid "strip silence"
 msgstr "Удаление тишины"
 
-#: editor_ops.cc:5091
+#: editor_ops.cc:5270
 msgid "Fork Region(s)"
 msgstr "Ответвление областей"
 
-#: editor_ops.cc:5112
+#: editor_ops.cc:5277
 msgid "Could not unlink %1"
 msgstr "Не удалось отсоединить %1"
 
-#: editor_ops.cc:5326
+#: editor_ops.cc:5517
 msgid "reset region gain"
 msgstr "Сброс усиления области"
 
-#: editor_ops.cc:5379
+#: editor_ops.cc:5575
 msgid "region gain envelope active"
 msgstr "Огибающая области активна"
 
-#: editor_ops.cc:5406
+#: editor_ops.cc:5600
 msgid "toggle region lock"
 msgstr "Переключение блокировки области"
 
-#: editor_ops.cc:5430
+#: editor_ops.cc:5624
 msgid "Toggle Video Lock"
 msgstr "Переключить видеоблокировку"
 
-#: editor_ops.cc:5454
+#: editor_ops.cc:5648
 msgid "region lock style"
 msgstr "Способ блокировки области"
 
-#: editor_ops.cc:5479
+#: editor_ops.cc:5673
 msgid "change region opacity"
 msgstr "Смена прозрачности области"
 
-#: editor_ops.cc:5572
+#: editor_ops.cc:5766
 msgid "fade range"
 msgstr "Диапазон фейда"
 
-#: editor_ops.cc:5610
+#: editor_ops.cc:5804
 msgid "set fade in length"
 msgstr "Установка длины фейда нарастания"
 
-#: editor_ops.cc:5617
+#: editor_ops.cc:5811
 msgid "set fade out length"
 msgstr "Установка длины фейда затухания"
 
-#: editor_ops.cc:5662
+#: editor_ops.cc:5876
 msgid "set fade in shape"
 msgstr "Установка формы фейда нарастания"
 
-#: editor_ops.cc:5693
+#: editor_ops.cc:5911
 msgid "set fade out shape"
 msgstr "Установка формы фейда затухания"
 
-#: editor_ops.cc:5723
+#: editor_ops.cc:5947
 msgid "set fade in active"
 msgstr "Установка активности фейда нарастания"
 
-#: editor_ops.cc:5752
+#: editor_ops.cc:5981
 msgid "set fade out active"
 msgstr "Установка активности фейда затухания"
 
-#: editor_ops.cc:5994
+#: editor_ops.cc:6041
+msgid "toggle fade active"
+msgstr ""
+
+#: editor_ops.cc:6227
 msgid "set loop range from selection"
 msgstr "Установка петли из выделения"
 
-#: editor_ops.cc:6008
+#: editor_ops.cc:6241
 msgid "set loop range from region"
 msgstr "Установка петли из области"
 
-#: editor_ops.cc:6027
+#: editor_ops.cc:6260
 msgid "set punch range from selection"
 msgstr "Установка врезки из выделения"
 
-#: editor_ops.cc:6041
+#: editor_ops.cc:6284
 msgid "set session start/end from selection"
 msgstr "Установка начала/конца сессии из выделения"
 
-#: editor_ops.cc:6066
+#: editor_ops.cc:6299
 msgid "set punch range from region"
 msgstr "Установка врезки из области"
 
-#: editor_ops.cc:6175
+#: editor_ops.cc:6408
 msgid "Add new marker"
 msgstr "Создать маркер"
 
-#: editor_ops.cc:6176
+#: editor_ops.cc:6409
 msgid "Set global tempo"
 msgstr "Установить общий темп"
 
-#: editor_ops.cc:6179
+#: editor_ops.cc:6412
 msgid "Define one bar"
 msgstr "Определение такта"
 
-#: editor_ops.cc:6180
+#: editor_ops.cc:6413
 msgid "Do you want to set the global tempo or add a new tempo marker?"
 msgstr "Вы хотите установить общий темп или добавить новый маркер темпа?"
 
-#: editor_ops.cc:6206
+#: editor_ops.cc:6439
 msgid "set tempo from region"
 msgstr "Установка темпа из области"
 
-#: editor_ops.cc:6236
+#: editor_ops.cc:6469
 msgid "split regions"
 msgstr "Разделение выделений"
 
-#: editor_ops.cc:6278
+#: editor_ops.cc:6511
 msgid ""
 "You are about to split\n"
 "%1\n"
@@ -5540,11 +5665,11 @@ msgstr ""
 "на %2 частей.\n"
 "Это может занять много времени."
 
-#: editor_ops.cc:6285
+#: editor_ops.cc:6518
 msgid "Call for the Ferret!"
 msgstr "(?)Призвать Ферре!"
 
-#: editor_ops.cc:6286
+#: editor_ops.cc:6519
 msgid ""
 "Press OK to continue with this split operation\n"
 "or ask the Ferret dialog to tune the analysis"
@@ -5552,52 +5677,52 @@ msgstr ""
 "Нажмите OK для выполнения разделения\n"
 "или попросите Хорька скорректировать анализ."
 
-#: editor_ops.cc:6288
+#: editor_ops.cc:6521
 msgid "Press OK to continue with this split operation"
 msgstr "Нажмите OK для выполнения разделения"
 
-#: editor_ops.cc:6291
+#: editor_ops.cc:6524
 msgid "Excessive split?"
 msgstr "Массовое разделение?"
 
-#: editor_ops.cc:6443
+#: editor_ops.cc:6676
 msgid "place transient"
 msgstr "Разместить переходные"
 
-#: editor_ops.cc:6478
+#: editor_ops.cc:6711
 msgid "snap regions to grid"
 msgstr "привязка областей к сетке"
 
-#: editor_ops.cc:6517
+#: editor_ops.cc:6750
 msgid "Close Region Gaps"
 msgstr "Закрытие интервалов между областями"
 
-#: editor_ops.cc:6522
+#: editor_ops.cc:6755
 msgid "Crossfade length"
 msgstr "Длительность кроссфейда"
 
-#: editor_ops.cc:6531 editor_ops.cc:6542 rhythm_ferret.cc:119
+#: editor_ops.cc:6764 editor_ops.cc:6775 rhythm_ferret.cc:119
 #: session_option_editor.cc:141
 msgid "ms"
 msgstr "мс"
 
-#: editor_ops.cc:6533
+#: editor_ops.cc:6766
 msgid "Pull-back length"
 msgstr "Растяжка длины назад"
 
-#: editor_ops.cc:6546
+#: editor_ops.cc:6779
 msgid "Ok"
 msgstr "ОК"
 
-#: editor_ops.cc:6561
+#: editor_ops.cc:6794
 msgid "close region gaps"
 msgstr "устранение пробелов области"
 
-#: editor_ops.cc:6803
+#: editor_ops.cc:7036
 msgid "That would be bad news ...."
 msgstr "Это было бы плохой новостью..."
 
-#: editor_ops.cc:6808
+#: editor_ops.cc:7041
 msgid ""
 "Removing the master or monitor bus is such a bad idea\n"
 "that %1 is not going to allow it.\n"
@@ -5613,21 +5738,21 @@ msgstr ""
 "подобные вещи, в файле ardour.rc измените значение параметра\n"
 "\"allow-special-bus-removal\" на \"yes\""
 
-#: editor_ops.cc:6824 route_ui.cc:1935
+#: editor_ops.cc:7057 route_ui.cc:1938
 msgid "track"
 msgid_plural "tracks"
 msgstr[0] "дорожка"
 msgstr[1] "дорожки"
 msgstr[2] "дорожек"
 
-#: editor_ops.cc:6825 route_ui.cc:1935
+#: editor_ops.cc:7058 route_ui.cc:1938
 msgid "bus"
 msgid_plural "busses"
 msgstr[0] "шина"
 msgstr[1] "шины"
 msgstr[2] "шин"
 
-#: editor_ops.cc:6829
+#: editor_ops.cc:7062
 msgid ""
 "Do you really want to remove %1 %2 and %3 %4?\n"
 "(You may also lose the playlists associated with the %2)\n"
@@ -5639,7 +5764,7 @@ msgstr ""
 "\n"
 "Это действие невозможно отменить, файл сессии будет перезаписан."
 
-#: editor_ops.cc:6834
+#: editor_ops.cc:7067
 msgid ""
 "Do you really want to remove %1 %2?\n"
 "(You may also lose the playlists associated with the %2)\n"
@@ -5651,7 +5776,7 @@ msgstr ""
 "\n"
 "Это действие невозможно отменить, файл сессии будет перезаписан."
 
-#: editor_ops.cc:6840
+#: editor_ops.cc:7073
 msgid ""
 "Do you really want to remove %1 %2?\n"
 "\n"
@@ -5661,60 +5786,72 @@ msgstr ""
 "\n"
 "Это действие не может быть отменено и файл сессии будут перезаписан"
 
-#: editor_ops.cc:6847
+#: editor_ops.cc:7080
 msgid "Yes, remove them."
 msgstr "Да, удалить их."
 
-#: editor_ops.cc:6849 editor_snapshots.cc:160
+#: editor_ops.cc:7082 editor_snapshots.cc:160
 msgid "Yes, remove it."
 msgstr "Да, удалить"
 
-#: editor_ops.cc:6854 editor_ops.cc:6856
+#: editor_ops.cc:7087 editor_ops.cc:7089
 msgid "Remove %1"
 msgstr "Удалить %1"
 
-#: editor_ops.cc:6919
+#: editor_ops.cc:7191 editor_ops.cc:7205 editor_ops.cc:7245 editor_ops.cc:7255
 msgid "insert time"
 msgstr "Вставка времени"
 
-#: editor_ops.cc:7083
+#: editor_ops.cc:7308
+msgid "Cannot insert or delete time when in Lock edit."
+msgstr ""
+
+#: editor_ops.cc:7328 editor_ops.cc:7340 editor_ops.cc:7413
+msgid "cut time"
+msgstr ""
+
+#: editor_ops.cc:7426
+msgid "remove time"
+msgstr ""
+
+#: editor_ops.cc:7500
 msgid "There are too many tracks to fit in the current window"
 msgstr "Такое количество дорожек в окне не поместится"
 
-#: editor_ops.cc:7144
+#: editor_ops.cc:7561
 msgid "Sel"
 msgstr "Выб."
 
-#: editor_ops.cc:7183
+#: editor_ops.cc:7600
 #, c-format
 msgid "Saved view %u"
 msgstr "Сохраненный вид %u"
 
-#: editor_ops.cc:7208
+#: editor_ops.cc:7625
 msgid "mute regions"
 msgstr "Приглушение областей"
 
-#: editor_ops.cc:7210
+#: editor_ops.cc:7627
 msgid "mute region"
 msgstr "Приглушение области"
 
-#: editor_ops.cc:7247
+#: editor_ops.cc:7664
 msgid "combine regions"
 msgstr "Объединение областей"
 
-#: editor_ops.cc:7285
+#: editor_ops.cc:7702
 msgid "uncombine regions"
 msgstr "Разъединение областей"
 
-#: editor_ops.cc:7322
+#: editor_ops.cc:7739
 msgid "%1: Locked"
 msgstr "%1: заблокировано"
 
-#: editor_ops.cc:7329
+#: editor_ops.cc:7746
 msgid "Click to unlock"
 msgstr "Снять замок"
 
-#: editor_ops.cc:7383
+#: editor_ops.cc:7793
 msgid "Moving embedded files into session folder"
 msgstr "Перемещение встроенных файлов в папке сессии"
 
@@ -5726,7 +5863,7 @@ msgstr "Название региона с числом каналов в []'с"
 msgid "Position of start of region"
 msgstr "Положение начала области"
 
-#: editor_regions.cc:114 editor_regions.cc:851 time_info_box.cc:101
+#: editor_regions.cc:114 editor_regions.cc:859 time_info_box.cc:101
 msgid "End"
 msgstr "Конец"
 
@@ -5802,107 +5939,111 @@ msgstr "Да, удалить"
 msgid "Remove unused regions"
 msgstr "Удалить неиспользуемые области"
 
-#: editor_regions.cc:818 editor_regions.cc:832 editor_regions.cc:846
+#: editor_regions.cc:694
+msgid "EditorRegions::format_position: negative timecode position: %1"
+msgstr ""
+
+#: editor_regions.cc:824 editor_regions.cc:840 editor_regions.cc:854
 msgid "Mult."
 msgstr "Неск."
 
-#: editor_regions.cc:849 midi_list_editor.cc:104 time_info_box.cc:94
+#: editor_regions.cc:857 midi_list_editor.cc:104 time_info_box.cc:94
 msgid "Start"
 msgstr "Начало"
 
-#: editor_regions.cc:867 editor_regions.cc:883
+#: editor_regions.cc:875 editor_regions.cc:891
 msgid "Multiple"
 msgstr "Несколько"
 
-#: editor_regions.cc:952
+#: editor_regions.cc:960
 msgid "MISSING "
 msgstr "(ОТСУТСТВУЕТ) "
 
-#: editor_routes.cc:182
+#: editor_routes.cc:183
 msgid "SS"
 msgstr "СС"
 
-#: editor_routes.cc:206
+#: editor_routes.cc:207
 msgid "Track/Bus Name"
 msgstr "Название дорожи/шины"
 
-#: editor_routes.cc:207
+#: editor_routes.cc:208
 msgid "Track/Bus visible ?"
 msgstr "Дорожка или шина видима?"
 
-#: editor_routes.cc:208
+#: editor_routes.cc:209
 msgid "Track/Bus active ?"
 msgstr "Дорожка или шина активна?"
 
-#: editor_routes.cc:209
+#: editor_routes.cc:210
 msgid "MidiInput|I"
 msgstr "Вх"
 
-#: editor_routes.cc:209
+#: editor_routes.cc:210
 msgid "MIDI input enabled"
 msgstr "Вход MIDI включен"
 
-#: editor_routes.cc:210
+#: editor_routes.cc:211
 msgid "Rec|R"
 msgstr "З"
 
-#: editor_routes.cc:210
+#: editor_routes.cc:211
 msgid "Record enabled"
 msgstr "Готовность к записи"
 
-#: editor_routes.cc:211
+#: editor_routes.cc:212
 msgid "Muted"
 msgstr "Пригл."
 
-#: editor_routes.cc:212
+#: editor_routes.cc:213
 msgid "Soloed"
 msgstr "Солир."
 
-#: editor_routes.cc:213
+#: editor_routes.cc:214
 msgid "SoloIso|SI"
 msgstr "ИС"
 
-#: editor_routes.cc:213
+#: editor_routes.cc:214
 msgid "Solo Isolated"
 msgstr "Изолирование соло"
 
-#: editor_routes.cc:214
+#: editor_routes.cc:215
 msgid "SoloLock|SS"
 msgstr "БС"
 
-#: editor_routes.cc:214
+#: editor_routes.cc:215
 msgid "Solo Safe (Locked)"
 msgstr "Сохр. соло (закрыт)"
 
-#: editor_routes.cc:477 mixer_ui.cc:1197
+#: editor_routes.cc:485 mixer_ui.cc:1213
 msgid "Hide All"
 msgstr "Скрыть всё"
 
-#: editor_routes.cc:478 mixer_ui.cc:1198
+#: editor_routes.cc:486 mixer_ui.cc:1214
 msgid "Show All Audio Tracks"
 msgstr "Показать все звуковые дорожки"
 
-#: editor_routes.cc:479 mixer_ui.cc:1199
+#: editor_routes.cc:487 mixer_ui.cc:1215
 msgid "Hide All Audio Tracks"
 msgstr "Скрыть все звуковые дорожки"
 
-#: editor_routes.cc:480 mixer_ui.cc:1200
+#: editor_routes.cc:488 mixer_ui.cc:1216
 msgid "Show All Audio Busses"
 msgstr "Показать все звуковые шины"
 
-#: editor_routes.cc:481 mixer_ui.cc:1201
+#: editor_routes.cc:489 mixer_ui.cc:1217
 msgid "Hide All Audio Busses"
 msgstr "Скрыть все звуковые шины"
 
-#: editor_routes.cc:482
+#: editor_routes.cc:490 mixer_ui.cc:1218
 msgid "Show All Midi Tracks"
 msgstr "Показать все MIDI-дорожки"
 
-#: editor_routes.cc:483
+#: editor_routes.cc:491 mixer_ui.cc:1219
 msgid "Hide All Midi Tracks"
 msgstr "Скрыть все MIDI-дорожки"
 
-#: editor_routes.cc:484
+#: editor_routes.cc:492
 msgid "Show Tracks With Regions Under Playhead"
 msgstr "Показывать дорожки с областями под указателем воспроизведения"
 
@@ -5931,12 +6072,12 @@ msgid "Unhide ranges"
 msgstr "Раскрыть маркеры выделения"
 
 #: editor_rulers.cc:224
-msgid "Make Loop range"
-msgstr "Создать область петли"
+msgid "New Loop range"
+msgstr "Создать новую петлю"
 
 #: editor_rulers.cc:225
-msgid "Make Punch range"
-msgstr "Создать область врезки"
+msgid "New Punch range"
+msgstr "Создать новую врезку"
 
 #: editor_rulers.cc:230
 msgid "New CD track marker"
@@ -5946,7 +6087,7 @@ msgstr "Создать маркер дорожки CD"
 msgid "New Tempo"
 msgstr "Вставить новый темп"
 
-#: editor_rulers.cc:239 tempo_dialog.cc:296
+#: editor_rulers.cc:239 tempo_dialog.cc:315
 msgid "New Meter"
 msgstr "Вставить новый размер"
 
@@ -6004,43 +6145,47 @@ msgstr ""
 msgid "stretch/shrink"
 msgstr "Растянуть или сжать"
 
-#: editor_timefx.cc:129
+#: editor_timefx.cc:130
 msgid "pitch shift"
 msgstr "Смена высоты тона"
 
-#: editor_timefx.cc:301
+#: editor_timefx.cc:304
 msgid "timefx cannot be started - thread creation error"
 msgstr "Timefx не может быть запущен, ошибка при создании потока"
 
-#: engine_dialog.cc:84
+#: engine_dialog.cc:87
 msgid "Device Control Panel"
 msgstr "Панель управления устройством"
 
-#: engine_dialog.cc:85
+#: engine_dialog.cc:88
 msgid "Midi Device Setup"
 msgstr "Настройка MIDI-устройства"
 
-#: engine_dialog.cc:86 engine_dialog.cc:2121
+#: engine_dialog.cc:89
+msgid "Stop (Reconfigure)"
+msgstr "Остановить (для настройки)"
+
+#: engine_dialog.cc:90 engine_dialog.cc:2693
 msgid "Measure"
 msgstr "Измерить"
 
-#: engine_dialog.cc:87
+#: engine_dialog.cc:91
 msgid "Use results"
 msgstr "Использовать результаты"
 
-#: engine_dialog.cc:88
+#: engine_dialog.cc:92
 msgid "Back to settings ... (ignore results)"
 msgstr "Закрыть и не использовать"
 
-#: engine_dialog.cc:89
+#: engine_dialog.cc:93
 msgid "Calibrate Audio"
 msgstr "Калибровка аудио"
 
-#: engine_dialog.cc:93
+#: engine_dialog.cc:97
 msgid "Back to settings"
 msgstr "Возврат к настройкам"
 
-#: engine_dialog.cc:112
+#: engine_dialog.cc:117
 msgid ""
 "No audio/MIDI backends detected. %1 cannot run\n"
 "\n"
@@ -6050,11 +6195,11 @@ msgstr ""
 "\n"
 "(Это ошибка сборки/упаковки/системы, она никогда не должна происходить.)"
 
-#: engine_dialog.cc:138
+#: engine_dialog.cc:142
 msgid "Latency Measurement Tool"
 msgstr "Тестирование задержки отклика"
 
-#: engine_dialog.cc:150
+#: engine_dialog.cc:154
 msgid ""
 "<span weight=\"bold\">Turn down the volume on your audio equipment to a very "
 "low level.</span>"
@@ -6062,89 +6207,94 @@ msgstr ""
 "<span weight=\"bold\">Уберите громкость выхода вашей звуковой карты до "
 "минимума </span>"
 
-#: engine_dialog.cc:159
+#: engine_dialog.cc:163
 msgid "Select two channels below and connect them using a cable."
 msgstr "Выберите два канала ниже и соединить их с помощью кабеля"
 
-#: engine_dialog.cc:164
+#: engine_dialog.cc:168
 msgid "Output channel"
 msgstr "Канал выхода"
 
-#: engine_dialog.cc:172
+#: engine_dialog.cc:176
 msgid "Input channel"
 msgstr "Канал входа"
 
-#: engine_dialog.cc:207
+#: engine_dialog.cc:209
 msgid "Once the channels are connected, click the \"Measure\" button."
 msgstr "Соединив каналы, нажмите кнопку «Измерить»."
 
-#: engine_dialog.cc:214
+#: engine_dialog.cc:216
 msgid "When satisfied with the results, click the \"Use results\" button."
 msgstr ""
 "Если результат вас устраивает, нажмите кнопку «Использовать результаты»."
 
-#: engine_dialog.cc:229 engine_dialog.cc:2241 engine_dialog.cc:2251
+#: engine_dialog.cc:231 engine_dialog.cc:2813 engine_dialog.cc:2823
 msgid "No measurement results yet"
 msgstr "Пока нет результатов измерения"
 
-#: engine_dialog.cc:239 route_params_ui.cc:106
+#: engine_dialog.cc:241 route_params_ui.cc:106
 msgid "Latency"
 msgstr "Задержка отклика"
 
-#: engine_dialog.cc:396
+#: engine_dialog.cc:465
 msgid "Audio System:"
 msgstr "Звуковая подсистема:"
 
-#: engine_dialog.cc:433
+#: engine_dialog.cc:507
 msgid "Driver:"
 msgstr "Драйвер:"
 
-#: engine_dialog.cc:439
+#: engine_dialog.cc:514
+msgid "Input Device:"
+msgstr "Устройство записи:"
+
+#: engine_dialog.cc:518
+msgid "Output Device:"
+msgstr "Устройство вывода:"
+
+#: engine_dialog.cc:525
 msgid "Device:"
 msgstr "Устройство:"
 
-#: engine_dialog.cc:444 engine_dialog.cc:543 sfdb_ui.cc:153 sfdb_ui.cc:348
-#: sfdb_ui.cc:353
+#: engine_dialog.cc:534 engine_dialog.cc:639 sfdb_ui.cc:152 sfdb_ui.cc:347
+#: sfdb_ui.cc:352
 msgid "Sample rate:"
 msgstr "Частота сэмплирования:"
 
-#: engine_dialog.cc:450 engine_dialog.cc:550
+#: engine_dialog.cc:540 engine_dialog.cc:646
 msgid "Buffer size:"
 msgstr "Размер буфера:"
 
-#: engine_dialog.cc:468
+#: engine_dialog.cc:558
 msgid "Input Channels:"
 msgstr "Каналов входа:"
 
-#: engine_dialog.cc:481
+#: engine_dialog.cc:571
 msgid "Output Channels:"
 msgstr "Каналов выхода:"
 
-#: engine_dialog.cc:493
+#: engine_dialog.cc:583
 msgid "Hardware input latency:"
 msgstr "Задержка аппаратных входов:"
 
-#: engine_dialog.cc:496 engine_dialog.cc:509
+#: engine_dialog.cc:586 engine_dialog.cc:599
 msgid "samples"
 msgstr "сэмплов"
 
-#: engine_dialog.cc:506
+#: engine_dialog.cc:596
 msgid "Hardware output latency:"
 msgstr "Задержка аппаратных выходов:"
 
-#: engine_dialog.cc:517
+#: engine_dialog.cc:607
 msgid "MIDI System:"
 msgstr "Подсистема MIDI:"
 
-#: engine_dialog.cc:535
+#: engine_dialog.cc:631
 msgid ""
-"The %1 audio backend was configured and started externally.\n"
-"This limits your control over it."
+"%1 is already running. %2 will connect to it and use the existing settings."
 msgstr ""
-"Звуковая подсистема %1 была настроена и запущена извне.\n"
-"Вы не сможете полностью контролировать её."
 
-#: engine_dialog.cc:588
+#: engine_dialog.cc:684
 msgid ""
 "Failed to start or connect to audio-engine.\n"
 "\n"
@@ -6154,7 +6304,7 @@ msgstr ""
 "\n"
 "Калибровка задержки требует рабочий аудиоинтерфейс."
 
-#: engine_dialog.cc:594
+#: engine_dialog.cc:690
 msgid ""
 "Your selected audio configuration is playback- or capture-only.\n"
 "\n"
@@ -6164,169 +6314,184 @@ msgstr ""
 "\n"
 "Калибровка задержки требует воспроизведение и захват"
 
-#: engine_dialog.cc:675
+#: engine_dialog.cc:870
 msgid "MIDI Devices"
 msgstr "MIDI устройства"
 
-#: engine_dialog.cc:681
+#: engine_dialog.cc:876
 msgid "Device"
 msgstr "Устройство"
 
-#: engine_dialog.cc:683
+#: engine_dialog.cc:878
 msgid "Hardware Latencies"
 msgstr "Аппаратные задержки"
 
-#: engine_dialog.cc:724
+#: engine_dialog.cc:919
 msgid "Calibrate"
 msgstr "Калибровка"
 
-#: engine_dialog.cc:824
+#: engine_dialog.cc:1008
 msgid "all available channels"
 msgstr "Все доступные каналы"
 
-#: engine_dialog.cc:1063 latency_gui.cc:39
+#: engine_dialog.cc:1441 latency_gui.cc:39
 msgid "sample"
 msgid_plural "samples"
 msgstr[0] "сэмпл"
 msgstr[1] "сэмпла"
 msgstr[2] "сэмплов"
 
-#: engine_dialog.cc:1114
+#: engine_dialog.cc:1494
 #, c-format
 msgid "(%.1f ms)"
 msgstr "(%.1f мс)"
 
-#: engine_dialog.cc:1617
+#: engine_dialog.cc:2161
 msgid "Could not start backend engine %1"
 msgstr "Не удалось запустить движок бекенда %1"
 
-#: engine_dialog.cc:1668
+#: engine_dialog.cc:2212
 msgid "Cannot set driver to %1"
 msgstr "Невозможно использовать %1 в качестве драйвера."
 
-#: engine_dialog.cc:1672
+#: engine_dialog.cc:2217
+msgid "Cannot set input device name to %1"
+msgstr ""
+
+#: engine_dialog.cc:2221
+msgid "Cannot set output device name to %1"
+msgstr ""
+
+#: engine_dialog.cc:2226
 msgid "Cannot set device name to %1"
 msgstr "Невозможно %1 в имени устройства."
 
-#: engine_dialog.cc:1676
+#: engine_dialog.cc:2231
 msgid "Cannot set sample rate to %1"
 msgstr "Невозможно использовать %1 в частоты сэмплирования."
 
-#: engine_dialog.cc:1680
+#: engine_dialog.cc:2235
 msgid "Cannot set buffer size to %1"
 msgstr "Невозможно использовать %1 в размера буфера."
 
-#: engine_dialog.cc:1686
+#: engine_dialog.cc:2241
 msgid "Cannot set input channels to %1"
 msgstr "Не удается установить входные каналы в %1"
 
-#: engine_dialog.cc:1690
+#: engine_dialog.cc:2245
 msgid "Cannot set output channels to %1"
 msgstr "Не удается установить выходные каналы в %1"
 
-#: engine_dialog.cc:1696
+#: engine_dialog.cc:2251
 msgid "Cannot set input latency to %1"
 msgstr "Не удается установить задержку входа в %1"
 
-#: engine_dialog.cc:1700
+#: engine_dialog.cc:2255
 msgid "Cannot set output latency to %1"
 msgstr "Не удается установить задержку выхода в %1"
 
-#: engine_dialog.cc:1979 engine_dialog.cc:2038
+#: engine_dialog.cc:2551 engine_dialog.cc:2610
 msgid "No signal detected "
 msgstr "Сигнал не обнаружен"
 
-#: engine_dialog.cc:1992 engine_dialog.cc:2046 port_insert_ui.cc:70
+#: engine_dialog.cc:2564 engine_dialog.cc:2618 port_insert_ui.cc:70
 #: port_insert_ui.cc:98
 msgid "Disconnected from audio engine"
 msgstr "Выполнено отсоединение от звукового движка"
 
-#: engine_dialog.cc:2001 engine_dialog.cc:2054
+#: engine_dialog.cc:2573 engine_dialog.cc:2626
 msgid "Detected roundtrip latency: "
 msgstr "Определены следующие задержки:"
 
-#: engine_dialog.cc:2003 engine_dialog.cc:2056
+#: engine_dialog.cc:2575 engine_dialog.cc:2628
 msgid "Systemic latency: "
 msgstr "Системная задержка:"
 
-#: engine_dialog.cc:2010
+#: engine_dialog.cc:2582
 msgid "(signal detection error)"
 msgstr "(ошибка обнаружения сигнала)"
 
-#: engine_dialog.cc:2016
+#: engine_dialog.cc:2588
 msgid "(inverted - bad wiring)"
 msgstr "(инвертировано - плохая проводка)"
 
-#: engine_dialog.cc:2063
+#: engine_dialog.cc:2635
 msgid "(averaging)"
 msgstr "(усреднение)"
 
-#: engine_dialog.cc:2069
+#: engine_dialog.cc:2641
 msgid "(too large jitter)"
 msgstr "(слишком большое дрожание)"
 
-#: engine_dialog.cc:2073
+#: engine_dialog.cc:2645
 msgid "(large jitter)"
 msgstr "(большое дрожание)"
 
-#: engine_dialog.cc:2085
+#: engine_dialog.cc:2657
 msgid "Timeout - large MIDI jitter."
 msgstr "Тайм-аут - большой MIDI джиттер."
 
-#: engine_dialog.cc:2101 port_insert_ui.cc:134
+#: engine_dialog.cc:2673 port_insert_ui.cc:134
 msgid "Detecting ..."
 msgstr "Выполняется определение..."
 
-#: engine_dialog.cc:2195
+#: engine_dialog.cc:2764
 msgid "Disconnect from %1"
 msgstr "Отсоединить от %1"
 
-#: engine_dialog.cc:2199 mixer_strip.cc:1525 route_group_dialog.cc:45
-#: route_time_axis.cc:841
-msgid "Active"
-msgstr "Активно"
+#: engine_dialog.cc:2769
+msgid "Running"
+msgstr ""
 
-#: engine_dialog.cc:2209
+#: engine_dialog.cc:2771
+msgid "Connected"
+msgstr ""
+
+#: engine_dialog.cc:2782
 msgid "Connect to %1"
 msgstr "Соединить с %1"
 
-#: engine_dialog.cc:2214
-msgid "Inactive"
-msgstr "Неактивно"
-
-#: export_channel_selector.cc:45 sfdb_ui.cc:151
+#: export_channel_selector.cc:51 sfdb_ui.cc:150
 msgid "Channels:"
 msgstr "Каналов:"
 
-#: export_channel_selector.cc:46
+#: export_channel_selector.cc:52
 msgid "Split to mono files"
 msgstr "Разделить на монофонические файлы"
 
-#: export_channel_selector.cc:189
+#: export_channel_selector.cc:197
 msgid "Bus or Track"
 msgstr "Шина или дорожка"
 
-#: export_channel_selector.cc:465
+#: export_channel_selector.cc:473
 msgid "Region contents without fades nor region gain (channels: %1)"
 msgstr "Содержание области без фейдов и усиления области (каналов: %1)"
 
-#: export_channel_selector.cc:469
+#: export_channel_selector.cc:477
 msgid "Region contents with fades and region gain (channels: %1)"
 msgstr "Содержание области с фейдами и усилением области (каналов: %1)"
 
-#: export_channel_selector.cc:473
+#: export_channel_selector.cc:481
 msgid "Track output (channels: %1)"
 msgstr "Выход дорожки (каналов: %1)"
 
-#: export_channel_selector.cc:542
-msgid "Export region contents"
-msgstr "Экспортировать содержимое области"
+#: export_channel_selector.cc:550
+msgid "Apply track/bus processing"
+msgstr "Применить обработку в дорожках и шинах"
+
+#: export_channel_selector.cc:551
+msgid "Select all tracks"
+msgstr "Выбрать все дорожки"
+
+#: export_channel_selector.cc:552
+msgid "Select all busses"
+msgstr "Выбрать все шины"
 
-#: export_channel_selector.cc:543
-msgid "Export track output"
-msgstr "Экспортировать выходы дорожки"
+#: export_channel_selector.cc:553
+msgid "Deselect all"
+msgstr "Снять выделение"
 
-#: export_channel_selector.cc:575
+#: export_channel_selector.cc:587
 msgid "Track name"
 msgstr "Название дорожки"
 
@@ -6461,8 +6626,8 @@ msgstr "Папка:"
 
 #: export_filename_selector.cc:37 session_import_dialog.cc:45
 #: transcode_video_dialog.cc:59 video_server_dialog.cc:54
-#: video_server_dialog.cc:56 export_video_dialog.cc:81
-#: export_video_dialog.cc:83
+#: video_server_dialog.cc:56 export_video_dialog.cc:77
+#: export_video_dialog.cc:79
 msgid "Browse"
 msgstr "Указать"
 
@@ -6557,39 +6722,43 @@ msgstr "Записать файл CUE для создания CD/DVD"
 msgid "Create TOC file for disk-at-once CD/DVD creation"
 msgstr "Записать файл TOC для создания CD/DVD"
 
-#: export_format_dialog.cc:73
+#: export_format_dialog.cc:72
+msgid "Create chapter mark file for MP4 chapter marks"
+msgstr ""
+
+#: export_format_dialog.cc:74
 msgid "Tag file with session's metadata"
 msgstr "Добавить в файла метаданные сессии"
 
-#: export_format_dialog.cc:470
+#: export_format_dialog.cc:474
 msgid "Best (sinc)"
 msgstr "Наилучшее (sinc)"
 
-#: export_format_dialog.cc:475
+#: export_format_dialog.cc:479
 msgid "Medium (sinc)"
 msgstr "Среднее (sinc)"
 
-#: export_format_dialog.cc:480
+#: export_format_dialog.cc:484
 msgid "Fast (sinc)"
 msgstr "Быстро (sinc)"
 
-#: export_format_dialog.cc:490
+#: export_format_dialog.cc:494
 msgid "Zero order hold"
 msgstr "Нулевой порядок удержания"
 
-#: export_format_dialog.cc:895
+#: export_format_dialog.cc:904
 msgid "Linear encoding options"
 msgstr "Параметры линейного кодирования"
 
-#: export_format_dialog.cc:911
+#: export_format_dialog.cc:920
 msgid "Ogg Vorbis options"
 msgstr "Параметры Ogg Vorbis"
 
-#: export_format_dialog.cc:922
+#: export_format_dialog.cc:931
 msgid "FLAC options"
 msgstr "Параметры FLAC"
 
-#: export_format_dialog.cc:939
+#: export_format_dialog.cc:948
 msgid "Broadcast Wave options"
 msgstr "Параметры Broadcast Wave"
 
@@ -6617,7 +6786,7 @@ msgstr "Вы действительно хотите удалить этот п
 msgid "Show Times as:"
 msgstr "Показать время как:"
 
-#: export_timespan_selector.cc:53 processor_box.cc:2468
+#: export_timespan_selector.cc:53 processor_box.cc:2533
 msgid "Select All"
 msgstr "Выделить всё"
 
@@ -6641,39 +6810,39 @@ msgstr "getSoundResourceFile: Нет правильного корня в фай
 msgid "getSoundResourceFile: root = %1, != response"
 msgstr "getSoundResourceFile: корень = %1, != ответ"
 
-#: sfdb_freesound_mootcher.cc:410 rc_option_editor.cc:1816
+#: sfdb_freesound_mootcher.cc:410 rc_option_editor.cc:2298
 msgid "%1"
 msgstr "%1"
 
-#: gain_meter.cc:132 gain_meter.cc:400 gain_meter.cc:505 gain_meter.cc:896
+#: gain_meter.cc:134 gain_meter.cc:402 gain_meter.cc:507 gain_meter.cc:898
 msgid "-inf"
 msgstr "-inf"
 
-#: gain_meter.cc:147 gain_meter.cc:958
+#: gain_meter.cc:149 gain_meter.cc:962
 msgid "Fader automation mode"
 msgstr "Режим автоматизации фейдера"
 
-#: gain_meter.cc:148 gain_meter.cc:959
+#: gain_meter.cc:150 gain_meter.cc:963
 msgid "Fader automation type"
 msgstr "Тип автоматизации фейдера"
 
-#: gain_meter.cc:157 gain_meter.cc:829 panner_ui.cc:179 panner_ui.cc:639
+#: gain_meter.cc:159 gain_meter.cc:831 panner_ui.cc:177 panner_ui.cc:639
 msgid "Abs"
 msgstr "Абс"
 
-#: gain_meter.cc:793
+#: gain_meter.cc:795
 msgid "M"
 msgstr "М"
 
-#: gain_meter.cc:796
+#: gain_meter.cc:798
 msgid "P"
 msgstr "Сп"
 
-#: gain_meter.cc:799
+#: gain_meter.cc:801
 msgid "T"
 msgstr "К"
 
-#: gain_meter.cc:802
+#: gain_meter.cc:804
 msgid "W"
 msgstr "З"
 
@@ -6681,44 +6850,44 @@ msgstr "З"
 msgid "<span size=\"large\">Presets</span>"
 msgstr "<span size=\"large\">Профили</span>"
 
-#: generic_pluginui.cc:97
+#: generic_pluginui.cc:98
 msgid "Manual"
 msgstr "Вручную"
 
-#: generic_pluginui.cc:106
+#: generic_pluginui.cc:107
 msgid "All Automation"
 msgstr "Вся автоматизация"
 
-#: generic_pluginui.cc:250
+#: generic_pluginui.cc:251
 msgid "Switches"
 msgstr "Переключатели"
 
-#: generic_pluginui.cc:260 generic_pluginui.cc:436 processor_box.cc:2442
+#: generic_pluginui.cc:261 generic_pluginui.cc:437 processor_box.cc:2507
 msgid "Controls"
 msgstr "Управление"
 
-#: generic_pluginui.cc:293
+#: generic_pluginui.cc:294
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr "Редактор плагинов: невозможно создать управляющий элемент для порта %1"
 
-#: generic_pluginui.cc:318
+#: generic_pluginui.cc:319
 msgid "Plugin Editor: no control for property %1"
 msgstr "Редактор плагинов: нет регулятора для свойства %1"
 
-#: generic_pluginui.cc:324
+#: generic_pluginui.cc:325
 msgid "Plugin Editor: could not build control element for property %1"
 msgstr ""
 "Редаткор плагина: не удалось создать контрольный элемент для свойства %1"
 
-#: generic_pluginui.cc:468
+#: generic_pluginui.cc:469
 msgid "Meters"
 msgstr "Индикаторы уровня"
 
-#: generic_pluginui.cc:490
+#: generic_pluginui.cc:491
 msgid "Automation control"
 msgstr "Контроль автоматизации"
 
-#: generic_pluginui.cc:497
+#: generic_pluginui.cc:498
 msgid "Mgnual"
 msgstr "Mgnual"
 
@@ -6730,12 +6899,12 @@ msgstr "Управление звуковыми соединениями"
 msgid "MIDI Connection Manager"
 msgstr "Управление MIDI-соединениями"
 
-#: global_port_matrix.cc:201 io_selector.cc:211 mixer_strip.cc:796
-#: mixer_strip.cc:897
+#: global_port_matrix.cc:201 io_selector.cc:211 mixer_strip.cc:826
+#: mixer_strip.cc:927 monitor_section.cc:1279 monitor_selector.cc:189
 msgid "Disconnect"
 msgstr "Отсоединить"
 
-#: global_port_matrix.cc:207 io_selector.cc:217
+#: global_port_matrix.cc:207 io_selector.cc:217 monitor_selector.cc:195
 msgid "port"
 msgstr "порт"
 
@@ -6795,47 +6964,51 @@ msgstr "Включить все группы"
 msgid "Disable All Groups"
 msgstr "Отключить все группы"
 
-#: insert_time_dialog.cc:46
+#: insert_remove_time_dialog.cc:52
+msgid "Time to remove"
+msgstr ""
+
+#: insert_remove_time_dialog.cc:52
 msgid "Time to insert:"
 msgstr "Вставляемый промежуток времени:"
 
-#: insert_time_dialog.cc:54
+#: insert_remove_time_dialog.cc:61
 msgid "Intersected regions should:"
 msgstr "Выделенные области должны:"
 
-#: insert_time_dialog.cc:57
+#: insert_remove_time_dialog.cc:64
 msgid "stay in position"
 msgstr "Остаться на месте"
 
-#: insert_time_dialog.cc:58
+#: insert_remove_time_dialog.cc:65
 msgid "move"
 msgstr "Переместиться"
 
-#: insert_time_dialog.cc:59
+#: insert_remove_time_dialog.cc:66
 msgid "be split"
 msgstr "Разделиться"
 
-#: insert_time_dialog.cc:65
-msgid "Insert time on all the track's playlists"
-msgstr "Вставить во все списки воспроизведения дорожки"
+#: insert_remove_time_dialog.cc:73
+msgid "Apply to all the track's playlists"
+msgstr ""
 
-#: insert_time_dialog.cc:68
+#: insert_remove_time_dialog.cc:76
 msgid "Move glued regions"
 msgstr "Переместить приклеенные области"
 
-#: insert_time_dialog.cc:70
+#: insert_remove_time_dialog.cc:78
 msgid "Move markers"
 msgstr "Переместить маркеры"
 
-#: insert_time_dialog.cc:73
+#: insert_remove_time_dialog.cc:81
 msgid "Move glued markers"
 msgstr "Переместить приклеенные маркеры"
 
-#: insert_time_dialog.cc:78
+#: insert_remove_time_dialog.cc:86
 msgid "Move locked markers"
 msgstr "Переместить заблокированные маркеры"
 
-#: insert_time_dialog.cc:83
+#: insert_remove_time_dialog.cc:91
 msgid ""
 "Move tempo and meter changes\n"
 "<i>(may cause oddities in the tempo map)</i>"
@@ -6843,7 +7016,11 @@ msgstr ""
 "Переместить изменения темпа и размера такта\n"
 "<i>(может привести к странностям в карте темпа)</i>"
 
-#: insert_time_dialog.cc:91
+#: insert_remove_time_dialog.cc:99
+msgid "Remove time"
+msgstr ""
+
+#: insert_remove_time_dialog.cc:99
 msgid "Insert time"
 msgstr "Вставить"
 
@@ -6859,24 +7036,24 @@ msgstr "Импортируется  файл: %1 из %2"
 msgid "I/O selector"
 msgstr "Выбор входов и выходов"
 
-#: io_selector.cc:266
+#: io_selector.cc:266 monitor_selector.cc:244
 msgid "%1 input"
 msgstr "%1 вход"
 
-#: io_selector.cc:268
+#: io_selector.cc:268 monitor_selector.cc:246
 msgid "%1 output"
 msgstr "%1 выход"
 
-#: keyboard.cc:70
+#: keyboard.cc:78
 msgid "your own"
 msgstr "Ваш собс."
 
-#: keyboard.cc:133 keyboard.cc:157
+#: keyboard.cc:141 keyboard.cc:165
 msgid "Default keybindings not found - %1 will be hard to use!"
 msgstr ""
 "Конфигурация комбинаций клавиш недоступна - работать с %1 будет непросто!"
 
-#: keyboard.cc:136
+#: keyboard.cc:144
 msgid "Key bindings file \"%1\" not found. Default bindings used instead"
 msgstr "Файл привязки клавиш \"%1\" не найден. Исп. привязки по умолчанию"
 
@@ -6935,11 +7112,11 @@ msgstr[0] "%1 сэмпл"
 msgstr[1] "%1 сэмпла"
 msgstr[2] "%1 сэмплов"
 
-#: latency_gui.cc:72 panner_ui.cc:409
+#: latency_gui.cc:72 panner_ui.cc:409 plugin_ui.cc:421
 msgid "Reset"
 msgstr "Сбросить"
 
-#: latency_gui.cc:149 rhythm_ferret.cc:273 sfdb_ui.cc:1912
+#: latency_gui.cc:149 rhythm_ferret.cc:273 sfdb_ui.cc:1911
 msgid "programming error: %1 (%2)"
 msgstr "Ошибка в программе: %1 (%2)"
 
@@ -7027,11 +7204,11 @@ msgstr "Добавка маркера выделения"
 msgid "%1 could not connect to the audio backend."
 msgstr "%1 не удалось соединиться со звуковой подсистемой."
 
-#: main.cc:107 main.cc:123
+#: main.cc:129 main.cc:145
 msgid "The audio backend (%1) has failed, or terminated"
 msgstr "Ошибка аудиодвижка (%1), либо он был остановлен"
 
-#: main.cc:110
+#: main.cc:132
 msgid ""
 "%2 exited unexpectedly, and without notifying %1.\n"
 "\n"
@@ -7046,11 +7223,11 @@ msgstr ""
 "\n"
 "Нажмите OK, чтобы выйти из %1."
 
-#: main.cc:124
+#: main.cc:146
 msgid "%2 exited unexpectedly, and without notifying %1."
 msgstr "%2 вышел неожиданно и без уведомления %1."
 
-#: main.cc:219
+#: main.cc:241
 msgid ""
 "\n"
 "   %1 could not understand your command line      "
@@ -7058,23 +7235,23 @@ msgstr ""
 "\n"
 "   %1 не удалось разобрать переданные вами аргументы командной строки      "
 
-#: main.cc:221
+#: main.cc:243
 msgid "An error was encountered while launching %1"
 msgstr "Произошла ошибка при запуске %1"
 
-#: main.cc:310
+#: main.cc:332
 msgid " (built using "
 msgstr " (собран, используя "
 
-#: main.cc:313
+#: main.cc:335
 msgid " and GCC version "
 msgstr ", при помощи GCC версии "
 
-#: main.cc:323
+#: main.cc:345
 msgid "Copyright (C) 1999-2015 Paul Davis"
 msgstr "Авторские права (C) 1999-2015 Paul Davis"
 
-#: main.cc:324
+#: main.cc:346
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker, Robin Gareus"
@@ -7082,45 +7259,65 @@ msgstr ""
 "Частичные авторские права © Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker, Robin Gareus"
 
-#: main.cc:326
+#: main.cc:348
 msgid "%1 comes with ABSOLUTELY NO WARRANTY"
 msgstr "%1 распространяется БЕЗО ВСЯКИХ ГАРАНТИЙ"
 
-#: main.cc:327
+#: main.cc:349
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr "Даже не для КОММЕРЦИИ или ПРИГОДНОСТИ К КОНКРЕТНЫМ ЦЕЛЯМ."
 
-#: main.cc:328
+#: main.cc:350
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr "Это свободное программное обеспечение, Вы можете распространять его"
 
-#: main.cc:329
+#: main.cc:351
 msgid "under certain conditions; see the source for copying conditions."
 msgstr "На определённых условиях; подробнее об этом читайте в файле COPYING."
 
-#: main.cc:334
+#: main.cc:356
 msgid "could not initialize %1."
 msgstr "Не удалось инициализировать %1."
 
-#: main.cc:344
+#: main.cc:366
 msgid "Cannot xinstall SIGPIPE error handler"
 msgstr "Сбой установки обработчика ошибок SIGPIPE"
 
-#: main.cc:351
+#: main.cc:373
+msgid "Could not complete pre-GUI initialization"
+msgstr ""
+
+#: main.cc:380
 msgid "could not create %1 GUI"
 msgstr "Не удалось создать графический интерфейс для %1"
 
-#: main_clock.cc:52
+#: main_clock.cc:50
 msgid "Display delta to edit cursor"
 msgstr "Показывать разницу с курсором редактора"
 
-#: marker.cc:273
+#: main_clock.cc:65 tempo_dialog.cc:54
+msgid "Edit Tempo"
+msgstr "Изменить темп"
+
+#: main_clock.cc:66 tempo_dialog.cc:326
+msgid "Edit Meter"
+msgstr "Изменить размер"
+
+#: main_clock.cc:67
+msgid "Insert Tempo Change"
+msgstr "Вставить новый темп"
+
+#: main_clock.cc:68
+msgid "Insert Meter Change"
+msgstr "Вставить новый размер"
+
+#: marker.cc:276
 msgid "MarkerText"
-msgstr "Маркер Текст"
+msgstr ""
 
 #: midi_channel_selector.cc:161 midi_channel_selector.cc:400
-#: midi_channel_selector.cc:436 rc_option_editor.cc:1573
-#: rc_option_editor.cc:2195 sfdb_ui.cc:665
+#: midi_channel_selector.cc:436 rc_option_editor.cc:2044
+#: rc_option_editor.cc:2677 sfdb_ui.cc:664
 msgid "None"
 msgstr "Нет"
 
@@ -7309,83 +7506,83 @@ msgstr "Название порта:"
 msgid "MidiPortDialog"
 msgstr "MidiPortDialog"
 
-#: midi_region_view.cc:859
+#: midi_region_view.cc:863
 msgid "channel edit"
 msgstr "Правка канала"
 
-#: midi_region_view.cc:895
+#: midi_region_view.cc:899
 msgid "velocity edit"
 msgstr "Правка силы нажатия"
 
-#: midi_region_view.cc:954
+#: midi_region_view.cc:958
 msgid "add note"
 msgstr "Добавка ноты"
 
-#: midi_region_view.cc:1885
+#: midi_region_view.cc:1890
 msgid "step add"
 msgstr "Добавить шаг"
 
-#: midi_region_view.cc:1979 midi_region_view.cc:2002
+#: midi_region_view.cc:1984 midi_region_view.cc:2007
 msgid "alter patch change"
 msgstr "Смена изменения патча"
 
-#: midi_region_view.cc:2038
+#: midi_region_view.cc:2043
 msgid "add patch change"
 msgstr "Добавка смены программы"
 
-#: midi_region_view.cc:2060 midi_region_view.cc:2061
+#: midi_region_view.cc:2065 midi_region_view.cc:2066
 msgid "move patch change"
 msgstr "Перемещение смены программы"
 
-#: midi_region_view.cc:2073 midi_region_view.cc:2074
+#: midi_region_view.cc:2078 midi_region_view.cc:2079
 msgid "delete patch change"
 msgstr "Удаление смены программы"
 
-#: midi_region_view.cc:2112
+#: midi_region_view.cc:2117
 msgid "delete selection"
 msgstr "Удаление выделения"
 
-#: midi_region_view.cc:2128
+#: midi_region_view.cc:2133
 msgid "delete note"
 msgstr "Удаление ноты"
 
-#: midi_region_view.cc:2587
+#: midi_region_view.cc:2592
 msgid "move notes"
 msgstr "Перемещение ноты"
 
-#: midi_region_view.cc:3070
+#: midi_region_view.cc:3123
 msgid "change velocities"
 msgstr "Смена силы нажатия"
 
-#: midi_region_view.cc:3136
+#: midi_region_view.cc:3189
 msgid "transpose"
 msgstr "Транспозиция"
 
-#: midi_region_view.cc:3164
+#: midi_region_view.cc:3217
 msgid "change note lengths"
 msgstr "Смена длительности нот"
 
-#: midi_region_view.cc:3240
+#: midi_region_view.cc:3293
 msgid "nudge"
 msgstr "Толчок"
 
-#: midi_region_view.cc:3255
+#: midi_region_view.cc:3308
 msgid "change channel"
 msgstr "Смена канала"
 
-#: midi_region_view.cc:3295
+#: midi_region_view.cc:3348
 msgid "Bank "
 msgstr "Банк"
 
-#: midi_region_view.cc:3296
+#: midi_region_view.cc:3349
 msgid "Program "
 msgstr "Программа"
 
-#: midi_region_view.cc:3297
+#: midi_region_view.cc:3350
 msgid "Channel "
 msgstr "Канал"
 
-#: midi_region_view.cc:3484
+#: midi_region_view.cc:3537
 msgid "paste"
 msgstr "Вставка"
 
@@ -7497,12 +7694,12 @@ msgstr "Цвета канала"
 msgid "Track Color"
 msgstr "Цвет дорожки"
 
-#: midi_time_axis.cc:1606 midi_time_axis.cc:1612 midi_time_axis.cc:1622
-#: midi_time_axis.cc:1628
+#: midi_time_axis.cc:1607 midi_time_axis.cc:1613 midi_time_axis.cc:1623
+#: midi_time_axis.cc:1629
 msgid "all"
 msgstr "Все"
 
-#: midi_time_axis.cc:1609 midi_time_axis.cc:1625
+#: midi_time_axis.cc:1610 midi_time_axis.cc:1626
 msgid "some"
 msgstr "Не все"
 
@@ -7518,7 +7715,7 @@ msgstr "Автопрокрутка"
 msgid "Decimal"
 msgstr "Десятичный"
 
-#: midi_tracer.cc:57 rc_option_editor.cc:740
+#: midi_tracer.cc:57 rc_option_editor.cc:1191
 msgid "Enabled"
 msgstr "Включено"
 
@@ -7666,20 +7863,20 @@ msgstr "Загруженные привязки микшера от %1"
 msgid "Could not find mixer.bindings in search path %1"
 msgstr "Не удалось найти привязки микшера в пути поиска %1"
 
-#: mixer_strip.cc:96 mixer_strip.cc:125
+#: mixer_strip.cc:97 mixer_strip.cc:127
 msgid "pre"
 msgstr "До"
 
-#: mixer_strip.cc:98 mixer_strip.cc:127 mixer_strip.cc:374 mixer_strip.cc:1413
-#: rc_option_editor.cc:2323
+#: mixer_strip.cc:99 mixer_strip.cc:129 mixer_strip.cc:384 mixer_strip.cc:1456
+#: rc_option_editor.cc:2833
 msgid "Comments"
 msgstr "Комментарии"
 
-#: mixer_strip.cc:149
+#: mixer_strip.cc:152
 msgid "Click to toggle the width of this mixer strip."
 msgstr "Щёлкните для переключения ширины полоски микшера"
 
-#: mixer_strip.cc:151
+#: mixer_strip.cc:154
 msgid ""
 "\n"
 "%1-%2-click to toggle the width of all strips."
@@ -7687,325 +7884,341 @@ msgstr ""
 "\n"
 "%1-%2-щелчок для изменения ширины всех полос."
 
-#: mixer_strip.cc:160
+#: mixer_strip.cc:161
 msgid "Hide this mixer strip"
 msgstr "Скрыть полоску микшера"
 
-#: mixer_strip.cc:171
+#: mixer_strip.cc:172
 msgid "Click to select metering point"
 msgstr "Щёлкните для выбора точки замера"
 
-#: mixer_strip.cc:187
+#: mixer_strip.cc:188
 msgid "Isolate Solo"
 msgstr "Изолировать соло"
 
-#: mixer_strip.cc:195
+#: mixer_strip.cc:196
 msgid "Lock Solo Status"
 msgstr "Статус блокировки солирования"
 
-#: mixer_strip.cc:197 mixer_strip.cc:2047
+#: mixer_strip.cc:198 mixer_strip.cc:2090
 msgid "SoloLock|Lock"
 msgstr "Блок"
 
-#: mixer_strip.cc:198 mixer_strip.cc:2046
+#: mixer_strip.cc:199 mixer_strip.cc:2089
 msgid "Iso"
 msgstr "Изо."
 
-#: mixer_strip.cc:252
+#: mixer_strip.cc:253
 msgid "Mix group"
 msgstr "Группа микса"
 
-#: mixer_strip.cc:370 rc_option_editor.cc:2319
+#: mixer_strip.cc:263
+msgid "Trim: "
+msgstr "Усиление: "
+
+#: mixer_strip.cc:380 rc_option_editor.cc:2829
 msgid "Phase Invert"
 msgstr "Инверсия фазы"
 
-#: mixer_strip.cc:371 rc_option_editor.cc:2320
+#: mixer_strip.cc:381 rc_option_editor.cc:2830
 msgid "Record & Monitor"
 msgstr "Запись и монитор"
 
-#: mixer_strip.cc:372 rc_option_editor.cc:2321
+#: mixer_strip.cc:382 rc_option_editor.cc:2831
 msgid "Solo Iso / Lock"
 msgstr "Соло Iso / Блок"
 
-#: mixer_strip.cc:527
+#: mixer_strip.cc:546
 msgid "Enable/Disable MIDI input"
 msgstr "Включить или выключить MIDI-вход"
 
-#: mixer_strip.cc:691
+#: mixer_strip.cc:712
 msgid "Aux"
 msgstr "Вых"
 
-#: mixer_strip.cc:713
+#: mixer_strip.cc:738
 msgid "Snd"
 msgstr "Псл"
 
-#: mixer_strip.cc:779 mixer_strip.cc:882 processor_box.cc:2384
+#: mixer_strip.cc:809 mixer_strip.cc:912 processor_box.cc:2449
 msgid "Not connected to audio engine - no I/O changes are possible"
 msgstr ""
 "Нет соединения со звуковой подсистемой, любые изменения входа-выхода "
 "невозможны."
 
-#: mixer_strip.cc:836 mixer_strip.cc:938
+#: mixer_strip.cc:866 mixer_strip.cc:968
 msgid "Add %1 port"
 msgstr "Добавить %1-порт"
 
-#: mixer_strip.cc:843 mixer_strip.cc:945
+#: mixer_strip.cc:873 mixer_strip.cc:975 monitor_section.cc:1315
 msgid "Routing Grid"
 msgstr "Матрица маршрутизации"
 
-#: mixer_strip.cc:1174
+#: mixer_strip.cc:1204
+msgid "MIDI "
+msgstr "MIDI "
+
+#: mixer_strip.cc:1209
 msgid "<b>INPUT</b> to %1"
 msgstr "<b>ВХОД</b> в %1"
 
-#: mixer_strip.cc:1177
+#: mixer_strip.cc:1212 monitor_section.cc:1366
 msgid "<b>OUTPUT</b> from %1"
 msgstr "<b>ВЫХОД</b> из %1"
 
-#: mixer_strip.cc:1290
+#: mixer_strip.cc:1330 monitor_section.cc:1453
 msgid "Disconnected"
 msgstr "Нет соединения"
 
-#: mixer_strip.cc:1416
+#: mixer_strip.cc:1459
 msgid "*Comments*"
 msgstr "*Кмт*"
 
-#: mixer_strip.cc:1423
+#: mixer_strip.cc:1466
 msgid "Cmt"
 msgstr "Кмт"
 
-#: mixer_strip.cc:1426
+#: mixer_strip.cc:1469
 msgid "*Cmt*"
 msgstr "*Кмт*"
 
-#: mixer_strip.cc:1432
+#: mixer_strip.cc:1475
 msgid "Click to Add/Edit Comments"
 msgstr "Нажмите для добавления/правки комментариев"
 
-#: mixer_strip.cc:1476
+#: mixer_strip.cc:1519
 msgid "Grp"
 msgstr "Грп"
 
-#: mixer_strip.cc:1479
+#: mixer_strip.cc:1522
 msgid "~G"
 msgstr "нГр"
 
-#: mixer_strip.cc:1508 route_time_axis.cc:561
+#: mixer_strip.cc:1551 route_time_axis.cc:572
 msgid "Color..."
 msgstr "Цвет..."
 
-#: mixer_strip.cc:1510 route_time_axis.cc:563
+#: mixer_strip.cc:1553 route_time_axis.cc:574
 msgid "Comments..."
 msgstr "Комментарии..."
 
-#: mixer_strip.cc:1512 route_time_axis.cc:565
+#: mixer_strip.cc:1555 route_time_axis.cc:576
 msgid "Inputs..."
 msgstr "Входы..."
 
-#: mixer_strip.cc:1514 route_time_axis.cc:567
+#: mixer_strip.cc:1557 route_time_axis.cc:578
 msgid "Outputs..."
 msgstr "Выходы..."
 
-#: mixer_strip.cc:1519
+#: mixer_strip.cc:1562
 msgid "Save As Template..."
 msgstr "Сохранить как шаблон..."
 
-#: mixer_strip.cc:1533
+#: mixer_strip.cc:1568 route_group_dialog.cc:45 route_time_axis.cc:852
+msgid "Active"
+msgstr "Активно"
+
+#: mixer_strip.cc:1576
 msgid "Adjust Latency..."
 msgstr "Скорректировать задержку..."
 
-#: mixer_strip.cc:1536
+#: mixer_strip.cc:1579
 msgid "Protect Against Denormals"
 msgstr "Защищать от отклонений"
 
-#: mixer_strip.cc:1542 route_time_axis.cc:580
+#: mixer_strip.cc:1585 route_time_axis.cc:591
 msgid "Remote Control ID..."
 msgstr "ID для удалённого управления..."
 
-#: mixer_strip.cc:1842
+#: mixer_strip.cc:1885
 msgid "Pre"
 msgstr "До"
 
-#: mixer_strip.cc:1846
+#: mixer_strip.cc:1889
 msgid "Post"
 msgstr "После"
 
-#: mixer_strip.cc:1862
+#: mixer_strip.cc:1905
 msgid "Meter|In"
 msgstr "Вх"
 
-#: mixer_strip.cc:1866
+#: mixer_strip.cc:1909
 msgid "Meter|Pr"
 msgstr "Прд"
 
-#: mixer_strip.cc:1870
+#: mixer_strip.cc:1913
 msgid "Meter|Po"
 msgstr "Псл"
 
-#: mixer_strip.cc:1874
+#: mixer_strip.cc:1917
 msgid "Meter|O"
 msgstr "Вых"
 
-#: mixer_strip.cc:1879
+#: mixer_strip.cc:1922
 msgid "Meter|C"
 msgstr "З"
 
-#: mixer_strip.cc:2027 route_ui.cc:171
+#: mixer_strip.cc:2070 route_ui.cc:170
 msgid "Disk"
 msgstr "Диск"
 
-#: mixer_strip.cc:2039 monitor_section.cc:70
+#: mixer_strip.cc:2082 monitor_section.cc:76
 msgid "AFL"
 msgstr "AFL"
 
-#: mixer_strip.cc:2042 monitor_section.cc:71
+#: mixer_strip.cc:2085 monitor_section.cc:77
 msgid "PFL"
 msgstr "PFL"
 
-#: mixer_strip.cc:2052 meter_strip.cc:383
+#: mixer_strip.cc:2095 meter_strip.cc:387
 msgid "MonitorInput|I"
 msgstr "Вх"
 
-#: mixer_strip.cc:2053 meter_strip.cc:384
+#: mixer_strip.cc:2096 meter_strip.cc:388
 msgid "MonitorDisk|D"
 msgstr "Д"
 
-#: mixer_strip.cc:2065 meter_strip.cc:375 route_time_axis.cc:2697
+#: mixer_strip.cc:2108 meter_strip.cc:379 route_time_axis.cc:2729
 msgid "AfterFader|A"
 msgstr "П"
 
-#: mixer_strip.cc:2068
+#: mixer_strip.cc:2111
 msgid "Prefader|P"
 msgstr "Д"
 
-#: mixer_strip.cc:2073
+#: mixer_strip.cc:2116
 msgid "SoloIso|I"
 msgstr "И"
 
-#: mixer_strip.cc:2074
+#: mixer_strip.cc:2117
 msgid "SoloLock|L"
 msgstr "Б"
 
-#: mixer_strip.cc:2260
+#: mixer_strip.cc:2303
 msgid "Pre Fader"
 msgstr "Предфейдер"
 
-#: mixer_strip.cc:2261
+#: mixer_strip.cc:2304
 msgid "Post Fader"
 msgstr "Послефейдер"
 
-#: mixer_strip.cc:2305 meter_strip.cc:851
+#: mixer_strip.cc:2349 meter_strip.cc:860
 msgid "Change all in Group to %1"
 msgstr "Поменять все в группе на %1"
 
-#: mixer_strip.cc:2307 meter_strip.cc:853
+#: mixer_strip.cc:2351 meter_strip.cc:862
 msgid "Change all to %1"
 msgstr "Поменять все на %1"
 
-#: mixer_strip.cc:2309 meter_strip.cc:855
+#: mixer_strip.cc:2353 meter_strip.cc:864
 msgid "Change same track-type to %1"
 msgstr "Поменять дорожки одного типа на %1"
 
-#: mixer_ui.cc:130 route_time_axis.cc:818
+#: mixer_ui.cc:130 route_time_axis.cc:829
 msgid "Group"
 msgstr "Группа"
 
-#: mixer_ui.cc:1224
+#: mixer_ui.cc:1242
 msgid "track display list item for renamed strip not found!"
 msgstr "Элемент списка для переименованного канала микшера не найден!"
 
-#: mixer_ui.cc:1316
+#: mixer_ui.cc:1336
 msgid "-all-"
 msgstr "-все-"
 
-#: mixer_ui.cc:1853
+#: mixer_ui.cc:1873
 msgid "Strips"
 msgstr "Каналы"
 
-#: meter_strip.cc:157
+#: meter_strip.cc:161
 msgid "Reset Peak"
 msgstr "Сброс пик"
 
-#: meter_strip.cc:378 route_time_axis.cc:2701
+#: meter_strip.cc:382 route_time_axis.cc:2733
 msgid "PreFader|P"
 msgstr "Д"
 
-#: meter_strip.cc:887
+#: meter_strip.cc:896
 msgid "Variable height"
 msgstr "Переменная высота"
 
-#: meter_strip.cc:888
+#: meter_strip.cc:897
 msgid "Short"
 msgstr "Короткий"
 
-#: meter_strip.cc:889
+#: meter_strip.cc:898
 msgid "Tall"
 msgstr "Высокий"
 
-#: meter_strip.cc:890
+#: meter_strip.cc:899
 msgid "Grande"
 msgstr "Grande"
 
-#: meter_strip.cc:891
+#: meter_strip.cc:900
 msgid "Venti"
 msgstr "Venti"
 
 #: meter_patterns.cc:82
-msgid "Peak"
-msgstr "Пиковое значение"
+msgid "Peak (+6dBFS)"
+msgstr ""
 
 #: meter_patterns.cc:85
+msgid "Peak (0dBFS)"
+msgstr ""
+
+#: meter_patterns.cc:88
 msgid "RMS + Peak"
 msgstr "Среднеквадратичное + пиковое значение"
 
-#: meter_patterns.cc:88
+#: meter_patterns.cc:91
 msgid "IEC1/DIN"
 msgstr "IEC1/DIN"
 
-#: meter_patterns.cc:91
+#: meter_patterns.cc:94
 msgid "IEC1/Nordic"
 msgstr "IEC1/Nordic"
 
-#: meter_patterns.cc:94
+#: meter_patterns.cc:97
 msgid "IEC2/BBC"
 msgstr "IEC2/BBC"
 
-#: meter_patterns.cc:97
+#: meter_patterns.cc:100
 msgid "IEC2/EBU"
 msgstr "IEC2/EBU"
 
-#: meter_patterns.cc:100
-msgid "K20"
-msgstr "K20"
-
 #: meter_patterns.cc:103
-msgid "K14"
-msgstr "K14"
+msgid "K20/RMS"
+msgstr "K20/RMS"
 
 #: meter_patterns.cc:106
-msgid "K12"
-msgstr "К12"
+msgid "K14/RMS"
+msgstr "K14/RMS"
 
 #: meter_patterns.cc:109
+msgid "K12/RMS"
+msgstr "K12/RMS"
+
+#: meter_patterns.cc:112
 msgid "VU"
 msgstr "VU"
 
-#: monitor_section.cc:69
+#: monitor_section.cc:75
 msgid "SiP"
 msgstr "SiP"
 
-#: monitor_section.cc:96 route_group_dialog.cc:49
+#: monitor_section.cc:102 route_group_dialog.cc:49
 msgid "Soloing"
 msgstr "Солирование"
 
-#: monitor_section.cc:100
+#: monitor_section.cc:106
 msgid "Isolated"
 msgstr "Изолировано"
 
-#: monitor_section.cc:104
+#: monitor_section.cc:110
 msgid "Auditioning"
 msgstr "Прослушивание"
 
-#: monitor_section.cc:114
+#: monitor_section.cc:120
 msgid ""
 "When active, something is solo-isolated.\n"
 "Click to de-isolate everything"
@@ -8013,7 +8226,7 @@ msgstr ""
 "Если активно, то что-то будет соло-изолировано.\n"
 "Нажмите, чтобы де-изолировать все"
 
-#: monitor_section.cc:117
+#: monitor_section.cc:123
 msgid ""
 "When active, auditioning is active.\n"
 "Click to stop the audition"
@@ -8021,44 +8234,44 @@ msgstr ""
 "Если включено, выполняется прослушивание.\n"
 "Щёлкните, чтобы прекратить его."
 
-#: monitor_section.cc:134
+#: monitor_section.cc:140
 msgid "Solo controls affect solo-in-place"
 msgstr "Управление солированием затрагивает солирование на месте"
 
-#: monitor_section.cc:140
+#: monitor_section.cc:146
 msgid "Solo controls toggle after-fader-listen"
 msgstr "Управление солированием переключает послефейдерное прослушивание"
 
-#: monitor_section.cc:146
+#: monitor_section.cc:152
 msgid "Solo controls toggle pre-fader-listen"
 msgstr "Управление солированием переключает предфейдерное прослушивание"
 
-#: monitor_section.cc:156
+#: monitor_section.cc:162
 msgid "Gain increase for soloed signals (0dB is normal)"
 msgstr "Усиление солируемого сигнала (0dB является нормой)"
 
-#: monitor_section.cc:161 monitor_section.cc:190 monitor_section.cc:216
-#: monitor_section.cc:316
+#: monitor_section.cc:167 monitor_section.cc:196 monitor_section.cc:222
+#: monitor_section.cc:322
 msgid "0 dB"
 msgstr "0 Дб"
 
-#: monitor_section.cc:162
+#: monitor_section.cc:168
 msgid "3 dB"
 msgstr "3 Дб"
 
-#: monitor_section.cc:163
+#: monitor_section.cc:169
 msgid "6 dB"
 msgstr "6 Дб"
 
-#: monitor_section.cc:164
+#: monitor_section.cc:170
 msgid "10 dB"
 msgstr "10 Дб"
 
-#: monitor_section.cc:170
+#: monitor_section.cc:176
 msgid "Solo Boost"
 msgstr "Усиление соло"
 
-#: monitor_section.cc:185
+#: monitor_section.cc:191
 msgid ""
 "Gain reduction non-soloed signals\n"
 "A value above -inf dB causes \"solo-in-front\""
@@ -8066,51 +8279,51 @@ msgstr ""
 "Снижение усиления не-солированных сигналов \n"
 "Значение выше -инф дБ вызывает \"solo-in-front\""
 
-#: monitor_section.cc:191 monitor_section.cc:218 monitor_section.cc:318
+#: monitor_section.cc:197 monitor_section.cc:224 monitor_section.cc:324
 msgid "-6 dB"
 msgstr "-6 Дб"
 
-#: monitor_section.cc:192 monitor_section.cc:219 monitor_section.cc:319
+#: monitor_section.cc:198 monitor_section.cc:225 monitor_section.cc:325
 msgid "-12 dB"
 msgstr "-12 Дб"
 
-#: monitor_section.cc:193 monitor_section.cc:220 monitor_section.cc:320
+#: monitor_section.cc:199 monitor_section.cc:226 monitor_section.cc:326
 msgid "-20 dB"
 msgstr "-20 Дб"
 
-#: monitor_section.cc:194
+#: monitor_section.cc:200
 msgid "OFF"
 msgstr "ВЫКЛ"
 
-#: monitor_section.cc:196
+#: monitor_section.cc:202
 msgid "SiP Cut"
 msgstr "SiP Обр."
 
-#: monitor_section.cc:211
+#: monitor_section.cc:217
 msgid "Gain reduction to use when dimming monitor outputs"
 msgstr "Снижение усиленеия для исп. при затемнении мониторов выходов"
 
-#: monitor_section.cc:217 monitor_section.cc:317
+#: monitor_section.cc:223 monitor_section.cc:323
 msgid "-3 dB"
 msgstr "-3 Дб"
 
-#: monitor_section.cc:225 monitor_section.cc:283 monitor_section.cc:353
+#: monitor_section.cc:231 monitor_section.cc:289 monitor_section.cc:372
 msgid "Dim"
 msgstr "Тише"
 
-#: monitor_section.cc:235
+#: monitor_section.cc:241
 msgid "Excl. Solo"
 msgstr "Экскл. соло"
 
-#: monitor_section.cc:237
+#: monitor_section.cc:243
 msgid "Exclusive solo means that only 1 solo is active at a time"
 msgstr "Одновременно может быть активным только одно соло"
 
-#: monitor_section.cc:244
+#: monitor_section.cc:250
 msgid "Solo » Mute"
 msgstr "Соло » Выкл"
 
-#: monitor_section.cc:246
+#: monitor_section.cc:252
 msgid ""
 "If enabled, solo will override mute\n"
 "(a soloed & muted track or bus will be audible)"
@@ -8118,81 +8331,89 @@ msgstr ""
 "Если включено, то соло заменит приглушение\n"
 "(соло и приглушенная дорожка/шина будут слышны)"
 
-#: monitor_section.cc:321
+#: monitor_section.cc:327
 msgid "-30 dB"
 msgstr "-30 Дб"
 
-#: monitor_section.cc:323
+#: monitor_section.cc:341
 msgid "Monitor"
 msgstr "Монитор"
 
-#: monitor_section.cc:361
+#: monitor_section.cc:380
 msgid "Inv"
 msgstr "Инв."
 
-#: monitor_section.cc:744
+#: monitor_section.cc:784
 msgid "Switch monitor to mono"
 msgstr "Переключить мониторинг в монофонический режим"
 
-#: monitor_section.cc:747
+#: monitor_section.cc:787
 msgid "Cut monitor"
 msgstr "Выключить мониторинг"
 
-#: monitor_section.cc:750
+#: monitor_section.cc:790
 msgid "Dim monitor"
 msgstr "Приглушить мониторинг"
 
-#: monitor_section.cc:753
+#: monitor_section.cc:793
 msgid "Toggle exclusive solo mode"
 msgstr "Переключить эксклюзивное солирование"
 
-#: monitor_section.cc:759
+#: monitor_section.cc:799
 msgid "Toggle mute overrides solo mode"
 msgstr "Переключение глушения перекрывает соло-режим"
 
-#: monitor_section.cc:771
+#: monitor_section.cc:811
 msgid "Cut monitor channel %1"
 msgstr "Вырезать канал %1 мониторинга"
 
-#: monitor_section.cc:776
+#: monitor_section.cc:816
 msgid "Dim monitor channel %1"
 msgstr "Приглушить канал %1 мониторинга"
 
-#: monitor_section.cc:781
+#: monitor_section.cc:821
 msgid "Solo monitor channel %1"
 msgstr "Солировать каналом %1 мониторинга"
 
-#: monitor_section.cc:786
+#: monitor_section.cc:826
 msgid "Invert monitor channel %1"
 msgstr "Инвертировать канал %1 мониторинга"
 
-#: monitor_section.cc:796
+#: monitor_section.cc:836
 msgid "In-place solo"
 msgstr "На месте соло"
 
-#: monitor_section.cc:798
+#: monitor_section.cc:838
 msgid "After Fade Listen (AFL) solo"
 msgstr "Прослушивание солирования после фейдера (AFL)"
 
-#: monitor_section.cc:800
+#: monitor_section.cc:840
 msgid "Pre Fade Listen (PFL) solo"
 msgstr "Прослушивание солирования до фейдера (PFL)"
 
-#: mono_panner.cc:109 stereo_panner.cc:119
+#: monitor_section.cc:1262
+msgid "No session - no I/O changes are possible"
+msgstr ""
+
+#: monitor_selector.cc:199
+msgid "Monitor output selector"
+msgstr ""
+
+#: mono_panner.cc:104 stereo_panner.cc:114
 msgid "bypassed"
 msgstr "Обойдено"
 
-#: mono_panner.cc:123
+#: mono_panner.cc:118
 #, c-format
 msgid "L:%3d R:%3d"
 msgstr "Левый: %3d, Правый: %3d"
 
-#: mono_panner.cc:203 panner2d.cc:240 stereo_panner.cc:251
+#: mono_panner.cc:202 panner2d.cc:277 stereo_panner.cc:251
 #: stereo_panner.cc:274
 msgid "Panner|L"
 msgstr "Л"
 
-#: mono_panner.cc:220 panner2d.cc:241 stereo_panner.cc:249
+#: mono_panner.cc:219 panner2d.cc:278 stereo_panner.cc:249
 #: stereo_panner.cc:276
 msgid "Panner|R"
 msgstr "П"
@@ -8419,30 +8640,26 @@ msgid "  -C, --curvetest filename    Curve algorithm debugger\n"
 msgstr "  -C, --curvetest имя_файла        Отладчик алгоритма кривых\n"
 
 #: opts.cc:77
-msgid ""
-"  -k, --keybindings filename  Name of key bindings to load (default is ~/."
-"ardour3/ardour.bindings)\n"
+msgid "  -k, --keybindings filename  Name of key bindings to load\n"
 msgstr ""
-"  -k, --keybindings имя-файла      Имя собственного файла с комбинациями "
-"клавиш (по умолчанию это ~/.ardour3/ardour.bindings)\n"
 
-#: panner2d.cc:854
+#: panner2d.cc:897
 msgid "Panner (2D)"
 msgstr "Панорамирование (2D)"
 
-#: panner2d.cc:856 panner_ui.cc:400 plugin_ui.cc:452
+#: panner2d.cc:899 panner_ui.cc:400 plugin_ui.cc:458
 msgid "Bypass"
 msgstr "Обход"
 
-#: panner2d.cc:862
+#: panner2d.cc:905
 msgid "Panner"
 msgstr "Панорамирование"
 
-#: panner_ui.cc:72
+#: panner_ui.cc:70
 msgid "Pan automation mode"
 msgstr "Режим автоматизации панорамы"
 
-#: panner_ui.cc:73
+#: panner_ui.cc:71
 msgid "Pan automation type"
 msgstr "Тип автоматизации панорамы"
 
@@ -8494,31 +8711,31 @@ msgstr "Масштаб в  Дб"
 msgid "Show phase"
 msgstr "Показывать фазу"
 
-#: plugin_selector.cc:53 plugin_selector.cc:229
+#: plugin_selector.cc:53 plugin_selector.cc:225
 msgid "Name contains"
 msgstr "Название содержит"
 
-#: plugin_selector.cc:54 plugin_selector.cc:233
+#: plugin_selector.cc:54 plugin_selector.cc:229
 msgid "Type contains"
 msgstr "Тип содержит"
 
-#: plugin_selector.cc:55 plugin_selector.cc:231
+#: plugin_selector.cc:55 plugin_selector.cc:227
 msgid "Category contains"
 msgstr "Название категории содержит"
 
-#: plugin_selector.cc:56 plugin_selector.cc:253
+#: plugin_selector.cc:56 plugin_selector.cc:249
 msgid "Author contains"
 msgstr "Имя автора содержит"
 
-#: plugin_selector.cc:57 plugin_selector.cc:255
+#: plugin_selector.cc:57 plugin_selector.cc:251
 msgid "Library contains"
 msgstr "Библиотека содержит"
 
-#: plugin_selector.cc:58 plugin_selector.cc:219 plugin_selector.cc:537
+#: plugin_selector.cc:58 plugin_selector.cc:215 plugin_selector.cc:527
 msgid "Favorites only"
 msgstr "Только любимые"
 
-#: plugin_selector.cc:59 plugin_selector.cc:223 plugin_selector.cc:537
+#: plugin_selector.cc:59 plugin_selector.cc:219 plugin_selector.cc:527
 msgid "Hidden only"
 msgstr "Только скрытые"
 
@@ -8574,20 +8791,16 @@ msgstr "Добавить плагин в список эффектов"
 msgid "Remove a plugin from the effect list"
 msgstr "Удалить плагин из списка эффектов"
 
-#: plugin_selector.cc:135
-msgid "Update available plugins"
-msgstr "Обновить список доступных плагинов"
-
-#: plugin_selector.cc:172
+#: plugin_selector.cc:169
 msgid "Insert Plugin(s)"
 msgstr "Вставить плагины"
 
-#: plugin_selector.cc:337 plugin_selector.cc:338 plugin_selector.cc:339
-#: plugin_selector.cc:340
+#: plugin_selector.cc:333 plugin_selector.cc:334 plugin_selector.cc:335
+#: plugin_selector.cc:336
 msgid "variable"
 msgstr "Переменная"
 
-#: plugin_selector.cc:496
+#: plugin_selector.cc:486
 msgid ""
 "The plugin \"%1\" could not be loaded\n"
 "\n"
@@ -8597,19 +8810,19 @@ msgstr ""
 "\n"
 "Смотреть окно отчёта для большей информации (возможно)"
 
-#: plugin_selector.cc:644
+#: plugin_selector.cc:634
 msgid "Favorites"
 msgstr "Избранные"
 
-#: plugin_selector.cc:646
+#: plugin_selector.cc:636
 msgid "Plugin Manager..."
 msgstr "Управление плагинами..."
 
-#: plugin_selector.cc:650
+#: plugin_selector.cc:640
 msgid "By Creator"
 msgstr "По создателю"
 
-#: plugin_selector.cc:653
+#: plugin_selector.cc:643
 msgid "By Category"
 msgstr "По категории"
 
@@ -8644,15 +8857,15 @@ msgstr "Редактор создания lv2, называемый не-LV2 п
 msgid "Add"
 msgstr "Добавить"
 
-#: plugin_ui.cc:422
+#: plugin_ui.cc:423
 msgid "Description"
 msgstr "Описание"
 
-#: plugin_ui.cc:423
+#: plugin_ui.cc:424
 msgid "Plugin analysis"
 msgstr "Частотный анализ плагина"
 
-#: plugin_ui.cc:430
+#: plugin_ui.cc:431
 msgid ""
 "Presets (if any) for this plugin\n"
 "(Both factory and user-created)"
@@ -8660,23 +8873,28 @@ msgstr ""
 "Все доступные профили этого плагина,\n"
 "как «заводские», так и собственные"
 
-#: plugin_ui.cc:431
+#: plugin_ui.cc:432
 msgid "Save a new preset"
 msgstr "Сохранить новый профиль"
 
-#: plugin_ui.cc:432
+#: plugin_ui.cc:433
 msgid "Save the current preset"
 msgstr "Сохранить текущий профиль"
 
-#: plugin_ui.cc:433
+#: plugin_ui.cc:434
 msgid "Delete the current preset"
 msgstr "Удалить текущий профиль"
 
-#: plugin_ui.cc:434
+#: plugin_ui.cc:435
+msgid ""
+"Reset parameters to default (if no parameters are in automation play mode)"
+msgstr ""
+
+#: plugin_ui.cc:436
 msgid "Disable signal processing by the plugin"
 msgstr "Выключить обработку сигнала этим плагином"
 
-#: plugin_ui.cc:467 plugin_ui.cc:663
+#: plugin_ui.cc:473 plugin_ui.cc:685
 msgid ""
 "Click to allow the plugin to receive keyboard events that %1 would normally "
 "use as a shortcut"
@@ -8684,26 +8902,26 @@ msgstr ""
 "Щёлкните, чтобы разрешить этому плагину получать клавиатурные события, "
 "которые %1 обычно использует как горячие клавиши"
 
-#: plugin_ui.cc:468
+#: plugin_ui.cc:474
 msgid "Click to enable/disable this plugin"
 msgstr "Щелкните, чтобы включить или отключить этот плагин"
 
-#: plugin_ui.cc:507
+#: plugin_ui.cc:517
 msgid "latency (%1 sample)"
 msgid_plural "latency (%1 samples)"
 msgstr[0] "Задержка (%1 сэмпл)"
 msgstr[1] "Задержка (%1 сэмпла)"
 msgstr[2] "Задержка (%1 сэмплов)"
 
-#: plugin_ui.cc:509
+#: plugin_ui.cc:519
 msgid "latency (%1 ms)"
 msgstr "Задержка (%1 мс)"
 
-#: plugin_ui.cc:520
+#: plugin_ui.cc:530
 msgid "Edit Latency"
 msgstr "Изменить задержку"
 
-#: plugin_ui.cc:566
+#: plugin_ui.cc:576
 msgid ""
 "Plugin presets are not supported in this build of %1. Consider paying for a "
 "full version"
@@ -8711,7 +8929,7 @@ msgstr ""
 "Пресеты плагинов не поддерживаются в этой сборке %1. Рассмотрите оплату за "
 "полную версию"
 
-#: plugin_ui.cc:574
+#: plugin_ui.cc:584
 msgid ""
 "Plugin presets are not supported in this build, see the Log window for more "
 "information."
@@ -8719,12 +8937,12 @@ msgstr ""
 "В этой сборке нет поддержки предустановок плагинов. См. подробнее в окне "
 "журнала."
 
-#: plugin_ui.cc:670
+#: plugin_ui.cc:692
 msgid "Click to allow normal use of %1 keyboard shortcuts"
 msgstr ""
 "Щёлкните, чтобы переключиться на обычное использование горячих клавиш %1"
 
-#: plugin_ui.cc:767
+#: plugin_ui.cc:789
 msgid "(none)"
 msgstr "(нет)"
 
@@ -8958,15 +9176,15 @@ msgstr "Скрыть все регуляторы"
 msgid "Link panner controls"
 msgstr "Связать регуляторы панорамирования"
 
-#: processor_box.cc:575
+#: processor_box.cc:573
 msgid "on"
 msgstr "Вкл"
 
-#: processor_box.cc:575 rc_option_editor.cc:2352 rc_option_editor.cc:2366
+#: processor_box.cc:573 rc_option_editor.cc:2862 rc_option_editor.cc:2876
 msgid "off"
 msgstr "Выкл"
 
-#: processor_box.cc:957
+#: processor_box.cc:1021
 msgid ""
 "Right-click to add/remove/edit\n"
 "plugins,inserts,sends and more"
@@ -8974,15 +9192,15 @@ msgstr ""
 "Щелчком правой клавишей мыши можно добавлять, \n"
 "изменять и удалять плагины, посылы, возвраты и пр."
 
-#: processor_box.cc:1431 processor_box.cc:1806
+#: processor_box.cc:1495 processor_box.cc:1870
 msgid "Plugin Incompatibility"
 msgstr "Несовместимость плагинов"
 
-#: processor_box.cc:1434
+#: processor_box.cc:1498
 msgid "You attempted to add the plugin \"%1\" in slot %2.\n"
 msgstr "Вы пытались добавить плагин \"%1\" в слот %2.\n"
 
-#: processor_box.cc:1440
+#: processor_box.cc:1504
 msgid ""
 "\n"
 "This plugin has:\n"
@@ -8990,21 +9208,21 @@ msgstr ""
 "\n"
 "У этого плагина:\n"
 
-#: processor_box.cc:1443
+#: processor_box.cc:1507
 msgid "\t%1 MIDI input\n"
 msgid_plural "\t%1 MIDI inputs\n"
 msgstr[0] "\t%1 MIDI-вход\n"
 msgstr[1] "\t%1 MIDI-входа\n"
 msgstr[2] "\t%1 MIDI-входов\n"
 
-#: processor_box.cc:1447
+#: processor_box.cc:1511
 msgid "\t%1 audio input\n"
 msgid_plural "\t%1 audio inputs\n"
 msgstr[0] "\t%1 звуковой вход\n"
 msgstr[1] "\t%1 звуковых входа\n"
 msgstr[2] "\t%1 звуковых входов\n"
 
-#: processor_box.cc:1450
+#: processor_box.cc:1514
 msgid ""
 "\n"
 "but at the insertion point, there are:\n"
@@ -9012,21 +9230,21 @@ msgstr ""
 "\n"
 "но в точке вставки сейчас:\n"
 
-#: processor_box.cc:1453
+#: processor_box.cc:1517
 msgid "\t%1 MIDI channel\n"
 msgid_plural "\t%1 MIDI channels\n"
 msgstr[0] "\t%1 MIDI-канал\n"
 msgstr[1] "\t%1 MIDI-канала\n"
 msgstr[2] "\t%1 MIDI-каналов\n"
 
-#: processor_box.cc:1457
+#: processor_box.cc:1521
 msgid "\t%1 audio channel\n"
 msgid_plural "\t%1 audio channels\n"
 msgstr[0] "\t%1 звуковой канал\n"
 msgstr[1] "\t%1 звуковых канала\n"
 msgstr[2] "\t%1 звуковых каналов\n"
 
-#: processor_box.cc:1460
+#: processor_box.cc:1524
 msgid ""
 "\n"
 "%1 is unable to insert this plugin here.\n"
@@ -9034,11 +9252,11 @@ msgstr ""
 "\n"
 "%1 не может вставить сюда этот плагин.\n"
 
-#: processor_box.cc:1497
+#: processor_box.cc:1561
 msgid "Cannot set up new send: %1"
 msgstr "Невозможно настроить новый посыл: %1"
 
-#: processor_box.cc:1809
+#: processor_box.cc:1873
 msgid ""
 "You cannot reorder these plugins/sends/inserts\n"
 "in that way because the inputs and\n"
@@ -9048,20 +9266,20 @@ msgstr ""
 "посылы и возвраты подобным образом, поскольку \n"
 "входы и выходы перестанут корректно работать."
 
-#: processor_box.cc:1993
+#: processor_box.cc:2057
 msgid "Rename Processor"
 msgstr "Переименовать обработчик"
 
-#: processor_box.cc:2024
+#: processor_box.cc:2088
 msgid "At least 100 IO objects exist with a name like %1 - name not changed"
 msgstr ""
 "Существует по крайней мере 100 объектов IO с именем, как %1 - имя не изменено"
 
-#: processor_box.cc:2161
+#: processor_box.cc:2226
 msgid "plugin insert constructor failed"
 msgstr "Сбой конструктора вставки плагина"
 
-#: processor_box.cc:2172
+#: processor_box.cc:2237
 msgid ""
 "Copying the set of processors on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
@@ -9071,7 +9289,7 @@ msgstr ""
 "буфер обмена. Вероятно, конфигурация входа и выхода\n"
 "плагинов не совпала с конфигурацией этой дорожки."
 
-#: processor_box.cc:2218
+#: processor_box.cc:2283
 msgid ""
 "Do you really want to remove all processors from %1?\n"
 "(this cannot be undone)"
@@ -9080,15 +9298,15 @@ msgstr ""
 "обработчики из \"%1\" ?\n"
 "(отмена невозможна)"
 
-#: processor_box.cc:2222 processor_box.cc:2247
+#: processor_box.cc:2287 processor_box.cc:2312
 msgid "Yes, remove them all"
 msgstr "Да, удалить их все"
 
-#: processor_box.cc:2224 processor_box.cc:2249
+#: processor_box.cc:2289 processor_box.cc:2314
 msgid "Remove processors"
 msgstr "Удалить обработчики"
 
-#: processor_box.cc:2239
+#: processor_box.cc:2304
 msgid ""
 "Do you really want to remove all pre-fader processors from %1?\n"
 "(this cannot be undone)"
@@ -9097,7 +9315,7 @@ msgstr ""
 "предфейдерные обработчики из \"%1\" ?\n"
 "(отмена невозможна)"
 
-#: processor_box.cc:2242
+#: processor_box.cc:2307
 msgid ""
 "Do you really want to remove all post-fader processors from %1?\n"
 "(this cannot be undone)"
@@ -9106,59 +9324,59 @@ msgstr ""
 "послефейдерные обработчики из \"%1\" ?\n"
 "(отмена невозможна)"
 
-#: processor_box.cc:2430
+#: processor_box.cc:2495
 msgid "New Plugin"
 msgstr "Добавить плагин"
 
-#: processor_box.cc:2433
+#: processor_box.cc:2498
 msgid "New Insert"
 msgstr "Добавить возврат"
 
-#: processor_box.cc:2436
+#: processor_box.cc:2501
 msgid "New External Send ..."
 msgstr "Добавить внешний посыл с портом JACK..."
 
-#: processor_box.cc:2440
+#: processor_box.cc:2505
 msgid "New Aux Send ..."
 msgstr "Добавить внешний посыл без порта JACK..."
 
-#: processor_box.cc:2443
+#: processor_box.cc:2508
 msgid "Send Options"
 msgstr "Параметры отправки"
 
-#: processor_box.cc:2445
+#: processor_box.cc:2510
 msgid "Clear (all)"
 msgstr "Очистить (всё)"
 
-#: processor_box.cc:2447
+#: processor_box.cc:2512
 msgid "Clear (pre-fader)"
 msgstr "Очистить (до фейдера)"
 
-#: processor_box.cc:2449
+#: processor_box.cc:2514
 msgid "Clear (post-fader)"
 msgstr "Очистить (после фейдера)"
 
-#: processor_box.cc:2475
+#: processor_box.cc:2540
 msgid "Activate All"
 msgstr "Активировать все"
 
-#: processor_box.cc:2477
+#: processor_box.cc:2542
 msgid "Deactivate All"
 msgstr "Деактивировать все"
 
-#: processor_box.cc:2479
+#: processor_box.cc:2544
 msgid "A/B Plugins"
 msgstr "Отключить все"
 
-#: processor_box.cc:2488
+#: processor_box.cc:2553
 msgid "Edit with generic controls..."
 msgstr "Изменить с интерфейсом хоста..."
 
-#: processor_box.cc:2791
+#: processor_box.cc:2856
 msgid "%1: %2 (by %3)"
 msgstr "%1: %2 (автор — %3)"
 
-#: processor_box.cc:2793
+#: processor_box.cc:2858
 msgid "%1 (by %2)"
 msgstr "%1 (на %2)"
 
@@ -9210,109 +9428,193 @@ msgstr "Начало привязки ноты"
 msgid "Snap note end"
 msgstr "Конец привязки ноты"
 
-#: rc_option_editor.cc:77
+#: rc_option_editor.cc:80
 msgid "Click audio file:"
 msgstr "Файл щелчка доли:"
 
-#: rc_option_editor.cc:80 rc_option_editor.cc:87
+#: rc_option_editor.cc:83 rc_option_editor.cc:90
 msgid "Browse..."
 msgstr "Просмотр..."
 
-#: rc_option_editor.cc:84
+#: rc_option_editor.cc:87
 msgid "Click emphasis audio file:"
 msgstr "Файл щелчка сильной доли:"
 
-#: rc_option_editor.cc:116
+#: rc_option_editor.cc:119
 msgid "Choose Click"
 msgstr "Выберите щелчок метронома"
 
-#: rc_option_editor.cc:139
+#: rc_option_editor.cc:142
 msgid "Choose Click Emphasis"
 msgstr "Выберите акцентирующий щелчок метронома"
 
-#: rc_option_editor.cc:170
+#: rc_option_editor.cc:173
 msgid "Limit undo history to"
 msgstr "Ограничивать историю действий"
 
-#: rc_option_editor.cc:171
+#: rc_option_editor.cc:174
 msgid "Save undo history of"
 msgstr "Ограничивать сохранение истории действий"
 
-#: rc_option_editor.cc:180 rc_option_editor.cc:187
+#: rc_option_editor.cc:183 rc_option_editor.cc:190
 msgid "commands"
 msgstr "командами"
 
-#: rc_option_editor.cc:325
+#: rc_option_editor.cc:333
+msgid "Select Keyboard layout:"
+msgstr "Раскладка клавиатуры:"
+
+#: rc_option_editor.cc:352
+msgid "When Clicking:"
+msgstr "При щелчке:"
+
+#: rc_option_editor.cc:359
 msgid "Edit using:"
 msgstr "Редактировать с:"
 
-#: rc_option_editor.cc:331 rc_option_editor.cc:357 rc_option_editor.cc:384
+#: rc_option_editor.cc:365 rc_option_editor.cc:394 rc_option_editor.cc:423
 msgid "+ button"
 msgstr "+ клавиша"
 
-#: rc_option_editor.cc:351
+#: rc_option_editor.cc:388
 msgid "Delete using:"
 msgstr "Удалять с:"
 
-#: rc_option_editor.cc:378
+#: rc_option_editor.cc:417
 msgid "Insert note using:"
 msgstr "Вставлять ноты с:"
 
-#: rc_option_editor.cc:405
+#: rc_option_editor.cc:435
+msgid "When Beginning a Drag:"
+msgstr "В начале перетаскивания:"
+
+#: rc_option_editor.cc:453
+msgid "Copy items using:"
+msgstr "Копировать объекты с:"
+
+#: rc_option_editor.cc:473
+msgid "Constrain drag using:"
+msgstr "Ограничить перемещение с:"
+
+#: rc_option_editor.cc:481
+msgid "When Beginning a Trim:"
+msgstr ""
+
+#: rc_option_editor.cc:499
+msgid "Trim contents using:"
+msgstr ""
+
+#: rc_option_editor.cc:519
+msgid "Anchored trim using:"
+msgstr ""
+
+#: rc_option_editor.cc:562
+msgid "Resize notes relatively using:"
+msgstr ""
+
+#: rc_option_editor.cc:571
+msgid "While Dragging:"
+msgstr "При перетаскивании:"
+
+#: rc_option_editor.cc:589
 msgid "Ignore snap using:"
 msgstr "Игнорировать привязку с:"
 
-#: rc_option_editor.cc:421
-msgid "Keyboard layout:"
-msgstr "Раскладка клавиатуры:"
+#: rc_option_editor.cc:609
+msgid "Snap relatively using:"
+msgstr ""
 
-#: rc_option_editor.cc:544
-msgid "Font scaling:"
-msgstr "Масштаб шрифта:"
+#: rc_option_editor.cc:617
+msgid "While Trimming:"
+msgstr ""
+
+#: rc_option_editor.cc:635
+msgid "Resize overlaped regions using:"
+msgstr ""
+
+#: rc_option_editor.cc:643
+msgid "While Dragging Control Points:"
+msgstr "При перетаскивании контрольных точек:"
+
+#: rc_option_editor.cc:661
+msgid "Fine adjust using:"
+msgstr ""
+
+#: rc_option_editor.cc:681
+msgid "Push points using:"
+msgstr ""
 
-#: rc_option_editor.cc:547
+#: rc_option_editor.cc:922
+msgid "GUI and Font scaling:"
+msgstr "Масштаб интерфейса и шрифта:"
+
+#: rc_option_editor.cc:925
 msgid "Default"
 msgstr "По умолчанию"
 
-#: rc_option_editor.cc:573
-msgid "Major font-scale changes require an application restart to re-layout."
-msgstr "Существенное изменение масштаба требует перезапуска программы"
+#: rc_option_editor.cc:951
+msgid "Adjusting the scale require an application restart to re-layout."
+msgstr "После коррекции масштаба необходимо перезапустить приложение"
 
-#: rc_option_editor.cc:614
+#: rc_option_editor.cc:992
 msgid "Waveform Clip Level (dBFS):"
 msgstr "Уровень обрезки волновой формы (dBFS):"
 
-#: rc_option_editor.cc:666
+#: rc_option_editor.cc:1046
+msgid "Small sessions (4-16 tracks)"
+msgstr "Небольшие сессии (4—16 дорожек)"
+
+#: rc_option_editor.cc:1047
+msgid "Medium sessions (16-64 tracks)"
+msgstr "Средние сессии (16—64 дорожек)"
+
+#: rc_option_editor.cc:1048
+msgid "Large sessions (64+ tracks)"
+msgstr "Большие сессии (от 64 дорожек и больше)"
+
+#: rc_option_editor.cc:1049
+msgid "Custom (set by sliders below)"
+msgstr ""
+
+#: rc_option_editor.cc:1053 export_video_dialog.cc:168
+msgid "Preset:"
+msgstr "Профиль:"
+
+#: rc_option_editor.cc:1065
 msgid "Playback (seconds of buffering):"
 msgstr "Воспроизведение (в секундах буферизации):"
 
-#: rc_option_editor.cc:679
+#: rc_option_editor.cc:1078
 msgid "Recording (seconds of buffering):"
 msgstr "Запись (в секундах буферизации):"
 
-#: rc_option_editor.cc:737
+#: rc_option_editor.cc:1156
+msgid "programming error: unknown buffering preset string, index = %1"
+msgstr ""
+
+#: rc_option_editor.cc:1188
 msgid "Control Surface Protocol"
 msgstr "Устройства управления"
 
-#: rc_option_editor.cc:746
+#: rc_option_editor.cc:1197
 msgid "Double-click on a name to edit settings for an enabled protocol"
 msgstr ""
 "Двойной щелчок по названию открывает редактор параметров включённого "
 "протокола"
 
-#: rc_option_editor.cc:903
+#: rc_option_editor.cc:1354
 msgid "Show Video Export Info before export"
 msgstr "Показывать диалог со справкой об экспорте видео"
 
-#: rc_option_editor.cc:904
+#: rc_option_editor.cc:1355
 msgid "Show Video Server Startup Dialog"
 msgstr "Показывать диалог с параметрами видеосервера"
 
-#: rc_option_editor.cc:905
+#: rc_option_editor.cc:1356
 msgid "Advanced Setup (remote video server)"
 msgstr "Дополнительные параметры удалённого видеосервера"
 
-#: rc_option_editor.cc:913
+#: rc_option_editor.cc:1364
 msgid ""
 "<b>When enabled</b> you can speficify a custom video-server URL and docroot. "
 "- Do not enable this option unless you know what you are doing."
@@ -9321,11 +9623,11 @@ msgstr ""
 "корневой каталог данных. Не используйте эту функцию, если точно не знаете, "
 "что делаете."
 
-#: rc_option_editor.cc:915
+#: rc_option_editor.cc:1366
 msgid "Video Server URL:"
 msgstr "URL видеосервера:"
 
-#: rc_option_editor.cc:920
+#: rc_option_editor.cc:1371
 msgid ""
 "Base URL of the video-server including http prefix. This is usually 'http://"
 "hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when "
@@ -9335,11 +9637,11 @@ msgstr ""
 "example.org: 1554/' и по умолчанию 'http://localhost:1554/', когда "
 "видеосервер работает локально"
 
-#: rc_option_editor.cc:922
+#: rc_option_editor.cc:1373
 msgid "Video Folder:"
 msgstr "Папка с видео:"
 
-#: rc_option_editor.cc:927
+#: rc_option_editor.cc:1378
 msgid ""
 "Local path to the video-server document-root. Only files below this "
 "directory will be accessible by the video-server. If the server run on a "
@@ -9354,7 +9656,7 @@ msgstr ""
 "используется для местного видео - просмотра и выбора файлов при открытии/"
 "добавлении видеофайла."
 
-#: rc_option_editor.cc:934
+#: rc_option_editor.cc:1385
 msgid ""
 "<b>When enabled</b> an information window with details is displayed before "
 "the video-export dialog."
@@ -9362,7 +9664,7 @@ msgstr ""
 "<b>Когда включено,</b> перед экспортом видео показывается окно со справочной "
 "информацией"
 
-#: rc_option_editor.cc:939
+#: rc_option_editor.cc:1390
 msgid ""
 "<b>When enabled</b> the video server is never launched automatically without "
 "confirmation"
@@ -9370,27 +9672,31 @@ msgstr ""
 "<b>Если включено,</b> видеосервер никогда автоматически не запускается без "
 "подтверждения"
 
-#: rc_option_editor.cc:1022
+#: rc_option_editor.cc:1473
 msgid "Always Display Plugin Scan Progress"
 msgstr "Всегда показывать прогресс сканирования плагинов"
 
-#: rc_option_editor.cc:1023
+#: rc_option_editor.cc:1474
 msgid "Scan for [new] VST Plugins on Application Start"
 msgstr "Искать новые плагины VST при запуске приложения"
 
-#: rc_option_editor.cc:1024
+#: rc_option_editor.cc:1475
 msgid "Scan for AudioUnit Plugins on Application Start"
 msgstr "Искать новые плагины AudioUnit при запуске приложения"
 
-#: rc_option_editor.cc:1035
+#: rc_option_editor.cc:1476
+msgid "Verbose Plugin Scan"
+msgstr ""
+
+#: rc_option_editor.cc:1487
 msgid "General"
 msgstr "Главное"
 
-#: rc_option_editor.cc:1041
+#: rc_option_editor.cc:1493 startup.cc:349
 msgid "Scan for Plugins"
 msgstr "Просканировать плагины"
 
-#: rc_option_editor.cc:1048
+#: rc_option_editor.cc:1500
 msgid ""
 "<b>When enabled</b> a popup window showing plugin scan progress is displayed "
 "for indexing (cache load) and discovery (detect new plugins)"
@@ -9398,7 +9704,7 @@ msgstr ""
 "<b>Когда включено,</b> всплывающее окно показывает прогресс поиска и "
 "индексации звуковых плагинов в системе"
 
-#: rc_option_editor.cc:1055
+#: rc_option_editor.cc:1507
 msgid ""
 "Specify the default timeout for plugin instantiation in 1/10 seconds. "
 "Plugins that require more time to load will be blacklisted. A value of 0 "
@@ -9408,23 +9714,23 @@ msgstr ""
 "десятых долях секунды. Плагины, требующие больше времени для загрузки, будут "
 "блокироваться. Если значение равно нулю, тайм-аут отключается."
 
-#: rc_option_editor.cc:1057
+#: rc_option_editor.cc:1509
 msgid "Scan Time Out [deciseconds]"
 msgstr "Тайм-аут сканирования [децисек.]"
 
-#: rc_option_editor.cc:1065
+#: rc_option_editor.cc:1517
 msgid "VST"
 msgstr "VST"
 
-#: rc_option_editor.cc:1071
+#: rc_option_editor.cc:1523
 msgid "Clear VST Cache"
 msgstr "Очистить кэш VST"
 
-#: rc_option_editor.cc:1075
+#: rc_option_editor.cc:1527
 msgid "Clear VST Blacklist"
 msgstr "Очистить чёрный список VST"
 
-#: rc_option_editor.cc:1083
+#: rc_option_editor.cc:1535
 msgid ""
 "<b>When enabled</b> new VST plugins are searched, tested and added to the "
 "cache index on application start. When disabled new plugins will only be "
@@ -9434,19 +9740,25 @@ msgstr ""
 "тестирование и добавление новых плагинов VST в индекс кэша. Когда отключено, "
 "новые плагины становятся доступными лишь после запуска сканирования вручную."
 
-#: rc_option_editor.cc:1086
+#: rc_option_editor.cc:1538
 msgid "Linux VST Path:"
 msgstr "Размещение Linux VST:"
 
-#: rc_option_editor.cc:1093
+#: rc_option_editor.cc:1545
 msgid "Windows VST Path:"
 msgstr "Размещение Windows VST:"
 
-#: rc_option_editor.cc:1102
+#: rc_option_editor.cc:1554
+msgid ""
+"<b>When enabled</b> additional information for every plugin is added to the "
+"Log Window."
+msgstr ""
+
+#: rc_option_editor.cc:1560
 msgid "Audio Unit"
 msgstr "Audio Unit"
 
-#: rc_option_editor.cc:1111
+#: rc_option_editor.cc:1569
 msgid ""
 "<b>When enabled</b> Audio Unit Plugins are discovered on application start. "
 "When disabled AU plugins will only be available after triggering a 'Scan' "
@@ -9459,103 +9771,107 @@ msgstr ""
 "включено автоматическое сканирование плагинов AU. При любом падении "
 "программы во время сканирования автоматическое сканирование будет отключено."
 
-#: rc_option_editor.cc:1114
+#: rc_option_editor.cc:1572
 msgid "Clear AU Cache"
 msgstr "Очистить кэш AU"
 
-#: rc_option_editor.cc:1118
+#: rc_option_editor.cc:1576
 msgid "Clear AU Blacklist"
 msgstr "Очистить чёрный список AU"
 
-#: rc_option_editor.cc:1201
+#: rc_option_editor.cc:1670
 msgid "Set Windows VST Search Path"
 msgstr "Установка пути поиска Windows VST"
 
-#: rc_option_editor.cc:1216
+#: rc_option_editor.cc:1685
 msgid "Set Linux VST Search Path"
 msgstr "Установка пути поиска Linux VST"
 
-#: rc_option_editor.cc:1297
+#: rc_option_editor.cc:1766
 msgid "%1 Preferences"
 msgstr "Параметры %1"
 
-#: rc_option_editor.cc:1309
+#: rc_option_editor.cc:1778
 msgid "DSP CPU Utilization"
 msgstr "Использование ЦП"
 
-#: rc_option_editor.cc:1313
+#: rc_option_editor.cc:1782
 msgid "Signal processing uses"
 msgstr "При обработке используются"
 
-#: rc_option_editor.cc:1318
+#: rc_option_editor.cc:1787
 msgid "all but one processor"
 msgstr "Все процессоры кроме одного"
 
-#: rc_option_editor.cc:1319
+#: rc_option_editor.cc:1788
 msgid "all available processors"
 msgstr "Все доступные процессоры"
 
-#: rc_option_editor.cc:1322
+#: rc_option_editor.cc:1791
 msgid "%1 processors"
 msgstr "%1 процессора"
 
-#: rc_option_editor.cc:1325
+#: rc_option_editor.cc:1794
 msgid "This setting will only take effect when %1 is restarted."
 msgstr "Это изменение вступит в силу при следующем запуске %1."
 
-#: rc_option_editor.cc:1330
+#: rc_option_editor.cc:1799
 msgid "Options|Undo"
 msgstr "История действий"
 
-#: rc_option_editor.cc:1337
+#: rc_option_editor.cc:1806
 msgid "Verify removal of last capture"
 msgstr "Проверять удаление последней записи"
 
-#: rc_option_editor.cc:1345
+#: rc_option_editor.cc:1814
 msgid "Make periodic backups of the session file"
 msgstr "Периодически создавать резервные копии файла сессии"
 
-#: rc_option_editor.cc:1350
+#: rc_option_editor.cc:1819
 msgid "Session Management"
 msgstr "Управление сессиями"
 
-#: rc_option_editor.cc:1355
+#: rc_option_editor.cc:1824
 msgid "Always copy imported files"
 msgstr "Всегда копировать импортируемые файлы"
 
-#: rc_option_editor.cc:1362
+#: rc_option_editor.cc:1831
 msgid "Default folder for new sessions:"
 msgstr "Папка для новых сессий по умолчанию:"
 
-#: rc_option_editor.cc:1370
+#: rc_option_editor.cc:1839
 msgid "Maximum number of recent sessions"
 msgstr "Максимальное число недавних сессий"
 
-#: rc_option_editor.cc:1383
+#: rc_option_editor.cc:1852
 msgid "Click gain level"
 msgstr "Уровень щелчка метронома"
 
-#: rc_option_editor.cc:1388 route_time_axis.cc:266 route_time_axis.cc:821
+#: rc_option_editor.cc:1857 route_time_axis.cc:268 route_time_axis.cc:832
 msgid "Automation"
 msgstr "Автоматизация"
 
-#: rc_option_editor.cc:1393
+#: rc_option_editor.cc:1862
 msgid "Thinning factor (larger value => less data)"
 msgstr "Фактор разведения (большее значение => меньше данных)"
 
-#: rc_option_editor.cc:1402
+#: rc_option_editor.cc:1871
 msgid "Automation sampling interval (milliseconds)"
 msgstr "Интервал сэмплирования для автоматизации (мс)"
 
-#: rc_option_editor.cc:1414
+#: rc_option_editor.cc:1879
+msgid "Transport Options"
+msgstr "Параметры транспорта"
+
+#: rc_option_editor.cc:1885
 msgid "Keep record-enable engaged on stop"
 msgstr "Готовность к записи сохраняется после остановки"
 
-#: rc_option_editor.cc:1423
+#: rc_option_editor.cc:1894
 msgid "Play loop is a transport mode"
 msgstr "Петля воспроизведения как режим транспорта"
 
-#: rc_option_editor.cc:1428
+#: rc_option_editor.cc:1899
 msgid ""
 "<b>When enabled</b> the loop button does not start playback but forces "
 "playback to always play the loop\n"
@@ -9569,11 +9885,11 @@ msgstr ""
 "<b>Когда выключено,</b> кнопка петли запускает воспроизведение, но при "
 "остановке режим циклического воспроизведения отключается."
 
-#: rc_option_editor.cc:1434
+#: rc_option_editor.cc:1905
 msgid "Stop recording when an xrun occurs"
 msgstr "Останавливать запись при рассинхронизации"
 
-#: rc_option_editor.cc:1439
+#: rc_option_editor.cc:1910
 msgid ""
 "<b>When enabled</b> %1 will stop recording if an over- or underrun is "
 "detected by the audio engine"
@@ -9581,15 +9897,15 @@ msgstr ""
 "<b>Когда включено,</b> %1 остановит запись, если звуковым движком обнаружено "
 "переполнение или опустошение буфера"
 
-#: rc_option_editor.cc:1445
+#: rc_option_editor.cc:1916
 msgid "Create markers where xruns occur"
 msgstr "Создавать маркеры в точках рассинхронизации"
 
-#: rc_option_editor.cc:1454
+#: rc_option_editor.cc:1925
 msgid "Stop at the end of the session"
 msgstr "Останавливаться в конце сессии"
 
-#: rc_option_editor.cc:1459
+#: rc_option_editor.cc:1930
 msgid ""
 "<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the "
 "transport when it reaches the current session end marker\n"
@@ -9602,13 +9918,13 @@ msgstr ""
 "\n"
 "<b>Когда выключено</b>, %1 будет воспроизводить дальше маркера конца сессии."
 
-#: rc_option_editor.cc:1467
+#: rc_option_editor.cc:1938
 msgid "Do seamless looping (not possible when slaved to MTC, LTC etc)"
 msgstr ""
 "Бесшовное циклическое воспроизведение (невозможно, когда Ardour ведом по "
 "MTC, LTC и т.д.)"
 
-#: rc_option_editor.cc:1472
+#: rc_option_editor.cc:1943
 msgid ""
 "<b>When enabled</b> this will loop by reading ahead and wrapping around at "
 "the loop point, preventing any need to do a transport locate at the end of "
@@ -9625,11 +9941,11 @@ msgstr ""
 "обратно в начало цикла, когда %1 достигает конца, что будет часто приводить "
 "к небольшим щелчкам или задержке."
 
-#: rc_option_editor.cc:1480
+#: rc_option_editor.cc:1951
 msgid "Disable per-track record disarm while rolling"
 msgstr "Сделать невозможным отключение готовности к записи при захвате"
 
-#: rc_option_editor.cc:1484
+#: rc_option_editor.cc:1955
 msgid ""
 "<b>When enabled</b> this will prevent you from accidentally stopping "
 "specific tracks recording during a take"
@@ -9637,11 +9953,11 @@ msgstr ""
 "<b>Если включено</b>, вы не сможете нечаянно выключить готовность к записи "
 "во время захвата сигнала"
 
-#: rc_option_editor.cc:1489
+#: rc_option_editor.cc:1960
 msgid "12dB gain reduction during fast-forward and fast-rewind"
 msgstr "Приглушение громкости на 12Дб при перемотке"
 
-#: rc_option_editor.cc:1493
+#: rc_option_editor.cc:1964
 msgid ""
 "This will reduce the unpleasant increase in perceived volume that occurs "
 "when fast-forwarding or rewinding through some kinds of audio"
@@ -9649,19 +9965,19 @@ msgstr ""
 "При перемотке воспринимаемое на слух резкое увеличение громкости будет "
 "нивелировано"
 
-#: rc_option_editor.cc:1497
+#: rc_option_editor.cc:1968
 msgid "Sync/Slave"
 msgstr "Синхронизация и ведомый режим"
 
-#: rc_option_editor.cc:1501
+#: rc_option_editor.cc:1972
 msgid "External timecode source"
 msgstr "Внешний источник синхросигнала"
 
-#: rc_option_editor.cc:1510
+#: rc_option_editor.cc:1981
 msgid "Match session video frame rate to external timecode"
 msgstr "Адаптировать частоту кадров видео в сессии к внешнему тайм-коду"
 
-#: rc_option_editor.cc:1516
+#: rc_option_editor.cc:1987
 msgid ""
 "This option controls the value of the video frame rate <i>while chasing</i> "
 "an external timecode source.\n"
@@ -9684,11 +10000,11 @@ msgstr ""
 "этого индикатор частоты кадров в основном счётчике будет мерцать красным, а "
 "%1 будет конвертировать внешний тайм-код в тайм-код сессии."
 
-#: rc_option_editor.cc:1526
+#: rc_option_editor.cc:1997
 msgid "Sync-lock timecode to clock (disable drift compensation)"
 msgstr "Привязать тайм-код к часам (отключить компенсацию смещения)"
 
-#: rc_option_editor.cc:1532
+#: rc_option_editor.cc:2003
 msgid ""
 "<b>When enabled</b> %1 will never varispeed when slaved to external "
 "timecode. Sync Lock indicates that the selected external timecode source "
@@ -9709,11 +10025,11 @@ msgstr ""
 "<b>Когда выключено,</b> %1 компенсирует потенциальное смещение вне "
 "зависимости от того, разделяет ли источник тайм-кода синхронизацию часов."
 
-#: rc_option_editor.cc:1547
+#: rc_option_editor.cc:2018
 msgid "Lock to 29.9700 fps instead of 30000/1001"
 msgstr "Принудительно использовать 29,9700 к/с вместо 30000/1001"
 
-#: rc_option_editor.cc:1553
+#: rc_option_editor.cc:2024
 msgid ""
 "<b>When enabled</b> the external timecode source is assumed to use 29.97 fps "
 "instead of 30000/1001.\n"
@@ -9736,27 +10052,27 @@ msgstr ""
 "несмотря на её противоречие спецификации, потому что использование именно "
 "29,97 кадров в секунду имеет нулевое смещение тайм-кода.\n"
 
-#: rc_option_editor.cc:1563
+#: rc_option_editor.cc:2034
 msgid "LTC Reader"
 msgstr "Чтение LTC"
 
-#: rc_option_editor.cc:1567
+#: rc_option_editor.cc:2038
 msgid "LTC incoming port"
 msgstr "Порт чтения LTC"
 
-#: rc_option_editor.cc:1582
+#: rc_option_editor.cc:2053
 msgid "LTC Generator"
 msgstr "Генератор LTC"
 
-#: rc_option_editor.cc:1587
+#: rc_option_editor.cc:2058
 msgid "Enable LTC generator"
 msgstr "Включить генератор LTC"
 
-#: rc_option_editor.cc:1594
+#: rc_option_editor.cc:2065
 msgid "Send LTC while stopped"
 msgstr "Отправлять LTC в остановленном состоянии"
 
-#: rc_option_editor.cc:1600
+#: rc_option_editor.cc:2071
 msgid ""
 "<b>When enabled</b> %1 will continue to send LTC information even when the "
 "transport (playhead) is not moving"
@@ -9764,11 +10080,11 @@ msgstr ""
 "<b>Когда включено,</b> %1 продолжит передавать LTC даже когда транспорт "
 "(воспроизведение) не движется"
 
-#: rc_option_editor.cc:1606
+#: rc_option_editor.cc:2077
 msgid "LTC generator level"
 msgstr "Уровень генератора LTC"
 
-#: rc_option_editor.cc:1610
+#: rc_option_editor.cc:2081
 msgid ""
 "Specify the Peak Volume of the generated LTC signal in dbFS. A good value "
 "is  0dBu ^= -18dbFS in an EBU calibrated system"
@@ -9776,99 +10092,111 @@ msgstr ""
 "Укажите пиковую громкость генерируемого сигнала LTC в dbFS. Хорошее качество "
 "это 0dBu ^ =-18dbFS в выщеуказанной EBU калиброванной системе"
 
-#: rc_option_editor.cc:1622
+#: rc_option_editor.cc:2093
 msgid "Allow dragging of playhead"
 msgstr "Разрешить перетаскивание указателя воспроизведения"
 
-#: rc_option_editor.cc:1630
+#: rc_option_editor.cc:2101
 msgid "Move relevant automation when audio regions are moved"
 msgstr "Перемещать автоматизацию вместе с областями"
 
-#: rc_option_editor.cc:1638
+#: rc_option_editor.cc:2109
 msgid "Show meters on tracks in the editor"
 msgstr "Показывать индикаторы громкости в дорожках"
 
-#: rc_option_editor.cc:1646
+#: rc_option_editor.cc:2117
 msgid "Display master-meter in the toolbar"
 msgstr "Показывать индикатор громкости мастер-шины в панели"
 
-#: rc_option_editor.cc:1653
+#: rc_option_editor.cc:2124
 msgid "Default fade shape"
 msgstr "Форма фейда по умолчанию"
 
-#: rc_option_editor.cc:1672
+#: rc_option_editor.cc:2143
 msgid "Regions in active edit groups are edited together"
 msgstr "Области в активных редактируемых группах меняются вместе"
 
-#: rc_option_editor.cc:1673
+#: rc_option_editor.cc:2144
 msgid "whenever they overlap in time"
 msgstr "Когда пересекаются по времени"
 
-#: rc_option_editor.cc:1674
+#: rc_option_editor.cc:2145
 msgid "only if they have identical length, position and origin"
 msgstr "При одинаковой длительности, позиции и происхождении"
 
-#: rc_option_editor.cc:1684
+#: rc_option_editor.cc:2154
+msgid "Layering model"
+msgstr "Способ наслоения"
+
+#: rc_option_editor.cc:2159
+msgid "later is higher"
+msgstr "Более поздние — сверху"
+
+#: rc_option_editor.cc:2160
+msgid "manual layering"
+msgstr "Наслаивание вручную"
+
+#: rc_option_editor.cc:2166
 msgid "Make rubberband selection rectangle snap to the grid"
 msgstr "Прямоугольное выделение привязывается к сетке"
 
-#: rc_option_editor.cc:1692
+#: rc_option_editor.cc:2174
 msgid "Show waveforms in regions"
 msgstr "Показывать форму волны в областях"
 
-#: rc_option_editor.cc:1700
+#: rc_option_editor.cc:2182
 msgid "Show gain envelopes in audio regions"
 msgstr "Показывать огибающие усиления"
 
-#: rc_option_editor.cc:1701
+#: rc_option_editor.cc:2183
 msgid "in all modes"
 msgstr "Во всех режимах"
 
-#: rc_option_editor.cc:1702
-msgid "only in region gain mode"
-msgstr "Только в режиме правки огибающей"
+#: rc_option_editor.cc:2184
+msgid "only in Draw and Internal Edit modes"
+msgstr "Только в режимах рисования и правки содержимого"
 
-#: rc_option_editor.cc:1709
+#: rc_option_editor.cc:2191
 msgid "Waveform scale"
 msgstr "Масштаб сигнала"
 
-#: rc_option_editor.cc:1714
+#: rc_option_editor.cc:2196
 msgid "linear"
 msgstr "Линейный"
 
-#: rc_option_editor.cc:1715
+#: rc_option_editor.cc:2197
 msgid "logarithmic"
 msgstr "Логарифмический"
 
-#: rc_option_editor.cc:1721
+#: rc_option_editor.cc:2203
 msgid "Waveform shape"
 msgstr "Форма сигнала"
 
-#: rc_option_editor.cc:1726
+#: rc_option_editor.cc:2208
 msgid "traditional"
 msgstr "Обычная"
 
-#: rc_option_editor.cc:1727
+#: rc_option_editor.cc:2209
 msgid "rectified"
 msgstr "От низа"
 
-#: rc_option_editor.cc:1736
+#: rc_option_editor.cc:2218
 msgid "Show waveforms for audio while it is being recorded"
 msgstr "Показывать форму сигнала при записи"
 
-#: rc_option_editor.cc:1744
+#: rc_option_editor.cc:2226
 msgid "Show zoom toolbar"
 msgstr "Показывать панель для управления масштабом"
 
-#: rc_option_editor.cc:1752
+#: rc_option_editor.cc:2234
 msgid "Update editor window during drags of the summary"
 msgstr "Обновлять окно редактора при изменениях в панели сводки"
 
-#: rc_option_editor.cc:1759
+#: rc_option_editor.cc:2241
 msgid "Name new markers"
 msgstr "Спрашивать об имени каждого нового маркера"
 
-#: rc_option_editor.cc:1765
+#: rc_option_editor.cc:2247
 msgid ""
 "If enabled, popup a dialog when a new marker is created to allow its name to "
 "be set as it is created.\n"
@@ -9881,277 +10209,277 @@ msgstr ""
 "Вы всегда можете позднее переименовать маркеры, щелкнув по ним правой "
 "кнопкой мыши."
 
-#: rc_option_editor.cc:1771
+#: rc_option_editor.cc:2253
 msgid "Auto-scroll editor window when dragging near its edges"
 msgstr ""
 "Автоматически прокручивать окно редактора при перетаскивании близко к краям"
 
-#: rc_option_editor.cc:1778
+#: rc_option_editor.cc:2260
 msgid "After splitting selected regions, select"
 msgstr "После разделения выбранных областей выбирать"
 
-#: rc_option_editor.cc:1783
+#: rc_option_editor.cc:2265
 msgid "no regions"
 msgstr "Не выбирать области"
 
-#: rc_option_editor.cc:1786
+#: rc_option_editor.cc:2268
 msgid "newly-created regions"
 msgstr "Только что созданные области"
 
-#: rc_option_editor.cc:1790
+#: rc_option_editor.cc:2272
 msgid "existing selection and newly-created regions"
 msgstr "Как выбранные ранее, так и только что созданные области"
 
-#: rc_option_editor.cc:1797
+#: rc_option_editor.cc:2279
 msgid "Buffering"
 msgstr "Буферизация"
 
-#: rc_option_editor.cc:1805
+#: rc_option_editor.cc:2287
 msgid "Record monitoring handled by"
 msgstr "Мониторинг записи выполняется"
 
-#: rc_option_editor.cc:1811
+#: rc_option_editor.cc:2293
 msgid "via Audio Driver"
 msgstr "Через аудиодрайвер"
 
-#: rc_option_editor.cc:1817
+#: rc_option_editor.cc:2299
 msgid "audio hardware"
 msgstr "Аппаратным обеспечением"
 
-#: rc_option_editor.cc:1824
+#: rc_option_editor.cc:2306
 msgid "Tape machine mode"
 msgstr "Режим плёночного магнитофона"
 
-#: rc_option_editor.cc:1829
+#: rc_option_editor.cc:2311
 msgid "Connection of tracks and busses"
 msgstr "Соединение дорожек и шин"
 
-#: rc_option_editor.cc:1834
+#: rc_option_editor.cc:2316
 msgid "Auto-connect master/monitor busses"
 msgstr "Автоматически соединять шины master/monitor"
 
-#: rc_option_editor.cc:1841
+#: rc_option_editor.cc:2323
 msgid "Connect track inputs"
 msgstr "Соединять входы дорожек"
 
-#: rc_option_editor.cc:1846
+#: rc_option_editor.cc:2328
 msgid "automatically to physical inputs"
 msgstr "Автоматически с физическими входами"
 
-#: rc_option_editor.cc:1847 rc_option_editor.cc:1860
+#: rc_option_editor.cc:2329 rc_option_editor.cc:2342
 msgid "manually"
 msgstr "Вручную"
 
-#: rc_option_editor.cc:1853
+#: rc_option_editor.cc:2335
 msgid "Connect track and bus outputs"
 msgstr "Соединять выходы дорожек и шин"
 
-#: rc_option_editor.cc:1858
+#: rc_option_editor.cc:2340
 msgid "automatically to physical outputs"
 msgstr "Автоматически с физическими выходами"
 
-#: rc_option_editor.cc:1859
+#: rc_option_editor.cc:2341
 msgid "automatically to master bus"
 msgstr "Автоматически с общей шиной"
 
-#: rc_option_editor.cc:1864
+#: rc_option_editor.cc:2346
 msgid "Denormals"
 msgstr "Отклонения сигнала"
 
-#: rc_option_editor.cc:1869
+#: rc_option_editor.cc:2351
 msgid "Use DC bias to protect against denormals"
 msgstr "Использовать смещение для защиты от денормализации"
 
-#: rc_option_editor.cc:1876
+#: rc_option_editor.cc:2358
 msgid "Processor handling"
 msgstr "Что делать с обработчиками"
 
-#: rc_option_editor.cc:1882
+#: rc_option_editor.cc:2364
 msgid "no processor handling"
 msgstr "Ничего не делать"
 
-#: rc_option_editor.cc:1888
+#: rc_option_editor.cc:2370
 msgid "use FlushToZero"
 msgstr "Использовать FlushToZero"
 
-#: rc_option_editor.cc:1895
+#: rc_option_editor.cc:2377
 msgid "use DenormalsAreZero"
 msgstr "Использовать DenormalsAreZero"
 
-#: rc_option_editor.cc:1902
+#: rc_option_editor.cc:2384
 msgid "use FlushToZero and DenormalsAreZero"
 msgstr "Использовать FlushToZero и DenormalsAreZero"
 
-#: rc_option_editor.cc:1918
+#: rc_option_editor.cc:2400
 msgid "Silence plugins when the transport is stopped"
 msgstr "Приглушать плагины при остановке транспорта"
 
-#: rc_option_editor.cc:1926
+#: rc_option_editor.cc:2408
 msgid "Make new plugins active"
 msgstr "Делать новые плагины активными"
 
-#: rc_option_editor.cc:1936
+#: rc_option_editor.cc:2418
 msgid "Enable automatic analysis of audio"
 msgstr "Включить автоматический анализ звука"
 
-#: rc_option_editor.cc:1944
+#: rc_option_editor.cc:2426
 msgid "Replicate missing region channels"
 msgstr "Воссоздавать отсутствующие каналы области"
 
-#: rc_option_editor.cc:1951 rc_option_editor.cc:1953 rc_option_editor.cc:1968
-#: rc_option_editor.cc:1980 rc_option_editor.cc:1992 rc_option_editor.cc:2004
-#: rc_option_editor.cc:2008 rc_option_editor.cc:2016 rc_option_editor.cc:2024
-#: rc_option_editor.cc:2032 rc_option_editor.cc:2034 rc_option_editor.cc:2042
-#: rc_option_editor.cc:2050 rc_option_editor.cc:2058 rc_option_editor.cc:2066
-#: rc_option_editor.cc:2068
+#: rc_option_editor.cc:2433 rc_option_editor.cc:2435 rc_option_editor.cc:2450
+#: rc_option_editor.cc:2462 rc_option_editor.cc:2474 rc_option_editor.cc:2486
+#: rc_option_editor.cc:2490 rc_option_editor.cc:2498 rc_option_editor.cc:2506
+#: rc_option_editor.cc:2514 rc_option_editor.cc:2516 rc_option_editor.cc:2524
+#: rc_option_editor.cc:2532 rc_option_editor.cc:2540 rc_option_editor.cc:2548
+#: rc_option_editor.cc:2550
 msgid "Solo / mute"
 msgstr "Соло/Приглушение"
 
-#: rc_option_editor.cc:1956
+#: rc_option_editor.cc:2438
 msgid "Solo-in-place mute cut (dB)"
 msgstr "Приглушение сигнала при солировании (dB)"
 
-#: rc_option_editor.cc:1963
+#: rc_option_editor.cc:2445
 msgid "Solo controls are Listen controls"
 msgstr "Управление солированием работает как управление прослушиванием"
 
-#: rc_option_editor.cc:1972
+#: rc_option_editor.cc:2454
 msgid "Listen Position"
 msgstr "Положение прослушивания"
 
-#: rc_option_editor.cc:1977
+#: rc_option_editor.cc:2459
 msgid "after-fader (AFL)"
 msgstr "После фейдера (AFL)"
 
-#: rc_option_editor.cc:1978
+#: rc_option_editor.cc:2460
 msgid "pre-fader (PFL)"
 msgstr "До фейдера (PFL)"
 
-#: rc_option_editor.cc:1984
+#: rc_option_editor.cc:2466
 msgid "PFL signals come from"
 msgstr "Источник сигнала PFL"
 
-#: rc_option_editor.cc:1989
+#: rc_option_editor.cc:2471
 msgid "before pre-fader processors"
 msgstr "До послефейдерных обработчиков"
 
-#: rc_option_editor.cc:1990
+#: rc_option_editor.cc:2472
 msgid "pre-fader but after pre-fader processors"
 msgstr "До фейдера, но после предфейдерных обработчиков"
 
-#: rc_option_editor.cc:1996
+#: rc_option_editor.cc:2478
 msgid "AFL signals come from"
 msgstr "Источник сигнала AFL"
 
-#: rc_option_editor.cc:2001
+#: rc_option_editor.cc:2483
 msgid "immediately post-fader"
 msgstr "Сразу после фейдера"
 
-#: rc_option_editor.cc:2002
+#: rc_option_editor.cc:2484
 msgid "after post-fader processors (before pan)"
 msgstr "За послефейдерными обработчиками и до панорамирования"
 
-#: rc_option_editor.cc:2011
+#: rc_option_editor.cc:2493
 msgid "Exclusive solo"
 msgstr "Эксклюзивное солирование"
 
-#: rc_option_editor.cc:2019
+#: rc_option_editor.cc:2501
 msgid "Show solo muting"
 msgstr "Показывать приглушение при солировании"
 
-#: rc_option_editor.cc:2027
+#: rc_option_editor.cc:2509
 msgid "Soloing overrides muting"
 msgstr "Солирование приоритетнее приглушения"
 
-#: rc_option_editor.cc:2032
+#: rc_option_editor.cc:2514
 msgid "Default track / bus muting options"
 msgstr "Приглушение дорожек и шин по умолчанию затрагивает"
 
-#: rc_option_editor.cc:2037
+#: rc_option_editor.cc:2519
 msgid "Mute affects pre-fader sends"
 msgstr "Предфейдерные посылы"
 
-#: rc_option_editor.cc:2045
+#: rc_option_editor.cc:2527
 msgid "Mute affects post-fader sends"
 msgstr "Послефейдерные посылы"
 
-#: rc_option_editor.cc:2053
+#: rc_option_editor.cc:2535
 msgid "Mute affects control outputs"
 msgstr "Выходы мониторинга"
 
-#: rc_option_editor.cc:2061
+#: rc_option_editor.cc:2543
 msgid "Mute affects main outputs"
 msgstr "Основные выходы"
 
-#: rc_option_editor.cc:2066
+#: rc_option_editor.cc:2548
 msgid "Send Routing"
 msgstr "Маршрутизация посылов"
 
-#: rc_option_editor.cc:2071
+#: rc_option_editor.cc:2553
 msgid "Link panners of Aux and External Sends with main panner by default"
 msgstr "По умолчанию связывать внешние посылы с основным регулятором панорамы"
 
-#: rc_option_editor.cc:2079
+#: rc_option_editor.cc:2561
 msgid "MIDI read-ahead time (seconds)"
 msgstr "Чтение MIDI с упреждением (в секундах)"
 
-#: rc_option_editor.cc:2097
+#: rc_option_editor.cc:2579
 msgid "Send MIDI Time Code"
 msgstr "Передавать MIDI Time Code"
 
-#: rc_option_editor.cc:2105
+#: rc_option_editor.cc:2587
 msgid "Percentage either side of normal transport speed to transmit MTC"
 msgstr "Процент по обе стороны от нормальной трансп. скорости для передачи MTC"
 
-#: rc_option_editor.cc:2114
+#: rc_option_editor.cc:2596
 msgid "Obey MIDI Machine Control commands"
 msgstr "Выполнять команды MIDI Machine Control"
 
-#: rc_option_editor.cc:2122
+#: rc_option_editor.cc:2604
 msgid "Send MIDI Machine Control commands"
 msgstr "Отправлять команды MIDI Machine Control"
 
-#: rc_option_editor.cc:2130
+#: rc_option_editor.cc:2612
 msgid "Send MIDI control feedback"
 msgstr "Отправлять отклик на контрольные события MIDI"
 
-#: rc_option_editor.cc:2138
+#: rc_option_editor.cc:2620
 msgid "Inbound MMC device ID"
 msgstr "Идентификатор входящего устройства MMC"
 
-#: rc_option_editor.cc:2147
+#: rc_option_editor.cc:2629
 msgid "Outbound MMC device ID"
 msgstr "Идентификатор выходящего устройства MMC"
 
-#: rc_option_editor.cc:2156
+#: rc_option_editor.cc:2638
 msgid "Initial program change"
 msgstr "Исходная смена программы"
 
-#: rc_option_editor.cc:2165
+#: rc_option_editor.cc:2647
 msgid "Display first MIDI bank/program as 0"
 msgstr "Показывать первый банк/программу MIDI как 0"
 
-#: rc_option_editor.cc:2173
+#: rc_option_editor.cc:2655
 msgid "Never display periodic MIDI messages (MTC, MIDI Clock)"
 msgstr "Никогда не показывать периодические сообщения MIDI (MTC, MIDI Clock)"
 
-#: rc_option_editor.cc:2181
+#: rc_option_editor.cc:2663
 msgid "Sound MIDI notes as they are selected"
 msgstr "Воспроизводить ноты MIDI при их выделении"
 
-#: rc_option_editor.cc:2186
+#: rc_option_editor.cc:2668
 msgid "Midi Audition"
 msgstr "Прослушивание MIDI"
 
-#: rc_option_editor.cc:2190
+#: rc_option_editor.cc:2672
 msgid "Midi Audition Synth (LV2)"
 msgstr "Инструмент для прослушивания MIDI (LV2)"
 
-#: rc_option_editor.cc:2221 rc_option_editor.cc:2231 rc_option_editor.cc:2233
+#: rc_option_editor.cc:2703 rc_option_editor.cc:2713 rc_option_editor.cc:2715
 msgid "User interaction"
 msgstr "Взаимодействие с пользователем"
 
-#: rc_option_editor.cc:2224
+#: rc_option_editor.cc:2706
 msgid ""
 "Use translations of %1 messages\n"
 "   <i>(requires a restart of %1 to take effect)</i>\n"
@@ -10161,141 +10489,152 @@ msgstr ""
 "   <i>(вступает в силу после перезапуска %1)</i>\n"
 "   <i>(если локализация для вашего языка доступна)</i>"
 
-#: rc_option_editor.cc:2231
+#: rc_option_editor.cc:2713
 msgid "Keyboard"
 msgstr "Клавиатура"
 
-#: rc_option_editor.cc:2241
+#: rc_option_editor.cc:2723
 msgid "Control surface remote ID"
 msgstr "ID для удалённого управления"
 
-#: rc_option_editor.cc:2246
+#: rc_option_editor.cc:2728
 msgid "assigned by user"
 msgstr "Назначенные пользователем"
 
-#: rc_option_editor.cc:2247
+#: rc_option_editor.cc:2729
 msgid "follows order of mixer"
 msgstr "Следуют порядку микшера"
 
-#: rc_option_editor.cc:2261 rc_option_editor.cc:2270 rc_option_editor.cc:2279
-#: rc_option_editor.cc:2289 rc_option_editor.cc:2313 rc_option_editor.cc:2326
-#: rc_option_editor.cc:2335
+#: rc_option_editor.cc:2746
+msgid "Possibly improve slow graphical performance"
+msgstr ""
+
+#: rc_option_editor.cc:2751
+msgid "This requires restarting %1 before having an effect"
+msgstr ""
+
+#: rc_option_editor.cc:2752 rc_option_editor.cc:2755 rc_option_editor.cc:2764
+#: rc_option_editor.cc:2773 rc_option_editor.cc:2783 rc_option_editor.cc:2808
+#: rc_option_editor.cc:2823 rc_option_editor.cc:2836 rc_option_editor.cc:2845
 msgid "Preferences|GUI"
 msgstr "Интерфейс"
 
-#: rc_option_editor.cc:2264
+#: rc_option_editor.cc:2758
 msgid "Graphically indicate mouse pointer hovering over various widgets"
 msgstr "Подсвечивать элементы интерфейса под указателем мыши"
 
-#: rc_option_editor.cc:2273
+#: rc_option_editor.cc:2767
 msgid "Show tooltips if mouse hovers over a control"
 msgstr "Показывать всплывающие подсказки к элементам интерфейса"
 
-#: rc_option_editor.cc:2282
+#: rc_option_editor.cc:2776
 msgid "Use name highlight bars in region displays (requires a restart)"
 msgstr "Подсвечивать названия областей (требует перезапуска)"
 
-#: rc_option_editor.cc:2295
+#: rc_option_editor.cc:2789
 msgid "update transport clock display at FPS instead of every 100ms"
 msgstr "Обновлять часы транспорта по FPS, а не каждые 100 мс"
 
-#: rc_option_editor.cc:2304
+#: rc_option_editor.cc:2799
+msgid "Waveform image cache size (megabytes)"
+msgstr "Размер кэша для графики волновой формы (МБ)"
+
+#: rc_option_editor.cc:2807
+msgid ""
+"Increasing the cache size uses more memory to store waveform images, which "
+"can improve graphical performance."
+msgstr ""
+
+#: rc_option_editor.cc:2814
 msgid "Lock timeout (seconds)"
 msgstr "Тайм-аут блокировки (секунды)"
 
-#: rc_option_editor.cc:2312
+#: rc_option_editor.cc:2822
 msgid "Lock GUI after this many idle seconds (zero to never lock)"
 msgstr ""
 "Блокировка GUI после этого количества секунд простоя\n"
 "(0 - никогда не блокировать)"
 
-#: rc_option_editor.cc:2328
+#: rc_option_editor.cc:2838
 msgid "Mixer Strip"
 msgstr "Полоса микшера"
 
-#: rc_option_editor.cc:2338
+#: rc_option_editor.cc:2848
 msgid "Use narrow strips in the mixer by default"
 msgstr "Использовать тонкие полоски в микшере по умолчанию"
 
-#: rc_option_editor.cc:2343 rc_option_editor.cc:2357 rc_option_editor.cc:2376
-#: rc_option_editor.cc:2392 rc_option_editor.cc:2408 rc_option_editor.cc:2422
-#: rc_option_editor.cc:2436 rc_option_editor.cc:2438
+#: rc_option_editor.cc:2853 rc_option_editor.cc:2867 rc_option_editor.cc:2884
+#: rc_option_editor.cc:2900 rc_option_editor.cc:2916 rc_option_editor.cc:2930
+#: rc_option_editor.cc:2956 rc_option_editor.cc:2974 rc_option_editor.cc:2985
+#: rc_option_editor.cc:2992 rc_option_editor.cc:2994
 msgid "Preferences|Metering"
 msgstr "Замер"
 
-#: rc_option_editor.cc:2347
+#: rc_option_editor.cc:2857
 msgid "Peak hold time"
 msgstr "Удерживание пика"
 
-#: rc_option_editor.cc:2353
+#: rc_option_editor.cc:2863
 msgid "short"
 msgstr "Короткое"
 
-#: rc_option_editor.cc:2354
+#: rc_option_editor.cc:2864
 msgid "medium"
 msgstr "Среднее"
 
-#: rc_option_editor.cc:2355
+#: rc_option_editor.cc:2865
 msgid "long"
 msgstr "Долгое"
 
-#: rc_option_editor.cc:2361
+#: rc_option_editor.cc:2871
 msgid "DPM fall-off"
 msgstr "Скорость спадания"
 
-#: rc_option_editor.cc:2367
+#: rc_option_editor.cc:2877
 msgid "slowest [6.6dB/sec]"
 msgstr "Самое медленное [6,6 Дб/с]"
 
-#: rc_option_editor.cc:2368
+#: rc_option_editor.cc:2878
 msgid "slow [8.6dB/sec] (BBC PPM, EBU PPM)"
 msgstr "Медленное [8,6 Дб/с] (BBC PPM, EBU PPM)"
 
-#: rc_option_editor.cc:2369
-msgid "slowish [12.0dB/sec] (DIN)"
-msgstr "Неторопливое [12  Дб/с] (DIN)"
-
-#: rc_option_editor.cc:2370
-msgid "moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
-msgstr "Умеренное [13,3 Дб/с] (EBU Digi PPM, IRT Digi PPM)"
-
-#: rc_option_editor.cc:2371
-msgid "medium [20dB/sec]"
-msgstr "Среднее [20  Дб/с]"
+#: rc_option_editor.cc:2879
+msgid "moderate [12.0dB/sec] (DIN)"
+msgstr "Умеренное [12 Дб/с] (DIN)"
 
-#: rc_option_editor.cc:2372
-msgid "fast [32dB/sec]"
-msgstr "Быстрое [32 Дб/с]"
+#: rc_option_editor.cc:2880
+msgid "medium [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
+msgstr "Среднее [13,3 Дб/с] (EBU Digi PPM, IRT Digi PPM)"
 
-#: rc_option_editor.cc:2373
-msgid "faster [46dB/sec]"
-msgstr "Ещё быстрее [46 Дб/с]"
+#: rc_option_editor.cc:2881
+msgid "fast [20dB/sec]"
+msgstr "Быстрое [20 Дб/с]"
 
-#: rc_option_editor.cc:2374
-msgid "fastest [70dB/sec]"
-msgstr "Самое быстрое [70 Дб/с]"
+#: rc_option_editor.cc:2882
+msgid "very fast [32dB/sec]"
+msgstr "Очень быстрое [32 Дб/с]"
 
-#: rc_option_editor.cc:2380
+#: rc_option_editor.cc:2888
 msgid "Meter line-up level; 0dBu"
 msgstr "Точка выравнивания индикатора; 0dBu"
 
-#: rc_option_editor.cc:2385 rc_option_editor.cc:2401
+#: rc_option_editor.cc:2893 rc_option_editor.cc:2909
 msgid "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
 msgstr "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
 
-#: rc_option_editor.cc:2386 rc_option_editor.cc:2402
+#: rc_option_editor.cc:2894 rc_option_editor.cc:2910
 msgid "-20dBFS (SMPTE RP.0155)"
 msgstr "-20dBFS (SMPTE RP.0155)"
 
-#: rc_option_editor.cc:2387 rc_option_editor.cc:2403
+#: rc_option_editor.cc:2895 rc_option_editor.cc:2911
 msgid "-18dBFS (EBU, BBC)"
 msgstr "-18dBFS (EBU, BBC)"
 
-#: rc_option_editor.cc:2388 rc_option_editor.cc:2404
+#: rc_option_editor.cc:2896 rc_option_editor.cc:2912
 msgid "-15dBFS (DIN)"
 msgstr "-15dBFS (DIN)"
 
-#: rc_option_editor.cc:2390
+#: rc_option_editor.cc:2898
 msgid ""
 "Configure meter-marks and color-knee point for dBFS scale DPM, set reference "
 "level for IEC1/Nordic, IEC2 PPM and VU meter."
@@ -10303,39 +10642,51 @@ msgstr ""
 "Настройка измер. маркеров и цвета точки узла для dBFS масштабирования шкалы "
 "DPM, установка эталонного уровня для IEC1/Nordic, PPM и VU-метра."
 
-#: rc_option_editor.cc:2396
+#: rc_option_editor.cc:2904
 msgid "IEC1/DIN Meter line-up level; 0dBu"
 msgstr "Точка выравнивания индикатора IEC1/DIN; 0dBu"
 
-#: rc_option_editor.cc:2406
+#: rc_option_editor.cc:2914
 msgid "Reference level for IEC1/DIN meter."
 msgstr "Референсный уровень индикатора IEC1/DIN"
 
-#: rc_option_editor.cc:2412
+#: rc_option_editor.cc:2920
 msgid "VU Meter standard"
 msgstr "Стандарт индикатора VU"
 
-#: rc_option_editor.cc:2417
+#: rc_option_editor.cc:2925
 msgid "0VU = -2dBu (France)"
 msgstr "0VU = -2dBu (Франция)"
 
-#: rc_option_editor.cc:2418
+#: rc_option_editor.cc:2926
 msgid "0VU = 0dBu (North America, Australia)"
 msgstr "0VU = 0dBu (Северная Америка, Австралия)"
 
-#: rc_option_editor.cc:2419
+#: rc_option_editor.cc:2927
 msgid "0VU = +4dBu (standard)"
 msgstr "0VU = +4dBu (стандарт)"
 
-#: rc_option_editor.cc:2420
+#: rc_option_editor.cc:2928
 msgid "0VU = +8dBu"
 msgstr "0VU = +8dBu"
 
-#: rc_option_editor.cc:2426
+#: rc_option_editor.cc:2934
 msgid "Peak threshold [dBFS]"
 msgstr "Порог пика (dbFS)"
 
-#: rc_option_editor.cc:2434
+#: rc_option_editor.cc:2943
+msgid "Default Meter Type for Master Bus"
+msgstr "Тип индикатора по умолчанию для мастер-шины"
+
+#: rc_option_editor.cc:2961
+msgid "Default Meter Type for Busses"
+msgstr "Тип индикатора по умолчанию для шин"
+
+#: rc_option_editor.cc:2978
+msgid "Default Meter Type for Tracks"
+msgstr "Тип индикатора по умолчанию для дорожек"
+
+#: rc_option_editor.cc:2990
 msgid ""
 "Specify the audio signal level in dbFS at and above which the meter-peak "
 "indicator will flash red."
@@ -10343,11 +10694,11 @@ msgstr ""
 "Укажите в dbFS номинальный уровень звукового сигнала и пикового, когда "
 "индикатор мигает красным цветом."
 
-#: rc_option_editor.cc:2441
+#: rc_option_editor.cc:2997
 msgid "LED meter style"
 msgstr "Индикатор в стиле LED"
 
-#: rc_option_editor.cc:2449
+#: rc_option_editor.cc:3005
 msgid "Theme"
 msgstr "Тема"
 
@@ -10363,7 +10714,7 @@ msgstr "Позиция:"
 msgid "End:"
 msgstr "Конец:"
 
-#: region_editor.cc:92 sfdb_ui.cc:145
+#: region_editor.cc:92 sfdb_ui.cc:144
 msgid "Length:"
 msgstr "Длительность:"
 
@@ -10391,19 +10742,19 @@ msgstr "Источник:"
 msgid "Region '%1'"
 msgstr "Область %1"
 
-#: region_editor.cc:273
+#: region_editor.cc:277
 msgid "change region start position"
 msgstr "Смена позиции начала области"
 
-#: region_editor.cc:289
+#: region_editor.cc:297
 msgid "change region end position"
 msgstr "Смена позиции конца области"
 
-#: region_editor.cc:309
+#: region_editor.cc:320
 msgid "change region length"
 msgstr "Смена длительности области"
 
-#: region_editor.cc:403 region_editor.cc:415
+#: region_editor.cc:414 region_editor.cc:426
 msgid "change region sync point"
 msgstr "Смена синхронизатора областей"
 
@@ -10570,7 +10921,7 @@ msgstr "Готовность к записи"
 msgid "Active state"
 msgstr "Активное состояние"
 
-#: route_group_dialog.cc:53 route_group_dialog.cc:82 theme_manager.cc:90
+#: route_group_dialog.cc:53 route_group_dialog.cc:82 theme_manager.cc:92
 msgid "Color"
 msgstr "Цвет"
 
@@ -10619,184 +10970,184 @@ msgstr "НЕТ ДОРОЖЕК"
 msgid "No Track or Bus Selected"
 msgstr "Нет выбранных дорожек или шин"
 
-#: route_time_axis.cc:103
+#: route_time_axis.cc:104
 msgid "RTAV|G"
 msgstr "Г"
 
-#: route_time_axis.cc:104
+#: route_time_axis.cc:105
 msgid "RTAV|P"
 msgstr "П"
 
-#: route_time_axis.cc:105
+#: route_time_axis.cc:106
 msgid "RTAV|A"
 msgstr "А"
 
-#: route_time_axis.cc:181
+#: route_time_axis.cc:183
 msgid "Record (Right-click for Step Edit)"
 msgstr "Запись (правая клавиша мыши активирует пошаговый ввод)"
 
-#: route_time_axis.cc:184
+#: route_time_axis.cc:186
 msgid "Record"
 msgstr "Запись"
 
-#: route_time_axis.cc:254
+#: route_time_axis.cc:256
 msgid "Route Group"
 msgstr "Группа маршрутизации"
 
-#: route_time_axis.cc:264
+#: route_time_axis.cc:266
 msgid "MIDI Controllers and Automation"
 msgstr "MIDI-контроллеры и автоматизация"
 
-#: route_time_axis.cc:495
+#: route_time_axis.cc:497
 msgid "Show All Automation"
 msgstr "Показать всю автоматизацию"
 
-#: route_time_axis.cc:498
+#: route_time_axis.cc:500
 msgid "Show Existing Automation"
 msgstr "Показать существующую автоматизацию"
 
-#: route_time_axis.cc:501
+#: route_time_axis.cc:503
 msgid "Hide All Automation"
 msgstr "Скрыть всю автоматизацию"
 
-#: route_time_axis.cc:510
+#: route_time_axis.cc:512
 msgid "Processor automation"
 msgstr "Автоматизация обработчика"
 
-#: route_time_axis.cc:517
+#: route_time_axis.cc:519
 msgid "Fader"
 msgstr "Фейдер"
 
-#: route_time_axis.cc:535
+#: route_time_axis.cc:546
 msgid "Pan"
 msgstr "Панорама"
 
-#: route_time_axis.cc:626
+#: route_time_axis.cc:637
 msgid "Overlaid"
 msgstr "Перекрывают друг друга"
 
-#: route_time_axis.cc:632
+#: route_time_axis.cc:643
 msgid "Stacked"
 msgstr "В стопке"
 
-#: route_time_axis.cc:640
+#: route_time_axis.cc:651
 msgid "Layers"
 msgstr "Слои"
 
-#: route_time_axis.cc:709
+#: route_time_axis.cc:720
 msgid "Automatic (based on I/O connections)"
 msgstr "Автоматическое (по соединениям входа-выхода)"
 
-#: route_time_axis.cc:718
+#: route_time_axis.cc:729
 msgid "(Currently: Existing Material)"
 msgstr "(Сейчас: с записанным материалом)"
 
-#: route_time_axis.cc:721
+#: route_time_axis.cc:732
 msgid "(Currently: Capture Time)"
 msgstr "(Сейчас: по времени захвата)"
 
-#: route_time_axis.cc:729
+#: route_time_axis.cc:740
 msgid "Align With Existing Material"
 msgstr "С записанным материалом"
 
-#: route_time_axis.cc:734
+#: route_time_axis.cc:745
 msgid "Align With Capture Time"
 msgstr "По времени захвата"
 
-#: route_time_axis.cc:739
+#: route_time_axis.cc:750
 msgid "Alignment"
 msgstr "Выравнивание"
 
-#: route_time_axis.cc:774
+#: route_time_axis.cc:785
 msgid "Normal Mode"
 msgstr "Обычный режим"
 
-#: route_time_axis.cc:780
+#: route_time_axis.cc:791
 msgid "Tape Mode"
 msgstr "Плёночный режим"
 
-#: route_time_axis.cc:786
+#: route_time_axis.cc:797
 msgid "Non-Layered Mode"
 msgstr "Бесслойный режим"
 
-#: route_time_axis.cc:792
+#: route_time_axis.cc:803
 msgid "Record Mode"
 msgstr "Режим записи"
 
-#: route_time_axis.cc:799 route_time_axis.cc:1785
+#: route_time_axis.cc:810 route_time_axis.cc:1801
 msgid "Playlist"
 msgstr "Список"
 
-#: route_time_axis.cc:1093
+#: route_time_axis.cc:1104
 msgid "Rename Playlist"
 msgstr "Переименовать список воспроизведения"
 
-#: route_time_axis.cc:1094
+#: route_time_axis.cc:1105
 msgid "New name for playlist:"
 msgstr "Новое название списка воспроизведения:"
 
-#: route_time_axis.cc:1179
+#: route_time_axis.cc:1190
 msgid "New Copy Playlist"
 msgstr "Новая копия списка воспроизведения"
 
-#: route_time_axis.cc:1180 route_time_axis.cc:1233
+#: route_time_axis.cc:1191 route_time_axis.cc:1244
 msgid "Name for new playlist:"
 msgstr "Название нового списка воспроизведения:"
 
-#: route_time_axis.cc:1232
+#: route_time_axis.cc:1243
 msgid "New Playlist"
 msgstr "Новый список воспроизведения"
 
-#: route_time_axis.cc:1432
+#: route_time_axis.cc:1447
 msgid "You cannot create a track with that name as it is reserved for %1"
 msgstr ""
 "Вы не можете добавить дорожку с названием, которое зарезервировано для %1"
 
-#: route_time_axis.cc:1674
+#: route_time_axis.cc:1690
 msgid "New Copy..."
 msgstr "Создать копию..."
 
-#: route_time_axis.cc:1678
+#: route_time_axis.cc:1694
 msgid "New Take"
 msgstr "Новый дубль"
 
-#: route_time_axis.cc:1679
+#: route_time_axis.cc:1695
 msgid "Copy Take"
 msgstr "Скопировать дубль"
 
-#: route_time_axis.cc:1684
+#: route_time_axis.cc:1700
 msgid "Clear Current"
 msgstr "Очистить текущий"
 
-#: route_time_axis.cc:1687
+#: route_time_axis.cc:1703
 msgid "Select From All..."
 msgstr "Выбрать из всех..."
 
-#: route_time_axis.cc:1775
+#: route_time_axis.cc:1791
 msgid "Take: %1.%2"
 msgstr "Дубль: %1.%2"
 
-#: route_time_axis.cc:2165 selection.cc:1007 selection.cc:1061
+#: route_time_axis.cc:2197 selection.cc:1007 selection.cc:1061
 msgid "programming error: "
 msgstr "Ошибка в программе: "
 
-#: route_time_axis.cc:2581
+#: route_time_axis.cc:2613
 msgid "Underlays"
 msgstr "Подслойка"
 
-#: route_time_axis.cc:2584
+#: route_time_axis.cc:2616
 msgid "Remove \"%1\""
 msgstr "Удалить «%1»"
 
-#: route_time_axis.cc:2634 route_time_axis.cc:2671
+#: route_time_axis.cc:2666 route_time_axis.cc:2703
 msgid "programming error: underlay reference pointer pairs are inconsistent!"
 msgstr "Ошибка в программе: пары подложка и указатель ссылки несовместимы!"
 
-#: route_time_axis.cc:2698
+#: route_time_axis.cc:2730
 msgid "After-fade listen (AFL)"
 msgstr "Прослушивание после фейдера (AFL)"
 
-#: route_time_axis.cc:2702
+#: route_time_axis.cc:2734
 msgid "Pre-fade listen (PFL)"
 msgstr "Прослушивание до фейдера (PFL)"
 
@@ -10808,103 +11159,103 @@ msgstr "Приглушить эту дорожку"
 msgid "Mute other (non-soloed) tracks"
 msgstr "Приглушить другие (не солирующие) дорожки"
 
-#: route_ui.cc:153
+#: route_ui.cc:152
 msgid "Enable recording on this track"
 msgstr "Включить готовность к записи этой дорожки"
 
-#: route_ui.cc:161
+#: route_ui.cc:160
 msgid "make mixer strips show sends to this bus"
 msgstr "Показывать в полосках микшера посылы к этой шине"
 
-#: route_ui.cc:166
+#: route_ui.cc:165
 msgid "Monitor input"
 msgstr "Мониторинг входа"
 
-#: route_ui.cc:172
+#: route_ui.cc:171
 msgid "Monitor playback"
 msgstr "Мониторинг воспроизведения"
 
-#: route_ui.cc:679
+#: route_ui.cc:678
 msgid "Not connected to AudioEngine - cannot engage record"
 msgstr "Не подключено к AudioEngine.  Нельзя записывать."
 
-#: route_ui.cc:878
+#: route_ui.cc:877
 msgid "Step Entry"
 msgstr "Пошаговый ввод"
 
-#: route_ui.cc:951
+#: route_ui.cc:950
 msgid "Assign all tracks (prefader)"
 msgstr "Назначить всем дорожкам (до фейдера)"
 
-#: route_ui.cc:955
+#: route_ui.cc:954
 msgid "Assign all tracks and buses (prefader)"
 msgstr "Назначить всем дорожкам и шинам (до фейдера)"
 
-#: route_ui.cc:959
+#: route_ui.cc:958
 msgid "Assign all tracks (postfader)"
 msgstr "Назначить всем дорожкам (после фейдера)"
 
-#: route_ui.cc:963
+#: route_ui.cc:962
 msgid "Assign all tracks and buses (postfader)"
 msgstr "Назначить всем дорожкам и шинам (после фейдера)"
 
-#: route_ui.cc:967
+#: route_ui.cc:966
 msgid "Assign selected tracks (prefader)"
 msgstr "Назначить выбранным дорожкам (до фейдера)"
 
-#: route_ui.cc:971
+#: route_ui.cc:970
 msgid "Assign selected tracks and buses (prefader)"
 msgstr "Назначить выбранным дорожкам и шинам (до фейдера)"
 
-#: route_ui.cc:974
+#: route_ui.cc:973
 msgid "Assign selected tracks (postfader)"
 msgstr "Назначить выбранным дорожкам (после фейдера)"
 
-#: route_ui.cc:978
+#: route_ui.cc:977
 msgid "Assign selected tracks and buses (postfader)"
 msgstr "Назначить выбранным дорожкам и шинам (после фейдера)"
 
-#: route_ui.cc:981
+#: route_ui.cc:980
 msgid "Copy track/bus gains to sends"
 msgstr "Скопировать фейдеры дорожки/шины в посылы"
 
-#: route_ui.cc:982
+#: route_ui.cc:981
 msgid "Set sends gain to -inf"
 msgstr "Установка посылает усиление на -inf"
 
-#: route_ui.cc:983
+#: route_ui.cc:982
 msgid "Set sends gain to 0dB"
 msgstr "Установка посылает усиление на 0dB"
 
-#: route_ui.cc:1303
+#: route_ui.cc:1301
 msgid "Solo Isolate"
 msgstr "Изолировать соло"
 
-#: route_ui.cc:1310
+#: route_ui.cc:1308
 msgid "Solo Safe"
 msgstr "Блокировка солирования"
 
-#: route_ui.cc:1332
+#: route_ui.cc:1330
 msgid "Pre Fader Sends"
 msgstr "Посылки префейдера"
 
-#: route_ui.cc:1338
+#: route_ui.cc:1336
 msgid "Post Fader Sends"
 msgstr "Посылки постфейдера"
 
-#: route_ui.cc:1344
+#: route_ui.cc:1342
 msgid "Control Outs"
 msgstr "Контрольные выходы"
 
-#: route_ui.cc:1350
+#: route_ui.cc:1348
 msgid "Main Outs"
 msgstr "Главные выходы"
 
-#: route_ui.cc:1482
+#: route_ui.cc:1485
 msgid "Color Selection"
 msgstr "Выбор цвета"
 
-#: route_ui.cc:1547
+#: route_ui.cc:1550
 msgid ""
 "The use of colons (':') is discouraged in track and bus names.\n"
 "Do you want to use this new name?"
@@ -10912,51 +11263,51 @@ msgstr ""
 "Использование двоеточия в названиях дорожек и шин не поощряется.\n"
 "Вы точно хотите оставить двоеточие?"
 
-#: route_ui.cc:1551
+#: route_ui.cc:1554
 msgid "Use the new name"
 msgstr "Использовать новое имя"
 
-#: route_ui.cc:1552
+#: route_ui.cc:1555
 msgid "Re-edit the name"
 msgstr "Повторно изменить название"
 
-#: route_ui.cc:1565
+#: route_ui.cc:1568
 msgid "Rename Track"
 msgstr "Переименование дорожки"
 
-#: route_ui.cc:1567
+#: route_ui.cc:1570
 msgid "Rename Bus"
 msgstr "Переименование шины"
 
-#: route_ui.cc:1635
+#: route_ui.cc:1638
 msgid ": comment editor"
 msgstr ": Редактор комментариев"
 
-#: route_ui.cc:1801
+#: route_ui.cc:1804
 msgid " latency"
 msgstr " задержка"
 
-#: route_ui.cc:1814
+#: route_ui.cc:1817
 msgid "Cannot create route template directory %1"
 msgstr "Не удалось создать папку с шаблонами маршрутизации %1"
 
-#: route_ui.cc:1820
+#: route_ui.cc:1823
 msgid "Save As Template"
 msgstr "Сохранить как шаблон"
 
-#: route_ui.cc:1821
+#: route_ui.cc:1824
 msgid "Template name:"
 msgstr "Название шаблона:"
 
-#: route_ui.cc:1902
+#: route_ui.cc:1905
 msgid "Remote Control ID"
 msgstr "ID для удалённого управления"
 
-#: route_ui.cc:1912
+#: route_ui.cc:1915
 msgid "Remote control ID:"
 msgstr "ID для удалённого управления:"
 
-#: route_ui.cc:1926
+#: route_ui.cc:1929
 msgid ""
 "The remote control ID of %1 is: %2\n"
 "\n"
@@ -10968,15 +11319,15 @@ msgstr ""
 "\n"
 "%3 не может получить другой ID."
 
-#: route_ui.cc:1930
+#: route_ui.cc:1933
 msgid "the master bus"
 msgstr "Мастер-шина"
 
-#: route_ui.cc:1930
+#: route_ui.cc:1933
 msgid "the monitor bus"
 msgstr "Шина мониторинга"
 
-#: route_ui.cc:1932
+#: route_ui.cc:1935
 msgid ""
 "The remote control ID of %5 is: %2\n"
 "\n"
@@ -10995,7 +11346,7 @@ msgstr ""
 "%3Используйте вкладку пользовательской интеракции  окна Установки, если вы "
 "хотите изменить это %4"
 
-#: route_ui.cc:1989
+#: route_ui.cc:1992
 msgid ""
 "Left-click to invert (phase reverse) channel %1 of this track.  Right-click "
 "to show menu."
@@ -11003,10 +11354,34 @@ msgstr ""
 "Щелчком левой клавиши мыши инвертируется (инверсия фазы) \n"
 "канал %1 этой дорожки. По правой клавише вызывается меню."
 
-#: route_ui.cc:1991
+#: route_ui.cc:1994
 msgid "Click to show a menu of channels for inversion (phase reverse)"
 msgstr "Кликните для проказа меню каналов для инверсии (реверс фазы)"
 
+#: save_as_dialog.cc:34
+msgid "Switch to newly-saved version"
+msgstr "Переключиться на только что созданную версию"
+
+#: save_as_dialog.cc:35
+msgid "Copy media to new session"
+msgstr "Скопировать данные в новую сессию"
+
+#: save_as_dialog.cc:36
+msgid "Copy external media into new session"
+msgstr "Скопировать внешние данные в новую сессию"
+
+#: save_as_dialog.cc:37
+msgid "Newly-saved session should be empty"
+msgstr "Свежесозданная сессия должна быть пустой"
+
+#: save_as_dialog.cc:48
+msgid "Save as session name"
+msgstr "Новое название сессии"
+
+#: save_as_dialog.cc:55
+msgid "Parent directory/folder"
+msgstr "Куда сохранить каталог сеанса"
+
 #: search_path_option.cc:35
 msgid "Select folder to search for media"
 msgstr "Выберите папку для поиска звуковых данных"
@@ -11715,243 +12090,243 @@ msgstr "По умолчанию"
 msgid "Use these settings as defaults"
 msgstr "Используйте эти настройки, как по умолчанию"
 
-#: sfdb_ui.cc:90 sfdb_ui.cc:110 sfdb_ui.cc:119
+#: sfdb_ui.cc:89 sfdb_ui.cc:109 sfdb_ui.cc:118
 msgid "as new tracks"
 msgstr "как новые дорожки"
 
-#: sfdb_ui.cc:92 sfdb_ui.cc:112
+#: sfdb_ui.cc:91 sfdb_ui.cc:111
 msgid "to selected tracks"
 msgstr "в выделенные дорожки"
 
-#: sfdb_ui.cc:94 sfdb_ui.cc:114
+#: sfdb_ui.cc:93 sfdb_ui.cc:113
 msgid "to region list"
 msgstr "в список областей"
 
-#: sfdb_ui.cc:96 sfdb_ui.cc:116
+#: sfdb_ui.cc:95 sfdb_ui.cc:115
 msgid "as new tape tracks"
 msgstr "как новые плёночные дорожки"
 
-#: sfdb_ui.cc:100
+#: sfdb_ui.cc:99
 msgid "programming error: unknown import mode string %1"
 msgstr "Ошибка в программе: неизвестная строка режима импорта %1"
 
-#: sfdb_ui.cc:127
+#: sfdb_ui.cc:126
 msgid "Auto-play"
 msgstr "Автовоспр."
 
-#: sfdb_ui.cc:135 sfdb_ui.cc:324
+#: sfdb_ui.cc:134 sfdb_ui.cc:323
 msgid "<b>Sound File Information</b>"
 msgstr "<b>Информация о файле</b>"
 
-#: sfdb_ui.cc:147
+#: sfdb_ui.cc:146
 msgid "Timestamp:"
 msgstr "Отметка времени:"
 
-#: sfdb_ui.cc:149
+#: sfdb_ui.cc:148
 msgid "Format:"
 msgstr "Формат:"
 
-#: sfdb_ui.cc:188 sfdb_ui.cc:653
+#: sfdb_ui.cc:187 sfdb_ui.cc:652
 msgid "Tags:"
 msgstr "Метки:"
 
-#: sfdb_ui.cc:293 sfdb_ui.cc:409
+#: sfdb_ui.cc:292 sfdb_ui.cc:408
 msgid "Could not read file: %1 (%2)."
 msgstr "Не удалось прочитать файл: %1 (%2)"
 
-#: sfdb_ui.cc:297
+#: sfdb_ui.cc:296
 msgid "<b>Midi File Information</b>"
 msgstr "<b>Сведения о MIDI файле<b>"
 
-#: sfdb_ui.cc:458
+#: sfdb_ui.cc:457
 msgid "Could not access soundfile: "
 msgstr "Файл недоступен: "
 
-#: sfdb_ui.cc:530
+#: sfdb_ui.cc:529
 msgid "SoundFileBox: Could not tokenize string: "
 msgstr "SoundFileBox: Не удалось разметить строку: "
 
-#: sfdb_ui.cc:550 sfdb_ui.cc:552
+#: sfdb_ui.cc:549 sfdb_ui.cc:551
 msgid "Search"
 msgstr "Искать"
 
-#: sfdb_ui.cc:576
+#: sfdb_ui.cc:575
 msgid "Audio and MIDI files"
 msgstr "Звуковые и MIDI-файлы"
 
-#: sfdb_ui.cc:579
+#: sfdb_ui.cc:578
 msgid "Audio files"
 msgstr "Звуковые файлы"
 
-#: sfdb_ui.cc:582
+#: sfdb_ui.cc:581
 msgid "MIDI files"
 msgstr "Файлы MIDI"
 
-#: sfdb_ui.cc:585 add_video_dialog.cc:123
+#: sfdb_ui.cc:584 add_video_dialog.cc:123
 msgid "All files"
 msgstr "Все файлы"
 
-#: sfdb_ui.cc:604 add_video_dialog.cc:246
+#: sfdb_ui.cc:603 add_video_dialog.cc:246
 msgid "Browse Files"
 msgstr "Обзор файлов"
 
-#: sfdb_ui.cc:633
+#: sfdb_ui.cc:632
 msgid "Paths"
 msgstr "Расположения"
 
-#: sfdb_ui.cc:642
+#: sfdb_ui.cc:641
 msgid "Search Tags"
 msgstr "Поиск по меткам"
 
-#: sfdb_ui.cc:658
+#: sfdb_ui.cc:657
 msgid "Sort:"
 msgstr "Критерий сортировки:"
 
-#: sfdb_ui.cc:666
+#: sfdb_ui.cc:665
 msgid "Longest"
 msgstr "Более длинные"
 
-#: sfdb_ui.cc:667
+#: sfdb_ui.cc:666
 msgid "Shortest"
 msgstr "Более короткие"
 
-#: sfdb_ui.cc:668
+#: sfdb_ui.cc:667
 msgid "Newest"
 msgstr "Более новые"
 
-#: sfdb_ui.cc:669
+#: sfdb_ui.cc:668
 msgid "Oldest"
 msgstr "Более старые"
 
-#: sfdb_ui.cc:670
+#: sfdb_ui.cc:669
 msgid "Most downloaded"
 msgstr "Чаще скачиваемые"
 
-#: sfdb_ui.cc:671
+#: sfdb_ui.cc:670
 msgid "Least downloaded"
 msgstr "Реже скачиваемые"
 
-#: sfdb_ui.cc:672
+#: sfdb_ui.cc:671
 msgid "Highest rated"
 msgstr "Выше оценённые"
 
-#: sfdb_ui.cc:673
+#: sfdb_ui.cc:672
 msgid "Lowest rated"
 msgstr "Ниже оценённые"
 
-#: sfdb_ui.cc:678
+#: sfdb_ui.cc:677
 msgid "More"
 msgstr "Ещё"
 
-#: sfdb_ui.cc:682
+#: sfdb_ui.cc:681
 msgid "Similar"
 msgstr "Дубликат"
 
-#: sfdb_ui.cc:694
+#: sfdb_ui.cc:693
 msgid "ID"
 msgstr "ID"
 
-#: sfdb_ui.cc:695 add_video_dialog.cc:83
+#: sfdb_ui.cc:694 add_video_dialog.cc:83
 msgid "Filename"
 msgstr "Имя файла"
 
-#: sfdb_ui.cc:697
+#: sfdb_ui.cc:696
 msgid "Duration"
 msgstr "Длительность"
 
-#: sfdb_ui.cc:698
+#: sfdb_ui.cc:697
 msgid "Size"
 msgstr "Размер"
 
-#: sfdb_ui.cc:699
+#: sfdb_ui.cc:698
 msgid "Samplerate"
 msgstr "Частота сэмплирования"
 
-#: sfdb_ui.cc:700
+#: sfdb_ui.cc:699
 msgid "License"
 msgstr "Лицензия"
 
-#: sfdb_ui.cc:718
+#: sfdb_ui.cc:717
 msgid "Search Freesound"
 msgstr "Поиск по Freesound"
 
-#: sfdb_ui.cc:738
+#: sfdb_ui.cc:737
 msgid "Press to import selected files and close this window"
 msgstr "Нажмите, чтобы импортировать выбранные файлы и закрыть это окно"
 
-#: sfdb_ui.cc:739
+#: sfdb_ui.cc:738
 msgid "Press to import selected files and leave this window open"
 msgstr ""
 "Нажмите, чтобы импортировать выбранные файлы и оставить это окно открытым"
 
-#: sfdb_ui.cc:740
+#: sfdb_ui.cc:739
 msgid "Press to close this window without importing any files"
 msgstr "Нажмите, чтобы закрыть это окно, ничего не импортируя"
 
-#: sfdb_ui.cc:936
+#: sfdb_ui.cc:935
 msgid "SoundFileBrowser: Could not tokenize string: "
 msgstr "SoundFileBrowser: Не удалось разметить строку:"
 
-#: sfdb_ui.cc:1136
+#: sfdb_ui.cc:1135
 msgid "%1 more page of 100 results available"
 msgid_plural "%1 more pages of 100 results available"
 msgstr[0] "Ещё %1 страница из 100 доступных"
 msgstr[1] "Ещё %1 страницы из 100 доступных"
 msgstr[2] "Ещё %1 страниц из 100 доступных"
 
-#: sfdb_ui.cc:1141
+#: sfdb_ui.cc:1140
 msgid "No more results available"
 msgstr "Больше результатов нет"
 
-#: sfdb_ui.cc:1205
+#: sfdb_ui.cc:1204
 msgid "B"
 msgstr "Б"
 
-#: sfdb_ui.cc:1207
+#: sfdb_ui.cc:1206
 msgid "kB"
 msgstr "КБ"
 
-#: sfdb_ui.cc:1209 sfdb_ui.cc:1211
+#: sfdb_ui.cc:1208 sfdb_ui.cc:1210
 msgid "MB"
 msgstr "МБ"
 
-#: sfdb_ui.cc:1213
+#: sfdb_ui.cc:1212
 msgid "GB"
 msgstr "ГБ"
 
-#: sfdb_ui.cc:1425 sfdb_ui.cc:1738 sfdb_ui.cc:1801 sfdb_ui.cc:1819
+#: sfdb_ui.cc:1424 sfdb_ui.cc:1737 sfdb_ui.cc:1800 sfdb_ui.cc:1818
 msgid "one track per file"
 msgstr "Одна дорожка на файл"
 
-#: sfdb_ui.cc:1428 sfdb_ui.cc:1802 sfdb_ui.cc:1820
+#: sfdb_ui.cc:1427 sfdb_ui.cc:1801 sfdb_ui.cc:1819
 msgid "one track per channel"
 msgstr "Одна дорожка на канал"
 
-#: sfdb_ui.cc:1436 sfdb_ui.cc:1804 sfdb_ui.cc:1821
+#: sfdb_ui.cc:1435 sfdb_ui.cc:1803 sfdb_ui.cc:1820
 msgid "sequence files"
 msgstr "Файлы последовательности"
 
-#: sfdb_ui.cc:1439 sfdb_ui.cc:1809
+#: sfdb_ui.cc:1438 sfdb_ui.cc:1808
 msgid "all files in one track"
 msgstr "Все файлы в одну дорожку"
 
-#: sfdb_ui.cc:1440 sfdb_ui.cc:1803
+#: sfdb_ui.cc:1439 sfdb_ui.cc:1802
 msgid "merge files"
 msgstr "Объединить файлы"
 
-#: sfdb_ui.cc:1446 sfdb_ui.cc:1806
+#: sfdb_ui.cc:1445 sfdb_ui.cc:1805
 msgid "one region per file"
 msgstr "Одна область на файл"
 
-#: sfdb_ui.cc:1449 sfdb_ui.cc:1807
+#: sfdb_ui.cc:1448 sfdb_ui.cc:1806
 msgid "one region per channel"
 msgstr "Одна область на канал"
 
-#: sfdb_ui.cc:1454 sfdb_ui.cc:1808 sfdb_ui.cc:1822
+#: sfdb_ui.cc:1453 sfdb_ui.cc:1807 sfdb_ui.cc:1821
 msgid "all files in one region"
 msgstr "Все файлы в одной области"
 
-#: sfdb_ui.cc:1521
+#: sfdb_ui.cc:1520
 msgid ""
 "One or more of the selected files\n"
 "cannot be used by %1"
@@ -11959,59 +12334,59 @@ msgstr ""
 "Один или более выбранных файлов\n"
 "не могут быть использованы в %1"
 
-#: sfdb_ui.cc:1665
+#: sfdb_ui.cc:1664
 msgid "Copy files to session"
 msgstr "Скопировать файлы в сессию"
 
-#: sfdb_ui.cc:1682 sfdb_ui.cc:1859
+#: sfdb_ui.cc:1681 sfdb_ui.cc:1858
 msgid "file timestamp"
 msgstr "По отметке времени файла"
 
-#: sfdb_ui.cc:1683 sfdb_ui.cc:1861
+#: sfdb_ui.cc:1682 sfdb_ui.cc:1860
 msgid "edit point"
 msgstr "По курсору редактора"
 
-#: sfdb_ui.cc:1684 sfdb_ui.cc:1863
+#: sfdb_ui.cc:1683 sfdb_ui.cc:1862
 msgid "playhead"
 msgstr "По указателю воспр."
 
-#: sfdb_ui.cc:1685
+#: sfdb_ui.cc:1684
 msgid "session start"
 msgstr "В начало сессии"
 
-#: sfdb_ui.cc:1691
+#: sfdb_ui.cc:1690
 msgid "<b>Add files as ...</b>"
 msgstr "<b>Добавить файлы как...</b>"
 
-#: sfdb_ui.cc:1713
+#: sfdb_ui.cc:1712
 msgid "<b>Insert at</b>"
 msgstr "<b>Куда вставить</b>"
 
-#: sfdb_ui.cc:1726
+#: sfdb_ui.cc:1725
 msgid "<b>Mapping</b>"
 msgstr "<b>Способ вставки</b>"
 
-#: sfdb_ui.cc:1744
+#: sfdb_ui.cc:1743
 msgid "<b>Conversion quality</b>"
 msgstr "<b>Качество преобразования:</b>"
 
-#: sfdb_ui.cc:1756
+#: sfdb_ui.cc:1755
 msgid "<b>Instrument</b>"
 msgstr "<b>Инструмент</b>"
 
-#: sfdb_ui.cc:1768 sfdb_ui.cc:1875
+#: sfdb_ui.cc:1767 sfdb_ui.cc:1874
 msgid "Best"
 msgstr "Наилучшее"
 
-#: sfdb_ui.cc:1769 sfdb_ui.cc:1877
+#: sfdb_ui.cc:1768 sfdb_ui.cc:1876
 msgid "Good"
 msgstr "Хорошее"
 
-#: sfdb_ui.cc:1770 sfdb_ui.cc:1879
+#: sfdb_ui.cc:1769 sfdb_ui.cc:1878
 msgid "Quick"
 msgstr "Быстрое"
 
-#: sfdb_ui.cc:1772
+#: sfdb_ui.cc:1771
 msgid "Fastest"
 msgstr "Быстрее всего"
 
@@ -12019,41 +12394,41 @@ msgstr "Быстрее всего"
 msgid "Shuttle speed control (Context-click for options)"
 msgstr "Контроль скорости воспроизведения (параметры — в контекстном меню)"
 
-#: shuttle_control.cc:174
+#: shuttle_control.cc:183
 msgid "Percent"
 msgstr "Проценты"
 
-#: shuttle_control.cc:182
+#: shuttle_control.cc:191
 msgid "Units"
 msgstr "Единица измерения"
 
-#: shuttle_control.cc:188 shuttle_control.cc:609
+#: shuttle_control.cc:197 shuttle_control.cc:620
 msgid "Sprung"
 msgstr "Прыжок"
 
-#: shuttle_control.cc:192 shuttle_control.cc:612
+#: shuttle_control.cc:201 shuttle_control.cc:623
 msgid "Wheel"
 msgstr "Переход"
 
-#: shuttle_control.cc:226
+#: shuttle_control.cc:235
 msgid "Maximum speed"
 msgstr "Макс. скорость"
 
-#: shuttle_control.cc:568
+#: shuttle_control.cc:579
 msgid "Playing"
 msgstr "Воспроизведение"
 
-#: shuttle_control.cc:583
+#: shuttle_control.cc:594
 #, c-format
 msgid "<<< %+d semitones"
 msgstr "<<< %+d полутон"
 
-#: shuttle_control.cc:585
+#: shuttle_control.cc:596
 #, c-format
 msgid ">>> %+d semitones"
 msgstr ">>> %+d полутон"
 
-#: shuttle_control.cc:590
+#: shuttle_control.cc:601
 msgid "Stopped"
 msgstr "Остановлено"
 
@@ -12097,7 +12472,7 @@ msgstr "Удалить громкоговоритель"
 msgid "Azimuth:"
 msgstr "Азимут:"
 
-#: startup.cc:67
+#: startup.cc:68
 msgid ""
 "Use an external mixer or the hardware mixer of your audio interface.\n"
 "%1 will play NO role in monitoring"
@@ -12105,11 +12480,11 @@ msgstr ""
 "Использовать внешний микшер или микшер звукового интерфейса.\n"
 "%1 никак не будет участвовать в мониторинге."
 
-#: startup.cc:69
+#: startup.cc:70
 msgid "Ask %1 to play back material as it is being recorded"
 msgstr "Дать %1 воспроизводить материал при его записи"
 
-#: startup.cc:142
+#: startup.cc:143
 msgid ""
 "<span size=\"larger\">%1 is a digital audio workstation. You can use it to "
 "record, edit and mix multi-track audio. You can produce your own CDs, mix "
@@ -12126,15 +12501,15 @@ msgstr ""
 "\n"
 "Перед началом работы с программой необходимо кое-что настроить.</span>"
 
-#: startup.cc:168
+#: startup.cc:169
 msgid "Welcome to %1"
 msgstr "Приветствуем вас в %1"
 
-#: startup.cc:191
+#: startup.cc:192
 msgid "Default folder for %1 sessions"
 msgstr "Папка для сессий %1 по умолчанию"
 
-#: startup.cc:197
+#: startup.cc:198
 msgid ""
 "Each project that you work on with %1 has its own folder.\n"
 "These can require a lot of disk space if you are recording audio.\n"
@@ -12152,11 +12527,11 @@ msgstr ""
 "<i>(Сохранять сессии можно будет где угодно, просто указанная\n"
 "папка будет использоваться по умолчанию)</i>"
 
-#: startup.cc:220
+#: startup.cc:221
 msgid "Default folder for new sessions"
 msgstr "Папка для новых сессий по умолчанию"
 
-#: startup.cc:241
+#: startup.cc:242
 msgid ""
 "While recording instruments or vocals, you probably want to listen to the\n"
 "signal as well as record it. This is called \"monitoring\". There are\n"
@@ -12181,15 +12556,15 @@ msgstr ""
 "<i>Если вы не понимаете смысл этого параметра, просто используйте \n"
 "предлагаемый по умолчанию вариант.</i>"
 
-#: startup.cc:262
+#: startup.cc:263
 msgid "Monitoring Choices"
 msgstr "Способ мониторинга"
 
-#: startup.cc:285
+#: startup.cc:286
 msgid "Use a Master bus directly"
 msgstr "Использовать мастер-шину напрямую"
 
-#: startup.cc:287
+#: startup.cc:288
 msgid ""
 "Connect the Master bus directly to your hardware outputs. This is preferable "
 "for simple usage."
@@ -12197,11 +12572,11 @@ msgstr ""
 "Соединить мастер-шину напрямую с выходами звукового интерфейса.\n"
 "Предпочтительно для простого использования."
 
-#: startup.cc:296
+#: startup.cc:297
 msgid "Use an additional Monitor bus"
 msgstr "Использовать дополнительную шину мониторинга"
 
-#: startup.cc:299
+#: startup.cc:300
 msgid ""
 "Use a Monitor bus between Master bus and hardware outputs for \n"
 "greater control in monitoring without affecting the mix."
@@ -12209,7 +12584,7 @@ msgstr ""
 "Использовать шину мониторинга между мастер-шиной и выходами \n"
 "звукового интерфейса для полного контроля без вмешательства в микс."
 
-#: startup.cc:321
+#: startup.cc:322
 msgid ""
 "<i>You can change this preference at any time via the Preferences dialog.\n"
 "You can also add or remove the monitor section to/from any session.</i>\n"
@@ -12222,7 +12597,7 @@ msgstr ""
 "<i>Если вы не понимаете смысл этого параметра, просто используйте\n"
 "предлагаемое по умолчанию.</i>"
 
-#: startup.cc:332
+#: startup.cc:333
 msgid "Monitor Section"
 msgstr "Секция монитора"
 
@@ -12610,7 +12985,7 @@ msgstr "Переключить ввод аккордов"
 msgid "Sustain Selected Notes by Note Length"
 msgstr "Выдерживать выбранные ноты по длине"
 
-#: stereo_panner.cc:133
+#: stereo_panner.cc:128
 #, c-format
 msgid "L:%3d R:%3d Width:%d%%"
 msgstr "Левый:%3d, Правый:%3d, Ширина: %d%%"
@@ -12655,52 +13030,48 @@ msgstr "Пульсирующая нота"
 msgid "Tap tempo"
 msgstr "TAP время"
 
-#: tempo_dialog.cc:54
-msgid "Edit Tempo"
-msgstr "Изменить темп"
-
-#: tempo_dialog.cc:77 tempo_dialog.cc:78 tempo_dialog.cc:324
-#: tempo_dialog.cc:325
+#: tempo_dialog.cc:77 tempo_dialog.cc:78 tempo_dialog.cc:343
+#: tempo_dialog.cc:344
 msgid "whole"
 msgstr "целая"
 
-#: tempo_dialog.cc:79 tempo_dialog.cc:80 tempo_dialog.cc:326
-#: tempo_dialog.cc:327
+#: tempo_dialog.cc:79 tempo_dialog.cc:80 tempo_dialog.cc:345
+#: tempo_dialog.cc:346
 msgid "second"
 msgstr "1/2"
 
-#: tempo_dialog.cc:81 tempo_dialog.cc:82 tempo_dialog.cc:328
-#: tempo_dialog.cc:329
+#: tempo_dialog.cc:81 tempo_dialog.cc:82 tempo_dialog.cc:347
+#: tempo_dialog.cc:348
 msgid "third"
 msgstr "1/3"
 
-#: tempo_dialog.cc:83 tempo_dialog.cc:84 tempo_dialog.cc:330
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:83 tempo_dialog.cc:84 tempo_dialog.cc:349
+#: tempo_dialog.cc:350
 msgid "quarter"
 msgstr "1/4"
 
-#: tempo_dialog.cc:85 tempo_dialog.cc:86 tempo_dialog.cc:332
-#: tempo_dialog.cc:333
+#: tempo_dialog.cc:85 tempo_dialog.cc:86 tempo_dialog.cc:351
+#: tempo_dialog.cc:352
 msgid "eighth"
 msgstr "1/8"
 
-#: tempo_dialog.cc:87 tempo_dialog.cc:88 tempo_dialog.cc:334
-#: tempo_dialog.cc:335
+#: tempo_dialog.cc:87 tempo_dialog.cc:88 tempo_dialog.cc:353
+#: tempo_dialog.cc:354
 msgid "sixteenth"
 msgstr "1/16"
 
-#: tempo_dialog.cc:89 tempo_dialog.cc:90 tempo_dialog.cc:336
-#: tempo_dialog.cc:337
+#: tempo_dialog.cc:89 tempo_dialog.cc:90 tempo_dialog.cc:355
+#: tempo_dialog.cc:356
 msgid "thirty-second"
 msgstr "1/32"
 
-#: tempo_dialog.cc:91 tempo_dialog.cc:92 tempo_dialog.cc:338
-#: tempo_dialog.cc:339
+#: tempo_dialog.cc:91 tempo_dialog.cc:92 tempo_dialog.cc:357
+#: tempo_dialog.cc:358
 msgid "sixty-fourth"
 msgstr "1/64"
 
-#: tempo_dialog.cc:93 tempo_dialog.cc:94 tempo_dialog.cc:340
-#: tempo_dialog.cc:341
+#: tempo_dialog.cc:93 tempo_dialog.cc:94 tempo_dialog.cc:359
+#: tempo_dialog.cc:360
 msgid "one-hundred-twenty-eighth"
 msgstr "1/128"
 
@@ -12712,95 +13083,91 @@ msgstr "Долей в минуту:"
 msgid "Tempo begins at"
 msgstr "Темп начинается"
 
-#: tempo_dialog.cc:251
+#: tempo_dialog.cc:254
 msgid "incomprehensible pulse note type (%1)"
 msgstr "непонятный тип пульсирующей ноты (%1)"
 
-#: tempo_dialog.cc:307
-msgid "Edit Meter"
-msgstr "Изменить размер"
-
-#: tempo_dialog.cc:356
+#: tempo_dialog.cc:375
 msgid "Note value:"
 msgstr "Значение ноты: "
 
-#: tempo_dialog.cc:357
+#: tempo_dialog.cc:376
 msgid "Beats per bar:"
 msgstr "Долей на такт:"
 
-#: tempo_dialog.cc:371
+#: tempo_dialog.cc:390
 msgid "Meter begins at bar:"
 msgstr "Размер начинается в такте:"
 
-#: tempo_dialog.cc:484
+#: tempo_dialog.cc:503
 msgid "incomprehensible meter note type (%1)"
 msgstr "непонятный тип нотного ритма (%1)"
 
-#: theme_manager.cc:65
+#: theme_manager.cc:67
 msgid "Dark Theme"
 msgstr "Тёмная тема"
 
-#: theme_manager.cc:66
+#: theme_manager.cc:68
 msgid "Light Theme"
 msgstr "Светлая тема"
 
-#: theme_manager.cc:67
+#: theme_manager.cc:69
 msgid "Restore Defaults"
 msgstr "Восстановить исходные значения"
 
-#: theme_manager.cc:68
+#: theme_manager.cc:70
 msgid "Draw \"flat\" buttons"
 msgstr "Рисовать кнопки плоскими"
 
-#: theme_manager.cc:69
+#: theme_manager.cc:71
 msgid "Blink Rec-Arm buttons"
 msgstr "Мигать кнопками готовности к записи"
 
-#: theme_manager.cc:70
+#: theme_manager.cc:72
 msgid "Color regions using their track's color"
 msgstr "Раскрашивать области цветом дорожки"
 
-#: theme_manager.cc:71
+#: theme_manager.cc:73
 msgid "Show waveform clipping"
 msgstr "Показывать клиппинг волновой формы"
 
-#: theme_manager.cc:73
+#: theme_manager.cc:75
 msgid "Waveforms color gradient depth"
 msgstr "Глубина градиента волновой формы сигнала"
 
-#: theme_manager.cc:75
+#: theme_manager.cc:77
 msgid "Timeline item gradient depth"
 msgstr "Глубина градиента объектов на таймлайне"
 
-#: theme_manager.cc:76
+#: theme_manager.cc:78
 msgid "All floating windows are dialogs"
 msgstr "Все плавающие окна являются диалогами"
 
-#: theme_manager.cc:77
+#: theme_manager.cc:79
 msgid "Transient windows follow front window."
 msgstr "Временные окна следуют за получающим фокус основным окном"
 
-#: theme_manager.cc:78
+#: theme_manager.cc:80
 msgid "Icon Set"
 msgstr "Набор значков:"
 
-#: theme_manager.cc:87
+#: theme_manager.cc:89
 msgid "Object"
 msgstr "Объект"
 
-#: theme_manager.cc:163
+#: theme_manager.cc:165
 msgid "Items"
 msgstr "Элементы"
 
-#: theme_manager.cc:164
+#: theme_manager.cc:166
 msgid "Palette"
 msgstr "Палитра"
 
-#: theme_manager.cc:165
+#: theme_manager.cc:167
 msgid "Transparency"
 msgstr "Прозрачность"
 
-#: theme_manager.cc:195
+#: theme_manager.cc:197
 msgid ""
 "Mark all floating windows to be type \"Dialog\" rather than using \"Utility"
 "\" for some.\n"
@@ -12811,7 +13178,7 @@ msgstr ""
 "Это может помочь с некоторыми оконными менеджерами.\n"
 "Изменения вступят в силу после перезапуска %1."
 
-#: theme_manager.cc:199
+#: theme_manager.cc:201
 msgid ""
 "Make transient windows follow the front window when toggling between the "
 "editor and mixer.\n"
@@ -12821,15 +13188,15 @@ msgstr ""
 "при переключении между редактором и микшером.\n"
 "Это изменение вступит в силу после перезапуска %1."
 
-#: theme_manager.cc:620
+#: theme_manager.cc:635
 msgid "Color Palette"
 msgstr "Цветовая палитра"
 
-#: time_axis_view.cc:148
+#: time_axis_view.cc:150
 msgid "Track/Bus name (double click to edit)"
 msgstr "Имя дорожки/шины (двойной клик для редактирования)"
 
-#: time_axis_view_item.cc:345
+#: time_axis_view_item.cc:333
 msgid "new duration %1 frame is out of bounds for %2"
 msgid_plural "new duration of %1 frames is out of bounds for %2"
 msgstr[0] "Новая длительность размером %1 кадр находится за пределами %2"
@@ -12968,67 +13335,67 @@ msgstr "Транспонировать MIDI"
 msgid "Transpose"
 msgstr "Транспонировать"
 
-#: ui_config.cc:163 ui_config.cc:300
+#: ui_config.cc:179 ui_config.cc:317
 msgid "Loading default ui configuration file %1"
 msgstr "Загрузка файла конфигурации UI по умолчанию %1"
 
-#: ui_config.cc:166 ui_config.cc:303
+#: ui_config.cc:182 ui_config.cc:320
 msgid "cannot read default ui configuration file \"%1\""
 msgstr "Невозможно прочитать основной файл конфигурации интерфейса \"%1\""
 
-#: ui_config.cc:169 ui_config.cc:308
+#: ui_config.cc:185 ui_config.cc:325
 msgid "default ui configuration file \"%1\" not loaded successfully."
 msgstr "Основной файл конфигурации интерфейса \"%1\" не был успешно загружен"
 
-#: ui_config.cc:177
+#: ui_config.cc:193
 msgid "Could not find default UI configuration file %1"
 msgstr "Не удалось найти конфигурационный файл %1 для интерфейса"
 
-#: ui_config.cc:219
+#: ui_config.cc:236
 msgid "Loading color file %1"
 msgstr "Загружается файл %1 с описанием цветовой схемы"
 
-#: ui_config.cc:222
+#: ui_config.cc:239
 msgid "cannot read color file \"%1\""
 msgstr "Невозможно прочитать файл %1 с описанием цветовой схемы"
 
-#: ui_config.cc:227
+#: ui_config.cc:244
 msgid "color file \"%1\" not loaded successfully."
 msgstr "Файл %1 с описанием цветовой схемы не был успешно загружен."
 
-#: ui_config.cc:233
+#: ui_config.cc:250
 msgid "Color file %1 not found"
 msgstr "Файл %1 с описанием цветовой схемы не найден"
 
-#: ui_config.cc:282 ui_config.cc:361
+#: ui_config.cc:299 ui_config.cc:378
 msgid "Color file %1 not saved"
 msgstr "Файл %1 с описанием цветовой схемы не сохранён"
 
-#: ui_config.cc:317
+#: ui_config.cc:334
 msgid "Loading user ui configuration file %1"
 msgstr "Загрузка файла пользовательской конфигурации UI %1"
 
-#: ui_config.cc:320
+#: ui_config.cc:337
 msgid "cannot read ui configuration file \"%1\""
 msgstr "Невозможно прочитать файл конфигурации UI \"%1\""
 
-#: ui_config.cc:325
+#: ui_config.cc:342
 msgid "user ui configuration file \"%1\" not loaded successfully."
 msgstr "Конфигурация UI интерфейса файлa \"%1\" не загружена успешно."
 
-#: ui_config.cc:333
+#: ui_config.cc:350
 msgid "could not find any ui configuration file, canvas will look broken."
 msgstr "Невозможно найти файл конфигурации UI, это будет выглядеть сломаным."
 
-#: ui_config.cc:351
+#: ui_config.cc:368
 msgid "Config file %1 not saved"
 msgstr "Конфигурационный файл %1 не сохранён"
 
-#: ui_config.cc:592
+#: ui_config.cc:609
 msgid "Color %1 not found"
 msgstr "Цвет %1 не обнаружен"
 
-#: ui_config.cc:662
+#: ui_config.cc:679
 msgid "Unable to find UI style file %1 in search path %2. %3 will look strange"
 msgstr ""
 "Не удается найти файл стилей пользовательского интерфейса %1 в пути поиска "
@@ -13103,7 +13470,7 @@ msgstr "Индекс видеосервера"
 msgid " %1 fps"
 msgstr " %1 к/с"
 
-#: video_timeline.cc:468
+#: video_timeline.cc:472
 msgid ""
 "Parsing video file info failed. Is the Video Server running? Is the file "
 "readable by the Video Server? Does the docroot match? Is it a video file?"
@@ -13111,7 +13478,7 @@ msgstr ""
 "Разбор информация видеофайл не удался. Работает ли видеосервер? Доступен ли "
 "файл для чтения с видеосервера? Совпадает ли docroot? Это видеофайл?"
 
-#: video_timeline.cc:506
+#: video_timeline.cc:510
 msgid ""
 "Failed to set session-framerate: '%1' does not have a corresponding option "
 "setting in %2."
@@ -13119,7 +13486,7 @@ msgstr ""
 "Не удалось установить чатоту кадров сессии: '%1' не имеет соответствующей "
 "опции настройки в %2."
 
-#: video_timeline.cc:514
+#: video_timeline.cc:518
 msgid ""
 "Video file's framerate is not equal to %1 session timecode's framerate: '%2' "
 "vs '%3'"
@@ -13127,7 +13494,7 @@ msgstr ""
 "Частота кадров видеофайла не равна частоте кадров таймкода сессии %1: '%2' "
 "против '%3'"
 
-#: video_timeline.cc:587
+#: video_timeline.cc:591
 msgid ""
 "Video-server docroot mismatch. %1: '%2', video-server: '%3'. This usually "
 "means that the video server was not started by %1 and uses a different "
@@ -13137,7 +13504,7 @@ msgstr ""
 "видеосервер: '%3'. Как правило, это означает, что видеосервер не был запущен "
 "от имени Ardour и используется другие различные корневые документы."
 
-#: video_timeline.cc:724
+#: video_timeline.cc:728
 msgid ""
 "Video-monitor 'xjadeo' was not found. Please install http://xjadeo.sf.net/ "
 "(a custom path to xjadeo can be specified by setting the XJREMOTE "
@@ -13153,17 +13520,15 @@ msgstr ""
 "\n"
 "См. так же:  http://manual.ardour.org/video-timeline/setup/"
 
-#: video_timeline.cc:739
+#: video_timeline.cc:743
 msgid "Video-monitor 'xjadeo' cannot be launched."
 msgstr "Видеомонитор 'xjadeo' не может быть запущен."
 
-#: video_timeline.cc:766
+#: video_timeline.cc:769
 msgid ""
-"Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.7.7 or "
+"Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.8.0 or "
 "later. http://xjadeo.sf.net/"
 msgstr ""
-"Видеомонитор 'xjadeo' слишком стар. Пожалуйста, установите xjadeo версию "
-"0.7.7 или более позднюю. http://xjadeo.sf.net/"
 
 #: video_monitor.cc:285
 msgid "Video Monitor: File Not Found."
@@ -13210,7 +13575,7 @@ msgstr "Импортировать/перекодировать видеофай
 msgid "Output File:"
 msgstr "Файл вывода:"
 
-#: transcode_video_dialog.cc:61 export_video_dialog.cc:85
+#: transcode_video_dialog.cc:61 export_video_dialog.cc:81
 msgid "Abort"
 msgstr "Прервать"
 
@@ -13222,7 +13587,7 @@ msgstr "Высота = "
 msgid "Manual Override"
 msgstr "Ручное управление"
 
-#: transcode_video_dialog.cc:70 export_video_dialog.cc:103
+#: transcode_video_dialog.cc:70 export_video_dialog.cc:99
 msgid "Debug Mode: Print ffmpeg command and output to stdout."
 msgstr "Режим отладки: вывод команд ffmpeg в stdout"
 
@@ -13247,83 +13612,87 @@ msgstr ""
 "ИнфоФайл не может быть прочитан. Скорее всего '%1' не является допустимым "
 "видеофайлом, "
 
-#: transcode_video_dialog.cc:134
+#: transcode_video_dialog.cc:137
 msgid "FPS:"
 msgstr "ф/с:"
 
-#: transcode_video_dialog.cc:136
+#: transcode_video_dialog.cc:139
 msgid "Duration:"
 msgstr "Длительность:"
 
-#: transcode_video_dialog.cc:138
+#: transcode_video_dialog.cc:141
 msgid "Codec:"
 msgstr "Кодек:"
 
-#: transcode_video_dialog.cc:140
+#: transcode_video_dialog.cc:143
 msgid "Geometry:"
 msgstr "Геометрия:"
 
-#: transcode_video_dialog.cc:155
+#: transcode_video_dialog.cc:158
 msgid "??"
 msgstr "??"
 
-#: transcode_video_dialog.cc:176
+#: transcode_video_dialog.cc:179
 msgid "<b>Import Settings</b>"
 msgstr "<b>Параметры импорта</b>"
 
-#: transcode_video_dialog.cc:181
+#: transcode_video_dialog.cc:186
 msgid "Reference From Current Location (Previously Transcoded Files Only)"
 msgstr "Reference From Current Location (Только ранее перекодированные файлы)"
 
-#: transcode_video_dialog.cc:183
+#: transcode_video_dialog.cc:187
 msgid "Import/Transcode Video to Session"
 msgstr "Импортировать/перекодировать видео в сессию"
 
-#: transcode_video_dialog.cc:191
+#: transcode_video_dialog.cc:190 transcode_video_dialog.cc:200
 msgid "Do Not Import Video (Audio Import Only)"
 msgstr "Не импортировать видео (Только аудиоимпрт)"
 
-#: transcode_video_dialog.cc:200
+#: transcode_video_dialog.cc:210
+msgid "Do Not Import Video"
+msgstr ""
+
+#: transcode_video_dialog.cc:226
 msgid "Scale Video: Width = "
 msgstr "Масштаб видео: Ширина = "
 
-#: transcode_video_dialog.cc:207
+#: transcode_video_dialog.cc:233
 msgid "Original Width"
 msgstr "Исходная ширина"
 
-#: transcode_video_dialog.cc:222
+#: transcode_video_dialog.cc:248
 msgid "Bitrate (KBit/s):"
 msgstr "Скорость потока (Кбит/с):"
 
-#: transcode_video_dialog.cc:227
+#: transcode_video_dialog.cc:253
 msgid "Extract Audio:"
 msgstr "Извлечь звук:"
 
-#: transcode_video_dialog.cc:232
+#: transcode_video_dialog.cc:258
 msgid "No Audio Track Present"
 msgstr "Нет звуковой дорожки"
 
-#: transcode_video_dialog.cc:235
+#: transcode_video_dialog.cc:261
 msgid "Do Not Extract Audio"
 msgstr "Не извлекать аудио"
 
-#: transcode_video_dialog.cc:350
+#: transcode_video_dialog.cc:376
 msgid "Extracting Audio.."
 msgstr "Извлекается звук..."
 
-#: transcode_video_dialog.cc:353
+#: transcode_video_dialog.cc:379
 msgid "Audio Extraction Failed."
 msgstr "Не удалось извлечь звуковую дорожку."
 
-#: transcode_video_dialog.cc:379
+#: transcode_video_dialog.cc:405
 msgid "Transcoding Video.."
 msgstr "Перекодирование видео..."
 
-#: transcode_video_dialog.cc:413
+#: transcode_video_dialog.cc:439
 msgid "Transcoding Failed."
 msgstr "Не удалось выполнить перекодирование."
 
-#: transcode_video_dialog.cc:503
+#: transcode_video_dialog.cc:529
 msgid "Save Transcoded Video File"
 msgstr "Сохранить перекодированный видеофайл"
 
@@ -13420,55 +13789,55 @@ msgstr "Снимок с таким названием уже есть. Пере
 msgid "Cannot create video folder \"%1\" (%2)"
 msgstr "Не удалось создать папку для видео: \"%1\" (%2)"
 
-#: export_video_dialog.cc:71
+#: export_video_dialog.cc:67
 msgid "Export Video File "
 msgstr "Экспортировать видеофайл"
 
-#: export_video_dialog.cc:82
+#: export_video_dialog.cc:78
 msgid "Video:"
 msgstr "Видео:"
 
-#: export_video_dialog.cc:87
+#: export_video_dialog.cc:83
 msgid "Scale Video (W x H):"
 msgstr "Масштабирование видео (В×Ш):"
 
-#: export_video_dialog.cc:88
+#: export_video_dialog.cc:84
 msgid "Retain Aspect"
 msgstr "Сохранить соотношение сторон"
 
-#: export_video_dialog.cc:93
+#: export_video_dialog.cc:89
 msgid "Set Aspect Ratio:"
 msgstr "Указать соотношение сторон:"
 
-#: export_video_dialog.cc:94
+#: export_video_dialog.cc:90
 msgid "Normalize Audio"
 msgstr "Нормировать звук"
 
-#: export_video_dialog.cc:95
+#: export_video_dialog.cc:91
 msgid "2 Pass Encoding"
 msgstr "Кодирование в два прохода"
 
-#: export_video_dialog.cc:96
+#: export_video_dialog.cc:92
 msgid "Codec Optimizations:"
 msgstr "Оптимизация кодека:"
 
-#: export_video_dialog.cc:98
+#: export_video_dialog.cc:94
 msgid "Deinterlace"
 msgstr "Деинтерлейсинг"
 
-#: export_video_dialog.cc:99
+#: export_video_dialog.cc:95
 msgid "Use [2] B-frames (MPEG 2 or 4 only)"
 msgstr "Использовать [2] B-кадры (только MPEG 2 или 4)"
 
-#: export_video_dialog.cc:100
+#: export_video_dialog.cc:96
 msgid "Override FPS (Default is to retain FPS from the input video file):"
 msgstr "Принудительно указать свою частоту кадров:"
 
-#: export_video_dialog.cc:101
+#: export_video_dialog.cc:97
 msgid "Include Session Metadata"
 msgstr "Включить метаданные сессии"
 
-#: export_video_dialog.cc:119
+#: export_video_dialog.cc:115
 msgid ""
 "No ffprobe or ffmpeg executables could be found on this system. Video Export "
 "is not possible until you install those tools. See the Log window for more "
@@ -13478,97 +13847,93 @@ msgstr ""
 "будет недоступен до тех пор, пока вы их не установите. См. подробнее в окне "
 "журнала."
 
-#: export_video_dialog.cc:130
+#: export_video_dialog.cc:126
 msgid "<b>Output:</b> (file extension defines format)"
 msgstr "<b>Вывод:</b> (расширение файла определяет контейнер)"
 
-#: export_video_dialog.cc:140
+#: export_video_dialog.cc:136
 msgid "<b>Input Video:</b>"
 msgstr "<b>Видео на входе:</b>"
 
-#: export_video_dialog.cc:151
+#: export_video_dialog.cc:147
 msgid "Audio:"
 msgstr "Звук:"
 
-#: export_video_dialog.cc:153
+#: export_video_dialog.cc:149
 msgid "Master Bus"
 msgstr "Мастер-шина"
 
-#: export_video_dialog.cc:158
+#: export_video_dialog.cc:154
 msgid "from the %1 session's start to the session's end"
 msgstr "от начала до конца сессии %1"
 
-#: export_video_dialog.cc:161
+#: export_video_dialog.cc:157
 msgid "<b>Settings:</b>"
 msgstr "<b>Параметры:</b>"
 
-#: export_video_dialog.cc:169
+#: export_video_dialog.cc:165
 msgid "Range:"
 msgstr "Диапазон:"
 
-#: export_video_dialog.cc:172
-msgid "Preset:"
-msgstr "Профиль:"
-
-#: export_video_dialog.cc:175
+#: export_video_dialog.cc:171
 msgid "Video Codec:"
 msgstr "Видеокодек:"
 
-#: export_video_dialog.cc:178
+#: export_video_dialog.cc:174
 msgid "Video KBit/s:"
 msgstr "Скорость видеопотока (Кбит/с):"
 
-#: export_video_dialog.cc:181
+#: export_video_dialog.cc:177
 msgid "Audio Codec:"
 msgstr "Звуковой кодек:"
 
-#: export_video_dialog.cc:184
+#: export_video_dialog.cc:180
 msgid "Audio KBit/s:"
 msgstr "Скорость звукового потока (Кбит/с):"
 
-#: export_video_dialog.cc:187
+#: export_video_dialog.cc:183
 msgid "Audio Samplerate:"
 msgstr "Частота сэмплирования звука:"
 
-#: export_video_dialog.cc:222 export_video_dialog.cc:231
-#: export_video_dialog.cc:814 export_video_dialog.cc:817
+#: export_video_dialog.cc:218 export_video_dialog.cc:227
+#: export_video_dialog.cc:810 export_video_dialog.cc:813
 msgid "(default for format)"
 msgstr "(по умолчанию для контейнера)"
 
-#: export_video_dialog.cc:242 export_video_dialog.cc:255
-#: export_video_dialog.cc:821 export_video_dialog.cc:830
+#: export_video_dialog.cc:238 export_video_dialog.cc:251
+#: export_video_dialog.cc:817 export_video_dialog.cc:826
 msgid "(default)"
 msgstr "(по умолчанию)"
 
-#: export_video_dialog.cc:256 export_video_dialog.cc:824
+#: export_video_dialog.cc:252 export_video_dialog.cc:820
 msgid "(retain)"
 msgstr "(исходная)"
 
-#: export_video_dialog.cc:348
+#: export_video_dialog.cc:344
 msgid "from 00:00:00:00 to the video's end"
 msgstr "от 00:00:00:00 до конца видео"
 
-#: export_video_dialog.cc:350
+#: export_video_dialog.cc:346
 msgid "from the video's start to the video's end"
 msgstr "от начала до конца видео"
 
-#: export_video_dialog.cc:353
+#: export_video_dialog.cc:349
 msgid "Selected range"
 msgstr "Выбранный диапазон"
 
-#: export_video_dialog.cc:573
+#: export_video_dialog.cc:569
 msgid "Normalizing audio"
 msgstr "Выполняется нормировка звука"
 
-#: export_video_dialog.cc:577
+#: export_video_dialog.cc:573
 msgid "Exporting audio"
 msgstr "Экспорт звука"
 
-#: export_video_dialog.cc:632
+#: export_video_dialog.cc:628
 msgid "Exporting Audio..."
 msgstr "Экспортируется звук..."
 
-#: export_video_dialog.cc:689
+#: export_video_dialog.cc:685
 msgid ""
 "Export Video: Cannot query duration of video-file, using duration from "
 "timeline instead."
@@ -13576,36 +13941,36 @@ msgstr ""
 "Экспорт видео: невозможно запросить длительность видеофайла, вместо неё "
 "используется длительность проекта."
 
-#: export_video_dialog.cc:719
+#: export_video_dialog.cc:715
 msgid "Export Video: export-range does not include video."
 msgstr "Экспорт видео: экспортный диапазон не содержит видео."
 
-#: export_video_dialog.cc:732
+#: export_video_dialog.cc:728
 msgid "Export Video: No Master Out Ports to Connect for Audio Export"
 msgstr ""
 "Экспорт видео: нет соединяемых портов выхода мастер-шины для экспорта звука"
 
-#: export_video_dialog.cc:774
+#: export_video_dialog.cc:770
 msgid "Encoding Video..."
 msgstr "Кодируется видео..."
 
-#: export_video_dialog.cc:794
+#: export_video_dialog.cc:790
 msgid "Export Video: Video input file cannot be read."
 msgstr "Экспорт видео: не удалось прочитать используемый видеофайл"
 
-#: export_video_dialog.cc:900
+#: export_video_dialog.cc:896
 msgid "Encoding Video.. Pass 1/2"
 msgstr "Выполняется кодирование видео. Проход 1/2."
 
-#: export_video_dialog.cc:912
+#: export_video_dialog.cc:908
 msgid "Encoding Video.. Pass 2/2"
 msgstr "Выполняется кодирование видео. Проход 2/2."
 
-#: export_video_dialog.cc:1015
+#: export_video_dialog.cc:1011
 msgid "Transcoding failed."
 msgstr "Не удалось выполнить перекодировку."
 
-#: export_video_dialog.cc:1251 export_video_dialog.cc:1271
+#: export_video_dialog.cc:1247 export_video_dialog.cc:1267
 msgid "Save Exported Video File"
 msgstr "Сохранить экспортированный видеофайл"
 
@@ -13636,6 +14001,97 @@ msgstr ""
 "\n"
 "Открыть руководство в браузере? "
 
+#~ msgid "Inactive"
+#~ msgstr "Неактивно"
+
+#~ msgid "Export region contents"
+#~ msgstr "Экспортировать содержимое области"
+
+#~ msgid "Export track output"
+#~ msgstr "Экспортировать выходы дорожки"
+
+#~ msgid "Peak"
+#~ msgstr "Пиковое значение"
+
+#~ msgid "K20"
+#~ msgstr "K20"
+
+#~ msgid "K14"
+#~ msgstr "K14"
+
+#~ msgid "K12"
+#~ msgstr "К12"
+
+#~ msgid ""
+#~ "  -k, --keybindings filename  Name of key bindings to load (default is ~/."
+#~ "ardour3/ardour.bindings)\n"
+#~ msgstr ""
+#~ "  -k, --keybindings имя-файла      Имя собственного файла с комбинациями "
+#~ "клавиш (по умолчанию это ~/.ardour3/ardour.bindings)\n"
+
+#~ msgid "Update available plugins"
+#~ msgstr "Обновить список доступных плагинов"
+
+#~ msgid "slowish [12.0dB/sec] (DIN)"
+#~ msgstr "Неторопливое [12  Дб/с] (DIN)"
+
+#~ msgid "moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
+#~ msgstr "Умеренное [13,3 Дб/с] (EBU Digi PPM, IRT Digi PPM)"
+
+#~ msgid "medium [20dB/sec]"
+#~ msgstr "Среднее [20  Дб/с]"
+
+#~ msgid "fast [32dB/sec]"
+#~ msgstr "Быстрое [32 Дб/с]"
+
+#~ msgid "faster [46dB/sec]"
+#~ msgstr "Ещё быстрее [46 Дб/с]"
+
+#~ msgid "fastest [70dB/sec]"
+#~ msgstr "Самое быстрое [70 Дб/с]"
+
+#~ msgid "Snapshot..."
+#~ msgstr "Создать снимок..."
+
+#~ msgid "Internal Edit Mode (edit notes and gain curves inside regions)"
+#~ msgstr "Правка внутри областей (нот и кривых усиления)"
+
+#~ msgid "Make Loop range"
+#~ msgstr "Создать область петли"
+
+#~ msgid "Make Punch range"
+#~ msgstr "Создать область врезки"
+
+#~ msgid ""
+#~ "The %1 audio backend was configured and started externally.\n"
+#~ "This limits your control over it."
+#~ msgstr ""
+#~ "Звуковая подсистема %1 была настроена и запущена извне.\n"
+#~ "Вы не сможете полностью контролировать её."
+
+#~ msgid "Insert time on all the track's playlists"
+#~ msgstr "Вставить во все списки воспроизведения дорожки"
+
+#~ msgid "Keyboard layout:"
+#~ msgstr "Раскладка клавиатуры:"
+
+#~ msgid "Font scaling:"
+#~ msgstr "Масштаб шрифта:"
+
+#~ msgid ""
+#~ "Major font-scale changes require an application restart to re-layout."
+#~ msgstr "Существенное изменение масштаба требует перезапуска программы"
+
+#~ msgid "only in region gain mode"
+#~ msgstr "Только в режиме правки огибающей"
+
+#~ msgid ""
+#~ "Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.7.7 or "
+#~ "later. http://xjadeo.sf.net/"
+#~ msgstr ""
+#~ "Видеомонитор 'xjadeo' слишком стар. Пожалуйста, установите xjadeo версию "
+#~ "0.7.7 или более позднюю. http://xjadeo.sf.net/"
+
 #~ msgid "After Editor Selection"
 #~ msgstr "После выбранного в редакторе"
 
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 71435fe..5d21de2 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -568,18 +568,14 @@ ProcessorEntry::Control::set_tooltip ()
 	if (!c) {
 		return;
 	}
-	
-	stringstream s;
-	s << _name << ": ";
+	char tmp[256];
 	if (c->toggled ()) {
-		s << (c->get_value() > 0.5 ? _("on") : _("off"));
+		snprintf (tmp, sizeof(tmp), "%s: %s", _name.c_str(), c->get_value() > 0.5 ? _("on") : _("off"));
 	} else {
-		s << setprecision(2) << fixed;
-		s << c->internal_to_user (c->get_value ());
+		snprintf (tmp, sizeof(tmp), "%s: %.2f", _name.c_str(), c->internal_to_user (c->get_value ()));
 	}
 
-	string sm = Glib::Markup::escape_text (s.str());
-	
+	string sm = Glib::Markup::escape_text (tmp);
 	_slider_persistant_tooltip.set_tip (sm);
 	ARDOUR_UI::instance()->set_tip (_button, sm);
 }
@@ -707,14 +703,13 @@ PluginInsertProcessorEntry::PluginInsertProcessorEntry (ProcessorBox* b, boost::
 void
 PluginInsertProcessorEntry::plugin_insert_splitting_changed ()
 {
-	_output_icon.set_ports(_plugin_insert->output_streams());
-	_routing_icon.set_splitting(_plugin_insert->splitting ());
+	ChanCount in, out; // actual configured i/o
+	_plugin_insert->configured_io (in, out);
 
-	ChanCount sources = _plugin_insert->input_streams();
+	/* get number of input ports */
 	ChanCount sinks = _plugin_insert->natural_input_streams();
-
-	/* replicated instances */
 	if (!_plugin_insert->splitting () && _plugin_insert->get_count() > 1) {
+		/* replicated instances */
 		for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
 			sinks.set(*t, sinks.get(*t) * _plugin_insert->get_count());
 		}
@@ -722,17 +717,50 @@ PluginInsertProcessorEntry::plugin_insert_splitting_changed ()
 	/* MIDI bypass */
 	if (_plugin_insert->natural_output_streams().n_midi() == 0 &&
 			_plugin_insert->output_streams().n_midi() == 1) {
+		in.set(DataType::MIDI, 1);
+		out.set(DataType::MIDI, 1);
 		sinks.set(DataType::MIDI, 1);
-		sources.set(DataType::MIDI, 1);
 	}
 
+	/* the Input streams available (*valid* outputs from prev. plugin)
+	 * this will be <= sinks. Some input-ports of this processor
+	 * may be unconnected.
+	 */
+	_routing_icon.set_sources(in);
+
+	/* the actual input ports of this processor */
 	_input_icon.set_ports(sinks);
 	_routing_icon.set_sinks(sinks);
-	_routing_icon.set_sources(sources);
 
-	if (_plugin_insert->splitting () ||
-			_plugin_insert->input_streams().n_audio() < _plugin_insert->natural_input_streams().n_audio()
-		 )
+	/* set/override plugin-output ports to actual outputs-streams.
+	 *
+	 * This plugin may have unconnected output-ports (currently only in Mixbus,
+	 * e.g channelstrip-EQ at the top of a MIDI-channel before the synth).
+	 *
+	 * The *next* processor below this one will only see the 
+	 * actual available streams (it cannot know the real outputs
+	 * of this plugin).
+	 *
+	 * There is currently no API to query the ports of the previous (or next)
+	 * processor.
+	 *
+	 * (normally - iff configuration succeeds - this is set during
+	 * ProcessorEntry::processor_configuration_changed() and should
+	 * equal _plugin_insert->output_streams())
+	 */
+	_output_icon.set_ports(out);
+#ifndef NDEBUG
+	if (out != _plugin_insert->output_streams()) {
+		std::cerr << "Processor Wiring: " <<  processor()->name()
+			<< " out-ports: " << _plugin_insert->output_streams() // NB. does not include midi-bypass
+			<< " out-connections: " << out
+			<< endmsg;
+	}
+#endif
+
+	_routing_icon.set_splitting(_plugin_insert->splitting ());
+
+	if (_plugin_insert->splitting () ||  in != sinks)
 	{
 		_routing_icon.set_size_request (-1, std::max (7.f, rintf(7.f * ARDOUR_UI::ui_scale)));
 		_routing_icon.set_visible(true);
@@ -847,10 +875,12 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
 	const uint32_t sources = _sources.n_total();
 	const uint32_t sinks = _sinks.n_total();
 
-	/* MIDI */
 	const uint32_t midi_sources = _sources.n_midi();
 	const uint32_t midi_sinks = _sinks.n_midi();
+	const uint32_t audio_sources = _sources.n_audio();
+	const uint32_t audio_sinks = _sinks.n_audio();
 
+	/* MIDI */
 	cairo_set_source_rgb (cr,
 			UINT_RGBA_R_FLT(midi_port_color),
 			UINT_RGBA_G_FLT(midi_port_color),
@@ -875,11 +905,24 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
 		cairo_move_to (cr, si_x, height);
 		cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
 		cairo_stroke (cr);
+	} else if (midi_sources == 0 && midi_sinks == 1) {
+		const double dx = 1 + rint(max(2., 2. * ARDOUR_UI::ui_scale));
+		// draw "T"
+		//  TODO connect back to track-input of last midi-out if any, otherwise draw "X"
+		const float si_x  = rintf(width * .2f) + .5f;
+		cairo_move_to (cr, si_x, height);
+		cairo_line_to (cr, si_x, height * .66);
+		cairo_move_to (cr, si_x - dx, height * .66);
+		cairo_line_to (cr, si_x + dx, height * .66);
+		cairo_stroke (cr);
+#ifndef NDEBUG
+	} else if (midi_sources != 0 && midi_sinks != 0) {
+		PBD::warning << string_compose("Programming error: midi routing display: A %1 -> %2 | M %3 -> %4 | T %5 -> %6", 
+				audio_sources, audio_sinks, midi_sources, midi_sinks, sources, sinks) << endmsg;
+#endif
 	}
 
 	/* AUDIO */
-	const uint32_t audio_sources = _sources.n_audio();
-	const uint32_t audio_sinks = _sinks.n_audio();
 	cairo_set_source_rgb (cr,
 			UINT_RGBA_R_FLT(audio_port_color),
 			UINT_RGBA_G_FLT(audio_port_color),
@@ -896,7 +939,7 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
 			cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
 			cairo_stroke (cr);
 		}
-	} else if (audio_sources > 1) {
+	} else if (audio_sources > 1 && sinks > 1) {
 		for (uint32_t i = 0 ; i < audio_sources; ++i) {
 			const float si_x = rintf(width * (.2f + .6f * (i + midi_sinks) / (sinks - 1.f))) + .5f;
 			const float si_x0 = rintf(width * (.2f + .6f * (i + midi_sources) / (sources - 1.f))) + .5f;
@@ -904,11 +947,26 @@ ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
 			cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
 			cairo_stroke (cr);
 		}
-	} else if (audio_sources == 1 && audio_sinks == 1) {
-		const float si_x = rintf(width * .5f) + .5f;
+	} else if (audio_sources == 1 && audio_sinks > 0) {
+		float si_x, si_x0;
+		if (sinks == 1) {
+			si_x = rintf(width * .5f) + .5f;
+		} else {
+			si_x = rintf(width * (.2f + .6f * midi_sinks / (sinks - 1.f))) + .5f;
+		}
+		if (sources == 1) {
+			si_x0 = rintf(width * .5f) + .5f;
+		} else {
+			si_x0 = rintf(width * (.2f + .6f * midi_sources / (sources - 1.f))) + .5f;
+		}
 		cairo_move_to (cr, si_x, height);
-		cairo_line_to (cr, si_x, 0);
+		cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
 		cairo_stroke (cr);
+#ifndef NDEBUG
+	} else if (audio_sources != 0 && audio_sinks != 0) {
+		PBD::warning << string_compose("Programming error: audio routing display: A %1 -> %2 | M %3 -> %4 | T %5 -> %6", 
+				audio_sources, audio_sinks, midi_sources, midi_sinks, sources, sinks) << endmsg;
+#endif
 	}
 	cairo_destroy(cr);
 	return true;
@@ -2155,9 +2213,10 @@ ProcessorBox::paste_processor_state (const XMLNodeList& nlist, boost::shared_ptr
 				/* XXX its a bit limiting to assume that everything else
 				   is a plugin.
 				*/
-
 				p.reset (new PluginInsert (*_session));
-                                p->set_state (**niter, Stateful::current_state_version);
+				PBD::ID id = p->id();
+				p->set_state (**niter, Stateful::current_state_version);
+				boost::dynamic_pointer_cast<PluginInsert>(p)->update_id (id);
 			}
 
 			copies.push_back (p);
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index 28c9af7..0776feb 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -231,8 +231,9 @@ private:
 		void set_splitting(const bool splitting) { _splitting = splitting; }
 	private:
 		bool on_expose_event (GdkEventExpose *);
-		ARDOUR::ChanCount _sources; // signals available to feed into the processor(s)
-		ARDOUR::ChanCount _sinks;   // combined number of outputs of the processor
+		/* the wire icon sits on top of every processor if needed */
+		ARDOUR::ChanCount _sources; // signals available (valid outputs from prev. processor)
+		ARDOUR::ChanCount _sinks;   // actual inputs of this processor
 		bool _splitting;
 	};
 
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 951c3e9..63778df 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -40,6 +40,8 @@
 #include "pbd/statefuldestructible.h"
 
 #include "canvas/fwd.h"
+
+#include "gtkmm2ext/actions.h"
 #include "gtkmm2ext/visibility_tracker.h"
 
 #include "editing.h"
@@ -69,7 +71,7 @@ class AutomationTimeAxisView;
 class ControlPoint;
 class DragManager;
 class Editor;
-class Marker;
+class ArdourMarker;
 class MeterMarker;
 class MouseCursors;
 class PlaylistSelector;
@@ -344,7 +346,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
 	virtual bool canvas_region_view_name_event (GdkEvent* event, ArdourCanvas::Item*, RegionView*) = 0;
 	virtual bool canvas_feature_line_event (GdkEvent* event, ArdourCanvas::Item*, RegionView*) = 0;
 	virtual bool canvas_stream_view_event (GdkEvent* event, ArdourCanvas::Item*, RouteTimeAxisView*) = 0;
-	virtual bool canvas_marker_event (GdkEvent* event, ArdourCanvas::Item*, Marker*) = 0;
+	virtual bool canvas_marker_event (GdkEvent* event, ArdourCanvas::Item*, ArdourMarker*) = 0;
 	virtual bool canvas_videotl_bar_event (GdkEvent* event, ArdourCanvas::Item*) = 0;
 	virtual bool canvas_tempo_marker_event (GdkEvent* event, ArdourCanvas::Item*, TempoMarker*) = 0;
 	virtual bool canvas_meter_marker_event (GdkEvent* event, ArdourCanvas::Item*, MeterMarker*) = 0;
@@ -410,8 +412,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
 
 	virtual void get_pointer_position (double &, double &) const = 0;
 
-	virtual ARDOUR::Location* find_location_from_marker (Marker *, bool &) const = 0;
-	virtual Marker* find_marker_from_location_id (PBD::ID const &, bool) const = 0;
+	virtual ARDOUR::Location* find_location_from_marker (ArdourMarker *, bool &) const = 0;
+	virtual ArdourMarker* find_marker_from_location_id (PBD::ID const &, bool) const = 0;
 
 	virtual void snap_to_with_modifier (framepos_t &      first,
 	                                    GdkEvent const *  ev,
@@ -459,4 +461,19 @@ class DisplaySuspender {
 		}
 };
 
+class MainMenuDisabler {
+public:
+	MainMenuDisabler () {
+		/* The global menu bar continues to be accessible to applications
+		   with modal dialogs on mac, which means that we need to desensitize
+		   all items in the menu bar. 
+		*/
+		ActionManager::disable_active_actions ();
+	}
+	
+	~MainMenuDisabler () {
+		ActionManager::enable_active_actions ();
+	}
+};
+
 #endif // __gtk_ardour_public_editor_h__
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index e12789e..f0cac85 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -50,6 +50,7 @@
 #include "ardour_window.h"
 #include "ardour_dialog.h"
 #include "gui_thread.h"
+#include "meter_patterns.h"
 #include "midi_tracer.h"
 #include "rc_option_editor.h"
 #include "utils.h"
@@ -631,7 +632,7 @@ public:
 			}
 		}
 
-		l = manage (left_aligned_label (_("Resize overlaped regions using:")));
+		l = manage (left_aligned_label (_("Resize overlapped regions using:")));
 		l->set_name ("OptionsLabel");
 
 		t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
@@ -1038,13 +1039,34 @@ public:
                 , _playback_slider (_playback_adjustment)
 		, _capture_slider (_capture_adjustment)
 	{
+		vector<string> presets;
+
+		/* these must match the order of the enums for BufferingPreset */
+		
+		presets.push_back (_("Small sessions (4-16 tracks)"));
+		presets.push_back (_("Medium sessions (16-64 tracks)"));
+		presets.push_back (_("Large sessions (64+ tracks)"));
+		presets.push_back (_("Custom (set by sliders below)"));
+
+		set_popdown_strings (_buffering_presets_combo, presets);
+
+		Label* l = manage (new Label (_("Preset:")));
+		l->set_name ("OptionsLabel");
+		HBox* h = manage (new HBox);
+		h->set_spacing (12);
+		h->pack_start (*l, false, false);
+		h->pack_start (_buffering_presets_combo, true, true);
+		_box->pack_start (*h, false, false);
+
+		_buffering_presets_combo.signal_changed().connect (sigc::mem_fun (*this, &BufferingOptions::preset_changed));
+		
 		_playback_adjustment.set_value (_rc_config->get_audio_playback_buffer_seconds());
 
-		Label* l = manage (new Label (_("Playback (seconds of buffering):")));
+		l = manage (new Label (_("Playback (seconds of buffering):")));
 		l->set_name ("OptionsLabel");
 
 		_playback_slider.set_update_policy (UPDATE_DISCONTINUOUS);
-		HBox* h = manage (new HBox);
+		h = manage (new HBox);
 		h->set_spacing (4);
 		h->pack_start (*l, false, false);
 		h->pack_start (_playback_slider, true, true);
@@ -1070,6 +1092,31 @@ public:
 
 	void parameter_changed (string const & p)
 	{
+		if (p == "buffering-preset") {
+			switch (_rc_config->get_buffering_preset()) {
+			case Small:
+				_playback_slider.set_sensitive (false);
+				_capture_slider.set_sensitive (false);
+				_buffering_presets_combo.set_active (0);
+				break;
+			case Medium:
+				_playback_slider.set_sensitive (false);
+				_capture_slider.set_sensitive (false);
+				_buffering_presets_combo.set_active (1);
+				break;
+			case Large:
+				_playback_slider.set_sensitive (false);
+				_capture_slider.set_sensitive (false);
+				_buffering_presets_combo.set_active (2);
+				break;
+			case Custom:
+				_playback_slider.set_sensitive (true);
+				_capture_slider.set_sensitive (true);
+				_buffering_presets_combo.set_active (3);
+				break;
+			}
+		}
+
 		if (p == "playback-buffer-seconds") {
 			_playback_adjustment.set_value (_rc_config->get_audio_playback_buffer_seconds());
 		} else if (p == "capture-buffer-seconds") {
@@ -1079,12 +1126,38 @@ public:
 
 	void set_state_from_config ()
 	{
+		parameter_changed ("buffering-preset");
 		parameter_changed ("playback-buffer-seconds");
 		parameter_changed ("capture-buffer-seconds");
 	}
 
 private:
 
+	void preset_changed ()
+	{
+		int index = _buffering_presets_combo.get_active_row_number ();
+		if (index < 0) {
+			return;
+		}
+		switch (index) {
+		case 0:
+			_rc_config->set_buffering_preset (Small);
+			break;
+		case 1:
+			_rc_config->set_buffering_preset (Medium);
+			break;
+		case 2:
+			_rc_config->set_buffering_preset (Large);
+			break;
+		case 3:
+			_rc_config->set_buffering_preset (Custom);
+			break;
+		default:
+			error << string_compose (_("programming error: unknown buffering preset string, index = %1"), index) << endmsg;
+			break;
+		}
+	}
+	
 	void playback_changed ()
 	{
 		_rc_config->set_audio_playback_buffer_seconds ((long) _playback_adjustment.get_value());
@@ -1100,6 +1173,7 @@ private:
 	Adjustment _capture_adjustment;
 	HScale _playback_slider;
 	HScale _capture_slider;
+	ComboBoxText _buffering_presets_combo;
 };
 
 class ControlSurfacesOptions : public OptionEditorBox
@@ -1399,6 +1473,7 @@ public:
 		, _display_plugin_scan_progress (_("Always Display Plugin Scan Progress"))
 		, _discover_vst_on_start (_("Scan for [new] VST Plugins on Application Start"))
 		, _discover_au_on_start (_("Scan for AudioUnit Plugins on Application Start"))
+		, _verbose_plugin_scan (_("Verbose Plugin Scan"))
 		, _timeout_adjustment (0, 0, 3000, 50, 50)
 		, _timeout_slider (_timeout_adjustment)
 	{
@@ -1471,6 +1546,12 @@ public:
 		b = manage (new Button (_("Edit")));
 		b->signal_clicked().connect (sigc::mem_fun (*this, &PluginOptions::edit_vst_path_clicked));
 		t->attach (*b, 1, 2, n, n+1, FILL); ++n;
+
+		// currently verbose logging is only implemented for Windows VST.
+		t->attach (_verbose_plugin_scan, 0, 2, n, n+1); ++n;
+		_verbose_plugin_scan.signal_toggled().connect (sigc::mem_fun (*this, &PluginOptions::verbose_plugin_scan_toggled));
+		Gtkmm2ext::UI::instance()->set_tip (_verbose_plugin_scan,
+					    _("<b>When enabled</b> additional information for every plugin is added to the Log Window."));
 #endif
 #endif // any VST
 
@@ -1518,6 +1599,10 @@ public:
 			bool const x = _rc_config->get_discover_audio_units();
 			_discover_au_on_start.set_active (x);
 		}
+		else if (p == "verbose-plugin-scan") {
+			bool const x = _rc_config->get_verbose_plugin_scan();
+			_verbose_plugin_scan.set_active (x);
+		}
 	}
 
 	void set_state_from_config () {
@@ -1525,6 +1610,7 @@ public:
 		parameter_changed ("discover-vst-on-start");
 		parameter_changed ("vst-scan-timeout");
 		parameter_changed ("discover-audio-units");
+		parameter_changed ("verbose-plugin-scan");
 	}
 
 private:
@@ -1533,6 +1619,7 @@ private:
 	CheckButton _display_plugin_scan_progress;
 	CheckButton _discover_vst_on_start;
 	CheckButton _discover_au_on_start;
+	CheckButton _verbose_plugin_scan;
 	Adjustment _timeout_adjustment;
 	HScale _timeout_slider;
 
@@ -1551,6 +1638,11 @@ private:
 		_rc_config->set_discover_audio_units(x);
 	}
 
+	void verbose_plugin_scan_toggled () {
+		bool const x = _verbose_plugin_scan.get_active();
+		_rc_config->set_verbose_plugin_scan(x);
+	}
+
 	void timeout_changed () {
 		int x = floor(_timeout_adjustment.get_value());
 		_rc_config->set_vst_scan_timeout(x);
@@ -1784,6 +1876,8 @@ RCOptionEditor::RCOptionEditor ()
 
 	/* TRANSPORT */
 
+	add_option (_("Transport"), new OptionEditorHeading (S_("Transport Options")));
+
 	BoolOption* tsf;
 
 	tsf = new BoolOption (
@@ -2269,23 +2363,23 @@ RCOptionEditor::RCOptionEditor ()
 	int dmsize = 1;
 	dm->add (DenormalNone, _("no processor handling"));
 
-	FPU fpu;
+	FPU* fpu = FPU::instance();
 
-	if (fpu.has_flush_to_zero()) {
+	if (fpu->has_flush_to_zero()) {
 		++dmsize;
 		dm->add (DenormalFTZ, _("use FlushToZero"));
 	} else if (_rc_config->get_denormal_model() == DenormalFTZ) {
 		_rc_config->set_denormal_model(DenormalNone);
 	}
 
-	if (fpu.has_denormals_are_zero()) {
+	if (fpu->has_denormals_are_zero()) {
 		++dmsize;
 		dm->add (DenormalDAZ, _("use DenormalsAreZero"));
 	} else if (_rc_config->get_denormal_model() == DenormalDAZ) {
 		_rc_config->set_denormal_model(DenormalNone);
 	}
 
-	if (fpu.has_flush_to_zero() && fpu.has_denormals_are_zero()) {
+	if (fpu->has_flush_to_zero() && fpu->has_denormals_are_zero()) {
 		++dmsize;
 		dm->add (DenormalFTZDAZ, _("use FlushToZero and DenormalsAreZero"));
 	} else if (_rc_config->get_denormal_model() == DenormalFTZDAZ) {
@@ -2782,12 +2876,10 @@ RCOptionEditor::RCOptionEditor ()
 	mfo->add (METER_FALLOFF_OFF,      _("off"));
 	mfo->add (METER_FALLOFF_SLOWEST,  _("slowest [6.6dB/sec]"));
 	mfo->add (METER_FALLOFF_SLOW,     _("slow [8.6dB/sec] (BBC PPM, EBU PPM)"));
-	mfo->add (METER_FALLOFF_SLOWISH,  _("slowish [12.0dB/sec] (DIN)"));
-	mfo->add (METER_FALLOFF_MODERATE, _("moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"));
-	mfo->add (METER_FALLOFF_MEDIUM,   _("medium [20dB/sec]"));
-	mfo->add (METER_FALLOFF_FAST,     _("fast [32dB/sec]"));
-	mfo->add (METER_FALLOFF_FASTER,   _("faster [46dB/sec]"));
-	mfo->add (METER_FALLOFF_FASTEST,  _("fastest [70dB/sec]"));
+	mfo->add (METER_FALLOFF_SLOWISH,  _("moderate [12.0dB/sec] (DIN)"));
+	mfo->add (METER_FALLOFF_MODERATE, _("medium [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"));
+	mfo->add (METER_FALLOFF_MEDIUM,   _("fast [20dB/sec]"));
+	mfo->add (METER_FALLOFF_FAST,     _("very fast [32dB/sec]"));
 
 	add_option (S_("Preferences|Metering"), mfo);
 
@@ -2845,6 +2937,54 @@ RCOptionEditor::RCOptionEditor ()
 			sigc::mem_fun (*_ui_config, &UIConfiguration::set_meter_peak)
 			);
 
+
+	ComboOption<MeterType>* mtm = new ComboOption<MeterType> (
+		"meter-type-master",
+		_("Default Meter Type for Master Bus"),
+		sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_type_master),
+		sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_type_master)
+		);
+	mtm->add (MeterPeak,    ArdourMeter::meter_type_string(MeterPeak));
+	mtm->add (MeterK20,     ArdourMeter::meter_type_string(MeterK20));
+	mtm->add (MeterK14,     ArdourMeter::meter_type_string(MeterK14));
+	mtm->add (MeterK12,     ArdourMeter::meter_type_string(MeterK12));
+	mtm->add (MeterIEC1DIN, ArdourMeter::meter_type_string(MeterIEC1DIN));
+	mtm->add (MeterIEC1NOR, ArdourMeter::meter_type_string(MeterIEC1NOR));
+	mtm->add (MeterIEC2BBC, ArdourMeter::meter_type_string(MeterIEC2BBC));
+	mtm->add (MeterIEC2EBU, ArdourMeter::meter_type_string(MeterIEC2EBU));
+
+	add_option (S_("Preferences|Metering"), mtm);
+
+
+	ComboOption<MeterType>* mtb = new ComboOption<MeterType> (
+		"meter-type-bus",
+		_("Default Meter Type for Busses"),
+		sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_type_bus),
+		sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_type_bus)
+		);
+	mtb->add (MeterPeak,    ArdourMeter::meter_type_string(MeterPeak));
+	mtb->add (MeterK20,     ArdourMeter::meter_type_string(MeterK20));
+	mtb->add (MeterK14,     ArdourMeter::meter_type_string(MeterK14));
+	mtb->add (MeterK12,     ArdourMeter::meter_type_string(MeterK12));
+	mtb->add (MeterIEC1DIN, ArdourMeter::meter_type_string(MeterIEC1DIN));
+	mtb->add (MeterIEC1NOR, ArdourMeter::meter_type_string(MeterIEC1NOR));
+	mtb->add (MeterIEC2BBC, ArdourMeter::meter_type_string(MeterIEC2BBC));
+	mtb->add (MeterIEC2EBU, ArdourMeter::meter_type_string(MeterIEC2EBU));
+
+	add_option (S_("Preferences|Metering"), mtb);
+
+	ComboOption<MeterType>* mtt = new ComboOption<MeterType> (
+		"meter-type-track",
+		_("Default Meter Type for Tracks"),
+		sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_type_track),
+		sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_type_track)
+		);
+	mtt->add (MeterPeak,    ArdourMeter::meter_type_string(MeterPeak));
+	mtt->add (MeterPeak0dB, ArdourMeter::meter_type_string(MeterPeak0dB));
+
+	add_option (S_("Preferences|Metering"), mtt);
+
+
 	Gtkmm2ext::UI::instance()->set_tip
 		(mpks->tip_widget(),
 		 _("Specify the audio signal level in dbFS at and above which the meter-peak indicator will flash red."));
diff --git a/gtk2_ardour/region_editor.cc b/gtk2_ardour/region_editor.cc
index 16888fb..e41e012 100644
--- a/gtk2_ardour/region_editor.cc
+++ b/gtk2_ardour/region_editor.cc
@@ -270,33 +270,41 @@ RegionEditor::connect_editor_events ()
 void
 RegionEditor::position_clock_changed ()
 {
-	PublicEditor::instance().begin_reversible_command (_("change region start position"));
-
+	bool in_command = false;
 	boost::shared_ptr<Playlist> pl = _region->playlist();
 
 	if (pl) {
+		PublicEditor::instance().begin_reversible_command (_("change region start position"));
+		in_command = true;
+
 		_region->clear_changes ();
 		_region->set_position (position_clock.current_time());
 		_session->add_command(new StatefulDiffCommand (_region));
 	}
 
-	PublicEditor::instance().commit_reversible_command ();
+	if (in_command) {
+		PublicEditor::instance().commit_reversible_command ();
+	}
 }
 
 void
 RegionEditor::end_clock_changed ()
 {
-	PublicEditor::instance().begin_reversible_command (_("change region end position"));
-
+	bool in_command = false;
 	boost::shared_ptr<Playlist> pl = _region->playlist();
 
 	if (pl) {
+		PublicEditor::instance().begin_reversible_command (_("change region end position"));
+		in_command = true;
+
                 _region->clear_changes ();
 		_region->trim_end (end_clock.current_time());
 		_session->add_command(new StatefulDiffCommand (_region));
 	}
 
-	PublicEditor::instance().commit_reversible_command ();
+	if (in_command) {
+		PublicEditor::instance().commit_reversible_command ();
+	}
 
 	end_clock.set (_region->position() + _region->length() - 1, true);
 }
@@ -305,18 +313,21 @@ void
 RegionEditor::length_clock_changed ()
 {
 	framecnt_t frames = length_clock.current_time();
-
-	PublicEditor::instance().begin_reversible_command (_("change region length"));
-
+	bool in_command = false;
 	boost::shared_ptr<Playlist> pl = _region->playlist();
 
 	if (pl) {
-                _region->clear_changes ();
+		PublicEditor::instance().begin_reversible_command (_("change region length"));
+		in_command = true;
+
+		_region->clear_changes ();
 		_region->trim_end (_region->position() + frames - 1);
 		_session->add_command(new StatefulDiffCommand (_region));
 	}
 
-	PublicEditor::instance().commit_reversible_command ();
+	if (in_command) {
+		PublicEditor::instance().commit_reversible_command ();
+	}
 
 	length_clock.set (_region->length());
 }
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 7f112b9..94ed2a8 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -59,6 +59,7 @@
 
 #include "ardour_ui.h"
 #include "ardour_button.h"
+#include "audio_streamview.h"
 #include "debug.h"
 #include "global_signals.h"
 #include "route_time_axis.h"
@@ -1342,6 +1343,10 @@ RouteTimeAxisView::set_selected_points (PointSelection& points)
 	for (Children::iterator i = children.begin(); i != children.end(); ++i) {
 		(*i)->set_selected_points (points);
 	}
+	AudioStreamView* asv = dynamic_cast<AudioStreamView*>(_view);
+	if (asv) {
+		asv->set_selected_points (points);
+	}
 }
 
 void
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 854f6e0..8f99874 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -1425,9 +1425,14 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev)
 				/* disable isolate for all routes */
 				DisplaySuspender ds;
 				_session->set_solo_isolated (_session->get_routes(), false, Session::rt_cleanup, true);
+			} else {
+				/* enable isolate for all routes */
+				DisplaySuspender ds;
+				_session->set_solo_isolated (_session->get_routes(), true, Session::rt_cleanup, true);
 			}
 
 		} else {
+
 			if (model == view) {
 
 				/* flip just this route */
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index 0118c1c..784f646 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -61,8 +61,8 @@ Selection::Selection (const PublicEditor* e)
 	void (Selection::*track_remove)(TimeAxisView*) = &Selection::remove;
 	TimeAxisView::CatchDeletion.connect (*this, MISSING_INVALIDATOR, boost::bind (track_remove, this, _1), gui_context());
 
-	void (Selection::*marker_remove)(Marker*) = &Selection::remove;
-	Marker::CatchDeletion.connect (*this, MISSING_INVALIDATOR, boost::bind (marker_remove, this, _1), gui_context());
+	void (Selection::*marker_remove)(ArdourMarker*) = &Selection::remove;
+	ArdourMarker::CatchDeletion.connect (*this, MISSING_INVALIDATOR, boost::bind (marker_remove, this, _1), gui_context());
 
 	void (Selection::*point_remove)(ControlPoint*) = &Selection::remove;
 	ControlPoint::CatchDeletion.connect (*this, MISSING_INVALIDATOR, boost::bind (point_remove, this, _1), gui_context());
@@ -911,7 +911,7 @@ Selection::set (boost::shared_ptr<Evoral::ControlList> ac)
 }
 
 bool
-Selection::selected (Marker* m)
+Selection::selected (ArdourMarker* m)
 {
 	return find (markers.begin(), markers.end(), m) != markers.end();
 }
@@ -1126,7 +1126,7 @@ Selection::set (ControlPoint* cp)
 }
 
 void
-Selection::set (Marker* m)
+Selection::set (ArdourMarker* m)
 {
 	clear_time ();  //enforce region/object exclusivity
 	clear_tracks();  //enforce object/track exclusivity
@@ -1136,7 +1136,7 @@ Selection::set (Marker* m)
 }
 
 void
-Selection::toggle (Marker* m)
+Selection::toggle (ArdourMarker* m)
 {
 	MarkerSelection::iterator i;
 
@@ -1148,7 +1148,7 @@ Selection::toggle (Marker* m)
 }
 
 void
-Selection::remove (Marker* m)
+Selection::remove (ArdourMarker* m)
 {
 	MarkerSelection::iterator i;
 
@@ -1159,7 +1159,7 @@ Selection::remove (Marker* m)
 }
 
 void
-Selection::add (Marker* m)
+Selection::add (ArdourMarker* m)
 {
 	clear_time ();  //enforce region/object exclusivity
 	clear_tracks();  //enforce object/track exclusivity
@@ -1171,7 +1171,7 @@ Selection::add (Marker* m)
 }
 
 void
-Selection::add (const list<Marker*>& m)
+Selection::add (const list<ArdourMarker*>& m)
 {
 	clear_time ();  //enforce region/object exclusivity
 	clear_tracks();  //enforce object/track exclusivity
@@ -1486,7 +1486,7 @@ Selection::set_state (XMLNode const & node, int)
 			assert (prop_start);
 
 			PBD::ID id (prop_id->value ());
-			Marker* m = editor->find_marker_from_location_id (id, string_is_affirmative (prop_start->value ()));
+			ArdourMarker* m = editor->find_marker_from_location_id (id, string_is_affirmative (prop_start->value ()));
 			if (m) {
 				add (m);
 			}
diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h
index 7585c0a..c28b42a 100644
--- a/gtk2_ardour/selection.h
+++ b/gtk2_ardour/selection.h
@@ -113,7 +113,7 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
 
 	bool selected (TimeAxisView*);
 	bool selected (RegionView*);
-	bool selected (Marker*);
+	bool selected (ArdourMarker*);
 	bool selected (ControlPoint*);
 
 	void set (std::list<Selectable*> const &);
@@ -132,7 +132,7 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
 	void set (boost::shared_ptr<ARDOUR::Playlist>);
 	void set (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
 	void set (ControlPoint *);
-	void set (Marker*);
+	void set (ArdourMarker*);
 	void set (const RegionSelection&);
 
 	void toggle (TimeAxisView*);
@@ -148,7 +148,7 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
 	void toggle (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
 	void toggle (ControlPoint *);
 	void toggle (std::vector<ControlPoint*> const &);
-	void toggle (Marker*);
+	void toggle (ArdourMarker*);
 
 	void add (TimeAxisView*);
 	void add (const TrackViewList&);
@@ -163,8 +163,8 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
 	void add (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
 	void add (ControlPoint *);
 	void add (std::vector<ControlPoint*> const &);
-	void add (Marker*);
-	void add (const std::list<Marker*>&);
+	void add (ArdourMarker*);
+	void add (const std::list<ArdourMarker*>&);
 	void add (const RegionSelection&);
 	void add (const PointSelection&);
 	void remove (TimeAxisView*);
@@ -179,7 +179,7 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
 	void remove (boost::shared_ptr<ARDOUR::Playlist>);
 	void remove (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
 	void remove (const std::list<Selectable*>&);
-	void remove (Marker*);
+	void remove (ArdourMarker*);
 	void remove (ControlPoint *);
 
 	void remove_regions (TimeAxisView *);
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index 6996273..1ab1faa 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -29,7 +29,6 @@
 
 #include <unistd.h>
 #include <limits.h>
-#include <sys/stat.h>
 
 #include <gtkmm/box.h>
 #include <gtkmm/stock.h>
@@ -1255,8 +1254,8 @@ SoundFileBrowser::get_paths ()
 		vector<string>::iterator i;
 
 		for (i = filenames.begin(); i != filenames.end(); ++i) {
-			struct stat buf;
-			if ((!stat((*i).c_str(), &buf)) && S_ISREG(buf.st_mode)) {
+			GStatBuf buf;
+			if ((!g_stat((*i).c_str(), &buf)) && S_ISREG(buf.st_mode)) {
 				results.push_back (*i);
 			}
 		}
@@ -1590,7 +1589,7 @@ SoundFileOmega::check_link_status (const Session* s, const vector<string>& paths
 	std::string tmpdir(Glib::build_filename (s->session_directory().sound_path(), "linktest"));
 	bool ret = false;
 
-	if (mkdir (tmpdir.c_str(), 0744)) {
+	if (g_mkdir (tmpdir.c_str(), 0744)) {
 		if (errno != EEXIST) {
 			return false;
 		}
@@ -1614,7 +1613,7 @@ SoundFileOmega::check_link_status (const Session* s, const vector<string>& paths
 	ret = true;
 
   out:
-	rmdir (tmpdir.c_str());
+	g_rmdir (tmpdir.c_str());
 	return ret;
 #endif
 }
diff --git a/gtk2_ardour/shuttle_control.cc b/gtk2_ardour/shuttle_control.cc
index 440b62a..aeaf7d6 100644
--- a/gtk2_ardour/shuttle_control.cc
+++ b/gtk2_ardour/shuttle_control.cc
@@ -73,6 +73,15 @@ ShuttleControl::ShuttleControl ()
 	set_size_request (85, 20);
 	set_name (X_("ShuttleControl"));
 
+	shuttle_max_speed = Config->get_shuttle_max_speed();
+
+	if      (shuttle_max_speed >= 8.f) { shuttle_max_speed = 8.0f; }
+	else if (shuttle_max_speed >= 6.f) { shuttle_max_speed = 6.0f; }
+	else if (shuttle_max_speed >= 4.f) { shuttle_max_speed = 4.0f; }
+	else if (shuttle_max_speed >= 3.f) { shuttle_max_speed = 3.0f; }
+	else if (shuttle_max_speed >= 2.f) { shuttle_max_speed = 2.0f; }
+	else                               { shuttle_max_speed = 1.5f; }
+
 	Config->ParameterChanged.connect (parameter_connection, MISSING_INVALIDATOR, boost::bind (&ShuttleControl::parameter_changed, this, _1), gui_context());
 
 	/* gtkmm 2.4: the C++ wrapper doesn't work */
@@ -240,6 +249,7 @@ ShuttleControl::show_shuttle_context_menu ()
 void
 ShuttleControl::set_shuttle_max_speed (float speed)
 {
+	Config->set_shuttle_max_speed (speed);
 	shuttle_max_speed = speed;
 	last_speed_displayed = -99999999;
 }
diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc
index d4c8686..719e94f 100644
--- a/gtk2_ardour/startup.cc
+++ b/gtk2_ardour/startup.cc
@@ -37,11 +37,12 @@
 
 #include "ardour/audioengine.h"
 #include "ardour/filesystem_paths.h"
+#include "ardour/filename_extensions.h"
+#include "ardour/plugin_manager.h"
 #include "ardour/recent_sessions.h"
 #include "ardour/session.h"
 #include "ardour/session_state_utils.h"
 #include "ardour/template_utils.h"
-#include "ardour/filename_extensions.h"
 
 #include "ardour_ui.h"
 #include "startup.h"
@@ -343,13 +344,30 @@ void
 ArdourStartup::setup_final_page ()
 {
 	string msg = string_compose (_("%1 is ready for use"), PROGRAM_NAME);
-	
-	final_page.set_markup (string_compose ("<span weight=\"bold\" size=\"large\">%1</span>", msg));
-	final_page.show ();
-	final_page_index = append_page (final_page);
-	set_page_complete (final_page, true);
-	set_page_header_image (final_page, icon_pixbuf);
-	set_page_type (final_page, ASSISTANT_PAGE_CONFIRM);
+
+	plugin_disco_button.signal_clicked().connect (sigc::mem_fun(*this, &ArdourStartup::discover_plugins));
+	plugin_disco_button.set_label (_("Scan for Plugins"));
+	plugin_disco_button.show ();
+
+	Gtk::Label* final_label = manage (new Label);
+	final_label->set_markup (string_compose ("<span weight=\"bold\" size=\"large\">%1</span>", msg));
+	final_label->show ();
+
+	VBox* vbox = manage (new VBox);
+	vbox->pack_start (*final_label, true, true);
+	vbox->pack_start (plugin_disco_button, true, false);
+	vbox->show ();
+
+	final_page_index = append_page (*vbox);
+	set_page_complete (*vbox, true);
+	set_page_header_image (*vbox, icon_pixbuf);
+	set_page_type (*vbox, ASSISTANT_PAGE_CONFIRM);
+}
+
+void
+ArdourStartup::discover_plugins () {
+	plugin_disco_button.set_sensitive (false);
+	PluginManager::instance().refresh();
 }
 
 void
diff --git a/gtk2_ardour/startup.h b/gtk2_ardour/startup.h
index a93a29e..74e0aee 100644
--- a/gtk2_ardour/startup.h
+++ b/gtk2_ardour/startup.h
@@ -63,6 +63,7 @@ class ArdourStartup : public Gtk::Assistant {
 	void on_apply ();
 	void on_cancel ();
 	bool on_delete_event (GdkEventAny*);
+	void discover_plugins ();
 
 	static ArdourStartup *the_startup;
 
@@ -101,7 +102,7 @@ class ArdourStartup : public Gtk::Assistant {
 	/* final page */
 
 	void setup_final_page ();
-	Gtk::Label final_page;
+	Gtk::Button plugin_disco_button;
 
 	/* always there */
 
diff --git a/gtk2_ardour/step_editor.cc b/gtk2_ardour/step_editor.cc
index 63d7066..a1beefb 100644
--- a/gtk2_ardour/step_editor.cc
+++ b/gtk2_ardour/step_editor.cc
@@ -226,6 +226,9 @@ StepEditor::step_edit_sustain (Evoral::Beats beats)
 void
 StepEditor::move_step_edit_beat_pos (Evoral::Beats beats)
 {
+	if (!step_edit_region_view) {
+		return;
+	}
 	if (beats > 0.0) {
 		step_edit_beat_pos = min (step_edit_beat_pos + beats,
 		                          step_edit_region_view->region_frames_to_region_beats (step_edit_region->length()));
@@ -356,8 +359,10 @@ StepEditor::step_edit_toggle_chord ()
 {
 	if (_step_edit_within_chord) {
 		_step_edit_within_chord = false;
-		step_edit_beat_pos += _step_edit_chord_duration;
-		step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
+		if (step_edit_region_view) {
+			step_edit_beat_pos += _step_edit_chord_duration;
+			step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
+		}
 	} else {
 		_step_edit_triplet_countdown = 0;
 		_step_edit_within_chord = true;
@@ -375,7 +380,7 @@ StepEditor::step_edit_rest (Evoral::Beats beats)
 		success = true;
 	}
 
-	if (success) {
+	if (success && step_edit_region_view) {
 		step_edit_beat_pos += beats;
 		step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
 	}
@@ -385,7 +390,9 @@ void
 StepEditor::step_edit_beat_sync ()
 {
 	step_edit_beat_pos = step_edit_beat_pos.round_up_to_beat();
-	step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
+	if (step_edit_region_view) {
+		step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos);
+	}
 }
 
 void
diff --git a/gtk2_ardour/transcode_ffmpeg.cc b/gtk2_ardour/transcode_ffmpeg.cc
index 7ecdc36..efe4e44 100644
--- a/gtk2_ardour/transcode_ffmpeg.cc
+++ b/gtk2_ardour/transcode_ffmpeg.cc
@@ -172,8 +172,8 @@ TranscodeFfmpeg::probe ()
 					} else if (key == X_("time_base")) {
 						PARSE_FRACTIONAL_FPS(timebase)
 					} else if (key == X_("timecode") && m_duration == 0) {
-						int h,m,s; char f[7];
-						if (sscanf(i->at(16).c_str(), "%d:%d:%d:%s",&h,&m,&s,f) == 4) {
+						int h,m,s; char f[32];
+						if (sscanf(i->at(16).c_str(), "%d:%d:%d:%32s",&h,&m,&s,f) == 4) {
 							m_duration = (ARDOUR::framecnt_t) floor(m_fps * (
 									h * 3600.0
 								+ m * 60.0
@@ -298,7 +298,15 @@ TranscodeFfmpeg::format_metadata (std::string key, std::string value)
 
 	size_t len = key.length() + v1.length() + 4;
 	char *mds = (char*) calloc(len, sizeof(char));
+#ifdef PLATFORM_WINDOWS
+	/* SystemExec::make_wargs() adds quotes around the complete argument
+	 * windows uses CreateProcess() with a parameter string
+	 * (and not an array list of separate arguments)
+	 */
+	snprintf(mds, len, "%s=%s", key.c_str(), v1.c_str());
+#else
 	snprintf(mds, len, "%s=\"%s\"", key.c_str(), v1.c_str());
+#endif
 	return mds;
 }
 
diff --git a/gtk2_ardour/transcode_video_dialog.cc b/gtk2_ardour/transcode_video_dialog.cc
index 16bfc36..04c21b6 100644
--- a/gtk2_ardour/transcode_video_dialog.cc
+++ b/gtk2_ardour/transcode_video_dialog.cc
@@ -122,12 +122,15 @@ TranscodeVideoDialog::TranscodeVideoDialog (Session* s, std::string infile)
 		aspect_checkbox.set_sensitive(false);
 		bitrate_checkbox.set_sensitive(false);
 	} else {
-		ffok = true;
 		w = transcoder->get_width();
 		h = transcoder->get_height();
 		as = transcoder->get_audio();
 		m_aspect = transcoder->get_aspect();
 
+		if (w > 0 && h > 0 && transcoder->get_fps() > 0 && transcoder->get_duration() > 0) {
+			ffok = true;
+		}
+
 		Table* t = manage (new Table (4, 2));
 		t->set_spacings (4);
 		options_box->pack_start (*t, true, true, 4);
@@ -178,17 +181,40 @@ TranscodeVideoDialog::TranscodeVideoDialog (Session* s, std::string infile)
 	options_box->pack_start (*l, false, true, 4);
 
 	video_combo.set_name ("PaddedButton");
-	video_combo.append_text(_("Reference From Current Location (Previously Transcoded Files Only)"));
-	if (ffok)  {
+
+	if (ffok) {
+		video_combo.append_text(_("Reference From Current Location (Previously Transcoded Files Only)"));
 		video_combo.append_text(_("Import/Transcode Video to Session"));
 		video_combo.set_active(1);
+		if (as.size() > 0) {
+			video_combo.append_text(_("Do Not Import Video (Audio Import Only)"));
+			audio_combo.set_sensitive(true);
+		} else {
+			audio_combo.set_sensitive(false);
+		}
+		video_combo.set_sensitive(true);
+		transcode_button.set_sensitive(true);
+		path_entry.set_sensitive (true);
+		browse_button.set_sensitive (true);
+	} else if (as.size() > 0) {
+		video_combo.append_text(_("Do Not Import Video (Audio Import Only)"));
+		video_combo.set_active(0);
+		path_entry.set_text ("");
+
+		video_combo.set_sensitive(false);
+		audio_combo.set_sensitive(true);
+		transcode_button.set_sensitive(true);
+		path_entry.set_sensitive (false);
+		browse_button.set_sensitive (false);
 	} else {
+		video_combo.append_text(_("Do Not Import Video"));
 		video_combo.set_active(0);
+		path_entry.set_text ("");
 		video_combo.set_sensitive(false);
 		audio_combo.set_sensitive(false);
-	}
-	if (as.size() > 0) {
-		video_combo.append_text(_("Do Not Import Video (Audio Import Only)"));
+		transcode_button.set_sensitive(false);
+		path_entry.set_sensitive (false);
+		browse_button.set_sensitive (false);
 	}
 
 	options_box->pack_start (video_combo, false, false, 4);
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index c903e59..fcfdbe6 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -921,3 +921,40 @@ ARDOUR_UI_UTILS::rate_as_string (float r)
 	}
 	return buf;
 }
+
+bool
+ARDOUR_UI_UTILS::windows_overlap (Gtk::Window *a, Gtk::Window *b)
+{
+
+	if (!a || !b) {
+		return false;
+	}
+	if (a->get_screen() == b->get_screen()) {
+		gint ex, ey, ew, eh;
+		gint mx, my, mw, mh;
+
+		a->get_position (ex, ey);
+		a->get_size (ew, eh);
+		b->get_position (mx, my);
+		b->get_size (mw, mh);
+
+		GdkRectangle e;
+		GdkRectangle m;
+		GdkRectangle r;
+
+		e.x = ex;
+		e.y = ey;
+		e.width = ew;
+		e.height = eh;
+
+		m.x = mx;
+		m.y = my;
+		m.width = mw;
+		m.height = mh;
+
+		if (gdk_rectangle_intersect (&e, &m, &r)) {
+			return true;
+		}
+	}
+	return false;
+}
diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h
index fe8a0f5..df97da6 100644
--- a/gtk2_ardour/utils.h
+++ b/gtk2_ardour/utils.h
@@ -94,5 +94,7 @@ Gdk::Color unique_random_color (std::list<Gdk::Color> &);
 
 std::string rate_as_string (float r);
 
+bool windows_overlap (Gtk::Window *a, Gtk::Window *b);
+
 } // namespace
 #endif /* __ardour_gtk_utils_h__ */
diff --git a/gtk2_ardour/utils_videotl.cc b/gtk2_ardour/utils_videotl.cc
index cdc27ae..51cbe1a 100644
--- a/gtk2_ardour/utils_videotl.cc
+++ b/gtk2_ardour/utils_videotl.cc
@@ -118,7 +118,7 @@ VideoUtils::video_get_server_url (ARDOUR::RCConfiguration* config)
 	if (config->get_video_advanced_setup()) {
 		return config->get_video_server_url();
 	}
-	return X_("http://localhost:1554");
+	return X_("http://127.0.0.1:1554");
 }
 
 
diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript
index 60d99a6..d579d5b 100644
--- a/gtk2_ardour/wscript
+++ b/gtk2_ardour/wscript
@@ -61,6 +61,7 @@ gtk2_ardour_sources = [
         'editor.cc',
         'editor_actions.cc',
         'editor_audio_import.cc',
+        'editor_pt_import.cc',
         'editor_audiotrack.cc',
         'editor_canvas.cc',
         'editor_canvas_events.cc',
@@ -200,7 +201,7 @@ gtk2_ardour_sources = [
         'route_time_axis.cc',
         'route_ui.cc',
         'ruler_dialog.cc',
-	'save_as_dialog.cc',
+        'save_as_dialog.cc',
         'search_path_option.cc',
         'selection.cc',
         'selection_memento.cc',
@@ -269,6 +270,12 @@ def enoify (major, minor):
             return "\\n\\\"Taking Tiger Mountain\\\""
         elif minor == 3:
             return "\\n\\\"Lady June's Linguistic Leprosy\\\""
+        elif minor == 4:
+            return "\\n\\\"Discreet Music\\\""
+        elif minor == 5:
+            return "\\n\\\"Another Green World\\\""
+        elif minor == 6:
+            return "\\n\\\"Evening Star\\\""
     return "\\\"\\\""
 
 def options(opt):
@@ -397,6 +404,7 @@ def build(bld):
                              'libgtk2_ardour',
                              'libgtkmm2ext',
                              'libcanvas',
+                             'libptformat',
                              ]
         obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
         obj.includes  = [ '../libs/fst', '.' ]
@@ -412,6 +420,7 @@ def build(bld):
         obj.includes  = [ '../libs/fst', '.' ]
         obj.name      = 'libgtk2_ardour'
         obj.target    = 'gtk2_ardour'
+
     else:
         # just the normal executable version of the GTK GUI
         if bld.env['build_target'] == 'mingw':
@@ -437,6 +446,7 @@ def build(bld):
                      'libmidipp',
                      'libgtkmm2ext',
                      'libcanvas',
+                     'libptformat',
                      ]
 
     obj.defines = [
@@ -463,6 +473,8 @@ def build(bld):
 
     obj.includes += ['../libs']
 
+    obj.use += 'libptformat'
+
     if bld.env['build_target'] == 'mingw':
         obj.linkflags = ['-mwindows']
 
@@ -505,7 +517,7 @@ def build(bld):
             'DATADIR'        : os.path.normpath(bld.env['DATADIR']),
             'CONFDIR'        : os.path.normpath(bld.env['CONFDIR']),
             'LIBS'           : 'build/libs',
-            'VERSION'        : bld.env['VERSION'],
+            'VERSION'        : str (bld.env['VERSION']),
             'EXECUTABLE'     : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
     }
 
@@ -633,6 +645,9 @@ def build(bld):
     else:
         menus_argv = [ '-E', '-P' ]
 
+    if bld.is_defined('PTFORMAT'):
+        menus_argv += [ '-DPTFORMAT' ]
+
     # always build all versions of the menu definitions
     # so that we can try them out with different program builds.
     for program in [ 'ardour', 'trx' ]:
@@ -641,7 +656,7 @@ def build(bld):
         obj.command_is_external = True
         obj.no_inputs = True
         obj.argv = menus_argv
-        obj.dep_vars = ['GTKOSX', 'WINDOWS']
+        obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
         obj.stdin = program + '.menus.in'
         obj.stdout = program + '.menus'
         bld.install_files (bld.env['CONFDIR'], program + '.menus')
@@ -692,21 +707,21 @@ def build(bld):
                             mo)
 
 def i18n(bld):
-	I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
-	autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
-	                   'Paul Davis')
-	
+        I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
+        autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
+                           'Paul Davis')
+        
 def i18n_pot(bld):
-	I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
-	autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
-	                       'Paul Davis')
+        I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
+        autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
+                               'Paul Davis')
 
 def i18n_po(bld):
-	I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
-	autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
-	                      'Paul Davis')
-	
+        I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
+        autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
+                              'Paul Davis')
+        
 def i18n_mo(bld):
-	I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
-	autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
-	                      'Paul Davis')
+        I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
+        autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
+                              'Paul Davis')
diff --git a/libs/ardour/MSVClibardour/ardour.vcproj b/libs/ardour/MSVClibardour/ardour.vcproj
index 25b6d76..697bc9d 100644
--- a/libs/ardour/MSVClibardour/ardour.vcproj
+++ b/libs/ardour/MSVClibardour/ardour.vcproj
@@ -1164,6 +1164,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\sha1.c"
+				>
+			</File>
+			<File
 				RelativePath="..\slave.cc"
 				>
 			</File>
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h
index 8ce99c4..ba8e244 100644
--- a/libs/ardour/ardour/audio_backend.h
+++ b/libs/ardour/ardour/audio_backend.h
@@ -191,6 +191,20 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
      */
     virtual std::vector<float> available_sample_rates (const std::string& device) const = 0;
 
+    /* backends that support separate input and output devices should
+     * implement this function and return an intersection (not union) of available
+     * sample rates valid for the given input + output device combination.
+     */
+    virtual std::vector<float> available_sample_rates2 (const std::string& input_device, const std::string& output_device) const {
+	    std::vector<float> input_sizes  = available_sample_rates (input_device);
+	    std::vector<float> output_sizes = available_sample_rates (output_device);
+	    std::vector<float> rv;
+	    std::set_union (input_sizes.begin (), input_sizes.end (),
+			    output_sizes.begin (), output_sizes.end (),
+			    std::back_inserter (rv));
+	    return rv;
+    }
+
     /* Returns the default sample rate that will be shown to the user when
      * configuration options are first presented. If the derived class
      * needs or wants to override this, it can. It also MUST override this
@@ -210,6 +224,19 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
      */
     virtual std::vector<uint32_t> available_buffer_sizes (const std::string& device) const = 0;
 
+    /* backends that support separate input and output devices should
+     * implement this function and return an intersection (not union) of available
+     * buffer sizes valid for the given input + output device combination.
+     */
+    virtual std::vector<uint32_t> available_buffer_sizes2 (const std::string& input_device, const std::string& output_device) const {
+	    std::vector<uint32_t> input_rates  = available_buffer_sizes (input_device);
+	    std::vector<uint32_t> output_rates = available_buffer_sizes (output_device);
+	    std::vector<uint32_t> rv;
+	    std::set_union (input_rates.begin (), input_rates.end (),
+			    output_rates.begin (), output_rates.end (),
+			    std::back_inserter (rv));
+	    return rv;
+    }
     /* Returns the default buffer size that will be shown to the user when
      * configuration options are first presented. If the derived class
      * needs or wants to override this, it can. It also MUST override this
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h
index f48204d..33126b5 100644
--- a/libs/ardour/ardour/audio_diskstream.h
+++ b/libs/ardour/ardour/audio_diskstream.h
@@ -209,9 +209,8 @@ class LIBARDOUR_API AudioDiskstream : public Diskstream
 
 	/* The two central butler operations */
 	int do_flush (RunContext context, bool force = false);
-	int do_refill () { return _do_refill(_mixdown_buffer, _gain_buffer); }
+	int do_refill () { return _do_refill(_mixdown_buffer, _gain_buffer, 0); }
 
-	int do_refill_with_alloc ();
 
 	int read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer,
 	          framepos_t& start, framecnt_t cnt,
@@ -250,7 +249,6 @@ class LIBARDOUR_API AudioDiskstream : public Diskstream
 	static void allocate_working_buffers();
 	static void free_working_buffers();
 
-	static size_t  _working_buffers_size;
 	static Sample* _mixdown_buffer;
 	static gain_t* _gain_buffer;
 
@@ -258,9 +256,12 @@ class LIBARDOUR_API AudioDiskstream : public Diskstream
 
 	SerializedRCUManager<ChannelList> channels;
 
+  protected:
+	int _do_refill_with_alloc (bool one_chunk_only);
+
  /* really */
   private:
-	int _do_refill (Sample *mixdown_buffer, float *gain_buffer);
+	int _do_refill (Sample *mixdown_buffer, float *gain_buffer, framecnt_t fill_level);
 
 	int add_channel_to (boost::shared_ptr<ChannelList>, uint32_t how_many);
 	int remove_channel_from (boost::shared_ptr<ChannelList>, uint32_t how_many);
diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h
index 13b1682..8fcdcf7 100644
--- a/libs/ardour/ardour/audio_unit.h
+++ b/libs/ardour/ardour/audio_unit.h
@@ -241,7 +241,7 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo {
 
 	bool reconfigurable_io() const { return true; }
 
-	static PluginInfoList* discover ();
+	static PluginInfoList* discover (bool scan_only);
 	static bool au_get_crashlog (std::string &msg);
 	static void get_names (CAComponentDescription&, std::string& name, std::string& maker);
 	static std::string stringify_descriptor (const CAComponentDescription&);
@@ -252,6 +252,7 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo {
 	boost::shared_ptr<CAComponentDescription> descriptor;
 	UInt32 version;
 	static FILE * _crashlog_fd;
+	static bool _scan_only;
 
 	static void au_start_crashlog (void);
 	static void au_remove_crashlog (void);
@@ -267,7 +268,7 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo {
 	typedef std::map<std::string,AUPluginCachedInfo> CachedInfoMap;
 	static CachedInfoMap cached_info;
 
-	static bool cached_io_configuration (const std::string&, UInt32, CAComponent&, AUPluginCachedInfo&, const std::string& name);
+	static int cached_io_configuration (const std::string&, UInt32, CAComponent&, AUPluginCachedInfo&, const std::string& name);
 	static void add_cached_info (const std::string&, AUPluginCachedInfo&);
 	static void save_cached_info ();
 };
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index 330de4e..d1e3f8a 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -209,6 +209,9 @@ class LIBARDOUR_API AudioEngine : public SessionHandlePtr, public PortManager
 	void latency_callback (bool for_playback);
 	void halted_callback (const char* reason);
 
+	/* checks if current thread is properly set up for audio processing */
+	static bool thread_initialised_for_audio_processing ();
+
 	/* sets up the process callback thread */
 	static void thread_init_callback (void *);
 
diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h
index 8e510b3..086544f 100644
--- a/libs/ardour/ardour/audioregion.h
+++ b/libs/ardour/ardour/audioregion.h
@@ -73,7 +73,11 @@ class LIBARDOUR_API AudioRegion : public Region
 	bool speed_mismatch (float) const;
 
 	boost::shared_ptr<AudioSource> audio_source (uint32_t n=0) const;
-
+    
+    // if several audio files associated with a region,
+    // information about file with MAX channel count will be provided
+    uint32_t get_related_audio_file_channel_count () const;
+    
 	void   set_scale_amplitude (gain_t);
 	gain_t scale_amplitude() const { return _scale_amplitude; }
 
diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h
index 095d9d2..c02310e 100644
--- a/libs/ardour/ardour/audiosource.h
+++ b/libs/ardour/ardour/audiosource.h
@@ -109,8 +109,6 @@ class LIBARDOUR_API AudioSource : virtual public Source,
 	static bool _build_missing_peakfiles;
 	static bool _build_peakfiles;
 
-	static size_t _working_buffers_size;
-
 	/* these collections of working buffers for supporting
 	   playlist's reading from potentially nested/recursive
 	   sources assume SINGLE THREADED reads by the butler
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index 24a9e0d..5d73e4a 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -101,6 +101,7 @@ protected:
 	ARDOUR::Session& _session;
 
 	const ParameterDescriptor _desc;
+	XMLNode* _before; //used for undo of touch start/stop pairs.
 };
 
 
diff --git a/libs/ardour/ardour/butler.h b/libs/ardour/ardour/butler.h
index 94b6fb8..7f08474 100644
--- a/libs/ardour/ardour/butler.h
+++ b/libs/ardour/ardour/butler.h
@@ -61,6 +61,8 @@ class LIBARDOUR_API Butler : public SessionHandleRef
 	bool transport_work_requested() const;
 	void drop_references ();
 
+        void map_parameters ();
+
 	framecnt_t audio_diskstream_capture_buffer_size() const { return audio_dstream_capture_buffer_size; }
 	framecnt_t audio_diskstream_playback_buffer_size() const { return audio_dstream_playback_buffer_size; }
 	uint32_t midi_diskstream_buffer_size()  const { return midi_dstream_buffer_size; }
diff --git a/libs/ardour/ardour/chan_count.h b/libs/ardour/ardour/chan_count.h
index 9f9fd07..b613f67 100644
--- a/libs/ardour/ardour/chan_count.h
+++ b/libs/ardour/ardour/chan_count.h
@@ -154,7 +154,7 @@ private:
 
 } // namespace ARDOUR
 
-std::ostream& operator<<(std::ostream& o, const ARDOUR::ChanCount& c);
+LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::ChanCount& c);
 
 #endif // __ardour_chan_count_h__
 
diff --git a/libs/ardour/ardour/coreaudiosource.h b/libs/ardour/ardour/coreaudiosource.h
index 5e8e696..44016b4 100644
--- a/libs/ardour/ardour/coreaudiosource.h
+++ b/libs/ardour/ardour/coreaudiosource.h
@@ -39,6 +39,8 @@ class LIBARDOUR_API CoreAudioSource : public AudioFileSource {
 	float sample_rate() const;
 	int update_header (framepos_t when, struct tm&, time_t);
 
+    uint32_t channel_count () const { return n_channels; }
+    
 	int flush_header () {return 0;};
 	void set_header_timeline_position () {};
 	bool clamped_at_unity () const { return false; }
diff --git a/libs/ardour/ardour/debug.h b/libs/ardour/ardour/debug.h
index 1c19d85..94974a1 100644
--- a/libs/ardour/ardour/debug.h
+++ b/libs/ardour/ardour/debug.h
@@ -69,6 +69,7 @@ namespace PBD {
 		LIBARDOUR_API extern DebugBits AudioEngine;
 		LIBARDOUR_API extern DebugBits Soundcloud;
 		LIBARDOUR_API extern DebugBits Butler;
+		LIBARDOUR_API extern DebugBits GenericMidi;
 	}
 }
 
diff --git a/libs/ardour/ardour/directory_names.h b/libs/ardour/ardour/directory_names.h
index db3fc1d..5c0eae9 100644
--- a/libs/ardour/ardour/directory_names.h
+++ b/libs/ardour/ardour/directory_names.h
@@ -42,6 +42,10 @@ namespace ARDOUR {
 	LIBARDOUR_API extern const char* const ladspa_dir_name;
 	LIBARDOUR_API extern const char* const panner_dir_name;
 	LIBARDOUR_API extern const char* const backend_dir_name;
+	LIBARDOUR_API extern const char* const automation_dir_name;
+	LIBARDOUR_API extern const char* const analysis_dir_name;
+	LIBARDOUR_API extern const char* const plugins_dir_name;
+	LIBARDOUR_API extern const char* const externals_dir_name;
 
 };
 
diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h
index fc41d10..fb9be65 100644
--- a/libs/ardour/ardour/diskstream.h
+++ b/libs/ardour/ardour/diskstream.h
@@ -103,8 +103,8 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
 	framecnt_t roll_delay() const { return _roll_delay; }
 	void       set_roll_delay (framecnt_t);
 
-	bool         record_enabled() const { return g_atomic_int_get (&_record_enabled); }
-	bool         record_safe () const { return g_atomic_int_get (&_record_safe); }
+	bool         record_enabled() const { return g_atomic_int_get (const_cast<gint*>(&_record_enabled)); }
+	bool         record_safe () const { return g_atomic_int_get (const_cast<gint*>(&_record_safe)); }
 	virtual void set_record_enabled (bool yn) = 0;
 	virtual void set_record_safe (bool yn) = 0;
 
@@ -147,6 +147,8 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
 	static framecnt_t default_disk_read_chunk_frames ();
 	static framecnt_t default_disk_write_chunk_frames ();
 
+	static void set_buffering_parameters (BufferingPreset bp);
+
 	/* Stateful */
 	virtual XMLNode& get_state(void);
 	virtual int      set_state(const XMLNode&, int version);
@@ -169,8 +171,15 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
 	void move_processor_automation (boost::weak_ptr<Processor>,
 			std::list<Evoral::RangeMove<framepos_t> > const &);
 
-	/** For non-butler contexts (allocates temporary working buffers) */
-	virtual int do_refill_with_alloc() = 0;
+	/** For non-butler contexts (allocates temporary working buffers)
+	 *
+	 * This accessible method has a default argument; derived classes
+	 * must inherit the virtual method that we call which does NOT
+	 * have a default argument, to avoid complications with inheritance
+	 */
+	int do_refill_with_alloc(bool partial_fill = true) {
+		return _do_refill_with_alloc (partial_fill);
+	}
 	virtual void set_block_size (pframes_t) = 0;
 
 	bool pending_overwrite () const {
@@ -203,6 +212,11 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
 	virtual int  can_internal_playback_seek (framecnt_t distance) = 0;
 	virtual void reset_write_sources (bool, bool force = false) = 0;
 	virtual void non_realtime_input_change () = 0;
+	/* accessible method has default argument, so use standard C++ "trick"
+	   to avoid complications with inheritance, by adding this virtual
+	   method which does NOT have a default argument.
+	*/
+	virtual int _do_refill_with_alloc (bool partial_fill) = 0;
 
   protected:
 	friend class Auditioner;
@@ -345,6 +359,12 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
 	XMLNode* deprecated_io_node;
 
 	void route_going_away ();
+
+	static bool get_buffering_presets (BufferingPreset bp,
+	                                   framecnt_t& read_chunk_size,
+	                                   framecnt_t& read_buffer_size,
+	                                   framecnt_t& write_chunk_size,
+	                                   framecnt_t& write_buffer_size);
 };
 
 }; /* namespace ARDOUR */
diff --git a/libs/ardour/ardour/engine_state_controller.h b/libs/ardour/ardour/engine_state_controller.h
new file mode 100644
index 0000000..737fb3b
--- /dev/null
+++ b/libs/ardour/ardour/engine_state_controller.h
@@ -0,0 +1,653 @@
+/*
+  Copyright (C) 2014 Waves Audio Ltd.
+ 
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+ 
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ 
+*/
+
+#ifndef __gtk2_ardour__engine_state_controller__
+#define __gtk2_ardour__engine_state_controller__
+
+#include <vector>
+#include <list>
+
+#include "ardour/types.h"
+#include "ardour/audio_backend.h"
+
+namespace ARDOUR {
+
+class AudioBackendInfo;
+    
+/**
+ * @class EngineStateController
+ * @brief EngineStateController class.
+ *
+ * Implements usecases for Audio devices and Audio/Midi ports.
+ * Persistantly saves to the config device configuration settings and audio/midi port states
+ */
+class EngineStateController
+{
+                                        public:
+    
+	// public data types:
+    
+	/** 
+	 * @struct PortState
+	 * Structure which represents AudioPort state
+	 */
+	struct PortState {
+		std::string name; ///< Audio Port name
+		bool active;      ///< Audio Port state
+        
+		PortState ()
+			: name("")
+			, active(false)
+		{
+		}
+        
+		PortState (const std::string& name)
+			: name(name)
+			, active(false)
+		{
+		}
+        
+		bool operator==(const PortState& rhs) {return rhs.name == name; }
+        
+	};
+    
+	/// @typedef Type for the list of all available audio ports
+	typedef std::list<PortState> PortStateList;
+
+	/**
+	 * @struct MidiPortState
+	 * Structure which represents MidiPort state.
+	 */
+	struct MidiPortState
+	{
+		std::string name;     ///< Midi Port name
+		bool active;          ///< Midi Port state
+		bool available;       ///< Midi Port availability - if it is physicaly available or not
+		bool scene_connected; ///< Is midi port used for scene MIDI marker in/out
+		bool mtc_in;          ///< Is midi port used as MTC in
+        
+		MidiPortState(const std::string& name)
+			: name(name)
+			, active(false)
+			, available(false)
+			, scene_connected(false)
+			, mtc_in(false)
+		{}
+        
+		bool operator==(const MidiPortState& rhs)
+		{
+			return name == rhs.name;
+		}
+	};
+    
+	/// @typedef Type for the list of MidiPorts ever registered in the system
+	typedef std::list<MidiPortState> MidiPortStateList;
+    
+
+	//Interfaces
+    
+	/** Get an instance of EngineStateController singleton.
+	 * @return EngineStateController instance pointer
+	 */
+	static EngineStateController* instance ();
+    
+	/** Associate session with EngineStateController instance.
+	 */
+	void set_session (Session* session);
+    
+	/** Remove link to the associated session.
+	 */
+	void remove_session ();
+    
+	//////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// General backend/device information methods
+    
+	/** Provides names of all available backends.
+	 *
+	 * @param[out] available_backends - vector of available backends
+	 */
+	void available_backends (std::vector<const AudioBackendInfo*>& available_backends);
+    
+	/** Provides the name of currently used backend.
+	 *
+	 * @return the name of currently used backend
+	 */
+	const std::string& get_current_backend_name() const;
+    
+	/** Provides the name of currently used device.
+	 *
+	 * @return the name of currently used device
+	 */
+	const std::string& get_current_device_name () const;
+    
+	/** Provides names for all available devices.
+	 *
+	 * @param[out] device_vector - vector of available devices
+	 */
+	void enumerate_devices (std::vector<ARDOUR::AudioBackend::DeviceStatus>& device_vector) const;
+    
+	/** Get sample rate used by current device.
+	 *
+	 * @return current sample rate
+	 */
+	ARDOUR::framecnt_t get_current_sample_rate () const;
+    
+	/** Get default sample rate for current backend.
+	 *
+	 * @return default sample rate for current backend
+	 */
+	ARDOUR::framecnt_t get_default_sample_rate () const;
+    
+	/** Get sample rates which are supported by current device and current backend.
+	 *
+	 * @param[out] sample_rates - vector of supported sample rates
+	 */
+	void available_sample_rates_for_current_device (std::vector<float>& sample_rates) const;
+    
+	/** Get buffer size used by current device.
+	 *
+	 * @return current buffer size
+	 */
+	ARDOUR::pframes_t get_current_buffer_size () const;
+    
+	/** Get default buffer size for current backend.
+	 *
+	 * @return default buffer size for current backend
+	 */
+	ARDOUR::pframes_t get_default_buffer_size () const;
+    
+	/** Get buffer sizes which are supported by current device and current backend.
+	 *
+	 * @param[out] buffer_sizes - vector of supported buffer_sizes
+	 */
+	void available_buffer_sizes_for_current_device (std::vector<ARDOUR::pframes_t>& buffer_sizes) const;
+
+	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// device state control methods
+    
+	/** Get the number of all enabled Audio inputs.
+	 *
+	 * @return number of all enabled Audio inputs
+	 */
+	uint32_t            get_available_inputs_count() const;
+	/** Get the number of all enabled Audio outputs.
+	 *
+	 * @return number of all enabled Audio outputs
+	 */
+	uint32_t            get_available_outputs_count () const;
+    
+	/** Get vector of all enabled physical Audio input port names.
+	 *
+	 * @param[out] port_names - vector of all enabled Audio input names
+	 */
+	void                get_physical_audio_inputs (std::vector<std::string>& port_names);
+	/** Get vector of all enabled physical Audio input port names.
+	 *
+	 * @param[out] port_names - vector of all enabled Audio input names
+	 */
+	void                get_physical_audio_outputs (std::vector<std::string>& port_names);
+    
+	/** Get vector of all enabled physical MIDI input port names.
+	 *
+	 * @param[out] port_names - vector of all enabled MIDI input names
+	 */
+	void                get_physical_midi_inputs (std::vector<std::string>& port_names);
+	/** Get vector of all enabled physical MIDI output port names.
+	 *
+	 * @param[out] port_names - vector of all enabled MIDI output names
+	 */
+	void                get_physical_midi_outputs (std::vector<std::string>& port_names);
+    
+	/** Sets new state to all Audio inputs.
+	 *
+	 * @param[in] state - new state
+	 */
+	void                set_state_to_all_inputs(bool state);
+	/** Sets new state to all Audio outputs.
+	 * @note Does nothing in Stereo Out mode
+	 * @param[in] state - new state
+	 */
+	void                set_state_to_all_outputs(bool state);
+    
+	/** Get vector of states for all physical Audio input ports.
+	 *
+	 * @param[out] channel_states - vector of input port states
+	 */
+	void                get_physical_audio_input_states(std::vector<PortState>& channel_states);
+	/** Get vector of states for all physical Audio output ports.
+	 *
+	 * @param[out] channel_states - vector of output port states
+	 */
+	void                get_physical_audio_output_states(std::vector<PortState>& channel_states);
+    
+	/** Set state of the specified Audio input port.
+	 *
+	 * @param[in] port_name - input name
+	 * @param[in] state - new state
+	 */
+	void                set_physical_audio_input_state(const std::string& port_name, bool state);
+	/** Set state of the specified Audio output port.
+	 *
+	 * @param[in] port_name - output name
+	 * @param[in] state - new state
+	 */
+	void                set_physical_audio_output_state(const std::string& port_name, bool state);
+    
+	/** Get state of the specified Audio input port.
+	 *
+	 * @param[in] port_name - input name
+	 * @return input state
+	 */
+	bool                get_physical_audio_input_state(const std::string& port_name);
+	/** Get state of the specified Audi output port.
+	 *
+	 * @param[in] port_name - output name
+	 * @return output state
+	 */
+	bool                get_physical_audio_output_state(const std::string& port_name);
+    
+
+	/** Get vector of all enabled MIDI input port names.
+	 *
+	 * @param[out] channel_states - vector of enabled inputs
+	 */
+	void                get_physical_midi_input_states (std::vector<MidiPortState>& channel_states);
+	/** Get vector of all enabled MIDI output port names.
+	 *
+	 * @param[out] channel_states - vector of enabled outputs
+	 */
+	void                get_physical_midi_output_states (std::vector<MidiPortState>& channel_states);
+
+	/** Get name of mtc source port
+	 *
+	 * return name of mtc source port
+	 */
+	std::string          get_mtc_source_port ();
+
+	/** Set ltc source port
+	 *
+	 * @param[in] port - name of ltc source port
+	 */
+	void                set_ltc_source_port (const std::string& port);
+	/** Get name of ltc source port
+	 *
+	 * return name of ltc source port
+	 */
+	std::string          get_ltc_source_port ();
+    
+	/** Set ltc output port
+	 *
+	 * @param[in] port - name of ltc output port
+	 */
+	void                set_ltc_output_port (const std::string&);
+	/** Get name of ltc output port
+	 *
+	 * return name of ltc output port
+	 */
+	std::string         get_ltc_output_port ();
+    
+	/** Set state of the specified MIDI input port.
+	 *
+	 * @param[in] port_name - input name
+	 * @param[in] state - new state
+	 */
+	void                set_physical_midi_input_state(const std::string& port_name, bool state);
+	/** Set state of the specified MIDI output port.
+	 *
+	 * @param[in] port_name - output name
+	 * @param[in] state - new state
+	 */
+	void                set_physical_midi_output_state(const std::string& port_name, bool state);
+	/** Get state of the specified MIDI input port.
+	 *
+	 * @param[in] port_name - input name
+	 * @param[out] scene_connected - is port used as Scene In or not
+	 * @return input state
+	 */
+	bool                get_physical_midi_input_state(const std::string& port_name, bool& scene_connected);
+	/** Get state of the specified MIDI output port.
+	 *
+	 * @param[in] port_name - output name
+	 * @param[out] scene_connected - is port used as Scene Out or not
+	 * @return output state
+	 */
+	bool                get_physical_midi_output_state(const std::string& port_name, bool& scene_connected);
+    
+	/** Set state of Scene In connection for the specified MIDI input port.
+	 *
+	 * @param[in] port_name - input name
+	 * @param[in] state - new state
+	 */
+	void                set_physical_midi_scene_in_connection_state(const std::string& port_name, bool state);
+	/** Set state of Scene Out connection for the specified MIDI output port.
+	 *
+	 * @param[in] port_name - input name
+	 * @param[in] state - new state
+	 */
+	void                set_physical_midi_scenen_out_connection_state(const std::string&, bool);
+    
+	/** Disocnnect all MIDI input ports from Scene In.
+	 */
+	void                set_all_midi_scene_inputs_disconnected();
+	/** Disocnnect all MIDI output ports from Scene Out.
+	 */
+	void                set_all_midi_scene_outputs_disconnected();
+    
+	/** Set MIDI TimeCode input port
+	 * @note There is a sense to choose MIDI TimeCode input only because
+	 * our MIDI TimeCode is propagated to all midi output ports.
+	 */
+	void                set_mtc_source_port (const std::string&);
+    
+	/** Check if AudioEngine setup is required
+	 * @return true if setup is required, otherwise - false
+	 */
+	bool                is_setup_required() const {return ARDOUR::AudioEngine::instance()->setup_required (); }
+    
+	////////////////////////////////////////////////////////////////////////////////////////////////////
+	// Methods set parameters inside the controller
+	// the state of engine won't change untill we make a "push" of this state to the backend
+	// NOTE: Use push_state_to_backend() method to update backend with the most recent controller state
+    
+	/** Set new sample rate for current device in EngineStateController database
+	 * @note Use push_state_to_backend() method to update backend/device state with the most recent controller state
+	 * @param sample_rate - new sample rate
+	 */
+	bool        set_new_sample_rate_in_controller(framecnt_t sample_rate);
+	/** Set new buffer size for current device in EngineStateController database
+	 * @note Use push_state_to_backend() method to update backend/device state with the most recent controller state
+	 * @param buffer_size - new buffer size
+	 */
+	bool        set_new_buffer_size_in_controller(pframes_t buffer_size);
+    
+	/** @brief push current controller state to backend.
+	 * Propagate and set all current EngineStateController parameters to the backend
+	 * @note Engine will be restarted if it's running when this method is called.
+	 * @note If an attempt ot set parameters is unsuccessful current device will be switched to "None".
+	 * @param start - start the Engine if it was not running when this function was called.
+	 * @return true on success, otherwise - false
+	 */
+	bool        push_current_state_to_backend(bool start);
+	/** Switch to new backend
+	 * @note The change will be propagated emmidiatelly as if push_current_state_to_backend () was called.
+	 * @param backend_name - new backend name.
+	 * @return true on success, otherwise - false
+	 */
+	bool        set_new_backend_as_current(const std::string& backend_name);
+	/** Switch to new device
+	 * @note The change will be propagated emmidiatelly as if push_current_state_to_backend () was called.
+	 * @param device_name - new device name.
+	 * @return true on success, otherwise - false
+	 */
+	bool        set_new_device_as_current(const std::string& device_name);
+
+    
+	////////////////////////////////////////////////////////////////////////////////////////////////////
+	// Methods to save/serialize setting states
+
+	/** Serialize Audio/Midi settings (entire EngineStateController database) to XML
+	 * @return XML note with serialized states
+	 */
+	XMLNode&    serialize_audio_midi_settings();
+	/** Save Audio/Midi settings (entire EngineStateController database) to config persistently
+	 */
+	void        save_audio_midi_settings();
+    
+	////////////////////////////////////////////////////////////////////////////////////////////////////
+	//UPDATE SIGNALS
+	/** This signal is emitted if the sample rate changes */
+	PBD::Signal0<void> SampleRateChanged;
+	/** This signal is emitted if the buffer size changes */
+	PBD::Signal0<void> BufferSizeChanged;
+	/** This signal is emitted if the device list changes */
+	PBD::Signal1<void, bool> DeviceListChanged;
+	/** This signal is emitted if the device cannot operate properly */
+	PBD::Signal0<void> DeviceError;
+
+	////////////////////////////////////////////////////////////////////////////////////////////////////
+	//ENGINE STATE SIGNALS
+	/** This signal is emitted when the engine is started */
+	PBD::Signal0<void> EngineRunning;
+	/** This signal is emitted when the engine is stopped */
+	PBD::Signal0<void> EngineStopped;
+	/** This signal is emitted if Engine processing is terminated */
+	PBD::Signal0<void> EngineHalted;
+    
+	/** This signal is emitted if the AUDIO input channel configuration changes */
+	PBD::Signal0<void> InputConfigChanged;
+	/** This signal is emitted if the AUDIO output channel configuration changes */
+	PBD::Signal0<void> OutputConfigChanged;
+	/** This signal is emitted if the AUDIO output connection mode changes
+	 * @note By output connection mode "Stereo Out" or "Multi Out" is meant
+	 */
+	PBD::Signal0<void> OutputConnectionModeChanged;
+    
+	/** This signals is emitted if the MIDI input channel configuration changes */
+	PBD::Signal0<void> MIDIInputConfigChanged;
+	/** This signals is emitted if the MIDI output channel configuration changes */
+	PBD::Signal0<void> MIDIOutputConfigChanged;
+	/** This signals is emitted if the MIDI Scene In connection changes */
+	PBD::Signal2<void, const std::vector<std::string>&, bool> MIDISceneInputConnectionChanged;
+	/** This signals is emitted if the MIDI Scene Out connection changes */
+	PBD::Signal2<void, const std::vector<std::string>&, bool> MIDISceneOutputConnectionChanged;
+    
+	/** This signal is emitted if the MTC Input channel is changed */
+	PBD::Signal1<void, const std::string&> MTCInputChanged;
+    
+	/** This signal is emitted if new Audio/MIDI ports are registered or unregistered */
+	PBD::Signal0<void> PortRegistrationChanged;
+    
+                                        private:
+
+	EngineStateController(); /// singleton
+	~EngineStateController(); /// singleton
+	EngineStateController(const EngineStateController& ); /// prohibited
+	EngineStateController& operator=(const EngineStateController&); /// prohibited
+    
+	////////////////////////////////////////////////////////////////////////////////////////////
+	// private data structures
+    
+	/** @struct Engine state
+	 * @brief State structure.
+	 * Contains information about single device/backend state
+	 */
+	struct State {
+		std::string backend_name; ///< state backend name
+		std::string device_name; ///< state device name
+		ARDOUR::framecnt_t sample_rate; ///< sample rate used by the device in this state
+		ARDOUR::pframes_t buffer_size; ///< buffer size used by the device in this state
+		
+		PortStateList input_channel_states; ///< states of device Audio inputs
+		PortStateList multi_out_channel_states; ///< states of device Audio inputs in Multi Out mode
+		PortStateList stereo_out_channel_states; ///< states of device Audio inputs in Stereo Out mode
+		bool active; ///< was this state the most recent active one
+        
+		State()
+			: sample_rate(0)
+			, buffer_size(0)
+			, input_channel_states (0)
+			, multi_out_channel_states (0)
+			, stereo_out_channel_states (0)
+			, active (false)
+		{
+		}
+        
+		bool operator==(const State& rhs)
+		{
+			return (backend_name == rhs.backend_name) && (device_name == rhs.device_name);
+		}
+        
+		/** Forms string name for the state
+		 * @return name string
+		 */
+		std::string form_state_name() {
+			return std::string("State:" + backend_name + ":" + device_name);
+		}
+        
+		/** @struct StatepPredicate
+		 * This predicate is used to identify a state during search in the list of states
+		 */
+		struct StatePredicate
+		{
+			StatePredicate(const std::string& backend_name, const std::string& device_name)
+				: _backend_name (backend_name)
+				, _device_name (device_name)
+			{}
+            
+			bool operator()(boost::shared_ptr<ARDOUR::EngineStateController::State> rhs)
+			{
+				return (_backend_name == rhs->backend_name) && (_device_name == rhs->device_name);
+			}
+            
+		                                        private:
+			std::string _backend_name;
+			std::string _device_name;
+		};
+	};
+    
+	/// @typedef Type for the state pointer
+	typedef boost::shared_ptr<State> StatePtr;
+	/// @typedef Type for the list of states
+	typedef std::list<StatePtr> StateList;
+    
+	////////////////////////////////////////////////////////////////////////////////////////////////////
+	// methods to manage setting states
+    
+	/** Deserializes and loads Engine and Audio port states from the config to EngineStateController
+	 */
+	void _deserialize_and_load_engine_states();
+	/** Deserializes and loads MIDI port states from the config to EngineStateController
+	 */
+	void _deserialize_and_load_midi_port_states();
+	/** Serializes Engine and Audio port states from EngineStateController to XML node
+	 * @param[in,out] audio_midi_settings_node - node to serialize the satets to
+	 */
+	void _serialize_engine_states(XMLNode* audio_midi_settings_node);
+	/** Serializes MIDI port states from EngineStateController to XML node
+	 * @param[in,out] audio_midi_settings_node - node to serialize the satets to
+	 */
+	void _serialize_midi_port_states(XMLNode* audio_midi_settings_node);
+    
+	/** Provides initial state configuration.
+	 * It loades the last active state if there is one and it is aplicable.
+	 * Otherwise default state (None device with default sample rate and buffer size) is loaded.
+	 */
+	void _do_initial_engine_setup();
+    
+	/** Loades provided state.
+	 * @note It's possible that provided state can't be loaded
+	 * (device disconnected or reqested parameters are not supported anymore).
+	 * @param state - state to apply
+	 * @return true on success, otherwise - false
+	 */
+	bool _apply_state(const StatePtr& state);
+    
+	/** Gets available device channels from engine and updates internal controller state
+	 */
+	void _update_device_channels_state();
+    
+	/** Check "Stereo Out" mode channels state configuration and make it correspond Stereo Out mode requirements
+	 */
+	void _refresh_stereo_out_channel_states();
+    
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// internal helper functions
+	/** make sure that current device parameters are supported and fit session requirements
+	 * @return true if current state is valid and all parameters are supported, otherwise - false
+	 */
+	bool _validate_current_device_state();
+
+	/** change ltc source port in case of the input ports list change
+	 */
+	void _update_ltc_source_port ();
+	/** change ltc source port in case of the output ports list change
+	 */
+	void _update_ltc_output_port ();
+    
+	/** check that port is still existed in the list of input ports
+	    @param[in] port - port name
+	    @return true if current port is existed, otherwise - false
+	*/
+	bool _audio_input_port_exists (const std::string& port);
+	/** check that port is still existed in the list of output ports
+	    @param[in] port - port name
+	    @return true if current port is existed, otherwise - false
+	*/
+	bool _audio_output_port_exists (const std::string& port);
+
+
+
+	////////////////////////////////////////
+	// callbacks
+	/** Invoked when Engine starts running
+	 */
+	void _on_engine_running();
+	/** Invoked when Engine is halted
+	 */
+	void _on_engine_halted();
+	/** Invoked when Engine processing is terminated
+	 */
+	void _on_engine_stopped();
+	/** Invoked when Device error accured, it failed to start or didn't accept the change which should
+	 */
+	void _on_device_error();
+	/** Invoked when current device changes sample rate
+	 */
+	void _on_sample_rate_change(ARDOUR::framecnt_t);
+	/** Invoked when current device changes buffer size
+	 */
+	void _on_buffer_size_change(ARDOUR::pframes_t);
+	/** Invoked when the list of available devices is changed
+	 */
+	void _on_device_list_change();
+	/** Invoked when the config parameter is changed
+	 */
+	void _on_parameter_changed (const std::string&);
+	/** Invoked when Audio/MIDI ports are registered or unregistered
+	 */
+	void _on_ports_registration_update ();
+	/** Invoked when session loading process is complete
+	 */
+	void _on_session_loaded();
+	////////////////////////////////////////
+        
+	////////////////////////////////////////
+	// attributes
+	StatePtr _current_state; ///< current state pointer
+	// list of system states
+	StateList _states; ///< list of all available states
+    
+	MidiPortStateList _midi_inputs; ///< midi input states
+	MidiPortStateList _midi_outputs; ///< midi output states
+    
+	std::string _last_used_real_device; ///< last active non-default (real) device
+    
+	Session* _session; ///< current session
+
+	// Engine connections stuff
+	PBD::ScopedConnectionList update_connections; ///< connection container for update signals
+	PBD::ScopedConnectionList session_connections; ///< connection container for session signals
+	PBD::ScopedConnection running_connection; ///< connection container for EngineRunning signal
+	PBD::ScopedConnection halt_connection; ///< connection container for EngineHalted signal
+	PBD::ScopedConnection stopped_connection; ///< connection container for EngineStopped signal
+};
+
+} // namespace ARDOUR
+    
+#endif /* defined(__gtk2_ardour__engine_state_controller__) */
diff --git a/libs/ardour/ardour/export_format_base.h b/libs/ardour/ardour/export_format_base.h
index aa2ef69..093913e 100644
--- a/libs/ardour/ardour/export_format_base.h
+++ b/libs/ardour/ardour/export_format_base.h
@@ -102,6 +102,7 @@ class LIBARDOUR_API ExportFormatBase {
 		SR_48 = 48000,
 		SR_88_2 = 88200,
 		SR_96 = 96000,
+		SR_176_4 = 176400,
 		SR_192 = 192000
 	};
 
diff --git a/libs/ardour/ardour/export_format_specification.h b/libs/ardour/ardour/export_format_specification.h
index ed6e259..87a7729 100644
--- a/libs/ardour/ardour/export_format_specification.h
+++ b/libs/ardour/ardour/export_format_specification.h
@@ -114,11 +114,42 @@ class LIBARDOUR_API ExportFormatSpecification : public ExportFormatBase {
 	std::string format_name () const { return _format_name; }
 
 	Type type () const { return _type; }
-	FormatId format_id () const { return *format_ids.begin(); }
-	Endianness endianness () const { return *endiannesses.begin(); }
-	SampleFormat sample_format () const { return *sample_formats.begin(); }
-	SampleRate sample_rate () const { return *sample_rates.begin(); }
-	Quality quality () const { return *qualities.begin(); }
+	
+	FormatId format_id () const {
+		if (!format_ids.empty() )
+			return *format_ids.begin();
+		else
+			return FormatId(0);
+	}
+	
+	Endianness endianness () const {
+		if (!endiannesses.empty() )
+			return *endiannesses.begin();
+		else
+			return Endianness(0);
+	}
+	
+	SampleFormat sample_format () const {
+		if (!sample_formats.empty() )
+			return *sample_formats.begin();
+		else
+			return SampleFormat(0);
+	}
+	
+	SampleRate sample_rate () const {
+		if (!sample_rates.empty() )
+			return *sample_rates.begin();
+		else
+			return SampleRate(0);
+		
+	}
+	
+	Quality quality () const {
+		if (!qualities.empty() )
+			return *qualities.begin();
+		else
+			return Quality(0);
+	}
 
 	DitherType dither_type () const { return _dither_type; }
 	SRCQuality src_quality () const { return _src_quality; }
diff --git a/libs/ardour/ardour/export_graph_builder.h b/libs/ardour/ardour/export_graph_builder.h
index 40960b2..5dc6cd7 100644
--- a/libs/ardour/ardour/export_graph_builder.h
+++ b/libs/ardour/ardour/export_graph_builder.h
@@ -68,22 +68,25 @@ class LIBARDOUR_API ExportGraphBuilder
 	unsigned get_normalize_cycle_count() const;
 
 	void reset ();
+	void cleanup (bool remove_out_files = false);
 	void set_current_timespan (boost::shared_ptr<ExportTimespan> span);
 	void add_config (FileSpec const & config);
 
   private:
 
 	void add_split_config (FileSpec const & config);
-
+    
 	class Encoder {
-	  public:
+            public:
 		template <typename T> boost::shared_ptr<AudioGrapher::Sink<T> > init (FileSpec const & new_config);
 		void add_child (FileSpec const & new_config);
+		void remove_children ();
+		void destroy_writer (bool delete_out_file);
 		bool operator== (FileSpec const & other_config) const;
 
 		static int get_real_format (FileSpec const & config);
 
-	  private:
+	                                        private:
 		typedef boost::shared_ptr<AudioGrapher::SndfileWriter<Sample> > FloatWriterPtr;
 		typedef boost::shared_ptr<AudioGrapher::SndfileWriter<int> >    IntWriterPtr;
 		typedef boost::shared_ptr<AudioGrapher::SndfileWriter<short> >  ShortWriterPtr;
@@ -95,6 +98,8 @@ class LIBARDOUR_API ExportGraphBuilder
 		std::list<ExportFilenamePtr> filenames;
 		PBD::ScopedConnection  copy_files_connection;
 
+		std::string writer_filename;
+        
 		// Only one of these should be available at a time
 		FloatWriterPtr float_writer;
 		IntWriterPtr   int_writer;
@@ -103,14 +108,15 @@ class LIBARDOUR_API ExportGraphBuilder
 
 	// sample format converter
 	class SFC {
-	  public:
+            public:
 		// This constructor so that this can be constructed like a Normalizer
 		SFC (ExportGraphBuilder &, FileSpec const & new_config, framecnt_t max_frames);
 		FloatSinkPtr sink ();
 		void add_child (FileSpec const & new_config);
+		void remove_children (bool remove_out_files);
 		bool operator== (FileSpec const & other_config) const;
 
-	  private:
+	                                        private:
 		typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<Sample> > FloatConverterPtr;
 		typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<int> >   IntConverterPtr;
 		typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<short> > ShortConverterPtr;
@@ -126,10 +132,11 @@ class LIBARDOUR_API ExportGraphBuilder
 	};
 
 	class Normalizer {
-	  public:
+	                                        public:
 		Normalizer (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames);
 		FloatSinkPtr sink ();
 		void add_child (FileSpec const & new_config);
+		void remove_children (bool remove_out_files);
 		bool operator== (FileSpec const & other_config) const;
 
 		unsigned get_normalize_cycle_count() const;
@@ -137,7 +144,7 @@ class LIBARDOUR_API ExportGraphBuilder
 		/// Returns true when finished
 		bool process ();
 
-	  private:
+	                                        private:
 		typedef boost::shared_ptr<AudioGrapher::PeakReader> PeakReaderPtr;
 		typedef boost::shared_ptr<AudioGrapher::Normalizer> NormalizerPtr;
 		typedef boost::shared_ptr<AudioGrapher::TmpFile<Sample> > TmpFilePtr;
@@ -163,13 +170,15 @@ class LIBARDOUR_API ExportGraphBuilder
 
 	// sample rate converter
 	class SRC {
-	  public:
+            public:
 		SRC (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames);
 		FloatSinkPtr sink ();
 		void add_child (FileSpec const & new_config);
+		void remove_children (bool remove_out_files);
+        
 		bool operator== (FileSpec const & other_config) const;
 
-	  private:
+	                                        private:
 		typedef boost::shared_ptr<AudioGrapher::SampleRateConverter> SRConverterPtr;
 
 		template<typename T>
@@ -185,13 +194,14 @@ class LIBARDOUR_API ExportGraphBuilder
 
 	// Silence trimmer + adder
 	class SilenceHandler {
-	  public:
+	    public:
 		SilenceHandler (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames);
 		FloatSinkPtr sink ();
 		void add_child (FileSpec const & new_config);
+		void remove_children (bool remove_out_files);
 		bool operator== (FileSpec const & other_config) const;
 
-	  private:
+	                                        private:
 		typedef boost::shared_ptr<AudioGrapher::SilenceTrimmer<Sample> > SilenceTrimmerPtr;
 
 		ExportGraphBuilder & parent;
@@ -203,12 +213,13 @@ class LIBARDOUR_API ExportGraphBuilder
 
 	// channel configuration
 	class ChannelConfig {
-	  public:
+	    public:
 		ChannelConfig (ExportGraphBuilder & parent, FileSpec const & new_config, ChannelMap & channel_map);
 		void add_child (FileSpec const & new_config);
+		void remove_children (bool remove_out_files);
 		bool operator== (FileSpec const & other_config) const;
 
-	  private:
+	                                        private:
 		typedef boost::shared_ptr<AudioGrapher::Interleaver<Sample> > InterleaverPtr;
 		typedef boost::shared_ptr<AudioGrapher::Chunker<Sample> > ChunkerPtr;
 
diff --git a/libs/ardour/ardour/filter.h b/libs/ardour/ardour/filter.h
index 2b6476c..e80d1fc 100644
--- a/libs/ardour/ardour/filter.h
+++ b/libs/ardour/ardour/filter.h
@@ -43,7 +43,7 @@ class LIBARDOUR_API Filter {
   protected:
 	Filter (ARDOUR::Session& s) : session(s) {}
 
-	int make_new_sources (boost::shared_ptr<ARDOUR::Region>, ARDOUR::SourceList&, std::string suffix = "");
+	int make_new_sources (boost::shared_ptr<ARDOUR::Region>, ARDOUR::SourceList&, std::string suffix = "", bool use_session_sample_rate = true);
 	int finish (boost::shared_ptr<ARDOUR::Region>, ARDOUR::SourceList&, std::string region_name = "");
 
 	ARDOUR::Session& session;
diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h
index f809dbf..6b1f89d 100644
--- a/libs/ardour/ardour/location.h
+++ b/libs/ardour/ardour/location.h
@@ -62,7 +62,7 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest
 	Location (Session &, const XMLNode&);
 	Location* operator= (const Location& other);
     
-        bool operator==(const Location& other);
+	bool operator==(const Location& other);
 
 	bool locked() const { return _locked; }
 	void lock ();
@@ -86,8 +86,8 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest
 	void set_hidden (bool yn, void *src);
 	void set_cd (bool yn, void *src);
 	void set_is_range_marker (bool yn, void* src);
-        void set_skip (bool yn);
-        void set_skipping (bool yn);
+	void set_skip (bool yn);
+	void set_skipping (bool yn);
 
 	bool is_auto_punch () const { return _flags & IsAutoPunch; }
 	bool is_auto_loop () const { return _flags & IsAutoLoop; }
@@ -105,28 +105,29 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest
 	boost::shared_ptr<SceneChange> scene_change() const { return _scene_change; }
 	void set_scene_change (boost::shared_ptr<SceneChange>);
 
-        /* these are static signals for objects that want to listen to all
-           locations at once.
-        */
+	/* these are static signals for objects that want to listen to all
+	   locations at once.
+	*/
 
 	static PBD::Signal1<void,Location*> name_changed;
 	static PBD::Signal1<void,Location*> end_changed;
 	static PBD::Signal1<void,Location*> start_changed;
 	static PBD::Signal1<void,Location*> flags_changed;
-        static PBD::Signal1<void,Location*> lock_changed;
+	static PBD::Signal1<void,Location*> lock_changed;
 	static PBD::Signal1<void,Location*> position_lock_style_changed;
 
 	/* this is sent only when both start and end change at the same time */
 	static PBD::Signal1<void,Location*> changed;
 
-        /* these are member signals for objects that care only about
-           changes to this object 
-        */
+	/* these are member signals for objects that care only about
+	   changes to this object 
+	*/
 
+	PBD::Signal0<void> Changed;
+    
 	PBD::Signal0<void> NameChanged;
 	PBD::Signal0<void> EndChanged;
 	PBD::Signal0<void> StartChanged;
-	PBD::Signal0<void> Changed;
 	PBD::Signal0<void> FlagsChanged;
 	PBD::Signal0<void> LockChanged;
 	PBD::Signal0<void> PositionLockStyleChanged;
@@ -143,8 +144,9 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest
 	void set_position_lock_style (PositionLockStyle ps);
 	void recompute_frames_from_bbt ();
 
-	static PBD::Signal0<void> scene_changed;
-
+	static PBD::Signal0<void> scene_changed; /* for use by backend scene change management, class level */
+        PBD::Signal0<void> SceneChangeChanged;   /* for use by objects interested in this object */
+        
   private:
 	std::string        _name;
 	framepos_t         _start;
@@ -155,7 +157,7 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest
 	bool               _locked;
 	PositionLockStyle  _position_lock_style;
 	boost::shared_ptr<SceneChange> _scene_change;
-
+    
 	void set_mark (bool yn);
 	bool set_flag_internal (bool yn, Flags flag);
 	void recompute_bbt_from_frames ();
@@ -193,32 +195,32 @@ class LIBARDOUR_API Locations : public SessionHandleRef, public PBD::StatefulDes
 
 	Location* mark_at (framepos_t, framecnt_t slop = 0) const;
 
-        framepos_t first_mark_before (framepos_t, bool include_special_ranges = false);
+	framepos_t first_mark_before (framepos_t, bool include_special_ranges = false);
 	framepos_t first_mark_after (framepos_t, bool include_special_ranges = false);
 
 	void marks_either_side (framepos_t const, framepos_t &, framepos_t &) const;
 
 	void find_all_between (framepos_t start, framepos_t, LocationList&, Location::Flags);
-
+    
 	PBD::Signal1<void,Location*> current_changed;
 
-        /* Objects that care about individual addition and removal of Locations should connect to added/removed.
-           If an object additionally cares about potential mass clearance of Locations, they should connect to changed.
-        */
+	/* Objects that care about individual addition and removal of Locations should connect to added/removed.
+	   If an object additionally cares about potential mass clearance of Locations, they should connect to changed.
+	*/
 
 	PBD::Signal1<void,Location*> added;
 	PBD::Signal1<void,Location*> removed;
 	PBD::Signal0<void> changed; /* emitted when any action that could have added/removed more than 1 location actually removed 1 or more */
 
 	template<class T> void apply (T& obj, void (T::*method)(const LocationList&)) const {
-                /* We don't want to hold the lock while the given method runs, so take a copy
-                   of the list and pass that instead.
-                */
-                Locations::LocationList copy;
-                {
-                        Glib::Threads::Mutex::Lock lm (lock);
-                        copy = locations;
-                }
+		/* We don't want to hold the lock while the given method runs, so take a copy
+		   of the list and pass that instead.
+		*/
+		Locations::LocationList copy;
+		{
+			Glib::Threads::Mutex::Lock lm (lock);
+			copy = locations;
+		}
 		(obj.*method)(copy);
 	}
 
diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h
index 21b7fde..0a83ffe 100644
--- a/libs/ardour/ardour/lv2_plugin.h
+++ b/libs/ardour/ardour/lv2_plugin.h
@@ -240,7 +240,6 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
 	LV2_Feature    _def_state_feature;
 
 	// Options passed to plugin
-	int32_t _block_length;
 	int32_t _seq_size;
 
 	mutable unsigned _state_version;
diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h
index 6610708..dac262e 100644
--- a/libs/ardour/ardour/midi_diskstream.h
+++ b/libs/ardour/ardour/midi_diskstream.h
@@ -128,10 +128,10 @@ class LIBARDOUR_API MidiDiskstream : public Diskstream
   protected:
 	friend class MidiTrack;
 	friend class Auditioner;
-	int seek (framepos_t which_sample, bool complete_refill = false);
 
+	int seek (framepos_t which_sample, bool complete_refill = false);
+	int _do_refill_with_alloc (bool one_chunk_only);
 	int process (BufferSet&, framepos_t transport_frame, pframes_t nframes, framecnt_t &, bool need_diskstream);
-
 	frameoffset_t calculate_playback_distance (pframes_t nframes);
 	bool commit (framecnt_t nframes);
 
@@ -143,8 +143,6 @@ class LIBARDOUR_API MidiDiskstream : public Diskstream
 	int do_flush (RunContext context, bool force = false);
 	int do_refill ();
 
-	int do_refill_with_alloc();
-
 	int read (framepos_t& start, framecnt_t cnt, bool reversed);
 
 	void finish_capture ();
diff --git a/libs/ardour/ardour/midiport_manager.h b/libs/ardour/ardour/midiport_manager.h
index 5e87238..4d6453b 100644
--- a/libs/ardour/ardour/midiport_manager.h
+++ b/libs/ardour/ardour/midiport_manager.h
@@ -60,6 +60,9 @@ class LIBARDOUR_API MidiPortManager {
     MIDI::Port* scene_input_port () const { return _scene_input_port; }
     MIDI::Port* scene_output_port () const { return _scene_output_port; }
     
+    boost::shared_ptr<MidiPort> mmc_in() const { return boost::dynamic_pointer_cast<MidiPort>(_mmc_in); }
+    boost::shared_ptr<MidiPort> mmc_out() const { return boost::dynamic_pointer_cast<MidiPort>(_mmc_out); }
+
     boost::shared_ptr<MidiPort> scene_in() const { return boost::dynamic_pointer_cast<MidiPort>(_scene_in); }
     boost::shared_ptr<MidiPort> scene_out() const { return boost::dynamic_pointer_cast<MidiPort>(_scene_out); }
 
diff --git a/libs/ardour/ardour/mix.h b/libs/ardour/ardour/mix.h
index 3cd9a3e..4676c01 100644
--- a/libs/ardour/ardour/mix.h
+++ b/libs/ardour/ardour/mix.h
@@ -27,13 +27,23 @@
 
 extern "C" {
 /* SSE functions */
-	LIBARDOUR_API float x86_sse_compute_peak         (const ARDOUR::Sample * buf, ARDOUR::pframes_t nsamples, float current);
-	LIBARDOUR_API void  x86_sse_apply_gain_to_buffer (ARDOUR::Sample * buf, ARDOUR::pframes_t nframes, float gain);
-	LIBARDOUR_API void  x86_sse_mix_buffers_with_gain(ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes, float gain);
-	LIBARDOUR_API void  x86_sse_mix_buffers_no_gain  (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes);
+	LIBARDOUR_API float x86_sse_compute_peak         (const float * buf, uint32_t nsamples, float current);
+	LIBARDOUR_API void  x86_sse_apply_gain_to_buffer (float * buf, uint32_t nframes, float gain);
+	LIBARDOUR_API void  x86_sse_mix_buffers_with_gain(float * dst, const float * src, uint32_t nframes, float gain);
+	LIBARDOUR_API void  x86_sse_mix_buffers_no_gain  (float * dst, const float * src, uint32_t nframes);
 }
 
-LIBARDOUR_API void  x86_sse_find_peaks               (const ARDOUR::Sample * buf, ARDOUR::pframes_t nsamples, float *min, float *max);
+extern "C" {
+/* AVX functions */
+	LIBARDOUR_API float x86_sse_avx_compute_peak         (const float * buf, uint32_t nsamples, float current);
+	LIBARDOUR_API void  x86_sse_avx_apply_gain_to_buffer (float * buf, uint32_t nframes, float gain);
+	LIBARDOUR_API void  x86_sse_avx_mix_buffers_with_gain(float * dst, const float * src, uint32_t nframes, float gain);
+	LIBARDOUR_API void  x86_sse_avx_mix_buffers_no_gain  (float * dst, const float * src, uint32_t nframes);
+	LIBARDOUR_API void  x86_sse_avx_copy_vector          (float * dst, const float * src, uint32_t nframes);
+}
+
+LIBARDOUR_API void  x86_sse_find_peaks                 (const float * buf, uint32_t nsamples, float *min, float *max);
+LIBARDOUR_API void  x86_sse_avx_find_peaks             (const float * buf, uint32_t nsamples, float *min, float *max);
 
 /* debug wrappers for SSE functions */
 
@@ -41,6 +51,7 @@ LIBARDOUR_API float debug_compute_peak               (const ARDOUR::Sample * buf
 LIBARDOUR_API void  debug_apply_gain_to_buffer       (ARDOUR::Sample * buf, ARDOUR::pframes_t nframes, float gain);
 LIBARDOUR_API void  debug_mix_buffers_with_gain      (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes, float gain);
 LIBARDOUR_API void  debug_mix_buffers_no_gain        (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes);
+LIBARDOUR_API void  debug_copy_vector                (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes);
 
 #endif
 
@@ -61,5 +72,6 @@ LIBARDOUR_API void  default_find_peaks                (const ARDOUR::Sample * bu
 LIBARDOUR_API void  default_apply_gain_to_buffer      (ARDOUR::Sample * buf, ARDOUR::pframes_t nframes, float gain);
 LIBARDOUR_API void  default_mix_buffers_with_gain     (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes, float gain);
 LIBARDOUR_API void  default_mix_buffers_no_gain       (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes);
+LIBARDOUR_API void  default_copy_vector				  (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes);
 
 #endif /* __ardour_mix_h__ */
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index e01f56d..f9578a1 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -53,6 +53,7 @@ class LIBARDOUR_API PluginInsert : public Processor
 	XMLNode& state(bool);
 	XMLNode& get_state(void);
 	int set_state(const XMLNode&, int version);
+	void update_id (PBD::ID);
 
 	void run (BufferSet& in, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool);
 	void silence (framecnt_t nframes);
@@ -141,6 +142,8 @@ class LIBARDOUR_API PluginInsert : public Processor
 		return _match.method == Split;
 	}
 
+	void configured_io (ChanCount &in, ChanCount &out) { in = _configured_in; out = _configured_out; }
+
 	PBD::Signal2<void,BufferSet*, BufferSet*> AnalysisDataGathered;
 	PBD::Signal0<void> PluginIoReConfigure;
 
@@ -181,6 +184,9 @@ class LIBARDOUR_API PluginInsert : public Processor
 
 	ChanCount midi_bypass;
 
+	ChanCount _configured_in;
+	ChanCount _configured_out;
+
 	/** Description of how we can match our plugin's IO to our own insert IO */
 	struct Match {
 		Match () : method (Impossible), plugins (0) {}
diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h
index 3a6a210..663bb92 100644
--- a/libs/ardour/ardour/plugin_manager.h
+++ b/libs/ardour/ardour/plugin_manager.h
@@ -144,6 +144,8 @@ class LIBARDOUR_API PluginManager : public boost::noncopyable {
 	std::string get_ladspa_category (uint32_t id);
 	std::vector<uint32_t> ladspa_plugin_whitelist;
 
+	Glib::Threads::Mutex _lock;
+
 	static PluginManager* _instance; // singleton
 	PluginManager ();
 };
diff --git a/libs/ardour/ardour/port_insert.h b/libs/ardour/ardour/port_insert.h
index 3270809..54d8583 100644
--- a/libs/ardour/ardour/port_insert.h
+++ b/libs/ardour/ardour/port_insert.h
@@ -64,6 +64,8 @@ class LIBARDOUR_API PortInsert : public IOProcessor
 	void activate ();
 	void deactivate ();
 
+	void set_pre_fader (bool);
+
 	uint32_t bit_slot() const { return _bitslot; }
 
 	void start_latency_detection ();
diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h
index fa75876..c7d3608 100644
--- a/libs/ardour/ardour/processor.h
+++ b/libs/ardour/ardour/processor.h
@@ -107,7 +107,7 @@ class LIBARDOUR_API Processor : public SessionObject, public Automatable, public
 	XMLNode& get_state (void);
 	int set_state (const XMLNode&, int version);
 
-	void set_pre_fader (bool);
+	virtual void set_pre_fader (bool);
 
 	PBD::Signal0<void>                     ActiveChanged;
 	PBD::Signal2<void,ChanCount,ChanCount> ConfigurationChanged;
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index 52c3309..afa7432 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -29,15 +29,21 @@
     DO dump the config using cfgtool to system_config
     after modifying this file.
 
-    ./waf && build/cfgtool/cfgtool system_config
+    ./waf && gtk2_ardour/arcfg system_config
 *****************************************************/
 
 /* IO connection */
 
 CONFIG_VARIABLE (bool, auto_connect_standard_busses, "auto-connect-standard-busses", true)
+/* this variable is used to indicate output mode in Waves Tracks: 
+   "Multi Out" == AutoConnectPhysical and "Stereo Out" == AutoConnectMaster 
+*/
 CONFIG_VARIABLE (AutoConnectOption, output_auto_connect, "output-auto-connect", AutoConnectMaster)
 CONFIG_VARIABLE (AutoConnectOption, input_auto_connect, "input-auto-connect", AutoConnectPhysical)
 
+/* Naming */
+CONFIG_VARIABLE (TracksAutoNamingRule, tracks_auto_naming, "tracks-auto-naming", UseDefaultNames)
+
 /* MIDI and MIDI related */
 
 CONFIG_VARIABLE (bool, trace_midi_input, "trace-midi-input", false)
@@ -51,15 +57,23 @@ 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 (bool, first_midi_bank_is_zero, "display-first-midi-bank-as-zero", false)
-CONFIG_VARIABLE (int32_t, inter_scene_gap_msecs, "inter-scene-gap-msecs", 1)
+CONFIG_VARIABLE (int32_t, inter_scene_gap_frames, "inter-scene-gap-frames", 1)
 
 /* Timecode and related */
 
 CONFIG_VARIABLE (int, mtc_qf_speed_tolerance, "mtc-qf-speed-tolerance", 5)
 CONFIG_VARIABLE (bool, timecode_sync_frame_rate, "timecode-sync-frame-rate", true)
+#ifdef USE_TRACKS_CODE_FEATURES
+CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", true)
+#else
 CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", false)
+#endif
 CONFIG_VARIABLE (bool, timecode_source_2997, "timecode-source-2997", false)
+#ifdef USE_TRACKS_CODE_FEATURES
+CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", MTC)
+#else
 CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", Engine)
+#endif
 CONFIG_VARIABLE (std::string, ltc_source_port, "ltc-source-port", "system:capture_1")
 CONFIG_VARIABLE (bool, send_ltc, "send-ltc", false)
 CONFIG_VARIABLE (bool, ltc_send_continuously, "ltc-send-continuously", true)
@@ -77,6 +91,7 @@ CONFIG_VARIABLE (RemoteModel, remote_model, "remote-model", MixerOrdered)
 CONFIG_VARIABLE (uint32_t, minimum_disk_read_bytes,  "minimum-disk-read-bytes", ARDOUR::Diskstream::default_disk_read_chunk_frames() * sizeof (ARDOUR::Sample))
 CONFIG_VARIABLE (uint32_t, minimum_disk_write_bytes,  "minimum-disk-write-bytes", ARDOUR::Diskstream::default_disk_write_chunk_frames() * sizeof (ARDOUR::Sample))
 CONFIG_VARIABLE (float, midi_readahead,  "midi-readahead", 1.0)
+CONFIG_VARIABLE (BufferingPreset, buffering_preset, "buffering-preset", Medium)
 CONFIG_VARIABLE (float, audio_capture_buffer_seconds, "capture-buffer-seconds", 5.0)
 CONFIG_VARIABLE (float, audio_playback_buffer_seconds, "playback-buffer-seconds", 5.0)
 CONFIG_VARIABLE (float, midi_track_buffer_seconds, "midi-track-buffer-seconds", 1.0)
@@ -99,7 +114,11 @@ CONFIG_VARIABLE (RegionSelectionAfterSplit, region_selection_after_split, "regio
 
 /* monitoring, mute, solo etc */
 
+#ifdef USE_TRACKS_CODE_FEATURES
+CONFIG_VARIABLE (bool, mute_affects_pre_fader, "mute-affects-pre-fader", true)
+#else
 CONFIG_VARIABLE (bool, mute_affects_pre_fader, "mute-affects-pre-fader", false)
+#endif
 CONFIG_VARIABLE (bool, mute_affects_post_fader, "mute-affects-post-fader", true)
 CONFIG_VARIABLE (bool, mute_affects_control_outs, "mute-affects-control-outs", true)
 CONFIG_VARIABLE (bool, mute_affects_main_outs, "mute-affects-main-outs", true)
@@ -141,20 +160,39 @@ CONFIG_VARIABLE (bool, stop_recording_on_xrun, "stop-recording-on-xrun", false)
 CONFIG_VARIABLE (bool, create_xrun_marker, "create-xrun-marker", true)
 CONFIG_VARIABLE (bool, stop_at_session_end, "stop-at-session-end", false)
 CONFIG_VARIABLE (bool, seamless_loop, "seamless-loop", false)
+#ifdef USE_TRACKS_CODE_FEATURES
+CONFIG_VARIABLE (bool, loop_is_mode, "loop-is-mode", true)
+#else
 CONFIG_VARIABLE (bool, loop_is_mode, "loop-is-mode", false)
+#endif
 CONFIG_VARIABLE (framecnt_t, preroll, "preroll", 0)
 CONFIG_VARIABLE (framecnt_t, postroll, "postroll", 0)
 CONFIG_VARIABLE (float, rf_speed, "rf-speed", 2.0f)
-CONFIG_VARIABLE (float, shuttle_speed_factor, "shuttle-speed-factor", 1.0f)
-CONFIG_VARIABLE (float, shuttle_speed_threshold, "shuttle-speed-threshold", 5.0f)
+CONFIG_VARIABLE (float, shuttle_speed_factor, "shuttle-speed-factor", 1.0f) // used for MMC shuttle
+CONFIG_VARIABLE (float, shuttle_speed_threshold, "shuttle-speed-threshold", 5.0f) // used for MMC shuttle
 CONFIG_VARIABLE (ShuttleBehaviour, shuttle_behaviour, "shuttle-behaviour", Sprung)
 CONFIG_VARIABLE (ShuttleUnits, shuttle_units, "shuttle-units", Percentage)
+CONFIG_VARIABLE (float, shuttle_max_speed, "shuttle-max-speed", 8.0f)
 CONFIG_VARIABLE (bool, locate_while_waiting_for_sync, "locate-while-waiting-for-sync", false)
 CONFIG_VARIABLE (bool, disable_disarm_during_roll, "disable-disarm-during-roll", false)
+#ifdef USE_TRACKS_CODE_FEATURES
+CONFIG_VARIABLE (AutoReturnTarget, auto_return_target_list, "auto-return-target-list", AutoReturnTarget(LastLocate) )
+#else
+CONFIG_VARIABLE (AutoReturnTarget, auto_return_target_list, "auto-return-target-list", AutoReturnTarget(LastLocate|RangeSelectionStart|Loop|RegionSelectionStart))
+#endif
 
 /* metering */
 
+#ifdef USE_TRACKS_CODE_FEATURES
+CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 60.0f)
+CONFIG_VARIABLE (MeterType, meter_type_master, "meter-type-master", MeterPeak)
+#else
 CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 13.3f)
+CONFIG_VARIABLE (MeterType, meter_type_master, "meter-type-master", MeterK20)
+#endif
+CONFIG_VARIABLE (MeterType, meter_type_track, "meter-type-track", MeterPeak)
+CONFIG_VARIABLE (MeterType, meter_type_bus, "meter-type-bus", MeterPeak)
+
 
 /* miscellany */
 
@@ -170,11 +208,18 @@ CONFIG_VARIABLE (bool, use_overlap_equivalency, "use-overlap-equivalency", false
 CONFIG_VARIABLE (bool, periodic_safety_backups, "periodic-safety-backups", true)
 CONFIG_VARIABLE (uint32_t, periodic_safety_backup_interval, "periodic-safety-backup-interval", 120)
 CONFIG_VARIABLE (float, automation_interval_msecs, "automation-interval-msecs", 30)
-CONFIG_VARIABLE (std::string, default_session_parent_dir, "default-session-parent-dir", "~")
+#ifdef __APPLE__
+CONFIG_VARIABLE_SPECIAL (std::string, default_session_parent_dir, "default-session-parent-dir", "~/Music", poor_mans_glob)
+#elif defined (PLATFORM_WINDOWS)
+CONFIG_VARIABLE_SPECIAL (std::string, default_session_parent_dir, "default-session-parent-dir", "~\\Documents", poor_mans_glob)
+#else
+CONFIG_VARIABLE_SPECIAL (std::string, default_session_parent_dir, "default-session-parent-dir", "~", poor_mans_glob)
+#endif
 CONFIG_VARIABLE (bool, allow_special_bus_removal, "allow-special-bus-removal", false)
 CONFIG_VARIABLE (int32_t, processor_usage, "processor-usage", -1)
 CONFIG_VARIABLE (gain_t, max_gain, "max-gain", 2.0) /* +6.0dB */
 CONFIG_VARIABLE (uint32_t, max_recent_sessions, "max-recent-sessions", 10)
+CONFIG_VARIABLE (uint32_t, max_recent_templates, "max-recent-templates", 10)
 CONFIG_VARIABLE (double, automation_thinning_factor, "automation-thinning-factor", 20.0)
 CONFIG_VARIABLE (std::string, freesound_download_dir, "freesound-download-dir", Glib::get_home_dir() + "/Freesound/snd")
 CONFIG_VARIABLE (framecnt_t, range_location_minimum, "range-location-minimum", 128) /* samples */
@@ -187,6 +232,7 @@ CONFIG_VARIABLE (bool, use_plugin_own_gui, "use-plugin-own-gui", true)
 CONFIG_VARIABLE (bool, use_windows_vst, "use-windows-vst", true)
 CONFIG_VARIABLE (bool, use_lxvst, "use-lxvst", true)
 CONFIG_VARIABLE (bool, discover_vst_on_start, "discover-vst-on-start", false)
+CONFIG_VARIABLE (bool, verbose_plugin_scan, "verbose-plugin-scan", true)
 CONFIG_VARIABLE (int, vst_scan_timeout, "vst-scan-timeout", 600) /* deciseconds, per plugin, <= 0 no timeout */
 CONFIG_VARIABLE (bool, discover_audio_units, "discover-audio-units", false)
 
@@ -206,14 +252,15 @@ CONFIG_VARIABLE (DenormalModel, denormal_model, "denormal-model", DenormalFTZDAZ
 
 CONFIG_VARIABLE (std::string, osx_pingback_url, "osx-pingback-url", "http://community.ardour.org/pingback/osx/")
 CONFIG_VARIABLE (std::string, linux_pingback_url, "linux-pingback-url", "http://community.ardour.org/pingback/linux/")
-CONFIG_VARIABLE (std::string, tutorial_manual_url, "tutorial-manual-url", "http://ardour.org/flossmanual")
+CONFIG_VARIABLE (std::string, windows_pingback_url, "windows-pingback-url", "http://community.ardour.org/pingback/windows/")
+CONFIG_VARIABLE (std::string, tutorial_manual_url, "tutorial-manual-url", "http://ardour.org/tutorial")
 CONFIG_VARIABLE (std::string, reference_manual_url, "reference-manual-url", "http://manual.ardour.org/")
 CONFIG_VARIABLE (std::string, updates_url, "updates-url", "http://ardour.org/whatsnew.html")
 CONFIG_VARIABLE (std::string, donate_url, "donate-url", "http://ardour.org/donate")
 
 /* video timeline configuration */
 CONFIG_VARIABLE (bool, video_advanced_setup, "video-advanced-setup", false)
-CONFIG_VARIABLE (std::string, video_server_url, "video-server-url", "http://localhost:1554")
+CONFIG_VARIABLE (std::string, video_server_url, "video-server-url", "http://127.0.0.1:1554")
 #ifndef PLATFORM_WINDOWS
 CONFIG_VARIABLE (std::string, video_server_docroot, "video-server-docroot", "/")
 #else
diff --git a/libs/ardour/ardour/recent_sessions.h b/libs/ardour/ardour/recent_sessions.h
index 03134da..7c4158c 100644
--- a/libs/ardour/ardour/recent_sessions.h
+++ b/libs/ardour/ardour/recent_sessions.h
@@ -30,8 +30,11 @@ namespace ARDOUR {
 	typedef std::deque<std::pair<std::string,std::string> > RecentSessions;
 
 	LIBARDOUR_API int read_recent_sessions (RecentSessions& rs);
+	LIBARDOUR_API int read_recent_templates (std::deque<std::string>& rt);
 	LIBARDOUR_API int store_recent_sessions (std::string name, std::string path);
+	LIBARDOUR_API int store_recent_templates (const std::string& session_template_full_name);
 	LIBARDOUR_API int write_recent_sessions (RecentSessions& rs);
+	LIBARDOUR_API int write_recent_templates (std::deque<std::string>& rt);
 	LIBARDOUR_API int remove_recent_sessions (const std::string& path);
 }; // namespace ARDOUR
 
diff --git a/libs/ardour/ardour/resampled_source.h b/libs/ardour/ardour/resampled_source.h
index bb088f3..0c90581 100644
--- a/libs/ardour/ardour/resampled_source.h
+++ b/libs/ardour/ardour/resampled_source.h
@@ -36,7 +36,7 @@ class LIBARDOUR_API ResampledImportableSource : public ImportableSource
 	~ResampledImportableSource ();
 
 	framecnt_t read (Sample* buffer, framecnt_t nframes);
-	float      ratio() const { return src_data.src_ratio; }
+	float      ratio() const { return _src_data.src_ratio; }
 	uint32_t   channels() const { return source->channels(); }
 	framecnt_t length() const { return source->length(); }
 	framecnt_t samplerate() const { return source->samplerate(); }
@@ -52,10 +52,11 @@ class LIBARDOUR_API ResampledImportableSource : public ImportableSource
 
    private:
 	boost::shared_ptr<ImportableSource> source;
-	float* input;
-	int _src_type;
-	SRC_STATE*	src_state;
-	SRC_DATA	src_data;
+	float*          _input;
+	int             _src_type;
+	SRC_STATE*      _src_state;
+	SRC_DATA        _src_data;
+	bool            _end_of_input;
 };
 
 }
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index cce1e15..64e40e1 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -546,8 +546,11 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
 	bool           _self_solo;
 	uint32_t       _soloed_by_others_upstream;
 	uint32_t       _soloed_by_others_downstream;
-	uint32_t       _solo_isolated;
+	bool           _solo_isolated;
+	uint32_t       _solo_isolated_by_upstream;
 
+	void mod_solo_isolated_by_upstream (bool, void*);
+	
 	bool           _denormal_protection;
 
 	bool _recordable : 1;
diff --git a/libs/ardour/ardour/runtime_functions.h b/libs/ardour/ardour/runtime_functions.h
index e1d6b99..45d6ec7 100644
--- a/libs/ardour/ardour/runtime_functions.h
+++ b/libs/ardour/ardour/runtime_functions.h
@@ -25,17 +25,19 @@
 
 namespace ARDOUR {
 
-	typedef float (*compute_peak_t)			(const ARDOUR::Sample *, pframes_t, float);
-	typedef void  (*find_peaks_t)                   (const ARDOUR::Sample *, pframes_t, float *, float*);
+	typedef float (*compute_peak_t)			    (const ARDOUR::Sample *, pframes_t, float);
+	typedef void  (*find_peaks_t)               (const ARDOUR::Sample *, pframes_t, float *, float*);
 	typedef void  (*apply_gain_to_buffer_t)		(ARDOUR::Sample *, pframes_t, float);
 	typedef void  (*mix_buffers_with_gain_t)	(ARDOUR::Sample *, const ARDOUR::Sample *, pframes_t, float);
 	typedef void  (*mix_buffers_no_gain_t)		(ARDOUR::Sample *, const ARDOUR::Sample *, pframes_t);
+	typedef void  (*copy_vector_t)			    (ARDOUR::Sample *, const ARDOUR::Sample *, pframes_t);
 
 	LIBARDOUR_API extern compute_peak_t		compute_peak;
 	LIBARDOUR_API extern find_peaks_t               find_peaks;
 	LIBARDOUR_API extern apply_gain_to_buffer_t	apply_gain_to_buffer;
 	LIBARDOUR_API extern mix_buffers_with_gain_t	mix_buffers_with_gain;
 	LIBARDOUR_API extern mix_buffers_no_gain_t	mix_buffers_no_gain;
+	LIBARDOUR_API extern copy_vector_t			copy_vector;
 }
 
 #endif /* __ardour_runtime_functions_h__ */
diff --git a/libs/ardour/ardour/scene_change.h b/libs/ardour/ardour/scene_change.h
index ee71198..661d223 100644
--- a/libs/ardour/ardour/scene_change.h
+++ b/libs/ardour/ardour/scene_change.h
@@ -36,17 +36,21 @@ class SceneChange : public PBD::Stateful
 	static boost::shared_ptr<SceneChange> factory (const XMLNode&, int version);
 	static std::string xml_node_name;
 
-	uint32_t color() const;
-	void set_color (uint32_t);
-	bool color_out_of_bounds() const { return _color == out_of_bound_color; }
-	static const uint32_t out_of_bound_color;
-        
-	PBD::Signal0<void> ColorChanged;
+        uint32_t color() const;
+        void set_color (uint32_t);
+        bool color_out_of_bounds() const { return _color == out_of_bound_color; }
+        static const uint32_t out_of_bound_color;
 
-protected:
-	/* derived classes are responsible for serializing & deserializing this value */
-	uint32_t _color;
+        bool active () const { return _active; }
+        void set_active (bool);
+        
+        PBD::Signal0<void> ColorChanged;
+        PBD::Signal0<void> ActiveChanged;
 
+    protected:
+        /* derived classes are responsible for serializing & deserializing this value */
+        uint32_t _color;
+        bool     _active;
 };
 
 } /* namespace */
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index bbc8293..5517f0e 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -176,9 +176,14 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	bool dirty() const { return _state_of_the_state & Dirty; }
 	void set_deletion_in_progress ();
 	void clear_deletion_in_progress ();
+	bool reconnection_in_progress() const { return _reconnecting_routes_in_progress; }
 	bool deletion_in_progress() const { return _state_of_the_state & Deletion; }
+	bool routes_deletion_in_progress() const { return _route_deletion_in_progress; }
+
 	PBD::Signal0<void> DirtyChanged;
 
+	PBD::Signal1<void, bool> RouteAddedOrRemoved;
+
 	const SessionDirectory& session_directory () const { return *(_session_dir.get()); }
 
 	static PBD::Signal1<void,std::string> Dialog;
@@ -214,6 +219,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	BufferSet& get_mix_buffers (ChanCount count = ChanCount::ZERO);
 
 	bool have_rec_enabled_track () const;
+    bool have_rec_disabled_track () const;
 
 	bool have_captured() const { return _have_captured; }
 
@@ -292,9 +298,20 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
 	PBD::Signal0<void> IOConnectionsComplete;
 
+	/* Timecode status signals */
+	PBD::Signal1<void, bool> MTCSyncStateChanged;
+	PBD::Signal1<void, bool> LTCSyncStateChanged;	
+
 	/* Record status signals */
 
-	PBD::Signal0<void> RecordStateChanged;
+	PBD::Signal0<void> RecordStateChanged; /* signals changes in recording state (i.e. are we recording) */
+	/* XXX may 2015: paul says: it isn't clear to me that this has semantics that cannot be inferrred
+	   from the previous signal and session state.
+	*/
+	PBD::Signal0<void> RecordArmStateChanged; /* signals changes in recording arming */
+
+	/* Emited when session is loaded */
+	PBD::Signal0<void> SessionLoaded;
 
 	/* Transport mechanism signals */
 
@@ -331,6 +348,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	/* Step Editing status changed */
 	PBD::Signal1<void,bool> StepEditStatusChange;
 
+	/* Timecode state signals */
+	PBD::Signal0<void> MtcOrLtcInputPortChanged;
+	
 	void queue_event (SessionEvent*);
 
 	void request_roll_at_and_return (framepos_t start, framepos_t return_to);
@@ -539,13 +559,17 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 		RouteGroup* route_group = 0, uint32_t how_many = 1, std::string name_template = ""
 		);
 
-	void   remove_route (boost::shared_ptr<Route>);
-	void   resort_routes ();
-	void   resort_routes_using (boost::shared_ptr<RouteList>);
+	void remove_routes (boost::shared_ptr<RouteList>);
+	void remove_route (boost::shared_ptr<Route>);
+
+	void resort_routes ();
+	void resort_routes_using (boost::shared_ptr<RouteList>);
 
 	AudioEngine & engine() { return _engine; }
 	AudioEngine const & engine () const { return _engine; }
 
+	static std::string default_track_name_pattern (DataType);
+	
 	/* Time */
 
 	framepos_t transport_frame () const {return _transport_frame; }
@@ -586,7 +610,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
 	void   request_sync_source (Slave*);
 	bool   synced_to_engine() const { return _slave && config.get_external_sync() && Config->get_sync_source() == Engine; }
-
+	bool   synced_to_mtc () const { return config.get_external_sync() && Config->get_sync_source() == MTC && g_atomic_int_get (const_cast<gint*>(&_mtc_active)); }
+	bool   synced_to_ltc () const { return config.get_external_sync() && Config->get_sync_source() == LTC && g_atomic_int_get (const_cast<gint*>(&_ltc_active)); }
+	
 	double transport_speed() const { return _transport_speed; }
 	bool   transport_stopped() const { return _transport_speed == 0.0f; }
 	bool   transport_rolling() const { return _transport_speed != 0.0f; }
@@ -709,6 +735,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	PBD::Signal0<void> SoloChanged;
 	PBD::Signal0<void> IsolatedChanged;
 
+	PBD::Signal0<void> session_routes_reconnected;
+
 	/* monitor/master out */
 
 	void add_monitor_section ();
@@ -824,6 +852,14 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
 	void maybe_update_session_range (framepos_t, framepos_t);
 
+	/* temporary hacks to allow selection to be pushed from GUI into backend.
+	   Whenever we move the selection object into libardour, these will go away.
+	 */
+	void set_range_selection (framepos_t start, framepos_t end);
+	void set_object_selection (framepos_t start, framepos_t end);
+	void clear_range_selection ();
+	void clear_object_selection ();
+	
 	/* buffers for gain and pan */
 
 	gain_t* gain_automation_buffer () const;
@@ -979,6 +1015,13 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
     
 	MIDI::MachineControl& mmc() { return *_mmc; }
 
+	void reconnect_midi_scene_ports (bool);
+	void reconnect_mtc_ports ();
+	void reconnect_mmc_ports (bool);
+
+	void reconnect_ltc_input ();
+	void reconnect_ltc_output ();
+	
   protected:
 	friend class AudioEngine;
 	void set_block_size (pframes_t nframes);
@@ -1050,6 +1093,11 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	bool                    _under_nsm_control;
 	unsigned int            _xrun_count;
 
+	void mtc_status_changed (bool);
+	PBD::ScopedConnection mtc_status_connection;
+	void ltc_status_changed (bool);
+	PBD::ScopedConnection ltc_status_connection;
+	
 	void initialize_latencies ();
 	void set_worst_io_latencies ();
 	void set_worst_playback_latency ();
@@ -1087,6 +1135,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	bool have_first_delta_accumulator;
 
 	SlaveState _slave_state;
+	gint _mtc_active;
+	gint _ltc_active;
 	framepos_t slave_wait_end;
 
 	void reset_slave_state ();
@@ -1229,7 +1279,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
 	void update_skips (Location*, bool consolidate);
 	void update_marks (Location* loc);
-	void update_loop (Location* loc);
 	void consolidate_skips (Location*);
 	void sync_locations_to_skips ();
 	void _sync_locations_to_skips ();
@@ -1251,6 +1300,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	int  post_engine_init ();
 	int  immediately_post_engine ();
 	void remove_empty_sounds ();
+	
+	void session_loaded ();
 
 	void setup_midi_control ();
 	int  midi_read (MIDI::Port *);
@@ -1413,6 +1464,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	void engine_halted ();
 	void xrun_recovery ();
 	void set_track_loop (bool);
+	bool select_playhead_priority_target (framepos_t&);
+	void follow_playhead_priority ();
 	
 	/* These are synchronous and so can only be called from within the process
 	 * cycle
@@ -1440,6 +1493,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	void add_routes (RouteList&, bool input_auto_connect, bool output_auto_connect, bool save);
 	void add_routes_inner (RouteList&, bool input_auto_connect, bool output_auto_connect);
 	bool _adding_routes_in_progress;
+	bool _reconnecting_routes_in_progress;
+	bool _route_deletion_in_progress;
+
 	uint32_t destructive_index;
 
 	boost::shared_ptr<Route> XMLRouteFactory (const XMLNode&, int);
@@ -1447,7 +1503,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
 	void route_processors_changed (RouteProcessorChange);
 
-	bool find_route_name (std::string const &, uint32_t& id, char* name, size_t name_len, bool);
+	bool find_route_name (std::string const &, uint32_t& id, std::string& name, bool);
 	void count_existing_track_channels (ChanCount& in, ChanCount& out);
 	void auto_connect_route (boost::shared_ptr<Route> route, ChanCount& existing_inputs, ChanCount& existing_outputs,
 	                         bool with_lock, bool connect_inputs = true,
@@ -1466,6 +1522,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	void route_listen_changed (void *src, boost::weak_ptr<Route>);
 	void route_mute_changed (void *src);
 	void route_solo_changed (bool self_solo_change, void *src, boost::weak_ptr<Route>);
+	void routes_solo_changed (boost::shared_ptr<RouteList> solo_change_routes);
 	void route_solo_isolated_changed (void *src, boost::weak_ptr<Route>);
 	void update_route_solo_state (boost::shared_ptr<RouteList> r = boost::shared_ptr<RouteList>());
 
@@ -1634,6 +1691,12 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	void set_play_range (std::list<AudioRange>&, bool leave_rolling);
 	void unset_play_range ();
 
+	/* temporary hacks to allow selection to be pushed from GUI into backend
+	   Whenever we move the selection object into libardour, these will go away.
+	*/
+	Evoral::Range<framepos_t> _range_selection;
+	Evoral::Range<framepos_t> _object_selection;
+	
 	/* main outs */
 	uint32_t main_outs;
 
@@ -1676,8 +1739,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
 	mutable bool have_looped; ///< Used in ::audible_frame(*)
 
-	void update_have_rec_enabled_track ();
+	void update_route_record_state ();
 	gint _have_rec_enabled_track;
+	gint _have_rec_disabled_track;
 
 	static int ask_about_playlist_deletion (boost::shared_ptr<Playlist>);
 
@@ -1706,7 +1770,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	/** temporary list of Diskstreams used only during load of 2.X sessions */
 	std::list<boost::shared_ptr<Diskstream> > _diskstreams_2X;
 
-	void add_session_range_location (framepos_t, framepos_t);
+	void set_session_range_location (framepos_t, framepos_t);
 
 	void setup_midi_machine_control ();
 
@@ -1741,9 +1805,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	boost::shared_ptr<IO>   _ltc_input;
 	boost::shared_ptr<IO>   _ltc_output;
 
-	void reconnect_ltc_input ();
-	void reconnect_ltc_output ();
-
 	/* Scene Changing */
 	SceneChanger* _scene_changer;
 	
@@ -1759,6 +1820,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 	void save_as_bring_callback (uint32_t, uint32_t, std::string);
 
 	static int get_session_info_from_path (XMLTree& state_tree, const std::string& xmlpath);
+	static const uint32_t session_end_shift;
 };
 
 
diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h
index ec11fc5..823cf5f 100644
--- a/libs/ardour/ardour/session_configuration_vars.h
+++ b/libs/ardour/ardour/session_configuration_vars.h
@@ -27,7 +27,6 @@
 
 CONFIG_VARIABLE (uint32_t, destructive_xfade_msecs,  "destructive-xfade-msecs", 2)
 CONFIG_VARIABLE (bool, use_region_fades, "use-region-fades", true)
-CONFIG_VARIABLE (bool, show_region_fades, "show-region-fades", true)
 CONFIG_VARIABLE (SampleFormat, native_file_data_format,  "native-file-data-format", ARDOUR::FormatFloat)
 CONFIG_VARIABLE (HeaderFormat, native_file_header_format,  "native-file-header-format", ARDOUR::WAVE)
 CONFIG_VARIABLE (bool, auto_play, "auto-play", false)
@@ -46,8 +45,6 @@ CONFIG_VARIABLE (std::string, take_name, "take-name", "Take1")
 CONFIG_VARIABLE (bool, jack_time_master, "jack-time-master", true)
 CONFIG_VARIABLE (bool, use_video_sync, "use-video-sync", false)
 CONFIG_VARIABLE (float, video_pullup, "video-pullup", 0.0f)
-CONFIG_VARIABLE (bool, show_summary, "show-summary", true)
-CONFIG_VARIABLE (bool, show_group_tabs, "show-group-tabs", true)
 CONFIG_VARIABLE (bool, external_sync, "external-sync", false)
 CONFIG_VARIABLE (InsertMergePolicy, insert_merge_policy, "insert-merge-policy", InsertMergeRelax)
 CONFIG_VARIABLE (framecnt_t, timecode_offset, "timecode-offset", 0)
@@ -57,6 +54,15 @@ CONFIG_VARIABLE (std::string, timecode_generator_offset, "timecode-generator-off
 CONFIG_VARIABLE (bool, glue_new_markers_to_bars_and_beats, "glue-new-markers-to-bars-and-beats", false)
 CONFIG_VARIABLE (bool, midi_copy_is_fork, "midi-copy-is-fork", false)
 CONFIG_VARIABLE (bool, glue_new_regions_to_bars_and_beats, "glue-new-regions-to-bars-and-beats", false)
+/* These are GUI-only properties and should not be present in this
+ * context. There needs to be a new GUI-level session-scoped configuration
+ * variable header.
+ */
+CONFIG_VARIABLE (double, wave_amplitude_zoom, "wave-amplitude-zoom", 0.0)
+CONFIG_VARIABLE (uint16_t, wave_zoom_factor, "wave-zoom-factor", 2)
+CONFIG_VARIABLE (bool, show_summary, "show-summary", true)
+CONFIG_VARIABLE (bool, show_group_tabs, "show-group-tabs", true)
+CONFIG_VARIABLE (bool, show_region_fades, "show-region-fades", true)
 CONFIG_VARIABLE (bool, use_video_file_fps, "use-video-file-fps", false)
 CONFIG_VARIABLE (bool, videotimeline_pullup, "videotimeline-pullup", true)
 CONFIG_VARIABLE (bool, show_busses_on_meterbridge, "show-busses-on-meterbridge", false)
@@ -68,3 +74,14 @@ CONFIG_VARIABLE (bool, show_solo_on_meterbridge, "show-solo-on-meterbridge", fal
 CONFIG_VARIABLE (bool, show_monitor_on_meterbridge, "show-monitor-on-meterbridge", false)
 CONFIG_VARIABLE (bool, show_name_on_meterbridge, "show-name-on-meterbridge", true)
 CONFIG_VARIABLE (uint32_t, meterbridge_label_height,  "meterbridge-label-height", 0)
+
+#ifdef USE_TRACKS_CODE_FEATURES
+/* This variable was not discussed with Ardour developers and is considered
+   weakly conceived. It is also poorly named, since we have "groups" already
+   present in libardour but this variable has nothing to do with it. There
+   should have been more discussion about what was required and the best 
+   way to accomplish it.
+*/
+CONFIG_VARIABLE (bool, enable_group_edit, "enable-group-edit", false)
+/* These are GUI-only properties and should not be present in this context */
+#endif
diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h
index 96145e7..a8c17a1 100644
--- a/libs/ardour/ardour/session_event.h
+++ b/libs/ardour/ardour/session_event.h
@@ -134,6 +134,7 @@ public:
 
 	static const framepos_t Immediate = -1;
 
+	static bool has_per_thread_pool ();
 	static void create_per_thread_pool (const std::string& n, uint32_t nitems);
 	static void init_event_pool ();
 
diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h
index 8396a33..bda47ce 100644
--- a/libs/ardour/ardour/slave.h
+++ b/libs/ardour/ardour/slave.h
@@ -237,19 +237,21 @@ struct LIBARDOUR_API SafeTime {
 
 class LIBARDOUR_API TimecodeSlave : public Slave {
   public:
-    TimecodeSlave () {}
-
-    virtual Timecode::TimecodeFormat apparent_timecode_format() const = 0;
-
-    /* this is intended to be used by a UI and polled from a timeout. it should
-       return a string describing the current position of the TC source. it
-       should NOT do any computation, but should use a cached value
-       of the TC source position.
-    */
-    virtual std::string approximate_current_position() const = 0;
-
-    framepos_t        timecode_offset;
-    bool              timecode_negative_offset;
+	TimecodeSlave () {}
+	
+	virtual Timecode::TimecodeFormat apparent_timecode_format() const = 0;
+	
+	/* this is intended to be used by a UI and polled from a timeout. it should
+	   return a string describing the current position of the TC source. it
+	   should NOT do any computation, but should use a cached value
+	   of the TC source position.
+	*/
+	virtual std::string approximate_current_position() const = 0;
+	
+	framepos_t        timecode_offset;
+	bool              timecode_negative_offset;
+	
+	PBD::Signal1<void, bool> ActiveChanged;
 };
 
 class LIBARDOUR_API MTC_Slave : public TimecodeSlave {
diff --git a/libs/ardour/ardour/sndfilesource.h b/libs/ardour/ardour/sndfilesource.h
index 5a4a115..45e049e 100644
--- a/libs/ardour/ardour/sndfilesource.h
+++ b/libs/ardour/ardour/sndfilesource.h
@@ -66,6 +66,7 @@ class LIBARDOUR_API SndFileSource : public AudioFileSource {
 	bool set_destructive (bool yn);
 
 	bool one_of_several_channels () const;
+    uint32_t channel_count () const { return _info.channels; }
 
 	bool clamped_at_unity () const;
 
diff --git a/libs/ardour/ardour/srcfilesource.h b/libs/ardour/ardour/srcfilesource.h
index 073329c..3dc1590 100644
--- a/libs/ardour/ardour/srcfilesource.h
+++ b/libs/ardour/ardour/srcfilesource.h
@@ -63,7 +63,7 @@ protected:
 	}
 
 private:
-	static const uint32_t blocksize;
+	static const uint32_t max_blocksize;
 	boost::shared_ptr<AudioFileSource> _source;
 
 	mutable SRC_STATE* _src_state;
diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h
index 24a3f53..d5ae295 100644
--- a/libs/ardour/ardour/tempo.h
+++ b/libs/ardour/ardour/tempo.h
@@ -323,7 +323,7 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible
 	void change_initial_tempo (double bpm, double note_type);
 
 	void insert_time (framepos_t, framecnt_t);
-	bool cut_time (framepos_t where, framecnt_t amount);  //returns true if anything was moved
+	bool remove_time (framepos_t where, framecnt_t amount);  //returns true if anything was moved
 	
 	int n_tempos () const;
 	int n_meters () const;
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index b1b4388..17e0b0d 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -456,6 +456,11 @@ namespace ARDOUR {
 		AutoConnectPhysical = 0x1,
 		AutoConnectMaster = 0x2
 	};
+        
+    enum TracksAutoNamingRule {
+        UseDefaultNames = 0x1,
+        NameAfterDriver = 0x2
+    };
 
 	enum SampleFormat {
 		FormatFloat = 0,
@@ -623,6 +628,20 @@ namespace ARDOUR {
 	    uint32_t max; //< samples
 	};
 
+	enum BufferingPreset {
+		Small,
+		Medium,
+		Large,
+		Custom,
+	};
+
+	enum AutoReturnTarget {
+		LastLocate = 0x1,
+		RangeSelectionStart = 0x2,
+		Loop = 0x4,
+		RegionSelectionStart = 0x8,
+	};
+
 } // namespace ARDOUR
 
 
@@ -632,6 +651,7 @@ namespace ARDOUR {
 std::istream& operator>>(std::istream& o, ARDOUR::SampleFormat& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::TracksAutoNamingRule& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf);
@@ -648,10 +668,14 @@ std::istream& operator>>(std::istream& o, ARDOUR::DenormalModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::PositionLockStyle& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::FadeShape& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::RegionSelectionAfterSplit& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::BufferingPreset& var);
+std::istream& operator>>(std::istream& o, ARDOUR::AutoReturnTarget& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::MeterType& sf);
 
 std::ostream& operator<<(std::ostream& o, const ARDOUR::SampleFormat& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::HeaderFormat& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::TracksAutoNamingRule& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf);
@@ -668,7 +692,9 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::DenormalModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::PositionLockStyle& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::FadeShape& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::RegionSelectionAfterSplit& sf);
-
+std::ostream& operator<<(std::ostream& o, const ARDOUR::BufferingPreset& var);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoReturnTarget& sf);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterType& sf);
 
 /* because these operators work on types which can be used when making
    a UI_CONFIG_VARIABLE (in gtk2_ardour) we need them to be exported.
diff --git a/libs/ardour/ardour/utils.h b/libs/ardour/ardour/utils.h
index 4b71c15..7be3462 100644
--- a/libs/ardour/ardour/utils.h
+++ b/libs/ardour/ardour/utils.h
@@ -63,8 +63,6 @@ LIBARDOUR_API std::string bump_name_number(const std::string& s);
 LIBARDOUR_API int cmp_nocase (const std::string& s, const std::string& s2);
 LIBARDOUR_API int cmp_nocase_utf8 (const std::string& s1, const std::string& s2);
 
-LIBARDOUR_API int touch_file(std::string path);
-
 LIBARDOUR_API std::string region_name_from_path (std::string path, bool strip_channels, bool add_channel_suffix = false, uint32_t total = 0, uint32_t this_one = 0);
 LIBARDOUR_API bool path_is_paired (std::string path, std::string& pair_base);
 
@@ -161,8 +159,6 @@ LIBARDOUR_API double slider_position_to_gain_with_max (double g, double max_gain
 #define METER_FALLOFF_MODERATE  13.3f // EBU-PPM, IRT PPM-   20dB / 1.5 sec
 #define METER_FALLOFF_MEDIUM    20.0f
 #define METER_FALLOFF_FAST      32.0f
-#define METER_FALLOFF_FASTER    46.0f
-#define METER_FALLOFF_FASTEST   70.0f
 
 LIBARDOUR_API float meter_falloff_to_float (ARDOUR::MeterFalloff);
 LIBARDOUR_API ARDOUR::MeterFalloff meter_falloff_from_float (float);
diff --git a/libs/ardour/ardour/vst_info_file.h b/libs/ardour/ardour/vst_info_file.h
index 5e61380..f253ab0 100644
--- a/libs/ardour/ardour/vst_info_file.h
+++ b/libs/ardour/ardour/vst_info_file.h
@@ -25,6 +25,21 @@
 #include "ardour/vst_types.h"
 #include <vector>
 
+/* Cache File extensions */
+# if ( defined(__x86_64__) || defined(_M_X64) )
+#  define VST_EXT_BLACKLIST ".fsb64"
+#else
+#  define VST_EXT_BLACKLIST ".fsb"
+#endif
+
+# if ( defined(__x86_64__) || defined(_M_X64) )
+#define VST_EXT_INFOFILE  ".fsi64"
+#define VST_BLACKLIST  "vst64_blacklist.txt"
+#else
+#define VST_EXT_INFOFILE  ".fsi32"
+#define VST_BLACKLIST  "vst32_blacklist.txt"
+#endif
+
 #ifndef VST_SCANNER_APP
 namespace ARDOUR {
 #endif
@@ -35,8 +50,6 @@ enum VSTScanMode {
 	VST_SCAN_INTERNAL
 };
 
-LIBARDOUR_API extern std::string get_personal_vst_info_cache_dir ();
-LIBARDOUR_API extern std::string get_personal_vst_blacklist_dir ();
 LIBARDOUR_API extern void vstfx_free_info_list (std::vector<VSTInfo *> *infos);
 
 #ifdef LXVST_SUPPORT
diff --git a/libs/ardour/audio_buffer.cc b/libs/ardour/audio_buffer.cc
index de2c1dd..6d8b2aa 100644
--- a/libs/ardour/audio_buffer.cc
+++ b/libs/ardour/audio_buffer.cc
@@ -43,7 +43,7 @@ AudioBuffer::AudioBuffer(size_t capacity)
 AudioBuffer::~AudioBuffer()
 {
 	if (_owns_data)
-		free(_data);
+		cache_aligned_free(_data);
 }
 
 void
@@ -60,7 +60,7 @@ AudioBuffer::resize (size_t size)
 		return;
 	}
 
-	free (_data);
+	cache_aligned_free (_data);
 
 	cache_aligned_malloc ((void**) &_data, sizeof (Sample) * size);
 
diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc
index 00e1f92..d443b9a 100644
--- a/libs/ardour/audio_diskstream.cc
+++ b/libs/ardour/audio_diskstream.cc
@@ -46,9 +46,11 @@
 #include "ardour/debug.h"
 #include "ardour/io.h"
 #include "ardour/playlist_factory.h"
+#include "ardour/profile.h"
 #include "ardour/region_factory.h"
 #include "ardour/session.h"
 #include "ardour/session_playlists.h"
+#include "ardour/sndfile_helpers.h"
 #include "ardour/source_factory.h"
 #include "ardour/track.h"
 #include "ardour/types.h"
@@ -61,7 +63,6 @@ using namespace std;
 using namespace ARDOUR;
 using namespace PBD;
 
-size_t  AudioDiskstream::_working_buffers_size = 0;
 Sample* AudioDiskstream::_mixdown_buffer       = 0;
 gain_t* AudioDiskstream::_gain_buffer          = 0;
 
@@ -132,9 +133,13 @@ AudioDiskstream::~AudioDiskstream ()
 void
 AudioDiskstream::allocate_working_buffers()
 {
-	_working_buffers_size = max (disk_write_chunk_frames, disk_read_chunk_frames);
-	_mixdown_buffer       = new Sample[_working_buffers_size];
-	_gain_buffer          = new gain_t[_working_buffers_size];
+	/* with varifill buffer refilling, we compute the read size in bytes (to optimize
+	   for disk i/o bandwidth) and then convert back into samples. These buffers
+	   need to reflect the maximum size we could use, which is 4MB reads, or 2M samples
+	   using 16 bit samples.
+	*/
+	_mixdown_buffer       = new Sample[2*1048576];
+	_gain_buffer          = new gain_t[2*1048576];
 }
 
 void
@@ -142,7 +147,6 @@ AudioDiskstream::free_working_buffers()
 {
 	delete [] _mixdown_buffer;
 	delete [] _gain_buffer;
-	_working_buffers_size = 0;
 	_mixdown_buffer       = 0;
 	_gain_buffer          = 0;
 }
@@ -209,9 +213,9 @@ AudioDiskstream::non_realtime_locate (framepos_t location)
 	/* now refill channel buffers */
 
 	if (speed() != 1.0f || speed() != -1.0f) {
-		seek ((framepos_t) (location * (double) speed()));
+		seek ((framepos_t) (location * (double) speed()), true);
 	} else {
-		seek (location);
+		seek (location, true);
 	}
 }
 
@@ -602,7 +606,7 @@ AudioDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
 
 		/* no varispeed playback if we're recording, because the output .... TBD */
 
-		if (rec_nframes == 0 && _actual_speed != 1.0f) {
+		if (rec_nframes == 0 && _actual_speed != 1.0) {
 			necessary_samples = (framecnt_t) ceil ((nframes * fabs (_actual_speed))) + 2;
 		} else {
 			necessary_samples = nframes;
@@ -923,9 +927,15 @@ AudioDiskstream::seek (framepos_t frame, bool complete_refill)
 	file_frame = frame;
 
 	if (complete_refill) {
-		while ((ret = do_refill_with_alloc ()) > 0) ;
+		/* call _do_refill() to refill the entire buffer, using
+		   the largest reads possible.
+		*/
+		while ((ret = do_refill_with_alloc (false)) > 0) ;
 	} else {
-		ret = do_refill_with_alloc ();
+		/* call _do_refill() to refill just one chunk, and then
+		   return.
+		*/
+		ret = do_refill_with_alloc (true);
 	}
 
 	return ret;
@@ -952,7 +962,7 @@ AudioDiskstream::internal_playback_seek (framecnt_t distance)
 	boost::shared_ptr<ChannelList> c = channels.reader();
 
 	for (chan = c->begin(); chan != c->end(); ++chan) {
-		(*chan)->playback_buf->increment_read_ptr (llabs(distance));
+		(*chan)->playback_buf->increment_read_ptr (::llabs(distance));
 	}
 
 	if (first_recordable_frame < max_framepos) {
@@ -1067,12 +1077,18 @@ AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer,
 }
 
 int
-AudioDiskstream::do_refill_with_alloc ()
+AudioDiskstream::_do_refill_with_alloc (bool partial_fill)
 {
-	Sample* mix_buf  = new Sample[disk_read_chunk_frames];
-	float*  gain_buf = new float[disk_read_chunk_frames];
+	/* We limit disk reads to at most 4MB chunks, which with floating point
+	   samples would be 1M samples. But we might use 16 or 14 bit samples,
+	   in which case 4MB is more samples than that. Therefore size this for
+	   the smallest sample value .. 4MB = 2M samples (16 bit).
+	*/
+
+	Sample* mix_buf  = new Sample[2*1048576];
+	float*  gain_buf = new float[2*1048576];
 
-	int ret = _do_refill(mix_buf, gain_buf);
+	int ret = _do_refill (mix_buf, gain_buf, (partial_fill ? disk_read_chunk_frames : 0));
 
 	delete [] mix_buf;
 	delete [] gain_buf;
@@ -1082,9 +1098,15 @@ AudioDiskstream::do_refill_with_alloc ()
 
 /** Get some more data from disk and put it in our channels' playback_bufs,
  *  if there is suitable space in them.
+ *
+ * If fill_level is non-zero, then we will refill the buffer so that there is
+ * still at least fill_level samples of space left to be filled. This is used
+ * after locates so that we do not need to wait to fill the entire buffer.
+ *
  */
+
 int
-AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
+AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer, framecnt_t fill_level)
 {
 	int32_t ret = 0;
 	framecnt_t to_read;
@@ -1097,6 +1119,14 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
 	boost::shared_ptr<ChannelList> c = channels.reader();
 	framecnt_t ts;
 
+	/* do not read from disk while session is marked as Loading, to avoid
+	   useless redundant I/O.
+	*/
+	
+	if (_session.state_of_the_state() & Session::Loading) {
+		return 0;
+	}
+	
 	if (c->empty()) {
 		return 0;
 	}
@@ -1116,13 +1146,13 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
 		return 0;
 	}
 
-	/* if there are 2+ chunks of disk i/o possible for
-	   this track, let the caller know so that it can arrange
-	   for us to be called again, ASAP.
-	*/
-
-	if (total_space >= (_slaved ? 3 : 2) * disk_read_chunk_frames) {
-		ret = 1;
+	if (fill_level) {
+		if (fill_level < total_space) {
+			total_space -= fill_level;
+		} else {
+			/* we can't do anything with it */
+			fill_level = 0;
+		}
 	}
 
 	/* if we're running close to normal speed and there isn't enough
@@ -1149,10 +1179,6 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
 		return 0;
 	}
 
-	/* never do more than disk_read_chunk_frames worth of disk input per call (limit doesn't apply for memset) */
-
-	total_space = min (disk_read_chunk_frames, total_space);
-
 	if (reversed) {
 
 		if (file_frame == 0) {
@@ -1219,6 +1245,30 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
 
 	framepos_t file_frame_tmp = 0;
 
+	/* total_space is in samples. We want to optimize read sizes in various sizes using bytes */
+
+	const size_t bits_per_sample = format_data_width (_session.config.get_native_file_data_format());
+	size_t total_bytes = total_space * bits_per_sample / 8;
+
+	/* chunk size range is 256kB to 4MB. Bigger is faster in terms of MB/sec, but bigger chunk size always takes longer
+	 */
+	size_t byte_size_for_read = max ((size_t) (256 * 1024), min ((size_t) (4 * 1048576), total_bytes));
+
+	/* find nearest (lower) multiple of 16384 */
+
+	byte_size_for_read = (byte_size_for_read / 16384) * 16384;
+
+	/* now back to samples */
+
+	framecnt_t samples_to_read = byte_size_for_read / (bits_per_sample / 8);
+	
+	//cerr << name() << " will read " << byte_size_for_read << " out of total bytes " << total_bytes << " in buffer of "
+	// << c->front()->playback_buf->bufsize() * bits_per_sample / 8 << " bps = " << bits_per_sample << endl;
+	// cerr << name () << " read samples = " << samples_to_read << " out of total space " << total_space << " in buffer of " << c->front()->playback_buf->bufsize() << " samples\n";
+
+	// uint64_t before = g_get_monotonic_time ();
+	// uint64_t elapsed;
+	
 	for (chan_n = 0, i = c->begin(); i != c->end(); ++i, ++chan_n) {
 
 		ChannelInfo* chan (*i);
@@ -1228,7 +1278,7 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
 
 		chan->playback_buf->get_write_vector (&vector);
 
-		if ((framecnt_t) vector.len[0] > disk_read_chunk_frames) {
+		if ((framecnt_t) vector.len[0] > samples_to_read) {
 
 			/* we're not going to fill the first chunk, so certainly do not bother with the
 			   other part. it won't be connected with the part we do fill, as in:
@@ -1260,7 +1310,7 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
 		len2 = vector.len[1];
 
 		to_read = min (ts, len1);
-		to_read = min (to_read, disk_read_chunk_frames);
+		to_read = min (to_read, (framecnt_t) samples_to_read);
 
 		assert (to_read >= 0);
 
@@ -1279,8 +1329,9 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
 
 		if (to_read) {
 
-			/* we read all of vector.len[0], but it wasn't an entire disk_read_chunk_frames of data,
-			   so read some or all of vector.len[1] as well.
+			/* we read all of vector.len[0], but it wasn't the
+			   entire samples_to_read of data, so read some or
+			   all of vector.len[1] as well.
 			*/
 
 			if (read (buf2, mixdown_buffer, gain_buffer, file_frame_tmp, to_read, chan_n, reversed)) {
@@ -1297,11 +1348,17 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
 
 	}
 
+	// elapsed = g_get_monotonic_time () - before;
+	// cerr << "\tbandwidth = " << (byte_size_for_read / 1048576.0) / (elapsed/1000000.0) << "MB/sec\n";
+		
 	file_frame = file_frame_tmp;
 	assert (file_frame >= 0);
 
+	ret = ((total_space - samples_to_read) > disk_read_chunk_frames);
+	
+	c->front()->playback_buf->get_write_vector (&vector);
+	
   out:
-
 	return ret;
 }
 
@@ -2070,7 +2127,7 @@ AudioDiskstream::allocate_temporary_buffers ()
 	   when slaving to MTC, Timecode etc.
 	*/
 
-	double const sp = max (fabsf (_actual_speed), 1.2f);
+	double const sp = max (fabs (_actual_speed), 1.2);
 	framecnt_t required_wrap_size = (framecnt_t) ceil (_session.get_block_size() * sp) + 2;
 
 	if (required_wrap_size > wrap_buffer_size) {
@@ -2362,6 +2419,10 @@ AudioDiskstream::set_destructive (bool yn)
 bool
 AudioDiskstream::can_become_destructive (bool& requires_bounce) const
 {
+	if (Profile->get_trx()) {
+		return false;
+	}
+	
 	if (!_playlist) {
 		requires_bounce = false;
 		return false;
diff --git a/libs/ardour/audio_library.cc b/libs/ardour/audio_library.cc
index 35c0972..a1643c8 100644
--- a/libs/ardour/audio_library.cc
+++ b/libs/ardour/audio_library.cc
@@ -34,9 +34,10 @@
 #include <glibmm/convert.h>
 
 #include "pbd/compose.h"
+#include "pbd/error.h"
+#include "pbd/file_utils.h"
 
 #include "ardour/audio_library.h"
-#include "ardour/utils.h"
 #include "ardour/filesystem_paths.h"
 
 #include "i18n.h"
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc
index c056763..40cbded 100644
--- a/libs/ardour/audio_track.cc
+++ b/libs/ardour/audio_track.cc
@@ -35,6 +35,7 @@
 #include "ardour/meter.h"
 #include "ardour/playlist_factory.h"
 #include "ardour/processor.h"
+#include "ardour/profile.h"
 #include "ardour/region.h"
 #include "ardour/region_factory.h"
 #include "ardour/session.h"
@@ -62,7 +63,7 @@ AudioTrack::create_diskstream ()
 {
 	AudioDiskstream::Flag dflags = AudioDiskstream::Flag (AudioDiskstream::Recordable);
 
-	if (_mode == Destructive) {
+	if (_mode == Destructive && !Profile->get_trx()) {
 		dflags = AudioDiskstream::Flag (dflags | AudioDiskstream::Destructive);
 	} else if (_mode == NonLayered){
 		dflags = AudioDiskstream::Flag(dflags | AudioDiskstream::NonLayered);
@@ -77,7 +78,11 @@ AudioTrack::set_diskstream (boost::shared_ptr<Diskstream> ds)
 	Track::set_diskstream (ds);
 
 	_diskstream->set_track (this);
-	_diskstream->set_destructive (_mode == Destructive);
+	if (Profile->get_trx()) {
+		_diskstream->set_destructive (false);
+	} else {
+		_diskstream->set_destructive (_mode == Destructive);
+	}
 	_diskstream->set_non_layered (_mode == NonLayered);
 
 	if (audio_diskstream()->deprecated_io_node) {
@@ -106,7 +111,7 @@ AudioTrack::set_mode (TrackMode m)
 {
 	if (m != _mode) {
 
-		if (_diskstream->set_destructive (m == Destructive)) {
+		if (!Profile->get_trx() && _diskstream->set_destructive (m == Destructive)) {
 			return -1;
 		}
 
@@ -129,8 +134,15 @@ AudioTrack::can_use_mode (TrackMode m, bool& bounce_required)
 		return true;
 
 	case Destructive:
+		if (Profile->get_trx()) {
+			return false;
+		} else {
+			return _diskstream->can_become_destructive (bounce_required);
+		}
+		break;
+
 	default:
-		return _diskstream->can_become_destructive (bounce_required);
+		return false;
 	}
 }
 
@@ -193,6 +205,14 @@ AudioTrack::set_state (const XMLNode& node, int version)
 		_mode = Normal;
 	}
 
+	if (Profile->get_trx() && _mode == Destructive) {
+		/* Tracks does not support destructive tracks and trying to
+		   handle it as a normal track would be wrong.
+		*/
+		error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg;
+		return -1;
+	}
+
 	if (Track::set_state (node, version)) {
 		return -1;
 	}
@@ -309,7 +329,7 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram
 	if (!lm.locked()) {
 		boost::shared_ptr<AudioDiskstream> diskstream = audio_diskstream();
 		framecnt_t playback_distance = diskstream->calculate_playback_distance(nframes);
-		if (can_internal_playback_seek(llabs(playback_distance))) {
+		if (can_internal_playback_seek(::llabs(playback_distance))) {
 			/* TODO should declick */
 			internal_playback_seek(playback_distance);
 		}
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index 4b9a81e..8274ba9 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -73,6 +73,7 @@ static string preset_search_path = "/Library/Audio/Presets:/Network/Library/Audi
 static string preset_suffix = ".aupreset";
 static bool preset_search_path_initialized = false;
 FILE * AUPluginInfo::_crashlog_fd = NULL;
+bool AUPluginInfo::_scan_only = true;
 
 
 static void au_blacklist (std::string id)
@@ -97,10 +98,14 @@ static void au_unblacklist (std::string id)
 	}
 
 	std::string bl;
-	std::ifstream ifs(fn.c_str());
-	bl.assign ((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
-	::g_unlink(fn.c_str());
+	{
+		std::ifstream ifs(fn.c_str());
+		bl.assign ((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
+	}
+
+	::g_unlink (fn.c_str());
 
+	assert (!Glib::file_test (fn, Glib::FILE_TEST_EXISTS));
 	assert(id.find("\n") == string::npos);
 
 	id += "\n"; // add separator
@@ -454,6 +459,9 @@ AUPlugin::AUPlugin (const AUPlugin& other)
 
 {
 	init ();
+	for (size_t i = 0; i < descriptors.size(); ++i) {
+		set_parameter (i, other.get_parameter (i));
+	}
 }
 
 AUPlugin::~AUPlugin ()
@@ -1181,21 +1189,12 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out)
 				audio_out = 2;
 				found = true;
 			} else if (possible_out < -2) {
-				/* explicitly variable number of outputs. 
-
-                                   Since Ardour can handle any configuration,
-                                   we have to somehow pick a number. 
-
-                                   We'll use the number of inputs
-                                   to the master bus, or 2 if there
-                                   is no master bus.
-                                */
-                                boost::shared_ptr<Route> master = _session.master_out();
-                                if (master) {
-                                        audio_out = master->input()->n_ports().n_audio();
-                                } else {
-                                        audio_out = 2;
-                                }
+				/* explicitly variable number of outputs.
+				 *
+				 * We really need to ask the user in this case.
+				 * stereo will be correct in 99.9% of all cases.
+				 */
+				audio_out = 2;
 				found = true;
 			} else {
 				/* exact number of outputs */
@@ -1270,21 +1269,12 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out)
 				audio_out = 2;
 				found = true;
 			} else if (possible_out < -2) {
-				/* explicitly variable number of outputs. 
-
-                                   Since Ardour can handle any configuration,
-                                   we have to somehow pick a number. 
-
-                                   We'll use the number of inputs
-                                   to the master bus, or 2 if there
-                                   is no master bus.
-                                */
-                                boost::shared_ptr<Route> master = _session.master_out();
-                                if (master) {
-                                        audio_out = master->input()->n_ports().n_audio();
-                                } else {
-                                        audio_out = 2;
-                                }
+				/* explicitly variable number of outputs.
+				 *
+				 * We really need to ask the user in this case.
+				 * stereo will be correct in 99.9% of all cases.
+				 */
+				audio_out = 2;
 				found = true;
 			} else {
 				/* exact number of outputs */
@@ -1326,15 +1316,14 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out)
 	}
 
 	if (found) {
+		out.set (DataType::MIDI, 0);
+		out.set (DataType::AUDIO, audio_out);
 		DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("\tCHOSEN: in %1 out %2\n", in, out));
 	} else {
 		DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("\tFAIL: no io configs match %1\n", in));
 		return false;
 	}
 
-	out.set (DataType::MIDI, 0);
-	out.set (DataType::AUDIO, audio_out);
-
 	return true;
 }
 
@@ -2277,10 +2266,19 @@ AUPluginInfo::au_cache_path ()
 }
 
 PluginInfoList*
-AUPluginInfo::discover ()
+AUPluginInfo::discover (bool scan_only)
 {
 	XMLTree tree;
 
+	/* AU require a CAComponentDescription pointer provided by the OS.
+	 * Ardour only caches port and i/o config. It can't just 'scan' without
+	 * 'discovering' (like we do for VST).
+	 * 
+	 * "Scan Only" means
+	 * "Iterate over all plugins. skip the ones where there's no io-cache".
+	 */
+	_scan_only = scan_only;
+
 	if (!Glib::file_test (au_cache_path(), Glib::FILE_TEST_EXISTS)) {
 		ARDOUR::BootMessage (_("Discovering AudioUnit plugins (could take some time ...)"));
 	}
@@ -2498,8 +2496,9 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
 			info->version = 0;
 		}
 
-		if (cached_io_configuration (info->unique_id, info->version, cacomp, info->cache, info->name)) {
+		const int rv = cached_io_configuration (info->unique_id, info->version, cacomp, info->cache, info->name);
 
+		if (rv == 0) {
 			/* here we have to map apple's wildcard system to a simple pair
 			   of values. in ::can_do() we use the whole system, but here
 			   we need a single pair of values. XXX probably means we should
@@ -2533,7 +2532,8 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
 
 			plugs.push_back (info);
 
-		} else {
+		}
+		else if (rv == -1) {
 			error << string_compose (_("Cannot get I/O configuration info for AU %1"), info->name) << endmsg;
 		}
 
@@ -2545,7 +2545,7 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
 	au_crashlog(string_compose("End AU discovery for Type: %1", (int)desc.componentType));
 }
 
-bool
+int
 AUPluginInfo::cached_io_configuration (const std::string& unique_id,
 				       UInt32 version,
 				       CAComponent& comp,
@@ -2569,7 +2569,12 @@ AUPluginInfo::cached_io_configuration (const std::string& unique_id,
 
 	if (cim != cached_info.end()) {
 		cinfo = cim->second;
-		return true;
+		return 0;
+	}
+
+	if (_scan_only) {
+		PBD::info << string_compose (_("Skipping AU %1 (not indexed. Discover new plugins to add)"), name) << endmsg;
+		return 1;
 	}
 
 	CAAudioUnit unit;
@@ -2582,19 +2587,19 @@ AUPluginInfo::cached_io_configuration (const std::string& unique_id,
 	try {
 
 		if (CAAudioUnit::Open (comp, unit) != noErr) {
-			return false;
+			return -1;
 		}
 
 	} catch (...) {
 
 		warning << string_compose (_("Could not load AU plugin %1 - ignored"), name) << endmsg;
-		return false;
+		return -1;
 
 	}
 
 	DEBUG_TRACE (DEBUG::AudioUnits, "get AU channel info\n");
 	if ((ret = unit.GetChannelInfo (&channel_info, cnt)) < 0) {
-		return false;
+		return -1;
 	}
 
 	if (ret > 0) {
@@ -2620,7 +2625,7 @@ AUPluginInfo::cached_io_configuration (const std::string& unique_id,
 	add_cached_info (id, cinfo);
 	save_cached_info ();
 
-	return true;
+	return 0;
 }
 
 void
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index c18b5dd..00a381f 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -455,7 +455,7 @@ AudioEngine::backend_reset_requested()
 void
 AudioEngine::do_reset_backend()
 {
-	SessionEvent::create_per_thread_pool (X_("Backend reset processing thread"), 512);
+	SessionEvent::create_per_thread_pool (X_("Backend reset processing thread"), 1024);
     
 	Glib::Threads::Mutex::Lock guard (_reset_request_lock);
     
@@ -468,25 +468,28 @@ AudioEngine::do_reset_backend()
 			Glib::Threads::RecMutex::Lock pl (_state_lock);
 			g_atomic_int_dec_and_test (&_hw_reset_request_count);
 	        
-			std::cout << "AudioEngine::RESET::Reset request processing. Requests left: " << _hw_reset_request_count << std::endl;
-			DeviceResetStarted(); // notify about device reset to be started
-	        
-			// backup the device name
-			std::string name = _backend->device_name ();
-	        
-			std::cout << "AudioEngine::RESET::Stoping engine..." << std::endl;
-			stop();
-	        
-			std::cout << "AudioEngine::RESET::Reseting device..." << std::endl;
-			if ( 0 == _backend->reset_device () ) {
-		        
-				std::cout << "AudioEngine::RESET::Starting engine..." << std::endl;
-				start ();
-		        
+            std::cout << "AudioEngine::RESET::Reset request processing. Requests left: " << _hw_reset_request_count << std::endl;
+                        DeviceResetStarted(); // notify about device reset to be started
+            
+                        // backup the device name
+                        std::string name = _backend->device_name ();
+
+            std::cout << "AudioEngine::RESET::Reseting device..." << std::endl;
+			if ( ( 0 == stop () ) &&
+                 ( 0 == _backend->reset_device () ) &&
+                 ( 0 == start () ) ) {
+				
+				std::cout << "AudioEngine::RESET::Engine started..." << std::endl;
+				
 				// inform about possible changes
 				BufferSizeChanged (_backend->buffer_size() );
-			} else {
-				DeviceError();
+                DeviceResetFinished(); // notify about device reset finish
+            
+            } else {
+            
+                DeviceResetFinished(); // notify about device reset finish
+				// we've got an error
+                DeviceError();
 			}
 			
 			std::cout << "AudioEngine::RESET::Done." << std::endl;
@@ -522,6 +525,8 @@ AudioEngine::do_devicelist_update()
 
             _devicelist_update_lock.unlock();
             
+            Glib::Threads::RecMutex::Lock pl (_state_lock);
+            
             g_atomic_int_dec_and_test (&_hw_devicelist_update_count);
             DeviceListChanged (); /* EMIT SIGNAL */
         
@@ -623,9 +628,11 @@ AudioEngine::remove_session ()
 void
 AudioEngine::reconnect_session_routes (bool reconnect_inputs, bool reconnect_outputs)
 {
-    if (_session) {
-        _session->reconnect_existing_routes(true, true, reconnect_inputs, reconnect_outputs);
-    }
+#ifdef USE_TRACKS_CODE_FEATURES
+	if (_session) {
+		_session->reconnect_existing_routes(true, true, reconnect_inputs, reconnect_outputs);
+	}
+#endif	
 }
 
 
@@ -768,7 +775,7 @@ void
 AudioEngine::drop_backend ()
 {
 	if (_backend) {
-		stop(false);
+		_backend->stop ();
 		_backend->drop_device ();
 		_backend.reset ();
 		_running = false;
@@ -856,18 +863,28 @@ AudioEngine::stop (bool for_latency)
 		return 0;
 	}
 
-	if (_session && _running) {
-		// it's not a halt, but should be handled the same way:
-		// disable record, stop transport and I/O processign but save the data.
-		_session->engine_halted ();
-	}
+	Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
 
-	Glib::Threads::Mutex::Lock lm (_process_lock);
+	if (running()) {
+		pl.acquire ();
+	}
 
 	if (_backend->stop ()) {
 		return -1;
 	}
-	
+
+	if (pl.locked ()) {
+		pl.release ();
+	}
+
+	if (_session && _running &&
+	    (_session->state_of_the_state() & Session::Loading) == 0 &&
+	    (_session->state_of_the_state() & Session::Deletion) == 0) {
+		// it's not a halt, but should be handled the same way:
+		// disable record, stop transport and I/O processign but save the data.
+		_session->engine_halted ();
+	}
+
 	_running = false;
 	_processed_frames = 0;
 	_measuring_latency = MeasureNone;
@@ -1151,6 +1168,12 @@ AudioEngine::set_systemic_output_latency (uint32_t ol)
 	return _backend->set_systemic_output_latency  (ol);
 }
 
+bool
+AudioEngine::thread_initialised_for_audio_processing ()
+{
+    return SessionEvent::has_per_thread_pool () && AsyncMIDIPort::is_process_thread();
+}
+
 /* END OF BACKEND PROXY API */
 
 void
diff --git a/libs/ardour/audiofile_tagger.cc b/libs/ardour/audiofile_tagger.cc
index 61a05d4..e2d8117 100644
--- a/libs/ardour/audiofile_tagger.cc
+++ b/libs/ardour/audiofile_tagger.cc
@@ -43,6 +43,16 @@ bool
 AudiofileTagger::tag_file (std::string const & filename, SessionMetadata const & metadata)
 {
 	TagLib::FileRef file (filename.c_str());
+	if (file.isNull()) {
+		std::cerr << "TagLib::FileRef is null for file" << filename  << std::endl;
+		return true; // continue anyway?!
+	}
+
+	if (!file.tag()) {
+		std::cerr << "TagLib::Tag is null for file" << filename  << std::endl;
+		return true; // continue anyway?!
+	}
+
 	TagLib::Tag & tag (*file.tag());
 
 	tag_generic (tag, metadata);
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index 8113b26..a353556 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -25,6 +25,7 @@
 #include <set>
 
 #include <boost/scoped_array.hpp>
+#include <boost/shared_ptr.hpp>
 
 #include <glibmm/threads.h>
 
@@ -49,6 +50,11 @@
 #include "ardour/parameter_descriptor.h"
 #include "ardour/progress.h"
 
+#include "ardour/sndfilesource.h"
+#ifdef HAVE_COREAUDIO
+#include "ardour/coreaudiosource.h"
+#endif // HAVE_COREAUDIO
+
 #include "i18n.h"
 #include <locale.h>
 
@@ -1562,6 +1568,34 @@ AudioRegion::audio_source (uint32_t n) const
 	return boost::dynamic_pointer_cast<AudioSource>(source(n));
 }
 
+uint32_t
+AudioRegion::get_related_audio_file_channel_count () const
+{
+    uint32_t chan_count = 0;
+    for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) {
+        
+        boost::shared_ptr<SndFileSource> sndf = boost::dynamic_pointer_cast<SndFileSource>(*i);
+        if (sndf ) {
+            
+            if (sndf->channel_count() > chan_count) {
+                chan_count = sndf->channel_count();
+            }
+        }
+#ifdef HAVE_COREAUDIO
+        else {
+            boost::shared_ptr<CoreAudioSource> cauf = boost::dynamic_pointer_cast<CoreAudioSource>(*i);
+            if (cauf) {
+                if (cauf->channel_count() > chan_count) {
+                    chan_count = cauf->channel_count();
+                }
+            }
+        }
+#endif // HAVE_COREAUDIO
+    }
+    
+    return chan_count;
+}
+
 int
 AudioRegion::adjust_transients (frameoffset_t delta)
 {
diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc
index 566a37f..d9e7c93 100644
--- a/libs/ardour/audiosource.cc
+++ b/libs/ardour/audiosource.cc
@@ -68,7 +68,6 @@ using namespace PBD;
 Glib::Threads::Mutex AudioSource::_level_buffer_lock;
 vector<boost::shared_array<Sample> > AudioSource::_mixdown_buffers;
 vector<boost::shared_array<gain_t> > AudioSource::_gain_buffers;
-size_t AudioSource::_working_buffers_size = 0;
 bool AudioSource::_build_missing_peakfiles = false;
 
 /** true if we want peakfiles (e.g. if we are displaying a GUI) */
@@ -271,8 +270,8 @@ AudioSource::initialize_peakfile (string audio_path)
 			_peaks_built = false;
 		} else {
 			// Check if the audio file has changed since the peakfile was built.
-			struct stat stat_file;
-			int err = stat (audio_path.c_str(), &stat_file);
+			GStatBuf stat_file;
+			int err = g_stat (audio_path.c_str(), &stat_file);
 
 			if (err) {
 
@@ -364,26 +363,36 @@ AudioSource::read_peaks_with_fpp (PeakData *peaks, framecnt_t npeaks, framepos_t
 		return -1;
 	}
 
-	/* check actual size of the peakfile is at least large enough for all
-	 * the data in the audio file. if it is too short, assume that a crash
-	 * or other error truncated it, and rebuild it from scratch.
-	 */
+	if (!_captured_for.empty()) {
 	
-	const off_t expected_file_size = (_length / (double) samples_per_file_peak) * sizeof (PeakData);
-
-	if (statbuf.st_size < expected_file_size) {
-		warning << string_compose (_("peak file %1 is truncated from %2 to %3"), peakpath, expected_file_size, statbuf.st_size) << endmsg;
-		const_cast<AudioSource*>(this)->build_peaks_from_scratch ();
-		if (g_stat (peakpath.c_str(), &statbuf) != 0) {
-			error << string_compose (_("Cannot open peakfile @ %1 for size check (%2) after rebuild"), peakpath, strerror (errno)) << endmsg;
-		}
+		/* _captured_for is only set after a capture pass is
+		 * complete. so we know that capturing is finished for this
+		 * file, and now we can check actual size of the peakfile is at
+		 * least large enough for all the data in the audio file. if it
+		 * is too short, assume that a crash or other error truncated
+		 * it, and rebuild it from scratch.
+		 *
+		 * XXX this may not work for destructive recording, but we
+		 * might decided to get rid of that anyway.
+		 * 
+		 */
+		
+		const off_t expected_file_size = (_length / (double) samples_per_file_peak) * sizeof (PeakData);
+		
 		if (statbuf.st_size < expected_file_size) {
-			fatal << "peak file is still truncated after rebuild" << endmsg;
-			/*NOTREACHED*/
+			warning << string_compose (_("peak file %1 is truncated from %2 to %3"), peakpath, expected_file_size, statbuf.st_size) << endmsg;
+			const_cast<AudioSource*>(this)->build_peaks_from_scratch ();
+			if (g_stat (peakpath.c_str(), &statbuf) != 0) {
+				error << string_compose (_("Cannot open peakfile @ %1 for size check (%2) after rebuild"), peakpath, strerror (errno)) << endmsg;
+			}
+			if (statbuf.st_size < expected_file_size) {
+				fatal << "peak file is still truncated after rebuild" << endmsg;
+				/*NOTREACHED*/
+			}
 		}
 	}
 
-	ScopedFileDescriptor sfd (::open (peakpath.c_str(), O_RDONLY));
+	ScopedFileDescriptor sfd (g_open (peakpath.c_str(), O_RDONLY, 0444));
 
 	if (sfd < 0) {
 		error << string_compose (_("Cannot open peakfile @ %1 for reading (%2)"), peakpath, strerror (errno)) << endmsg;
@@ -766,7 +775,7 @@ AudioSource::build_peaks_from_scratch ()
 int
 AudioSource::prepare_for_peakfile_writes ()
 {
-	if ((_peakfile_fd = open (peakpath.c_str(), O_CREAT|O_RDWR, 0664)) < 0) {
+	if ((_peakfile_fd = g_open (peakpath.c_str(), O_CREAT|O_RDWR, 0664)) < 0) {
 		error << string_compose(_("AudioSource: cannot open peakpath (c) \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
 		return -1;
 	}
diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc
index 30a354a..27d56d7 100644
--- a/libs/ardour/auditioner.cc
+++ b/libs/ardour/auditioner.cc
@@ -34,6 +34,7 @@
 #include "ardour/midi_region.h"
 #include "ardour/plugin.h"
 #include "ardour/plugin_insert.h"
+#include "ardour/profile.h"
 #include "ardour/region_factory.h"
 #include "ardour/route.h"
 #include "ardour/session.h"
@@ -327,7 +328,11 @@ Auditioner::set_diskstream (boost::shared_ptr<Diskstream> ds)
 	Track::set_diskstream (ds);
 
 	_diskstream->set_track (this);
-	_diskstream->set_destructive (_mode == Destructive);
+	if (Profile->get_trx()) {
+		_diskstream->set_destructive (false);
+	} else {
+		_diskstream->set_destructive (_mode == Destructive);
+	}
 	_diskstream->set_non_layered (_mode == NonLayered);
 	_diskstream->set_record_enabled (false);
 	_diskstream->request_input_monitoring (false);
@@ -477,7 +482,7 @@ Auditioner::audition_region (boost::shared_ptr<Region> region)
 		offset = 0;
 	}
 
-	_diskstream->seek (offset);
+	_diskstream->seek (offset, true);
 	current_frame = offset;
 
 	g_atomic_int_set (&_auditioning, 1);
diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc
index 2195203..26ea53c 100644
--- a/libs/ardour/automation_control.cc
+++ b/libs/ardour/automation_control.cc
@@ -19,12 +19,15 @@
 */
 
 #include <iostream>
-
 #include "ardour/automation_control.h"
 #include "ardour/automation_watch.h"
 #include "ardour/event_type_map.h"
 #include "ardour/session.h"
 
+#include "pbd/memento_command.h"
+
+#include "i18n.h"
+
 using namespace std;
 using namespace ARDOUR;
 using namespace PBD;
@@ -85,6 +88,8 @@ AutomationControl::set_automation_state (AutoState as)
 		}
 
 		if (as == Write) {
+			/* get state for undo */
+			_before = &alist ()->get_state ();
 			AutomationWatch::instance().add_automation_watch (shared_from_this());
 		} else if (as == Touch) {
 			if (!touching()) {
@@ -113,9 +118,16 @@ AutomationControl::set_automation_style (AutoStyle as)
 void
 AutomationControl::start_touch(double when)
 {
-	if (!_list) return;
+	if (!_list) {
+		return;
+	}
+
 	if (!touching()) {
+
 		if (alist()->automation_state() == Touch) {
+			/* subtle. aligns the user value with the playback */
+			set_value (get_value ());
+			_before = &alist ()->get_state ();
 			alist()->start_touch (when);
 			if (!_desc.toggled) {
 				AutomationWatch::instance().add_automation_watch (shared_from_this());
@@ -131,11 +143,22 @@ AutomationControl::stop_touch(bool mark, double when)
 	if (!_list) return;
 	if (touching()) {
 		set_touching (false);
+
+		if (alist()->automation_state() == Write) {
+			_session.begin_reversible_command (string_compose (_("write %1 automation"), name ()));
+			_session.add_command (new MementoCommand<AutomationList> (*alist ().get (), _before, &alist ()->get_state ()));
+			_session.commit_reversible_command ();
+		}
+
 		if (alist()->automation_state() == Touch) {
 			alist()->stop_touch (mark, when);
 			if (!_desc.toggled) {
 				AutomationWatch::instance().remove_automation_watch (shared_from_this());
 			}
+
+			_session.begin_reversible_command (string_compose (_("touch %1 automation"), name ()));
+			_session.add_command (new MementoCommand<AutomationList> (*alist ().get (), _before, &alist ()->get_state ()));
+			_session.commit_reversible_command ();
 		}
 	}
 }
@@ -152,7 +175,7 @@ AutomationControl::internal_to_interface (double val) const
 
 	if (_desc.logarithmic) {
 		if (val > 0) {
-			val = pow (val, 1/1.5);
+			val = pow (val, 1./2.0);
 		} else {
 			val = 0;
 		}
@@ -168,7 +191,7 @@ AutomationControl::interface_to_internal (double val) const
 		if (val <= 0) {
 			val = 0;
 		} else {
-			val = pow (val, 1.5);
+			val = pow (val, 2.0);
 		}
 	}
 
diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc
index 7f7599f..706a333 100644
--- a/libs/ardour/automation_list.cc
+++ b/libs/ardour/automation_list.cc
@@ -276,7 +276,11 @@ AutomationList::state (bool full)
                 if (_state != Write) {
                         root->add_property ("state", auto_state_to_string (_state));
                 } else {
-                        root->add_property ("state", auto_state_to_string (Off));
+			if (_events.empty ()) {
+				root->add_property ("state", auto_state_to_string (Off));
+			} else {
+				root->add_property ("state", auto_state_to_string (Touch));
+			}
                 }
 	} else {
 		/* never save anything but Off for automation state to a template */
diff --git a/libs/ardour/automation_watch.cc b/libs/ardour/automation_watch.cc
index 4e833fc..3714f17 100644
--- a/libs/ardour/automation_watch.cc
+++ b/libs/ardour/automation_watch.cc
@@ -128,7 +128,7 @@ AutomationWatch::timer ()
 					(*aw)->list()->add (time, (*aw)->user_double(), true);
 				}
 			}
-		} else {  //transport stopped or reversed.  stop the automation pass and start a new one (for bonus points, someday store the previous pass in an undo record)
+		} else if (time != _last_time) {  //transport stopped or reversed.  stop the automation pass and start a new one (for bonus points, someday store the previous pass in an undo record)
 			for (AutomationWatches::iterator aw = automation_watches.begin(); aw != automation_watches.end(); ++aw) {
 				DEBUG_TRACE (DEBUG::Automation, string_compose ("%1: transport in rewind, speed %2, in write pass ? %3 writing ? %4\n", 
 										(*aw)->name(), _session->transport_speed(), _session->transport_rolling(),
diff --git a/libs/ardour/butler.cc b/libs/ardour/butler.cc
index 01c21b4..f8f8c83 100644
--- a/libs/ardour/butler.cc
+++ b/libs/ardour/butler.cc
@@ -54,6 +54,7 @@ Butler::Butler(Session& s)
 	g_atomic_int_set(&should_do_transport_work, 0);
 	SessionEvent::pool->set_trash (&pool_trash);
 
+        /* catch future changes to parameters */
         Config->ParameterChanged.connect_same_thread (*this, boost::bind (&Butler::config_changed, this, _1));
 }
 
@@ -63,15 +64,38 @@ Butler::~Butler()
 }
 
 void
+Butler::map_parameters ()
+{
+        /* use any current ones that we care about */
+        boost::function<void (std::string)> ff (boost::bind (&Butler::config_changed, this, _1));
+        Config->map_parameters (ff);
+}
+
+void
 Butler::config_changed (std::string p)
 {
 	if (p == "playback-buffer-seconds") {
-		/* size is in Samples, not bytes */
-		audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * _session.frame_rate());
 		_session.adjust_playback_buffering ();
+		if (Config->get_buffering_preset() == Custom) {
+			/* size is in Samples, not bytes */
+			audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * _session.frame_rate());
+			_session.adjust_playback_buffering ();
+		} else {
+			std::cerr << "Skip explicit buffer seconds, preset in use\n";
+		}
 	} else if (p == "capture-buffer-seconds") {
+		if (Config->get_buffering_preset() == Custom) {
+			audio_dstream_capture_buffer_size = (uint32_t) floor (Config->get_audio_capture_buffer_seconds() * _session.frame_rate());
+			_session.adjust_capture_buffering ();
+		} else {
+			std::cerr << "Skip explicit buffer seconds, preset in use\n";
+		}
+	} else if (p == "buffering-preset") {
+		Diskstream::set_buffering_parameters (Config->get_buffering_preset());
 		audio_dstream_capture_buffer_size = (uint32_t) floor (Config->get_audio_capture_buffer_seconds() * _session.frame_rate());
+		audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * _session.frame_rate());
 		_session.adjust_capture_buffering ();
+		_session.adjust_playback_buffering ();
 	} else if (p == "midi-readahead") {
 		MidiDiskstream::set_readahead_frames ((framecnt_t) (Config->get_midi_readahead() * _session.frame_rate()));
 	}
@@ -80,14 +104,16 @@ Butler::config_changed (std::string p)
 int
 Butler::start_thread()
 {
-	const float rate = (float)_session.frame_rate();
-
+	// set up capture and playback buffering
+	Diskstream::set_buffering_parameters (Config->get_buffering_preset());
+	
 	/* size is in Samples, not bytes */
+	const float rate = (float)_session.frame_rate();
 	audio_dstream_capture_buffer_size = (uint32_t) floor (Config->get_audio_capture_buffer_seconds() * rate);
 	audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * rate);
-
+    
 	/* size is in bytes
-	 * XXX: Jack needs to tell us the MIDI buffer size
+	 * XXX: AudioEngine needs to tell us the MIDI buffer size
 	 * (i.e. how many MIDI bytes we might see in a cycle)
 	 */
 	midi_dstream_buffer_size = (uint32_t) floor (Config->get_midi_track_buffer_seconds() * rate);
@@ -103,6 +129,11 @@ Butler::start_thread()
 
 	//pthread_detach (thread);
 	have_thread = true;
+    
+	// we are ready to request buffer adjustments
+	_session.adjust_capture_buffering ();
+	_session.adjust_playback_buffering ();
+	
 	return 0;
 }
 
diff --git a/libs/ardour/debug.cc b/libs/ardour/debug.cc
index 0a00e89..d7b7269 100644
--- a/libs/ardour/debug.cc
+++ b/libs/ardour/debug.cc
@@ -65,5 +65,6 @@ PBD::DebugBits PBD::DEBUG::Ports = PBD::new_debug_bit ("Ports");
 PBD::DebugBits PBD::DEBUG::AudioEngine = PBD::new_debug_bit ("AudioEngine");
 PBD::DebugBits PBD::DEBUG::Soundcloud = PBD::new_debug_bit ("Soundcloud");
 PBD::DebugBits PBD::DEBUG::Butler = PBD::new_debug_bit ("Butler");
+PBD::DebugBits PBD::DEBUG::GenericMidi = PBD::new_debug_bit ("genericmidi");
 
 
diff --git a/libs/ardour/directory_names.cc b/libs/ardour/directory_names.cc
index a5d7bbb..d8c35c5 100644
--- a/libs/ardour/directory_names.cc
+++ b/libs/ardour/directory_names.cc
@@ -39,5 +39,9 @@ const char* const surfaces_dir_name = X_("surfaces");
 const char* const ladspa_dir_name = X_("ladspa");
 const char* const panner_dir_name = X_("panners");
 const char* const backend_dir_name = X_("backends");
+const char* const automation_dir_name = X_("automation");
+const char* const analysis_dir_name = X_("analysis");
+const char* const plugins_dir_name = X_("plugins");
+const char* const externals_dir_name = X_("externals");
 
 }
diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc
index 9f3322d..91859e7 100644
--- a/libs/ardour/diskstream.cc
+++ b/libs/ardour/diskstream.cc
@@ -42,6 +42,7 @@
 #include "ardour/diskstream.h"
 #include "ardour/io.h"
 #include "ardour/pannable.h"
+#include "ardour/profile.h"
 #include "ardour/playlist.h"
 #include "ardour/session.h"
 #include "ardour/track.h"
@@ -498,6 +499,11 @@ Diskstream::set_state (const XMLNode& node, int /*version*/)
 		_flags = Flag (string_2_enum (prop->value(), _flags));
 	}
 
+	if (Profile->get_trx() && (_flags & Destructive)) {
+		error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg;
+		return -1;
+	}
+	
         if ((prop = node.property (X_("capture-alignment"))) != 0) {
                 set_align_choice (AlignChoice (string_2_enum (prop->value(), _alignment_choice)), true);
         } else {
@@ -799,3 +805,63 @@ Diskstream::default_disk_write_chunk_frames ()
 {
 	return 65536;
 }
+
+void
+Diskstream::set_buffering_parameters (BufferingPreset bp)
+{
+	framecnt_t read_chunk_size;
+	framecnt_t read_buffer_size;
+	framecnt_t write_chunk_size;
+	framecnt_t write_buffer_size;
+
+	if (!get_buffering_presets (bp, read_chunk_size, read_buffer_size, write_chunk_size, write_buffer_size)) {
+		return;
+	}
+	
+	disk_read_chunk_frames = read_chunk_size;
+	disk_write_chunk_frames = write_chunk_size;
+	Config->set_audio_capture_buffer_seconds (write_buffer_size);
+	Config->set_audio_playback_buffer_seconds (read_buffer_size);
+
+	cerr << "Set buffering params to " << disk_read_chunk_frames << '|' << disk_write_chunk_frames << '|'
+	     << Config->get_audio_playback_buffer_seconds() << '|'
+	     << Config->get_audio_capture_buffer_seconds ()
+	     << endl;
+}
+
+bool
+Diskstream::get_buffering_presets (BufferingPreset bp,
+                                   framecnt_t& read_chunk_size,
+                                   framecnt_t& read_buffer_size,
+                                   framecnt_t& write_chunk_size,
+                                   framecnt_t& write_buffer_size)
+{
+	switch (bp) {
+	case Small:
+		read_chunk_size = 65536;  /* samples */
+		write_chunk_size = 65536; /* samples */
+		read_buffer_size = 5;  /* seconds */
+		write_buffer_size = 5; /* seconds */
+		break;
+
+	case Medium:
+		read_chunk_size = 262144;  /* samples */
+		write_chunk_size = 131072; /* samples */
+		read_buffer_size = 10;  /* seconds */
+		write_buffer_size = 10; /* seconds */
+		break;
+
+	case Large:
+		read_chunk_size = 524288; /* samples */
+		write_chunk_size = 131072; /* samples */
+		read_buffer_size = 20; /* seconds */
+		write_buffer_size = 20; /* seconds */
+		break;
+
+	default:
+		return false;
+	}
+
+	return true;
+}
+
diff --git a/libs/ardour/engine_state_controller.cc b/libs/ardour/engine_state_controller.cc
new file mode 100644
index 0000000..eb4cb14
--- /dev/null
+++ b/libs/ardour/engine_state_controller.cc
@@ -0,0 +1,1907 @@
+/*
+  Copyright (C) 2014 Waves Audio Ltd.
+ 
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+ 
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+ 
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ 
+*/
+
+#include "ardour/engine_state_controller.h"
+
+#include "ardour/audioengine.h"
+#include "ardour/session.h"
+#include "ardour/rc_configuration.h"
+#include "ardour/data_type.h"
+
+#include "pbd/pthread_utils.h"
+#include "pbd/error.h"
+#include "i18n.h"
+
+
+using namespace ARDOUR;
+using namespace PBD;
+
+namespace {
+    
+struct DevicePredicate
+{
+	DevicePredicate (const std::string& device_name)
+		: _device_name (device_name)
+	{}
+        
+	bool operator ()(const AudioBackend::DeviceStatus& rhs)
+	{
+		return _device_name == rhs.name;
+	}
+        
+                                        private:
+	std::string _device_name;
+};
+}
+
+EngineStateController*
+EngineStateController::instance ()
+{
+	static EngineStateController instance;
+	return &instance;
+}
+
+
+EngineStateController::EngineStateController ()
+	: _current_state ()
+	, _last_used_real_device ("")
+
+{
+	AudioEngine::instance ()->Running.connect_same_thread (running_connection, boost::bind (&EngineStateController::_on_engine_running, this));
+	AudioEngine::instance ()->Stopped.connect_same_thread (stopped_connection, boost::bind (&EngineStateController::_on_engine_stopped, this));
+	AudioEngine::instance ()->Halted.connect_same_thread (stopped_connection, boost::bind (&EngineStateController::_on_engine_stopped, this));
+    
+	/* Subscribe for udpates from AudioEngine */
+	AudioEngine::instance ()->PortRegisteredOrUnregistered.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_ports_registration_update, this));
+	AudioEngine::instance ()->SampleRateChanged.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_sample_rate_change, this, _1));
+	AudioEngine::instance ()->BufferSizeChanged.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_buffer_size_change, this, _1));
+	AudioEngine::instance ()->DeviceListChanged.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_device_list_change, this));
+	AudioEngine::instance ()->DeviceError.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_device_error, this));
+    
+	/* Global configuration parameters update */
+	Config->ParameterChanged.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_parameter_changed, this, _1));
+    
+	_deserialize_and_load_engine_states ();
+	_deserialize_and_load_midi_port_states ();
+	_do_initial_engine_setup ();
+    
+	// now push the sate to the backend
+	push_current_state_to_backend (false);
+}
+
+
+EngineStateController::~EngineStateController ()
+{
+}
+
+
+void
+EngineStateController::set_session (Session* session)
+{
+	_session = session;
+	_session->SessionLoaded.connect_same_thread (session_connections, boost::bind (&EngineStateController::_on_session_loaded, this));
+}
+
+
+void
+EngineStateController::remove_session ()
+{
+	session_connections.drop_connections ();
+	_session = 0;
+}
+
+
+XMLNode&
+EngineStateController::serialize_audio_midi_settings ()
+{
+    
+	XMLNode* root = new XMLNode ("AudioMidiSettings");
+    
+	_serialize_engine_states (root);
+	_serialize_midi_port_states (root);
+    
+	return *root;
+}
+
+
+void
+EngineStateController::save_audio_midi_settings ()
+{
+	Config->add_extra_xml (serialize_audio_midi_settings ());
+	Config->save_state ();
+}
+
+
+void
+EngineStateController::_deserialize_and_load_engine_states ()
+{
+	XMLNode* audio_midi_settings_root = ARDOUR::Config->extra_xml ("AudioMidiSettings");
+    
+	if (!audio_midi_settings_root) {
+		return;
+	}
+    
+	XMLNode* engine_states = audio_midi_settings_root->child ("EngineStates");
+    
+	if (!engine_states) {
+		return;
+	}
+    
+	XMLNodeList state_nodes_list = engine_states->children ();
+	XMLNodeConstIterator state_node_iter = state_nodes_list.begin ();
+    
+	for (; state_node_iter != state_nodes_list.end (); ++state_node_iter) {
+        
+		XMLNode* state_node = *state_node_iter;
+		StatePtr engine_state (new State);
+		XMLProperty* prop = NULL;
+        
+		if ((prop = state_node->property ("backend-name")) == 0) {
+			continue;
+		}
+		engine_state->backend_name = prop->value ();
+        
+		if ((prop = state_node->property ("device-name")) == 0) {
+			continue;
+		}
+		engine_state->device_name = prop->value ();
+        
+		if ((prop = state_node->property ("sample-rate")) == 0) {
+			continue;
+		}
+		engine_state->sample_rate = atoi (prop->value ());
+        
+		if ((prop = state_node->property ("buffer-size")) == 0) {
+			continue;
+		}
+		engine_state->buffer_size = atoi (prop->value ());
+        
+		if ((prop = state_node->property ("active")) == 0) {
+			continue;
+		}
+		engine_state->active = string_is_affirmative (prop->value ());
+        
+		XMLNodeList state_children_list = state_node->children ();
+		XMLNodeConstIterator state_child_iter = state_children_list.begin ();
+        
+		for (; state_child_iter != state_children_list.end (); ++state_child_iter) {
+			XMLNode* state_child = *state_child_iter;
+                
+			if (state_child->name () == "InputConfiguration") {
+                    
+				XMLNodeList input_states_nodes = state_child->children ();
+				XMLNodeConstIterator input_state_node_iter = input_states_nodes.begin ();
+				PortStateList& input_states = engine_state->input_channel_states;
+                    
+				for (; input_state_node_iter != input_states_nodes.end (); ++input_state_node_iter) {
+                        
+					XMLNode* input_state_node = *input_state_node_iter;
+                        
+					if (input_state_node->name () != "input") {
+						continue;
+					}
+					PortState input_state (input_state_node->name ());
+                        
+					if ((prop = input_state_node->property ("name")) == 0) {
+						continue;
+					}
+					input_state.name = prop->value ();
+                        
+					if ((prop = input_state_node->property ("active")) == 0) {
+						continue;
+					}
+					input_state.active = string_is_affirmative (prop->value ());
+                        
+					input_states.push_back (input_state);
+				}
+                    
+			} else if (state_child->name () == "MultiOutConfiguration") {
+                    
+				XMLNodeList multi_out_state_nodes = state_child->children ();
+				XMLNodeConstIterator multi_out_state_node_iter = multi_out_state_nodes.begin ();
+				PortStateList& multi_out_states = engine_state->multi_out_channel_states;
+                    
+				for (; multi_out_state_node_iter != multi_out_state_nodes.end (); ++multi_out_state_node_iter) {
+                        
+					XMLNode* multi_out_state_node = *multi_out_state_node_iter;
+                        
+					if (multi_out_state_node->name () != "output") {
+						continue;
+					}
+					PortState multi_out_state (multi_out_state_node->name ());
+                        
+					if ((prop = multi_out_state_node->property ("name")) == 0) {
+						continue;
+					}
+					multi_out_state.name = prop->value ();
+                        
+					if ((prop = multi_out_state_node->property ("active")) == 0) {
+						continue;
+					}
+					multi_out_state.active = string_is_affirmative (prop->value ());
+                        
+					multi_out_states.push_back (multi_out_state);
+				}
+			} else if (state_child->name () == "StereoOutConfiguration") {
+                    
+				XMLNodeList stereo_out_state_nodes = state_child->children ();
+				XMLNodeConstIterator stereo_out_state_node_iter = stereo_out_state_nodes.begin ();
+				PortStateList& stereo_out_states = engine_state->stereo_out_channel_states;
+                    
+				for (; stereo_out_state_node_iter != stereo_out_state_nodes.end (); ++stereo_out_state_node_iter) {
+                        
+					XMLNode* stereo_out_state_node = *stereo_out_state_node_iter;
+                        
+					if (stereo_out_state_node->name () != "output") {
+						continue;
+					}
+					PortState stereo_out_state (stereo_out_state_node->name ());
+                        
+					if ((prop = stereo_out_state_node->property ("name")) == 0) {
+						continue;
+					}
+					stereo_out_state.name = prop->value ();
+                        
+					if ((prop = stereo_out_state_node->property ("active")) == 0) {
+						continue;
+					}                      
+					stereo_out_state.active = string_is_affirmative (prop->value ());
+                        
+					stereo_out_states.push_back (stereo_out_state);
+				}
+			}
+		}
+        
+		_states.push_back (engine_state);
+	}
+}
+
+
+void
+EngineStateController::_deserialize_and_load_midi_port_states ()
+{  
+	XMLNode* audio_midi_settings_root = ARDOUR::Config->extra_xml ("AudioMidiSettings");
+    
+	if (!audio_midi_settings_root) {
+		return;
+	}
+    
+	XMLNode* midi_states = audio_midi_settings_root->child ("MidiStates");
+    
+	if (!midi_states) {
+		return;
+	}
+    
+	XMLNodeList state_nodes_list = midi_states->children ();
+	XMLNodeConstIterator state_node_iter = state_nodes_list.begin ();
+	for (; state_node_iter != state_nodes_list.end (); ++state_node_iter) {
+        
+		XMLNode* state_node = *state_node_iter;
+		if (state_node->name () == "MidiInputs") {
+            
+			XMLNodeList input_state_nodes = state_node->children ();
+			XMLNodeConstIterator input_state_node_iter = input_state_nodes.begin ();
+			_midi_inputs.clear ();
+            
+			for (; input_state_node_iter != input_state_nodes.end (); ++input_state_node_iter) {
+                
+				XMLNode* input_state_node = *input_state_node_iter;
+				XMLProperty* prop = NULL;
+                
+				if (input_state_node->name () != "input") {
+					continue;
+				}
+				MidiPortState input_state (input_state_node->name ());
+                
+				if ((prop = input_state_node->property ("name")) == 0) {
+					continue;
+				}
+				input_state.name = prop->value ();
+                
+				if ((prop = input_state_node->property ("active")) == 0) {
+					continue;
+				}
+				input_state.active = string_is_affirmative (prop->value ());
+                
+				if ((prop = input_state_node->property ("scene-connected")) == 0) {
+					continue;
+				}
+				input_state.scene_connected = string_is_affirmative (prop->value ());
+                
+				if ((prop = input_state_node->property ("mtc-in")) == 0) {
+					continue;
+				}
+				input_state.mtc_in = string_is_affirmative (prop->value ());
+                
+				_midi_inputs.push_back (input_state);
+			}
+            
+		} else if (state_node->name () == "MidiOutputs") {
+            
+			XMLNodeList output_state_nodes = state_node->children ();
+			XMLNodeConstIterator output_state_node_iter = output_state_nodes.begin ();
+			_midi_outputs.clear ();
+            
+			for (; output_state_node_iter != output_state_nodes.end (); ++output_state_node_iter) {
+                
+				XMLNode* output_state_node = *output_state_node_iter;
+				XMLProperty* prop = NULL;
+                
+				if (output_state_node->name () != "output") {
+					continue;
+				}
+				MidiPortState output_state (output_state_node->name ());
+                
+				if ((prop = output_state_node->property ("name")) == 0) {
+					continue;
+				}
+				output_state.name = prop->value ();
+                
+				if ((prop = output_state_node->property ("active")) == 0) {
+					continue;
+				}
+				output_state.active = string_is_affirmative (prop->value ());
+                
+				if ((prop = output_state_node->property ("scene-connected")) == 0) {
+					continue;
+				}
+				output_state.scene_connected = string_is_affirmative (prop->value ());
+                
+				if ((prop = output_state_node->property ("mtc-in")) == 0) {
+					continue;
+				}
+				output_state.mtc_in = string_is_affirmative (prop->value ());
+                
+				_midi_outputs.push_back (output_state);
+			}
+		}
+	}
+}
+
+
+void
+EngineStateController::_serialize_engine_states (XMLNode* audio_midi_settings_node)
+{
+	if (!audio_midi_settings_node) {
+		return;
+	}
+    
+	// clean up state data first
+	audio_midi_settings_node->remove_nodes_and_delete ("EngineStates" );
+    
+	XMLNode* engine_states = new XMLNode ("EngineStates" );
+    
+	StateList::const_iterator state_iter = _states.begin ();
+	for (; state_iter != _states.end (); ++state_iter) {
+        
+		StatePtr state_ptr = *state_iter;
+        
+		// create new node for the state
+		XMLNode* state_node = new XMLNode ("State");
+        
+		state_node->add_property ("backend-name", state_ptr->backend_name);
+		state_node->add_property ("device-name", state_ptr->device_name);
+		state_node->add_property ("sample-rate", state_ptr->sample_rate);
+		state_node->add_property ("buffer-size", state_ptr->buffer_size);
+		state_node->add_property ("active", state_ptr->active ? "yes" : "no");
+        
+		// store channel states:
+		// inputs
+		XMLNode* input_config_node = new XMLNode ("InputConfiguration");
+		PortStateList& input_channels = state_ptr->input_channel_states;
+		PortStateList::const_iterator input_state_iter = input_channels.begin ();
+		for (; input_state_iter != input_channels.end (); ++input_state_iter) {
+			XMLNode* input_state_node = new XMLNode ("input");
+			input_state_node->add_property ("name", input_state_iter->name);
+			input_state_node->add_property ("active", input_state_iter->active ? "yes" : "no");
+			input_config_node->add_child_nocopy (*input_state_node);
+		}
+		state_node->add_child_nocopy (*input_config_node);
+        
+		// multi out outputs
+		XMLNode* multi_out_config_node = new XMLNode ("MultiOutConfiguration");
+		PortStateList& multi_out_channels = state_ptr->multi_out_channel_states;
+		PortStateList::const_iterator multi_out_state_iter = multi_out_channels.begin ();
+		for (; multi_out_state_iter != multi_out_channels.end (); ++multi_out_state_iter) {
+			XMLNode* multi_out_state_node = new XMLNode ("output" );
+			multi_out_state_node->add_property ("name", multi_out_state_iter->name);
+			multi_out_state_node->add_property ("active", multi_out_state_iter->active ? "yes" : "no");
+			multi_out_config_node->add_child_nocopy (*multi_out_state_node);
+		}
+		state_node->add_child_nocopy (*multi_out_config_node);
+        
+		// stereo out outputs
+		XMLNode* stereo_out_config_node = new XMLNode ("StereoOutConfiguration");
+		PortStateList& stereo_out_channels = state_ptr->stereo_out_channel_states;
+		PortStateList::const_iterator stereo_out_state_iter = stereo_out_channels.begin ();
+		for (; stereo_out_state_iter != stereo_out_channels.end (); ++stereo_out_state_iter) {
+			XMLNode* stereo_out_state_node = new XMLNode ("output" );
+			stereo_out_state_node->add_property ("name", stereo_out_state_iter->name);
+			stereo_out_state_node->add_property ("active", stereo_out_state_iter->active ? "yes" : "no");
+			stereo_out_config_node->add_child_nocopy (*stereo_out_state_node);
+		}
+		state_node->add_child_nocopy (*stereo_out_config_node);
+    
+		engine_states->add_child_nocopy (*state_node);
+	}
+
+	audio_midi_settings_node->add_child_nocopy (*engine_states);
+}
+
+
+void
+EngineStateController::_serialize_midi_port_states (XMLNode* audio_midi_settings_node)
+{
+	if (!audio_midi_settings_node) {
+		return;
+	}
+    
+	// clean up state data first
+	audio_midi_settings_node->remove_nodes_and_delete ("MidiStates" );
+    
+	XMLNode* midi_states_node = new XMLNode ("MidiStates" );
+    
+	XMLNode* midi_input_states_node = new XMLNode ("MidiInputs" );
+	MidiPortStateList::const_iterator midi_input_state_iter = _midi_inputs.begin ();
+	for (; midi_input_state_iter != _midi_inputs.end (); ++midi_input_state_iter) {
+		XMLNode* midi_input_node = new XMLNode ("input" );
+		midi_input_node->add_property ("name", midi_input_state_iter->name);
+		midi_input_node->add_property ("active", midi_input_state_iter->active ? "yes" : "no");
+		midi_input_node->add_property ("scene_connected", midi_input_state_iter->scene_connected ? "yes" : "no");
+		midi_input_node->add_property ("mtc-in", midi_input_state_iter->mtc_in ? "yes" : "no");
+		midi_input_states_node->add_child_nocopy (*midi_input_node);
+	}
+	midi_states_node->add_child_nocopy (*midi_input_states_node);
+    
+	XMLNode* midi_output_states_node = new XMLNode ("MidiOutputs" );
+	MidiPortStateList::const_iterator midi_output_state_iter = _midi_outputs.begin ();
+	for (; midi_output_state_iter != _midi_outputs.end (); ++midi_output_state_iter) {
+		XMLNode* midi_output_node = new XMLNode ("output" );
+		midi_output_node->add_property ("name", midi_output_state_iter->name);
+		midi_output_node->add_property ("active", midi_output_state_iter->active ? "yes" : "no");
+		midi_output_node->add_property ("scene_connected", midi_output_state_iter->scene_connected ? "yes" : "no");
+		midi_output_node->add_property ("mtc-in", midi_output_state_iter->mtc_in ? "yes" : "no");
+		midi_output_states_node->add_child_nocopy (*midi_output_node);
+	}
+	midi_states_node->add_child_nocopy (*midi_output_states_node);
+
+	audio_midi_settings_node->add_child_nocopy (*midi_states_node);
+}
+
+
+bool
+EngineStateController::_apply_state (const StatePtr& state)
+{
+	bool applied = false;
+    
+	if (set_new_backend_as_current (state->backend_name)) {
+		applied = set_new_device_as_current (state->device_name);
+	}
+    
+	return applied;
+}
+
+
+void
+EngineStateController::_do_initial_engine_setup ()
+{
+	bool state_applied = false;
+    
+	// if we have no saved state load default values
+	if (!_states.empty ()) {
+        
+		// look for last active state first
+		StateList::const_iterator state_iter = _states.begin ();
+		for (; state_iter != _states.end (); ++state_iter) {
+			if ( (*state_iter)->active ) {
+				state_applied = _apply_state (*state_iter);
+				break;
+			}
+		}
+        
+		// last active state was not applied
+		// try others
+		if (!state_applied) {
+			StateList::const_iterator state_iter = _states.begin ();
+			for (; state_iter != _states.end (); ++state_iter) {
+				state_applied = _apply_state (*state_iter);
+				break;
+			}
+		}
+	}
+
+	if (!state_applied ){
+		std::vector<const AudioBackendInfo*> backends = AudioEngine::instance ()->available_backends ();
+        
+		if (!backends.empty ()) {
+            
+			if (!set_new_backend_as_current (backends.front ()->name )) {
+				std::cerr << "\tfailed to set backend [" << backends.front ()->name << "]\n";
+			}
+		}
+        
+	}
+}
+
+
+bool
+EngineStateController::_validate_current_device_state ()
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+    
+	// check if device parameters from the state record are still valid
+	// validate sample rate
+	std::vector<float> sample_rates = backend->available_sample_rates (_current_state->device_name);
+    
+	if (sample_rates.empty ()) {
+		return false;
+	}
+
+	// check if session desired sample rate (if it's set) could be used with this device
+	if (_session != 0) {
+        
+		if ( !set_new_sample_rate_in_controller (_session->nominal_frame_rate ())) {
+			if ( !set_new_sample_rate_in_controller (backend->default_sample_rate ()) ) {
+				if (!set_new_sample_rate_in_controller (sample_rates.front ()) ) {
+					return false;
+				}
+			}
+		}
+    
+	} else {
+		// check if current sample rate is supported because we have no session desired sample rate value
+		if ( !set_new_sample_rate_in_controller (_current_state->sample_rate)) {
+			if ( !set_new_sample_rate_in_controller (backend->default_sample_rate ()) ) {
+				if (!set_new_sample_rate_in_controller (sample_rates.front ()) ) {
+					return false;
+				}
+			}
+		}
+	}
+    
+	// validate buffer size
+	std::vector<pframes_t> buffer_sizes = backend->available_buffer_sizes (_current_state->device_name);
+	// check if buffer size is supported
+	std::vector<pframes_t>::iterator bs_iter = std::find (buffer_sizes.begin (), buffer_sizes.end (), _current_state->buffer_size);
+	// if current is not found switch to default if is supported
+	if (bs_iter == buffer_sizes.end ()) {
+		bs_iter = std::find (buffer_sizes.begin (), buffer_sizes.end (), backend->default_buffer_size (_current_state->device_name));
+	
+		if (bs_iter != buffer_sizes.end ()) {
+			_current_state->buffer_size = backend->default_buffer_size (_current_state->device_name);
+		} else {
+			if (!buffer_sizes.empty ()) {
+				_current_state->buffer_size = buffer_sizes.front ();
+			}
+		}
+
+	}
+
+	return true;
+}
+
+
+void
+EngineStateController::_update_ltc_source_port ()
+{
+	// this method is called if the list of ports is changed
+    
+	// check that ltc-in port from Config still exists
+	if (_audio_input_port_exists (get_ltc_source_port ())) {
+		// audio port, that was saved in Config, exists
+		return ;
+	}
+
+	//otherwise set first available audio port
+	if (!_current_state->input_channel_states.empty ()) {
+		set_ltc_source_port (_current_state->input_channel_states.front ().name);
+		return ;
+	}
+    
+	// no available audio-in ports
+	set_ltc_source_port ("");
+}
+
+void
+EngineStateController::_update_ltc_output_port ()
+{
+	// this method is called if the list of ports is changed
+    
+	// check that ltc-out port from Config still exists
+	if (_audio_output_port_exists (get_ltc_output_port ())) {
+		// audio port, that was saved in Config, exists
+		return ;
+	}
+
+	PortStateList* output_states;
+	if (Config->get_output_auto_connect () & AutoConnectMaster) {
+		output_states = &_current_state->stereo_out_channel_states;
+	} else {
+		output_states = &_current_state->multi_out_channel_states;
+	}
+    
+	//otherwise set first available audio port
+	if (!output_states->empty ()) {
+		set_ltc_output_port (output_states->front ().name);
+		return ;
+	}
+    
+	// no available audio-out ports
+	set_ltc_output_port ("");
+}
+        
+
+bool
+EngineStateController::_audio_input_port_exists (const std::string& port_name)
+{
+	PortStateList::const_iterator iter = _current_state->input_channel_states.begin ();
+	for (; iter != _current_state->input_channel_states.end (); ++iter ) {
+		if (iter->name == port_name)
+			return true;
+	}
+	return false;
+}
+
+bool
+EngineStateController::_audio_output_port_exists (const std::string& port_name)
+{
+	PortStateList* output_states;
+	if (Config->get_output_auto_connect () & AutoConnectMaster) {
+		output_states = &_current_state->stereo_out_channel_states;
+	} else {
+		output_states = &_current_state->multi_out_channel_states;
+	}
+    
+	PortStateList::const_iterator iter = output_states->begin ();
+	for (; iter != output_states->end (); ++iter ) {
+		if (iter->name == port_name)
+			return true;
+	}
+	return false;
+}
+
+
+const std::string&
+EngineStateController::get_current_backend_name () const
+{
+	return _current_state->backend_name;
+}
+
+
+const std::string&
+EngineStateController::get_current_device_name () const
+{
+	return _current_state->device_name;
+}
+
+
+void
+EngineStateController::available_backends (std::vector<const AudioBackendInfo*>& available_backends)
+{
+	available_backends = AudioEngine::instance ()->available_backends ();
+}
+
+
+void
+EngineStateController::enumerate_devices (std::vector<AudioBackend::DeviceStatus>& device_vector) const
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+	device_vector = backend->enumerate_devices ();
+}
+
+
+framecnt_t
+EngineStateController::get_current_sample_rate () const
+{
+	return _current_state->sample_rate;
+}
+
+
+framecnt_t
+EngineStateController::get_default_sample_rate () const
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+	return backend->default_sample_rate ();
+}
+
+
+void
+EngineStateController::available_sample_rates_for_current_device (std::vector<float>& sample_rates) const
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+	sample_rates = backend->available_sample_rates (_current_state->device_name);
+}
+
+
+uint32_t
+EngineStateController::get_current_buffer_size () const
+{
+	return _current_state->buffer_size;
+}
+
+
+uint32_t
+EngineStateController::get_default_buffer_size () const
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+	return backend->default_buffer_size (_current_state->device_name);
+}
+
+
+void
+EngineStateController::available_buffer_sizes_for_current_device (std::vector<pframes_t>& buffer_sizes) const
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+	buffer_sizes = backend->available_buffer_sizes (_current_state->device_name);
+}
+
+
+bool
+EngineStateController::set_new_backend_as_current (const std::string& backend_name)
+{
+	if (backend_name == AudioEngine::instance ()->current_backend_name ()) {
+		return true;
+	}
+    
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->set_backend (backend_name, PROGRAM_NAME, "");
+	if (backend)
+	{
+		if (_current_state != NULL) {
+			_current_state->active = false;
+		}
+        
+		StateList::iterator found_state_iter = find_if (_states.begin (), _states.end (),
+		                                                State::StatePredicate (backend_name, "None"));
+        
+		if (found_state_iter != _states.end ()) {
+			// we found a record for new engine with None device - switch to it
+			_current_state = *found_state_iter;
+			_validate_current_device_state ();
+		} else {
+			// create new record for this engine with default device
+			_current_state = boost::shared_ptr<State>(new State ());
+			_current_state->backend_name = backend_name;
+			_current_state->device_name = "None";
+			_validate_current_device_state ();
+			_states.push_front (_current_state);
+		}
+        
+		push_current_state_to_backend (false);
+        
+		return true;
+	}
+    
+	return false;
+}
+
+
+bool
+EngineStateController::set_new_device_as_current (const std::string& device_name)
+{
+	if (_current_state->device_name == device_name) {
+		return true;
+	}
+    
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+    
+	std::vector<AudioBackend::DeviceStatus> device_vector = backend->enumerate_devices ();
+    
+	// validate the device
+	std::vector<AudioBackend::DeviceStatus>::iterator device_iter;
+	device_iter = std::find_if (device_vector.begin (), device_vector.end (), DevicePredicate (device_name));
+    
+	// device is available
+	if (device_iter != device_vector.end ()) {
+        
+		boost::shared_ptr<State> previous_state (_current_state);
+        
+		// look through state list and find the record for this device and current engine
+		StateList::iterator found_state_iter = find_if (_states.begin (), _states.end (),
+		                                                State::StatePredicate (backend->name (), device_name));
+        
+		if (found_state_iter != _states.end ())
+		{
+			// we found a record for current engine and provided device name - switch to it
+            
+			_current_state = *found_state_iter;
+            
+			if (!_validate_current_device_state ()) {
+				_current_state = previous_state;
+				return false;
+			}
+        
+		} else {
+       
+			// the record is not found, create new one
+			_current_state = boost::shared_ptr<State>(new State ());
+            
+			_current_state->backend_name = backend->name ();
+			_current_state->device_name = device_name;
+            
+			if (!_validate_current_device_state ()) {
+				_current_state = previous_state;
+				return false;
+			}
+            
+			_states.push_front (_current_state);
+		}
+        
+		if (previous_state != NULL) {
+			previous_state->active = false;
+		}
+        
+		push_current_state_to_backend (false);
+
+		_last_used_real_device.clear ();
+        
+		if (device_name != "None") {
+			_last_used_real_device = device_name;
+		}
+        
+		return true;
+	}
+    
+	// device is not supported by current backend
+	return false;
+}
+
+
+bool
+EngineStateController::set_new_sample_rate_in_controller (framecnt_t sample_rate)
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+    
+	std::vector<float> sample_rates = backend->available_sample_rates (_current_state->device_name);
+	std::vector<float>::iterator iter = std::find (sample_rates.begin (), sample_rates.end (), (float)sample_rate);
+    
+	if (iter != sample_rates.end ()) {
+		_current_state->sample_rate = sample_rate;
+		return true;
+	}
+    
+	return false;
+}
+
+
+bool
+EngineStateController::set_new_buffer_size_in_controller (pframes_t buffer_size)
+{    
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+    
+	std::vector<uint32_t> buffer_sizes = backend->available_buffer_sizes (_current_state->device_name);
+	std::vector<uint32_t>::iterator iter = std::find (buffer_sizes.begin (), buffer_sizes.end (), buffer_size);
+
+	if (iter != buffer_sizes.end ()) {
+		_current_state->buffer_size = buffer_size;
+		return true;
+	}
+    
+	return false;
+}
+
+
+uint32_t
+EngineStateController::get_available_inputs_count () const
+{
+	uint32_t available_channel_count = 0;
+    
+	PortStateList::const_iterator iter = _current_state->input_channel_states.begin ();
+    
+	for (; iter != _current_state->input_channel_states.end (); ++iter) {
+		if (iter->active) {
+			++available_channel_count;
+		}
+	}
+    
+	return available_channel_count;
+}
+
+
+uint32_t
+EngineStateController::get_available_outputs_count () const
+{
+	uint32_t available_channel_count = 0;
+    
+	PortStateList* output_states;
+	if (Config->get_output_auto_connect () & AutoConnectMaster) {
+		output_states = &_current_state->stereo_out_channel_states;
+	} else {
+		output_states = &_current_state->multi_out_channel_states;
+	}
+    
+	PortStateList::const_iterator iter = output_states->begin ();
+    
+	for (; iter != output_states->end (); ++iter) {
+		if (iter->active) {
+			++available_channel_count;
+		}
+	}
+    
+	return available_channel_count;
+}
+
+
+void
+EngineStateController::get_physical_audio_inputs (std::vector<std::string>& port_names)
+{
+	port_names.clear ();
+    
+	PortStateList &input_states = _current_state->input_channel_states;
+    
+	PortStateList::iterator iter = input_states.begin ();
+	for (; iter != input_states.end (); ++iter) {
+		if (iter->active) {
+			port_names.push_back (iter->name);
+		}
+	}
+}
+
+
+void
+EngineStateController::get_physical_audio_outputs (std::vector<std::string>& port_names)
+{
+	port_names.clear ();
+    
+	PortStateList* output_states;
+	if (Config->get_output_auto_connect () & AutoConnectMaster) {
+		output_states = &_current_state->stereo_out_channel_states;
+	} else {
+		output_states = &_current_state->multi_out_channel_states;
+	}
+    
+	PortStateList::iterator iter = output_states->begin ();
+	for (; iter != output_states->end (); ++iter) {
+		if (iter->active) {
+			port_names.push_back (iter->name);
+		}
+	}
+}
+
+
+void
+EngineStateController::get_physical_midi_inputs (std::vector<std::string>& port_names)
+{
+	port_names.clear ();
+    
+	MidiPortStateList::iterator iter = _midi_inputs.begin ();
+	for (; iter != _midi_inputs.end (); ++iter) {
+		if (iter->available && iter->active) {
+			port_names.push_back (iter->name);
+		}
+	}
+}
+
+
+void
+EngineStateController::get_physical_midi_outputs (std::vector<std::string>& port_names)
+{
+	port_names.clear ();
+    
+	MidiPortStateList::iterator iter = _midi_outputs.begin ();
+	for (; iter != _midi_outputs.end (); ++iter) {
+		if (iter->available && iter->active) {
+			port_names.push_back (iter->name);
+		}
+	}
+}
+
+
+void
+EngineStateController::set_physical_audio_input_state (const std::string& port_name, bool state)
+{
+	PortStateList &input_states = _current_state->input_channel_states;
+	PortStateList::iterator found_state_iter;
+	found_state_iter = std::find (input_states.begin (), input_states.end (), PortState (port_name));
+    
+	if (found_state_iter != input_states.end () && found_state_iter->active != state ) {
+		found_state_iter->active = state;
+		AudioEngine::instance ()->reconnect_session_routes (true, false);
+        
+		InputConfigChanged ();
+	}
+}
+
+
+void
+EngineStateController::set_physical_audio_output_state (const std::string& port_name, bool state)
+{
+	PortStateList* output_states;
+	if (Config->get_output_auto_connect () & AutoConnectMaster) {
+		output_states = &_current_state->stereo_out_channel_states;
+	} else {
+		output_states = &_current_state->multi_out_channel_states;
+	}
+    
+	PortStateList::iterator target_state_iter;
+	target_state_iter = std::find (output_states->begin (), output_states->end (), PortState (port_name));
+    
+	if (target_state_iter != output_states->end () && target_state_iter->active != state ) {
+		target_state_iter->active = state;
+        
+		// if StereoOut mode is used
+		if (Config->get_output_auto_connect () & AutoConnectMaster) {
+        
+			// get next element
+			PortStateList::iterator next_state_iter (target_state_iter);
+            
+			// loopback
+			if (++next_state_iter == output_states->end ()) {
+				next_state_iter = output_states->begin ();
+			}
+            
+            
+			// only two outputs should be enabled
+			if (output_states->size () <= 2) {
+                
+				target_state_iter->active = true;
+				next_state_iter->active = true;
+                
+			} else {
+                
+				// if current was set to active - activate next and disable the rest
+				if (target_state_iter->active ) {
+					next_state_iter->active = true;
+				} else {
+					// if current was deactivated but the next is active
+					if (next_state_iter->active) {
+						if (++next_state_iter == output_states->end ()) {
+							next_state_iter = output_states->begin ();
+						}
+						next_state_iter->active = true;
+					} else {
+						// if current was deactivated but the previous is active - restore the state of current
+						target_state_iter->active = true; // state restored;
+						--target_state_iter; // switch to previous to make it stop point in the next cycle
+						target_state_iter->active = true;
+					}
+				}
+                
+				// now deactivate the rest
+				while (++next_state_iter != target_state_iter) {
+                    
+					if (next_state_iter == output_states->end ()) {
+						next_state_iter = output_states->begin ();
+						// we jumped, so additional check is required
+						if (next_state_iter == target_state_iter) {
+							break;
+						}
+					}
+                    
+					next_state_iter->active = false;
+				}
+                
+			}
+		}
+            
+		AudioEngine::instance ()->reconnect_session_routes (false, true);
+		OutputConfigChanged ();
+	}
+}
+
+
+bool
+EngineStateController::get_physical_audio_input_state (const std::string& port_name)
+{
+	bool state = false;
+    
+	PortStateList &input_states = _current_state->input_channel_states;
+	PortStateList::iterator found_state_iter;
+	found_state_iter = std::find (input_states.begin (), input_states.end (), PortState (port_name));
+    
+	if (found_state_iter != input_states.end ()) {
+		state = found_state_iter->active;
+	}
+    
+	return state;
+}
+
+
+bool
+EngineStateController::get_physical_audio_output_state (const std::string& port_name)
+{
+	bool state = false;
+    
+	PortStateList* output_states;
+	if (Config->get_output_auto_connect () & AutoConnectMaster) {
+		output_states = &_current_state->stereo_out_channel_states;
+	} else {
+		output_states = &_current_state->multi_out_channel_states;
+	}
+    
+	PortStateList::iterator found_state_iter;
+	found_state_iter = std::find (output_states->begin (), output_states->end (), PortState (port_name));
+    
+	if (found_state_iter != output_states->end ()) {
+		state = found_state_iter->active;
+	}
+
+	return state;
+}
+
+
+void
+EngineStateController::set_physical_midi_input_state (const std::string& port_name, bool state) {
+    
+	MidiPortStateList::iterator found_state_iter;
+	found_state_iter = std::find (_midi_inputs.begin (), _midi_inputs.end (), MidiPortState (port_name));
+    
+	if (found_state_iter != _midi_inputs.end () && found_state_iter->available && found_state_iter->active != state ) {
+		found_state_iter->active = state;
+        
+		if (_session) {
+			// reconnect MTC inputs as well
+			if (found_state_iter->mtc_in) {
+				_session->reconnect_mtc_ports ();
+			}
+			_session->reconnect_mmc_ports (true);
+		}
+        
+		MIDIInputConfigChanged ();
+	}
+}
+
+
+void
+EngineStateController::set_physical_midi_output_state (const std::string& port_name, bool state) {
+    
+	MidiPortStateList::iterator found_state_iter;
+	found_state_iter = std::find (_midi_outputs.begin (), _midi_outputs.end (), MidiPortState (port_name));
+    
+	if (found_state_iter != _midi_outputs.end () && found_state_iter->available && found_state_iter->active != state ) {
+		found_state_iter->active = state;
+        
+		if (_session) {
+			_session->reconnect_mmc_ports (false);
+		}
+        
+		MIDIOutputConfigChanged ();
+	}
+}
+
+
+bool
+EngineStateController::get_physical_midi_input_state (const std::string& port_name, bool& scene_connected) {
+    
+	bool state = false;
+    
+	MidiPortStateList::iterator found_state_iter;
+	found_state_iter = std::find (_midi_inputs.begin (), _midi_inputs.end (), MidiPortState (port_name));
+    
+	if (found_state_iter != _midi_inputs.end () && found_state_iter->available) {
+		state = found_state_iter->active;
+		scene_connected = found_state_iter->scene_connected;
+	}
+    
+	return state;
+}
+
+
+bool
+EngineStateController::get_physical_midi_output_state (const std::string& port_name, bool& scene_connected) {
+    
+	bool state = false;
+    
+	MidiPortStateList::iterator found_state_iter;
+	found_state_iter = std::find (_midi_outputs.begin (), _midi_outputs.end (), MidiPortState (port_name));
+    
+	if (found_state_iter != _midi_outputs.end () && found_state_iter->available) {
+		state = found_state_iter->active;
+		scene_connected = found_state_iter->scene_connected;
+	}
+    
+	return state;
+}
+
+
+void
+EngineStateController::set_physical_midi_scene_in_connection_state (const std::string& port_name, bool state) {
+    
+	MidiPortStateList::iterator found_state_iter;
+	found_state_iter = std::find (_midi_inputs.begin (), _midi_inputs.end (), MidiPortState (port_name));
+    
+	if (found_state_iter != _midi_inputs.end () && found_state_iter->available && found_state_iter->active ) {
+		found_state_iter->scene_connected = state;
+        
+		std::vector<std::string> ports;
+		ports.push_back (port_name);
+		MIDISceneInputConnectionChanged (ports, state);
+	}
+
+}
+
+
+void
+EngineStateController::set_physical_midi_scenen_out_connection_state (const std::string& port_name, bool state) {
+   
+	MidiPortStateList::iterator found_state_iter;
+	found_state_iter = std::find (_midi_outputs.begin (), _midi_outputs.end (), MidiPortState (port_name));
+    
+	if (found_state_iter != _midi_outputs.end () && found_state_iter->available && found_state_iter->active ) {
+		found_state_iter->scene_connected = state;
+        
+		std::vector<std::string> ports;
+		ports.push_back (port_name);
+		MIDISceneOutputConnectionChanged (ports, state);
+	}
+
+}
+
+
+void
+EngineStateController::set_all_midi_scene_inputs_disconnected ()
+{
+	MidiPortStateList::iterator iter = _midi_inputs.begin ();
+	for (; iter != _midi_inputs.end (); ++iter) {
+		iter->scene_connected = false;
+	}
+
+	std::vector<std::string> ports;
+	MIDISceneInputConnectionChanged (ports, false);
+}
+
+
+void
+EngineStateController::set_all_midi_scene_outputs_disconnected ()
+{
+	MidiPortStateList::iterator iter = _midi_outputs.begin ();
+	for (; iter != _midi_outputs.end (); ++iter) {
+		iter->scene_connected = false;
+	}
+    
+	std::vector<std::string> ports;
+	MIDISceneOutputConnectionChanged (ports, false);
+}
+
+
+void
+EngineStateController::set_mtc_source_port (const std::string& port_name)
+{
+	MidiPortStateList::iterator iter = _midi_inputs.begin ();
+	for (; iter != _midi_inputs.end (); ++iter) {
+		iter->mtc_in = false;
+        
+		if (iter->name == port_name) {
+			iter->mtc_in = true;
+            
+			if (_session) {
+				_session->reconnect_mtc_ports ();
+			}
+		}
+	}
+    
+	if (_session && port_name.empty ()) {
+		_session->reconnect_mtc_ports ();
+	}
+    
+	MTCInputChanged (port_name);
+}
+
+
+void
+EngineStateController::set_state_to_all_inputs (bool state)
+{
+	bool something_changed = false;
+    
+	PortStateList::iterator iter = _current_state->input_channel_states.begin ();
+	for (; iter != _current_state->input_channel_states.end (); ++iter) {
+		if (iter->active != state) {
+			iter->active = state;
+			something_changed = true;
+		}
+	}
+    
+	if (something_changed) {
+		AudioEngine::instance ()->reconnect_session_routes (true, false);
+		InputConfigChanged ();
+	}
+}
+
+
+void
+EngineStateController::set_state_to_all_outputs (bool state)
+{
+	// unapplicable in Stereo Out mode, just return
+	if (Config->get_output_auto_connect () & AutoConnectMaster) {
+		return;
+	}
+    
+	bool something_changed = false;
+    
+	PortStateList::iterator iter = _current_state->multi_out_channel_states.begin ();
+	for (; iter != _current_state->multi_out_channel_states.end (); ++iter) {
+		if (iter->active != state) {
+			iter->active = state;
+			something_changed = true;
+		}
+	}
+    
+	if (something_changed) {
+		AudioEngine::instance ()->reconnect_session_routes (false, true);
+		OutputConfigChanged ();
+	}
+}
+
+
+void
+EngineStateController::get_physical_audio_input_states (std::vector<PortState>& channel_states)
+{
+	PortStateList &input_states = _current_state->input_channel_states;
+	channel_states.assign (input_states.begin (), input_states.end ());
+}
+
+
+void
+EngineStateController::get_physical_audio_output_states (std::vector<PortState>& channel_states)
+{
+	PortStateList* output_states;
+	if (Config->get_output_auto_connect () & AutoConnectMaster) {
+		output_states = &_current_state->stereo_out_channel_states;
+	} else {
+		output_states = &_current_state->multi_out_channel_states;
+	}
+    
+	channel_states.assign (output_states->begin (), output_states->end ());
+}
+
+
+void
+EngineStateController::get_physical_midi_input_states (std::vector<MidiPortState>& channel_states)
+{
+	channel_states.clear ();
+    
+	MidiPortStateList::iterator iter = _midi_inputs.begin ();
+    
+	for (; iter != _midi_inputs.end (); ++iter ) {
+		if (iter->available) {
+			MidiPortState state (iter->name);
+			state.active = iter->active;
+			state.available = true;
+			state.scene_connected = iter->scene_connected;
+			state.mtc_in = iter->mtc_in;
+			channel_states.push_back (state);
+		}
+	}    
+}
+
+void
+EngineStateController::get_physical_midi_output_states (std::vector<MidiPortState>& channel_states)
+{
+	channel_states.clear ();
+    
+	MidiPortStateList::iterator iter = _midi_outputs.begin ();
+    
+	for (; iter != _midi_outputs.end (); ++iter ) {
+		if (iter->available) {
+			MidiPortState state (iter->name);
+			state.active = iter->active;
+			state.available = true;
+			state.scene_connected = iter->scene_connected;
+			state.mtc_in = iter->mtc_in;
+			channel_states.push_back (state);
+		}
+	}
+}
+
+
+void
+EngineStateController::_on_session_loaded ()
+{
+	if (!_session) {
+		return;
+	}
+    
+	AudioEngine::instance ()->reconnect_session_routes (true, true);
+	_session->reconnect_mtc_ports ();
+	_session->reconnect_mmc_ports (true);
+	_session->reconnect_mmc_ports (false);
+    
+	// This is done during session construction
+	// _session->reconnect_ltc_input ();
+	// _session->reconnect_ltc_output ();
+	
+	framecnt_t desired_sample_rate = _session->nominal_frame_rate ();
+	if ( desired_sample_rate > 0 && set_new_sample_rate_in_controller (desired_sample_rate))
+	{
+		push_current_state_to_backend (false);
+		SampleRateChanged (); // emit a signal
+	}
+}
+
+
+void
+EngineStateController::_on_sample_rate_change (framecnt_t new_sample_rate)
+{
+	if (_current_state->sample_rate != new_sample_rate) {
+        
+		// if sample rate has been changed
+		framecnt_t sample_rate_to_set = new_sample_rate;
+		if (AudioEngine::instance ()->session ()) {
+			// and we have current session we should restore it back to the one tracks uses
+			sample_rate_to_set = AudioEngine::instance ()->session ()->frame_rate ();
+		}
+        
+		if ( !set_new_sample_rate_in_controller (sample_rate_to_set)) {
+			// if sample rate can't be set
+			// switch to NONE device
+			set_new_device_as_current ("None");
+			DeviceListChanged (false);
+			DeviceError ();
+		}
+	}
+    
+	SampleRateChanged (); // emit a signal
+}
+
+
+void
+EngineStateController::_on_buffer_size_change (pframes_t new_buffer_size)
+{
+	if (_current_state->buffer_size != new_buffer_size) {
+		_current_state->buffer_size = new_buffer_size;
+	}
+    
+	BufferSizeChanged (); // emit a signal
+}
+
+
+void
+EngineStateController::_on_device_list_change ()
+{
+	bool current_device_disconnected = false;
+    
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+    
+	std::vector<AudioBackend::DeviceStatus> device_vector = backend->enumerate_devices ();
+    
+	// find out out if current device is still available if it's not None
+	if (_current_state->device_name != "None")
+	{
+		std::vector<AudioBackend::DeviceStatus>::iterator device_iter;
+		device_iter = std::find_if (device_vector.begin (), device_vector.end (), DevicePredicate (_current_state->device_name));
+        
+		// if current device is not available any more - switch to None device
+		if (device_iter == device_vector.end ()) {
+            
+			StateList::iterator found_state_iter = find_if (_states.begin (), _states.end (),
+			                                                State::StatePredicate (_current_state->backend_name, "None"));
+            
+			if (found_state_iter != _states.end ()) {
+				// found the record - switch to it
+				_current_state = *found_state_iter;
+				_validate_current_device_state ();
+			} else {
+				// create new record for this engine with default device
+				_current_state = boost::shared_ptr<State>(new State ());
+				_current_state->backend_name = backend->name ();
+				_current_state->device_name = "None";
+				_validate_current_device_state ();
+				_states.push_front (_current_state);
+			}
+            
+			push_current_state_to_backend (true);
+			current_device_disconnected = true;
+		}
+	} else {
+		// if the device which was active before is available now - switch to it
+        
+		std::vector<AudioBackend::DeviceStatus>::iterator device_iter;
+		device_iter = std::find_if (device_vector.begin (), device_vector.end (), DevicePredicate (_last_used_real_device));
+        
+		if (device_iter != device_vector.end ()) {
+			StateList::iterator found_state_iter = find_if (_states.begin (), _states.end (),
+			                                                State::StatePredicate (_current_state->backend_name,
+			                                                                      _last_used_real_device));
+            
+			if (found_state_iter != _states.end ()) {
+                
+				boost::shared_ptr<State> previous_state (_current_state);
+				_current_state = *found_state_iter;
+                
+				if (_validate_current_device_state ()) {
+					push_current_state_to_backend (false);
+				} else {
+					// cannot use this device right now
+					_last_used_real_device.clear ();
+					_current_state = previous_state;
+				}
+			}
+		}
+	}
+    
+	DeviceListChanged (current_device_disconnected); // emit a signal    
+}
+
+
+void
+EngineStateController::_update_device_channels_state ()
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	assert (backend);
+    
+	// update audio input states
+	std::vector<std::string> phys_audio_inputs;
+	backend->get_physical_inputs (DataType::AUDIO, phys_audio_inputs);
+    
+	PortStateList new_input_states;
+	PortStateList &input_states = _current_state->input_channel_states;
+    
+	std::vector<std::string>::const_iterator input_iter = phys_audio_inputs.begin ();
+	for (; input_iter != phys_audio_inputs.end (); ++input_iter) {
+        
+		PortState state (*input_iter);
+		state.active = true;
+		PortStateList::const_iterator found_state_iter = std::find (input_states.begin (), input_states.end (), state);
+        
+		if (found_state_iter != input_states.end ()) {
+			new_input_states.push_back (*found_state_iter);
+		} else {
+			new_input_states.push_back (state);
+		}
+	}
+	_current_state->input_channel_states = new_input_states;
+    
+	// update audio output states (multi out mode)
+	std::vector<std::string> phys_audio_outputs;
+	backend->get_physical_outputs (DataType::AUDIO, phys_audio_outputs);
+    
+	PortStateList new_output_states;
+	PortStateList &output_multi_states = _current_state->multi_out_channel_states;
+    
+	std::vector<std::string>::const_iterator output_iter = phys_audio_outputs.begin ();
+	for (; output_iter != phys_audio_outputs.end (); ++output_iter) {
+        
+		PortState state (*output_iter);
+		state.active = true;
+		PortStateList::const_iterator found_state_iter = std::find (output_multi_states.begin (), output_multi_states.end (), state);
+        
+		if (found_state_iter != output_multi_states.end ()) {
+			new_output_states.push_back (*found_state_iter);
+		} else {
+			new_output_states.push_back (state);
+		}
+	}
+    
+	_current_state->multi_out_channel_states = new_output_states;
+    
+	// update audio output states (stereo out mode)
+	new_output_states.clear ();
+	PortStateList &output_stereo_states = _current_state->stereo_out_channel_states;
+    
+	output_iter = phys_audio_outputs.begin ();
+	for (; output_iter != phys_audio_outputs.end (); ++output_iter) {
+        
+		PortState state (*output_iter);
+		state.active = true;
+		PortStateList::const_iterator found_state_iter = std::find (output_stereo_states.begin (), output_stereo_states.end (), state);
+        
+		if (found_state_iter != output_stereo_states.end ()) {
+			new_output_states.push_back (*found_state_iter);
+		} else {
+			new_output_states.push_back (state);
+		}
+	}
+
+	_current_state->stereo_out_channel_states = new_output_states;
+	_refresh_stereo_out_channel_states ();
+    
+    
+	// update midi ports: unlike audio ports which states are saved per device
+	// each midi port state is saved individualy
+	// so get all midi ports from the backend
+	// and compare to the list of midi ports we have
+	// if physical port is new, add it to our state list
+	// if physical port is present in our state list - mark it available
+	// if there is no corresponding physical port to one we have in a list - leave it unavailable
+	MidiPortStateList::iterator iter = _midi_inputs.begin ();
+	for (; iter != _midi_inputs.end (); ++iter) {
+		iter->available = false;
+	}
+    
+	for (iter = _midi_outputs.begin (); iter != _midi_outputs.end (); ++iter) {
+		iter->available = false;
+	}
+    
+	// update midi input ports
+	std::vector<std::string> phys_midi_inputs;
+	backend->get_physical_inputs (DataType::MIDI, phys_midi_inputs);
+    
+	std::vector<std::string>::const_iterator midi_input_iter = phys_midi_inputs.begin ();
+	for (; midi_input_iter != phys_midi_inputs.end (); ++midi_input_iter) {
+        
+		MidiPortState state (*midi_input_iter);
+		state.active = false;
+		state.available = true;
+		MidiPortStateList::iterator found_state_iter = std::find (_midi_inputs.begin (), _midi_inputs.end (), state);
+        
+		if (found_state_iter != _midi_inputs.end ()) {
+			found_state_iter->available = true;
+		} else {
+			_midi_inputs.push_back (state);
+		}
+	}
+    
+	// update midi output ports
+	std::vector<std::string> phys_midi_outputs;
+	backend->get_physical_outputs (DataType::MIDI, phys_midi_outputs);
+    
+	std::vector<std::string>::const_iterator midi_output_iter = phys_midi_outputs.begin ();
+	for (; midi_output_iter != phys_midi_outputs.end (); ++midi_output_iter) {
+        
+		MidiPortState state (*midi_output_iter);
+		state.active = false;
+		state.available = true;
+		MidiPortStateList::iterator found_state_iter = std::find (_midi_outputs.begin (), _midi_outputs.end (), state);
+        
+		if (found_state_iter != _midi_outputs.end ()) {
+			found_state_iter->available = true;
+		} else {
+			_midi_outputs.push_back (state);
+		}
+	}
+}
+
+
+void
+EngineStateController::_refresh_stereo_out_channel_states ()
+{
+	PortStateList &output_states = _current_state->stereo_out_channel_states;
+	PortStateList::iterator active_iter = output_states.begin ();
+
+	for (; active_iter != output_states.end (); ++active_iter) {
+		if (active_iter->active) {
+			break;
+		}
+	}
+    
+	uint32_t pending_active_channels = 2;
+	PortStateList::iterator iter = output_states.begin ();
+	// if found active
+	if (active_iter != output_states.end ()) {
+		iter = active_iter;
+		if (++iter == output_states.end ()) {
+			iter = output_states.begin ();
+		}
+            
+		(iter++)->active = true;
+		pending_active_channels = 0;
+	}
+
+	// drop the rest of the states to false (until we reach the end or first existing active channel)
+	for (; iter != output_states.end () && iter != active_iter; ++iter) {
+		if (pending_active_channels) {
+			iter->active = true;
+			--pending_active_channels;
+		} else {
+			iter->active = false;
+		}
+	}
+}
+
+
+void
+EngineStateController::_on_engine_running ()
+{
+	AudioEngine::instance ()->reconnect_session_routes (true, true);
+	_current_state->active = true;
+    
+	EngineRunning (); // emit a signal
+}
+
+
+void
+EngineStateController::_on_engine_stopped ()
+{
+	EngineStopped ();
+}
+
+
+void
+EngineStateController::_on_engine_halted ()
+{
+	EngineHalted ();
+}
+
+
+void
+EngineStateController::_on_device_error ()
+{
+	set_new_device_as_current ("None");
+	push_current_state_to_backend (true);
+	DeviceListChanged (false);
+	DeviceError ();
+}
+
+
+void
+EngineStateController::_on_parameter_changed (const std::string& parameter_name)
+{
+	if (parameter_name == "output-auto-connect") {
+        
+		AudioEngine::instance ()->reconnect_session_routes (false, true);
+		OutputConfigChanged (); // emit a signal
+		OutputConnectionModeChanged (); // emit signal
+	}
+}
+
+
+void
+EngineStateController::_on_ports_registration_update ()
+{
+	_update_device_channels_state ();
+    
+	// update MIDI connections
+	if (_session) {
+		_session->reconnect_midi_scene_ports (true);
+		_session->reconnect_midi_scene_ports (false);
+        
+		_session->reconnect_mtc_ports ();
+        
+		_session->reconnect_mmc_ports (true);
+		_session->reconnect_mmc_ports (false);
+        
+		_session->reconnect_ltc_input ();
+		_session->reconnect_ltc_output ();
+	}
+    
+	_update_ltc_source_port ();
+	_update_ltc_output_port ();
+    
+	PortRegistrationChanged (); // emit a signal
+}
+
+
+bool
+EngineStateController::push_current_state_to_backend (bool start)
+{
+	boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend ();
+	
+	if (!backend) {
+		return false;
+	}
+    
+	// check if anything changed
+	bool state_changed = (_current_state->device_name != backend->device_name ()) ||
+		(_current_state->sample_rate != backend->sample_rate ()) ||
+		(_current_state->buffer_size != backend->buffer_size ());
+    
+	bool was_running = AudioEngine::instance ()->running ();
+    
+	Glib::Threads::RecMutex::Lock sl (AudioEngine::instance ()->state_lock ());
+	if (state_changed) {
+
+		if (was_running) {
+            
+			if (_current_state->device_name != backend->device_name ()) {
+				// device has been changed
+				// the list of ports has been changed too
+				// current ltc_source_port and ltc_output_port aren't available
+				set_ltc_source_port ("");
+				set_ltc_output_port ("");
+			}
+            
+			if (AudioEngine::instance ()->stop ()) {
+				return false;
+			}
+		}
+
+		int result = 0;
+		{
+			std::cout << "EngineStateController::Setting device: " << _current_state->device_name << std::endl;
+			if ((_current_state->device_name != backend->device_name ()) && (result = backend->set_device_name (_current_state->device_name))) {
+				error << string_compose (_("Cannot set device name to %1"), get_current_device_name ()) << endmsg;
+			}
+        
+			if (!result ) {
+				std::cout << "EngineStateController::Setting device sample rate " << _current_state->sample_rate << std::endl;
+				result = backend->set_sample_rate (_current_state->sample_rate);
+				
+				if (result) {
+					error << string_compose (_("Cannot set sample rate to %1"), get_current_sample_rate ()) << endmsg;
+				}
+			}
+        
+			if (!result ) {
+				std::cout << "EngineStateController::Setting device buffer size " << _current_state->buffer_size << std::endl;
+				result = backend->set_buffer_size (_current_state->buffer_size);
+
+				if (result) {
+					error << string_compose (_("Cannot set buffer size to %1"), get_current_buffer_size ()) << endmsg;
+				}
+			}
+		}
+        
+		if (result) // error during device setup
+		{
+			//switch to None device and notify about the issue
+			set_new_device_as_current ("None");
+			DeviceListChanged (false);
+			DeviceError ();
+		}
+
+		if (AudioEngine::instance ()->backend_reset_requested ()) {
+			// device asked for reset, do not start engine now
+			// free sate lock and let Engine reset the device as it's required
+			return true;
+		}
+	}
+    
+	if (start || (was_running && state_changed)) {
+		if (AudioEngine::instance ()->start () && !AudioEngine::instance ()->is_reset_requested ()) {
+			//switch to None device and notify about the issue
+			set_new_device_as_current ("None");
+			AudioEngine::instance ()->start ();
+			DeviceListChanged (false);
+			DeviceError ();
+			return false;
+		}
+	}
+    
+	save_audio_midi_settings ();
+    
+	return true;
+}
+
+
+std::string
+EngineStateController::get_mtc_source_port ()
+{
+	MidiPortStateList::const_iterator state_iter = _midi_inputs.begin ();
+	for (; state_iter != _midi_inputs.end (); ++state_iter) {
+		if (state_iter->available && state_iter->mtc_in) {
+			return (state_iter->name);
+		}
+	}
+    
+	return "";
+}
+
+void
+EngineStateController::set_ltc_source_port (const std::string& port)
+{
+	Config->set_ltc_source_port (port);
+}
+
+std::string
+EngineStateController::get_ltc_source_port ()
+{
+	return Config->get_ltc_source_port ();
+}
+
+void
+EngineStateController::set_ltc_output_port (const std::string& port)
+{
+	Config->set_ltc_output_port (port);
+}
+
+std::string
+EngineStateController::get_ltc_output_port ()
+{
+	return Config->get_ltc_output_port ();
+}
+
diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc
index a1cf8d0..8607b9f 100644
--- a/libs/ardour/enums.cc
+++ b/libs/ardour/enums.cc
@@ -96,6 +96,7 @@ setup_enum_writer ()
 	AutoState _AutoState;
 	AutoStyle _AutoStyle;
 	AutoConnectOption _AutoConnectOption;
+	TracksAutoNamingRule _TracksAutoNamingRule;
 	Session::StateOfTheState _Session_StateOfTheState;
 	Route::Flag _Route_Flag;
 	Source::Flag _Source_Flag;
@@ -129,6 +130,8 @@ setup_enum_writer ()
 	Session::SlaveState _Session_SlaveState;
 	MTC_Status _MIDI_MTC_Status;
 	Evoral::OverlapType _OverlapType;
+        BufferingPreset _BufferingPreset;
+	AutoReturnTarget _AutoReturnTarget;
 
 #define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
 #define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear()
@@ -319,6 +322,10 @@ setup_enum_writer ()
 	REGISTER_ENUM (AutoConnectMaster);
 	REGISTER_BITS (_AutoConnectOption);
 
+	REGISTER_ENUM (UseDefaultNames);
+	REGISTER_ENUM (NameAfterDriver);
+	REGISTER_BITS (_TracksAutoNamingRule);
+    
 	REGISTER_ENUM (FormatFloat);
 	REGISTER_ENUM (FormatInt24);
 	REGISTER_ENUM (FormatInt16);
@@ -654,6 +661,18 @@ setup_enum_writer ()
 	REGISTER_ENUM (Evoral::OverlapEnd);
 	REGISTER_ENUM (Evoral::OverlapExternal);
 	REGISTER(_OverlapType);
+
+	REGISTER_ENUM (Small);
+	REGISTER_ENUM (Medium);
+	REGISTER_ENUM (Large);
+	REGISTER_ENUM (Custom);
+	REGISTER(_BufferingPreset);
+
+	REGISTER_ENUM (LastLocate);
+	REGISTER_ENUM (RangeSelectionStart);
+	REGISTER_ENUM (Loop);
+	REGISTER_ENUM (RegionSelectionStart);
+	REGISTER_BITS (_AutoReturnTarget);
 }
 
 } /* namespace ARDOUR */
@@ -687,6 +706,7 @@ std::ostream& operator<<(std::ostream& o, const SampleFormat& var)
 	std::string s = enum_2_string (var);
 	return o << s;
 }
+
 std::istream& operator>>(std::istream& o, AutoConnectOption& var)
 {
 	std::string s;
@@ -701,6 +721,20 @@ std::ostream& operator<<(std::ostream& o, const AutoConnectOption& var)
 	return o << s;
 }
 
+std::istream& operator>>(std::istream& o, TracksAutoNamingRule& var)
+{
+	std::string s;
+	o >> s;
+	var = (TracksAutoNamingRule) string_2_enum (s, var);
+	return o;
+}
+
+std::ostream& operator<<(std::ostream& o, const TracksAutoNamingRule& var)
+{
+	std::string s = enum_2_string (var);
+	return o << s;
+}
+
 std::istream& operator>>(std::istream& o, MonitorModel& var)
 {
 	std::string s;
@@ -984,3 +1018,45 @@ std::ostream& operator<<(std::ostream& o, const RegionSelectionAfterSplit& var)
 	std::string s = enum_2_string (var);
 	return o << s;
 }
+
+std::istream& operator>>(std::istream& o, ARDOUR::BufferingPreset& var)
+{
+	std::string s;
+	o >> s;
+	var = (ARDOUR::BufferingPreset) string_2_enum (s, var);
+	return o;
+}
+
+std::ostream& operator<<(std::ostream& o, const ARDOUR::BufferingPreset& var)
+{
+	std::string s = enum_2_string (var);
+	return o << s;
+}
+
+std::istream& operator>>(std::istream& o, AutoReturnTarget& var)
+{
+	std::string s;
+	o >> s;
+	var = (AutoReturnTarget) string_2_enum (s, var);
+	return o;
+}
+
+std::ostream& operator<<(std::ostream& o, const AutoReturnTarget& var)
+{
+	std::string s = enum_2_string (var);
+	return o << s;
+}
+
+std::istream& operator>>(std::istream& o, MeterType& var)
+{
+	std::string s;
+	o >> s;
+	var = (MeterType) string_2_enum (s, var);
+	return o;
+}
+
+std::ostream& operator<<(std::ostream& o, const MeterType& var)
+{
+	std::string s = enum_2_string (var);
+	return o << s;
+}
diff --git a/libs/ardour/export_format_specification.cc b/libs/ardour/export_format_specification.cc
index 32d16c9..5bc10e8 100644
--- a/libs/ardour/export_format_specification.cc
+++ b/libs/ardour/export_format_specification.cc
@@ -591,6 +591,9 @@ ExportFormatSpecification::description (bool include_name)
 	case SR_96:
 		components.push_back ("96 kHz");
 		break;
+	case SR_176_4:
+		components.push_back ("176.4 kHz");
+		break;
 	case SR_192:
 		components.push_back ("192 kHz");
 		break;
diff --git a/libs/ardour/export_graph_builder.cc b/libs/ardour/export_graph_builder.cc
index 5e8c052..be183c7 100644
--- a/libs/ardour/export_graph_builder.cc
+++ b/libs/ardour/export_graph_builder.cc
@@ -1,20 +1,20 @@
 /*
-    Copyright (C) 2008-2012 Paul Davis 
-    Author: Sakari Bergen
+  Copyright (C) 2008-2012 Paul Davis 
+  Author: Sakari Bergen
 
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
 
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
 
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
 
@@ -53,8 +53,8 @@ using std::string;
 namespace ARDOUR {
 
 ExportGraphBuilder::ExportGraphBuilder (Session const & session)
-  : session (session)
-  , thread_pool (hardware_concurrency())
+	: session (session)
+	, thread_pool (hardware_concurrency())
 {
 	process_buffer_frames = session.engine().samples_per_cycle();
 }
@@ -113,6 +113,17 @@ ExportGraphBuilder::reset ()
 }
 
 void
+ExportGraphBuilder::cleanup (bool remove_out_files/*=false*/)
+{
+	ChannelConfigList::iterator iter = channel_configs.begin();
+    
+	while (iter != channel_configs.end() ) {
+		iter->remove_children(remove_out_files);
+		iter = channel_configs.erase(iter);
+	}
+}
+    
+void
 ExportGraphBuilder::set_current_timespan (boost::shared_ptr<ExportTimespan> span)
 {
 	timespan = span;
@@ -175,7 +186,7 @@ ExportGraphBuilder::add_split_config (FileSpec const & config)
 	// No duplicate channel config found, create new one
 	channel_configs.push_back (new ChannelConfig (*this, config, channels));
 }
-
+ 
 /* Encoder */
 
 template <>
@@ -210,6 +221,33 @@ ExportGraphBuilder::Encoder::add_child (FileSpec const & new_config)
 {
 	filenames.push_back (new_config.filename);
 }
+    
+void
+ExportGraphBuilder::Encoder::destroy_writer (bool delete_out_file)
+{
+	if (delete_out_file ) {
+        
+		if (float_writer) {
+			float_writer->close ();
+		}
+    
+		if (int_writer) {
+			int_writer->close ();
+		}
+        
+		if (short_writer) {
+			short_writer->close ();
+		}
+
+		if (std::remove(writer_filename.c_str() ) != 0) {
+			std::cout << "Encoder::destroy_writer () : Error removing file: " << strerror(errno) << std::endl;
+		}
+	}
+    
+	float_writer.reset ();
+	int_writer.reset ();
+	short_writer.reset ();
+}
 
 bool
 ExportGraphBuilder::Encoder::operator== (FileSpec const & other_config) const
@@ -231,9 +269,9 @@ ExportGraphBuilder::Encoder::init_writer (boost::shared_ptr<AudioGrapher::Sndfil
 	unsigned channels = config.channel_config->get_n_chans();
 	int format = get_real_format (config);
 	config.filename->set_channel_config(config.channel_config);
-	string filename = config.filename->get_path (config.format);
+	writer_filename = config.filename->get_path (config.format);
 
-	writer.reset (new AudioGrapher::SndfileWriter<T> (filename, format, channels, config.format->sample_rate(), config.broadcast_info));
+	writer.reset (new AudioGrapher::SndfileWriter<T> (writer_filename, format, channels, config.format->sample_rate(), config.broadcast_info));
 	writer->FileWritten.connect_same_thread (copy_files_connection, boost::bind (&ExportGraphBuilder::Encoder::copy_files, this, _1));
 }
 
@@ -250,7 +288,7 @@ ExportGraphBuilder::Encoder::copy_files (std::string orig_path)
 /* SFC */
 
 ExportGraphBuilder::SFC::SFC (ExportGraphBuilder &, FileSpec const & new_config, framecnt_t max_frames)
-  : data_width(0)
+	: data_width(0)
 {
 	config = new_config;
 	data_width = sndfile_data_width (Encoder::get_real_format (config));
@@ -306,6 +344,20 @@ ExportGraphBuilder::SFC::add_child (FileSpec const & new_config)
 	}
 }
 
+void
+ExportGraphBuilder::SFC::remove_children (bool remove_out_files)
+{
+	boost::ptr_list<Encoder>::iterator iter = children.begin ();
+    
+	while (iter != children.end() ) {
+        
+		if (remove_out_files) {
+			iter->destroy_writer(remove_out_files);
+		}
+		iter = children.erase (iter);
+	}
+}
+    
 bool
 ExportGraphBuilder::SFC::operator== (FileSpec const & other_config) const
 {
@@ -315,7 +367,7 @@ ExportGraphBuilder::SFC::operator== (FileSpec const & other_config) const
 /* Normalizer */
 
 ExportGraphBuilder::Normalizer::Normalizer (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t /*max_frames*/)
-  : parent (parent)
+	: parent (parent)
 {
 	std::string tmpfile_path = parent.session.session_directory().export_path();
 	tmpfile_path = Glib::build_filename(tmpfile_path, "XXXXXX");
@@ -365,11 +417,22 @@ ExportGraphBuilder::Normalizer::add_child (FileSpec const & new_config)
 	threader->add_output (children.back().sink());
 }
 
+void
+ExportGraphBuilder::Normalizer::remove_children (bool remove_out_files)
+{
+	boost::ptr_list<SFC>::iterator iter = children.begin ();
+    
+	while (iter != children.end() ) {
+		iter->remove_children (remove_out_files);
+		iter = children.erase (iter);
+	}
+}
+    
 bool
 ExportGraphBuilder::Normalizer::operator== (FileSpec const & other_config) const
 {
 	return config.format->normalize() == other_config.format->normalize() &&
-	       config.format->normalize_target() == other_config.format->normalize_target();
+		config.format->normalize_target() == other_config.format->normalize_target();
 }
 
 unsigned
@@ -398,7 +461,7 @@ ExportGraphBuilder::Normalizer::start_post_processing()
 /* SRC */
 
 ExportGraphBuilder::SRC::SRC (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames)
-  : parent (parent)
+	: parent (parent)
 {
 	config = new_config;
 	converter.reset (new SampleRateConverter (new_config.channel_config->get_n_chans()));
@@ -424,6 +487,27 @@ ExportGraphBuilder::SRC::add_child (FileSpec const & new_config)
 		add_child_to_list (new_config, children);
 	}
 }
+    
+void
+ExportGraphBuilder::SRC::remove_children (bool remove_out_files)
+{
+	boost::ptr_list<SFC>::iterator sfc_iter = children.begin();
+    
+	while (sfc_iter != children.end() ) {
+		converter->remove_output (sfc_iter->sink() );
+		sfc_iter->remove_children (remove_out_files);
+		sfc_iter = children.erase (sfc_iter);
+	}
+    
+	boost::ptr_list<Normalizer>::iterator norm_iter = normalized_children.begin();
+    
+	while (norm_iter != normalized_children.end() ) {
+		converter->remove_output (norm_iter->sink() );
+		norm_iter->remove_children (remove_out_files);
+		norm_iter = normalized_children.erase (norm_iter);
+	}
+
+}
 
 template<typename T>
 void
@@ -448,7 +532,7 @@ ExportGraphBuilder::SRC::operator== (FileSpec const & other_config) const
 
 /* SilenceHandler */
 ExportGraphBuilder::SilenceHandler::SilenceHandler (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames)
-  : parent (parent)
+	: parent (parent)
 {
 	config = new_config;
 	max_frames_in = max_frames;
@@ -486,6 +570,18 @@ ExportGraphBuilder::SilenceHandler::add_child (FileSpec const & new_config)
 	children.push_back (new SRC (parent, new_config, max_frames_in));
 	silence_trimmer->add_output (children.back().sink());
 }
+    
+void
+ExportGraphBuilder::SilenceHandler::remove_children (bool remove_out_files)
+{
+	boost::ptr_list<SRC>::iterator iter = children.begin();
+    
+	while (iter != children.end() ) {
+		silence_trimmer->remove_output (iter->sink() );
+		iter->remove_children (remove_out_files);
+		iter = children.erase (iter);
+	}
+}
 
 bool
 ExportGraphBuilder::SilenceHandler::operator== (FileSpec const & other_config) const
@@ -493,15 +589,15 @@ ExportGraphBuilder::SilenceHandler::operator== (FileSpec const & other_config) c
 	ExportFormatSpecification & format = *config.format;
 	ExportFormatSpecification & other_format = *other_config.format;
 	return (format.trim_beginning() == other_format.trim_beginning()) &&
-	       (format.trim_end() == other_format.trim_end()) &&
-	       (format.silence_beginning_time() == other_format.silence_beginning_time()) &&
-	       (format.silence_end_time() == other_format.silence_end_time());
+		(format.trim_end() == other_format.trim_end()) &&
+		(format.silence_beginning_time() == other_format.silence_beginning_time()) &&
+		(format.silence_end_time() == other_format.silence_end_time());
 }
 
 /* ChannelConfig */
 
 ExportGraphBuilder::ChannelConfig::ChannelConfig (ExportGraphBuilder & parent, FileSpec const & new_config, ChannelMap & channel_map)
-  : parent (parent)
+	: parent (parent)
 {
 	typedef ExportChannelConfiguration::ChannelList ChannelList;
 
@@ -551,6 +647,19 @@ ExportGraphBuilder::ChannelConfig::add_child (FileSpec const & new_config)
 	children.push_back (new SilenceHandler (parent, new_config, max_frames_out));
 	chunker->add_output (children.back().sink ());
 }
+    
+void
+ExportGraphBuilder::ChannelConfig::remove_children (bool remove_out_files)
+{
+	boost::ptr_list<SilenceHandler>::iterator iter = children.begin();
+    
+	while(iter != children.end() ) {
+        
+		chunker->remove_output (iter->sink ());
+		iter->remove_children (remove_out_files);
+		iter = children.erase(iter);
+	}
+}
 
 bool
 ExportGraphBuilder::ChannelConfig::operator== (FileSpec const & other_config) const
diff --git a/libs/ardour/export_handler.cc b/libs/ardour/export_handler.cc
index e755d9b..0495198 100644
--- a/libs/ardour/export_handler.cc
+++ b/libs/ardour/export_handler.cc
@@ -118,7 +118,7 @@ ExportHandler::ExportHandler (Session & session)
 
 ExportHandler::~ExportHandler ()
 {
-	// TODO remove files that were written but not finished
+	graph_builder->cleanup (export_status->aborted () );
 }
 
 /** Add an export to the `to-do' list */
@@ -310,6 +310,13 @@ ExportHandler::finish_timespan ()
 		}
 
 		if (fmt->tag()) {
+			/* close file first, otherwise TagLib enounters an ERROR_SHARING_VIOLATION
+			 * The process cannot access the file because it is being used.
+			 *
+			 * TODO: check Umlauts and encoding in filename.
+			 * TagLib eventually calls CreateFileA(),
+			 */
+			graph_builder->reset ();
 			AudiofileTagger::tag_file(filename, *SessionMetadata::Metadata());
 		}
 
diff --git a/libs/ardour/export_profile_manager.cc b/libs/ardour/export_profile_manager.cc
index c2d6cb0..8407228 100644
--- a/libs/ardour/export_profile_manager.cc
+++ b/libs/ardour/export_profile_manager.cc
@@ -43,6 +43,7 @@
 #include "ardour/export_failed.h"
 #include "ardour/directory_names.h"
 #include "ardour/filename_extensions.h"
+#include "ardour/profile.h"
 #include "ardour/route.h"
 #include "ardour/session.h"
 #include "ardour/broadcast_info.h"
@@ -392,7 +393,14 @@ ExportProfileManager::init_timespans (XMLNodeList nodes)
 		timespans.push_back (state);
 
 		// Add session as default selection
-		Location * session_range = session.locations()->session_range_location();
+		Location * session_range;
+
+		if (Profile->get_trx()) {
+			session_range = (session.get_play_loop () ? session.locations()->auto_loop_location () : session.locations()->session_range_location());
+		} else {
+			session_range = session.locations()->session_range_location();
+		}
+			
 		if (!session_range) { return false; }
 
 		ExportTimespanPtr timespan = handler->add_timespan();
@@ -477,7 +485,8 @@ ExportProfileManager::update_ranges () {
 
 	/* Session */
 
-	Location * session_range = session.locations()->session_range_location();
+	Location * session_range = (session.get_play_loop () ? session.locations()->auto_loop_location () : 
+														   session.locations()->session_range_location());
 	if (session_range) {
 		ranges->push_back (session_range);
 	}
diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc
index 231bc84..fe1afd8 100644
--- a/libs/ardour/filesystem_paths.cc
+++ b/libs/ardour/filesystem_paths.cc
@@ -49,13 +49,28 @@ user_config_directory_name (int version = -1)
 		version = atoi (X_(PROGRAM_VERSION));
 	}
 
+	/* ARDOUR::Profile may not be available when this is
+	   called, so rely on build-time detection of the 
+	   product name etc.
+	*/
+	
+#ifdef USE_TRACKS_CODE_FEATURES
+	/* Tracks does not use versioned configuration folders, which may or
+	   may not be problematic in the future.
+	*/
+	return X_(PROGRAM_NAME);
+
+#else		
 	const string config_dir_name = string_compose ("%1%2", X_(PROGRAM_NAME), version);
 
 #if defined (__APPLE__) || defined (PLATFORM_WINDOWS)
+	/* Use mixed-case folder name on OS X and Windows */
 	return config_dir_name;
 #else
+	/* use lower case folder name on Linux */
 	return downcase (config_dir_name);
 #endif
+#endif	
 }	
 
 std::string
@@ -173,7 +188,7 @@ user_cache_directory ()
 			exit (1);
 		}
 	} else if (!Glib::file_test (p, Glib::FILE_TEST_IS_DIR)) {
-		error << string_compose (_("Cache directory %1 already exists and is not a directory/folder - cannot run"),
+		fatal << string_compose (_("Cache directory %1 already exists and is not a directory/folder - cannot run"),
 					   p) << endmsg;
 		exit (1);
 	}
diff --git a/libs/ardour/filter.cc b/libs/ardour/filter.cc
index d782db9..382e6d9 100644
--- a/libs/ardour/filter.cc
+++ b/libs/ardour/filter.cc
@@ -39,7 +39,7 @@ using namespace ARDOUR;
 using namespace PBD;
 
 int
-Filter::make_new_sources (boost::shared_ptr<Region> region, SourceList& nsrcs, string suffix)
+Filter::make_new_sources (boost::shared_ptr<Region> region, SourceList& nsrcs, std::string suffix, bool use_session_sample_rate)
 {
 	vector<string> names = region->master_source_names();
 	assert (region->n_channels() <= names.size());
@@ -70,11 +70,24 @@ Filter::make_new_sources (boost::shared_ptr<Region> region, SourceList& nsrcs, s
 		}
 
 		try {
+			framecnt_t sample_rate;
+			if (use_session_sample_rate) {
+				sample_rate = session.frame_rate();
+			} else {
+				boost::shared_ptr<AudioRegion> aregion = boost::dynamic_pointer_cast<AudioRegion>(region);
+				
+				if (aregion) {
+					sample_rate = aregion->audio_source()->sample_rate();
+				} else {
+					return -1;
+				}
+			}
+			
 			nsrcs.push_back (boost::dynamic_pointer_cast<Source> (
-				SourceFactory::createWritable (region->data_type(), session,
-							       path, false, session.frame_rate())));
+				                 SourceFactory::createWritable (region->data_type(), session,
+				                                                path, false, sample_rate)));
 		}
-
+		
 		catch (failed_constructor& err) {
 			error << string_compose (_("filter: error creating new file %1 (%2)"), path, strerror (errno)) << endmsg;
 			return -1;
diff --git a/libs/ardour/find_session.cc b/libs/ardour/find_session.cc
index 501927c..67aa43d 100644
--- a/libs/ardour/find_session.cc
+++ b/libs/ardour/find_session.cc
@@ -117,7 +117,10 @@ find_session (string str, string& path, string& snapshot, bool& isnew)
 
 			suffix = snapshot.find (statefile_suffix);
 
-			if (suffix == string::npos) {
+			const string::size_type start_pos_of_extension = snapshot.size () - strlen (statefile_suffix);
+			// we should check the start of extension position
+			// because files '*.ardour.bak' are possible
+			if (suffix != start_pos_of_extension) {
 				error << string_compose (_("%1 is not a snapshot file"), str) << endmsg;
 				return -1;
 			}
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index 288e69d..5ab66da 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -37,6 +37,9 @@
 #include <errno.h>
 #include <time.h>
 
+#include <glib.h>
+#include <glib/gstdio.h>
+
 #ifdef PLATFORM_WINDOWS
 #include <windows.h> // for LARGE_INTEGER
 #endif
@@ -131,6 +134,7 @@ find_peaks_t            ARDOUR::find_peaks = 0;
 apply_gain_to_buffer_t  ARDOUR::apply_gain_to_buffer = 0;
 mix_buffers_with_gain_t ARDOUR::mix_buffers_with_gain = 0;
 mix_buffers_no_gain_t   ARDOUR::mix_buffers_no_gain = 0;
+copy_vector_t			ARDOUR::copy_vector = 0;
 
 PBD::Signal1<void,std::string> ARDOUR::BootMessage;
 PBD::Signal3<void,std::string,std::string,bool> ARDOUR::PluginScanMessage;
@@ -156,11 +160,32 @@ setup_hardware_optimization (bool try_optimization)
 
 	if (try_optimization) {
 
-		FPU fpu;
+		FPU* fpu = FPU::instance();
 
 #if defined (ARCH_X86) && defined (BUILD_SSE_OPTIMIZATIONS)
 
-		if (fpu.has_sse()) {
+#ifdef PLATFORM_WINDOWS
+		/* We have AVX-optimized code for Windows */
+		
+		if (fpu->has_avx()) {
+#else			
+		/* AVX code doesn't compile on Linux yet */
+		
+		if (false) {
+#endif			
+			info << "Using AVX optimized routines" << endmsg;
+			
+			// AVX SET
+			compute_peak          = x86_sse_avx_compute_peak;
+			find_peaks            = x86_sse_avx_find_peaks;
+			apply_gain_to_buffer  = x86_sse_avx_apply_gain_to_buffer;
+			mix_buffers_with_gain = x86_sse_avx_mix_buffers_with_gain;
+			mix_buffers_no_gain   = x86_sse_avx_mix_buffers_no_gain;
+			copy_vector           = x86_sse_avx_copy_vector;
+
+			generic_mix_functions = false;
+
+		} else if (fpu->has_sse()) {
 
 			info << "Using SSE optimized routines" << endmsg;
 
@@ -170,6 +195,7 @@ setup_hardware_optimization (bool try_optimization)
 			apply_gain_to_buffer  = x86_sse_apply_gain_to_buffer;
 			mix_buffers_with_gain = x86_sse_mix_buffers_with_gain;
 			mix_buffers_no_gain   = x86_sse_mix_buffers_no_gain;
+			copy_vector           = default_copy_vector;
 
 			generic_mix_functions = false;
 
@@ -187,6 +213,7 @@ setup_hardware_optimization (bool try_optimization)
 			apply_gain_to_buffer   = veclib_apply_gain_to_buffer;
 			mix_buffers_with_gain  = veclib_mix_buffers_with_gain;
 			mix_buffers_no_gain    = veclib_mix_buffers_no_gain;
+			copy_vector            = default_copy_vector;
 
 			generic_mix_functions = false;
 
@@ -206,6 +233,7 @@ setup_hardware_optimization (bool try_optimization)
 		apply_gain_to_buffer  = default_apply_gain_to_buffer;
 		mix_buffers_with_gain = default_mix_buffers_with_gain;
 		mix_buffers_no_gain   = default_mix_buffers_no_gain;
+		copy_vector           = default_copy_vector;
 
 		info << "No H/W specific optimizations in use" << endmsg;
 	}
@@ -560,7 +588,8 @@ ARDOUR::no_auto_connect()
 void
 ARDOUR::setup_fpu ()
 {
-
+	FPU* fpu = FPU::instance ();
+	
 	if (getenv ("ARDOUR_RUNNING_UNDER_VALGRIND")) {
 		// valgrind doesn't understand this assembler stuff
 		// September 10th, 2007
@@ -570,13 +599,8 @@ ARDOUR::setup_fpu ()
 #if defined(ARCH_X86) && defined(USE_XMMINTRIN)
 
 	int MXCSR;
-	FPU fpu;
-
-	/* XXX use real code to determine if the processor supports
-	   DenormalsAreZero and FlushToZero
-	*/
 
-	if (!fpu.has_flush_to_zero() && !fpu.has_denormals_are_zero()) {
+	if (!fpu->has_flush_to_zero() && !fpu->has_denormals_are_zero()) {
 		return;
 	}
 
@@ -593,21 +617,21 @@ ARDOUR::setup_fpu ()
 		break;
 
 	case DenormalFTZ:
-		if (fpu.has_flush_to_zero()) {
+		if (fpu->has_flush_to_zero()) {
 			MXCSR |= _MM_FLUSH_ZERO_ON;
 		}
 		break;
 
 	case DenormalDAZ:
 		MXCSR &= ~_MM_FLUSH_ZERO_ON;
-		if (fpu.has_denormals_are_zero()) {
+		if (fpu->has_denormals_are_zero()) {
 			MXCSR |= 0x40;
 		}
 		break;
 
 	case DenormalFTZDAZ:
-		if (fpu.has_flush_to_zero()) {
-			if (fpu.has_denormals_are_zero()) {
+		if (fpu->has_flush_to_zero()) {
+			if (fpu->has_denormals_are_zero()) {
 				MXCSR |= _MM_FLUSH_ZERO_ON | 0x40;
 			} else {
 				MXCSR |= _MM_FLUSH_ZERO_ON;
@@ -635,7 +659,7 @@ ARDOUR::translation_enable_path ()
 bool
 ARDOUR::translations_are_enabled ()
 {
-	int fd = ::open (ARDOUR::translation_enable_path().c_str(), O_RDONLY);
+	int fd = g_open (ARDOUR::translation_enable_path().c_str(), O_RDONLY, 0444);
 
 	if (fd < 0) {
 		return translate_by_default;
@@ -657,7 +681,7 @@ bool
 ARDOUR::set_translations_enabled (bool yn)
 {
 	string i18n_enabler = ARDOUR::translation_enable_path();
-	int fd = ::open (i18n_enabler.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0644);
+	int fd = g_open (i18n_enabler.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0644);
 
 	if (fd < 0) {
 		return false;
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index 69f7c90..82d4bd0 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -39,6 +39,7 @@
 #include "ardour/debug.h"
 #include "ardour/io.h"
 #include "ardour/port.h"
+#include "ardour/profile.h"
 #include "ardour/route.h"
 #include "ardour/session.h"
 #include "ardour/user_bundle.h"
@@ -692,13 +693,16 @@ IO::set_state_2X (const XMLNode& node, int version, bool in)
 int
 IO::connecting_became_legal ()
 {
-	int ret;
+	int ret = 0;
 
 	assert (pending_state_node);
 
 	connection_legal_c.disconnect ();
 
-	ret = make_connections (*pending_state_node, pending_state_node_version, pending_state_node_in);
+    // it's not required for TracksLive, as long as TracksLive's session does all the connections when it's being loaded
+    if (!Profile->get_trx() ) {
+        ret = make_connections (*pending_state_node, pending_state_node_version, pending_state_node_in);
+    }
 
 	delete pending_state_node;
 	pending_state_node = 0;
@@ -1154,7 +1158,6 @@ IO::parse_io_string (const string& str, vector<string>& ports)
 		return 0;
 	}
 
-	pos = 0;
 	opos = 0;
 
 	ports.clear ();
diff --git a/libs/ardour/location.cc b/libs/ardour/location.cc
index 2c19ebd..c693e1f 100644
--- a/libs/ardour/location.cc
+++ b/libs/ardour/location.cc
@@ -72,6 +72,7 @@ Location::Location (Session& s, framepos_t sample_start, framepos_t sample_end,
 	, _flags (bits)
 	, _locked (false)
 	, _position_lock_style (s.config.get_glue_new_markers_to_bars_and_beats() ? MusicTime : AudioTime)
+
 {
 	recompute_bbt_from_frames ();
 
@@ -89,6 +90,7 @@ Location::Location (const Location& other)
 	, _bbt_end (other._bbt_end)
 	, _flags (other._flags)
 	, _position_lock_style (other._position_lock_style)
+
 {
 	/* copy is not locked even if original was */
 
@@ -166,10 +168,10 @@ Location::operator= (const Location& other)
 void
 Location::set_name (const std::string& str)
 { 
-        _name = str; 
+	_name = str; 
 
-        name_changed (this); /* EMIT SIGNAL */
-        NameChanged  (); /* EMIT SIGNAL */
+	name_changed (this); /* EMIT SIGNAL */
+	NameChanged  (); /* EMIT SIGNAL */
 }
 
 /** Set start position.
@@ -221,11 +223,11 @@ Location::set_start (framepos_t s, bool force, bool allow_bbt_recompute)
 
 		return 0;
 	} else if (!force) {
-                /* range locations must exceed a minimum duration */
-                if (_end - s < Config->get_range_location_minimum()) {
-                        return -1;
-                }
-        }
+		/* range locations must exceed a minimum duration */
+		if (_end - s < Config->get_range_location_minimum()) {
+			return -1;
+		}
+	}
 
 	if (s != _start) {
 
@@ -288,11 +290,11 @@ Location::set_end (framepos_t e, bool force, bool allow_bbt_recompute)
 		assert (_end >= 0);
 
 		return 0;
-        } else if (!force) {
-                /* range locations must exceed a minimum duration */
-                if (e - _start < Config->get_range_location_minimum()) {
-                        return -1;
-                }
+	} else if (!force) {
+		/* range locations must exceed a minimum duration */
+		if (e - _start < Config->get_range_location_minimum()) {
+			return -1;
+		}
 	}
 
 	if (e != _end) {
@@ -329,8 +331,8 @@ Location::set (framepos_t s, framepos_t e, bool allow_bbt_recompute)
 		return -1;
 	}
 
-        bool start_change = false;
-        bool end_change = false;
+	bool start_change = false;
+	bool end_change = false;
 
 	if (is_mark()) {
 
@@ -342,8 +344,8 @@ Location::set (framepos_t s, framepos_t e, bool allow_bbt_recompute)
 				recompute_bbt_from_frames ();
 			}
 
-                        start_change = true;
-                        end_change = true;
+			start_change = true;
+			end_change = true;
 		}
 
 		assert (_start >= 0);
@@ -351,64 +353,64 @@ Location::set (framepos_t s, framepos_t e, bool allow_bbt_recompute)
 
 	} else {
 
-                /* range locations must exceed a minimum duration */
-                if (e - s < Config->get_range_location_minimum()) {
-                        return -1;
-                }
+		/* range locations must exceed a minimum duration */
+		if (e - s < Config->get_range_location_minimum()) {
+			return -1;
+		}
                 
-                if (s != _start) {
+		if (s != _start) {
 
-                        framepos_t const old = _start;
-                        _start = s;
+			framepos_t const old = _start;
+			_start = s;
 
-                        if (allow_bbt_recompute) {
-                                recompute_bbt_from_frames ();
-                        }
+			if (allow_bbt_recompute) {
+				recompute_bbt_from_frames ();
+			}
 
-                        start_change = true;
+			start_change = true;
                         
-                        if (is_session_range ()) {
-                                Session::StartTimeChanged (old); /* EMIT SIGNAL */
-                                AudioFileSource::set_header_position_offset (s);
-                        }
-                }
+			if (is_session_range ()) {
+				Session::StartTimeChanged (old); /* EMIT SIGNAL */
+				AudioFileSource::set_header_position_offset (s);
+			}
+		}
                         
                  
-                if (e != _end) {
+		if (e != _end) {
                         
-                        framepos_t const old = _end;
-                        _end = e;
+			framepos_t const old = _end;
+			_end = e;
 
-                        if (allow_bbt_recompute) {
-                                recompute_bbt_from_frames ();
-                        }
+			if (allow_bbt_recompute) {
+				recompute_bbt_from_frames ();
+			}
                         
-                        end_change = true;
+			end_change = true;
 
-                        if (is_session_range()) {
-                                Session::EndTimeChanged (old); /* EMIT SIGNAL */
-                        }
-                }
+			if (is_session_range()) {
+				Session::EndTimeChanged (old); /* EMIT SIGNAL */
+			}
+		}
 
-                assert (_end >= 0);
-        }
+		assert (_end >= 0);
+	}
 
-        if (start_change) {
-                start_changed(this); /* EMIT SIGNAL */
-                StartChanged(); /* EMIT SIGNAL */
-        }
+	if (start_change) {
+		start_changed(this); /* EMIT SIGNAL */
+		StartChanged(); /* EMIT SIGNAL */
+	}
 
-        if (end_change) {
-                end_changed(this); /* EMIT SIGNAL */
-                EndChanged(); /* EMIT SIGNAL */
-        }
+	if (end_change) {
+		end_changed(this); /* EMIT SIGNAL */
+		EndChanged(); /* EMIT SIGNAL */
+	}
 
-        if (start_change && end_change) {
-                changed (this);
-                Changed ();
-        }
+	if (start_change && end_change) {
+		changed (this);
+		Changed ();
+	}
 
-        return 0;
+	return 0;
 }
 
 int
@@ -441,8 +443,8 @@ void
 Location::set_hidden (bool yn, void*)
 {
 	if (set_flag_internal (yn, IsHidden)) {
-		 flags_changed (this); /* EMIT SIGNAL */
-                 FlagsChanged ();
+		flags_changed (this); /* EMIT SIGNAL */
+		FlagsChanged ();
 	}
 }
 
@@ -458,40 +460,40 @@ Location::set_cd (bool yn, void*)
 	}
 
 	if (set_flag_internal (yn, IsCDMarker)) {
-		 flags_changed (this); /* EMIT SIGNAL */
-                 FlagsChanged ();
+		flags_changed (this); /* EMIT SIGNAL */
+		FlagsChanged ();
 	}
 }
 
 void
 Location::set_is_range_marker (bool yn, void*)
 {
-       if (set_flag_internal (yn, IsRangeMarker)) {
-               flags_changed (this);
-                FlagsChanged (); /* EMIT SIGNAL */
-       }
+	if (set_flag_internal (yn, IsRangeMarker)) {
+		flags_changed (this);
+		FlagsChanged (); /* EMIT SIGNAL */
+	}
 }
 
 void
 Location::set_skip (bool yn)
 {
-        if (is_range_marker() && length() > 0) {
-                if (set_flag_internal (yn, IsSkip)) {
-                        flags_changed (this);
-                        FlagsChanged ();
-                }
-        }
+	if (is_range_marker() && length() > 0) {
+		if (set_flag_internal (yn, IsSkip)) {
+			flags_changed (this);
+			FlagsChanged ();
+		}
+	}
 }
 
 void
 Location::set_skipping (bool yn)
 {
-        if (is_range_marker() && is_skip() && length() > 0) {
-                if (set_flag_internal (yn, IsSkipping)) {
-                        flags_changed (this);
-                        FlagsChanged ();
-                }
-        }
+	if (is_range_marker() && is_skip() && length() > 0) {
+		if (set_flag_internal (yn, IsSkipping)) {
+			flags_changed (this);
+			FlagsChanged ();
+		}
+	}
 }
 
 void
@@ -502,8 +504,8 @@ Location::set_auto_punch (bool yn, void*)
 	}
 
 	if (set_flag_internal (yn, IsAutoPunch)) {
-		 flags_changed (this); /* EMIT SIGNAL */
-		 FlagsChanged (); /* EMIT SIGNAL */
+		flags_changed (this); /* EMIT SIGNAL */
+		FlagsChanged (); /* EMIT SIGNAL */
 	}
 }
 
@@ -515,8 +517,8 @@ Location::set_auto_loop (bool yn, void*)
 	}
 
 	if (set_flag_internal (yn, IsAutoLoop)) {
-		 flags_changed (this); /* EMIT SIGNAL */
-		 FlagsChanged (); /* EMIT SIGNAL */
+		flags_changed (this); /* EMIT SIGNAL */
+		FlagsChanged (); /* EMIT SIGNAL */
 	}
 }
 
@@ -625,26 +627,31 @@ Location::set_state (const XMLNode& node, int version)
 		return -1;
 	}
 
-		/* can't use set_start() here, because _end
-		   may make the value of _start illegal.
-		*/
+	/* can't use set_start() here, because _end
+	   may make the value of _start illegal.
+	*/
 
 	sscanf (prop->value().c_str(), "%" PRId64, &_start);
 
 	if ((prop = node.property ("end")) == 0) {
-		  error << _("XML node for Location has no end information") << endmsg;
-		  return -1;
+		error << _("XML node for Location has no end information") << endmsg;
+		return -1;
 	}
 
 	sscanf (prop->value().c_str(), "%" PRId64, &_end);
 
 	if ((prop = node.property ("flags")) == 0) {
-		  error << _("XML node for Location has no flags information") << endmsg;
-		  return -1;
+		error << _("XML node for Location has no flags information") << endmsg;
+		return -1;
 	}
 
+	Flags old_flags (_flags);
 	_flags = Flags (string_2_enum (prop->value(), _flags));
 
+	if (old_flags != _flags) {
+		FlagsChanged ();
+	}
+
 	if ((prop = node.property ("locked")) != 0) {
 		_locked = string_is_affirmative (prop->value());
 	} else {
@@ -653,26 +660,26 @@ Location::set_state (const XMLNode& node, int version)
 
 	for (cd_iter = cd_list.begin(); cd_iter != cd_list.end(); ++cd_iter) {
 
-		  cd_node = *cd_iter;
+		cd_node = *cd_iter;
 
-		  if (cd_node->name() != "CD-Info") {
-			  continue;
-		  }
+		if (cd_node->name() != "CD-Info") {
+			continue;
+		}
 
-		  if ((prop = cd_node->property ("name")) != 0) {
-			  cd_name = prop->value();
-		  } else {
-			  throw failed_constructor ();
-		  }
+		if ((prop = cd_node->property ("name")) != 0) {
+			cd_name = prop->value();
+		} else {
+			throw failed_constructor ();
+		}
 
-		  if ((prop = cd_node->property ("value")) != 0) {
-			  cd_value = prop->value();
-		  } else {
-			  throw failed_constructor ();
-		  }
+		if ((prop = cd_node->property ("value")) != 0) {
+			cd_value = prop->value();
+		} else {
+			throw failed_constructor ();
+		}
 
 
-		  cd_info[cd_name] = cd_value;
+		cd_info[cd_name] = cd_value;
 	}
 
 	if ((prop = node.property ("position-lock-style")) != 0) {
@@ -752,9 +759,13 @@ Location::unlock ()
 void
 Location::set_scene_change (boost::shared_ptr<SceneChange>  sc)
 {
-	_scene_change = sc;
-
-	scene_changed (); /* EMIT SIGNAL */
+        if (_scene_change != sc) {
+                _scene_change = sc;
+                _session.set_dirty ();
+                
+                scene_changed (); /* EMIT SIGNAL */
+                SceneChangeChanged (); /* EMIT SIGNAL */
+        }
 }
 
 /*---------------------------------------------------------------------- */
@@ -788,7 +799,7 @@ Locations::set_current (Location *loc, bool want_lock)
 	}
 
 	if (ret == 0) {
-		 current_changed (current_location); /* EMIT SIGNAL */
+		current_changed (current_location); /* EMIT SIGNAL */
 	}
 	return ret;
 }
@@ -800,51 +811,55 @@ Locations::next_available_name(string& result,string base)
 	string::size_type l;
 	int suffix;
 	char buf[32];
-        std::map<uint32_t,bool> taken;
-        uint32_t n;
+	std::map<uint32_t,bool> taken;
+	uint32_t n;
 
 	result = base;
-        l = base.length();
+	l = base.length();
 
-        if (!base.empty()) {
+	if (!base.empty()) {
                 
-                /* find all existing names that match "base", and store
-                   the numeric part of them (if any) in the map "taken"
-                */
+		/* find all existing names that match "base", and store
+		   the numeric part of them (if any) in the map "taken"
+		*/
 
-                for (i = locations.begin(); i != locations.end(); ++i) {
+		for (i = locations.begin(); i != locations.end(); ++i) {
 
-                        const string& temp ((*i)->name());
+			const string& temp ((*i)->name());
                         
-                        if (!temp.find (base,0)) {
+			if (!temp.find (base,0)) {
+				/* grab what comes after the "base" as if it was
+				   a number, and assuming that works OK,
+				   store it in "taken" so that we know it
+				   has been used.
+				*/
+                                if ((suffix = atoi (temp.substr(l))) != 0) {
+					taken.insert (make_pair (suffix,true));
+				}
+			}
+		}
+	}
 
-                                if ((suffix = atoi (temp.substr(l,3))) != 0) {
-                                        taken.insert (make_pair (suffix,true));
-                                }
-                        }
-                }
-        }
+	/* Now search for an un-used suffix to add to "base". This
+	   will find "holes" in the numbering sequence when a location
+	   was deleted.
 
-        /* Now search for an un-used suffix to add to "base". This
-           will find "holes" in the numbering sequence when a location
-           was deleted.
-
-           This must start at 1, both for human-numbering reasons
-           and also because the call to atoi() above would return 
-           zero if there is no recognizable numeric suffix, causing
-           "base 0" not to be inserted into the "taken" map.
-        */
-
-        n = 1; 
-
-        while (n < UINT32_MAX) {
-                if (taken.find (n) == taken.end()) {
-                        snprintf (buf, sizeof(buf), "%d", n);
-                        result += buf;
-                        return 1;
-                }
-                ++n;
-        }
+	   This must start at 1, both for human-numbering reasons
+	   and also because the call to atoi() above would return 
+	   zero if there is no recognizable numeric suffix, causing
+	   "base 0" not to be inserted into the "taken" map.
+	*/
+
+	n = 1; 
+
+	while (n < UINT32_MAX) {
+		if (taken.find (n) == taken.end()) {
+			snprintf (buf, sizeof(buf), "%d", n);
+			result += buf;
+			return 1;
+		}
+		++n;
+	}
                 
 	return 0;
 }
@@ -945,7 +960,7 @@ Locations::clear_ranges ()
 		current_location = 0;
 	}
 
-        changed ();
+	changed ();
 	current_changed (0); /* EMIT SIGNAL */
 }
 
@@ -966,7 +981,7 @@ Locations::add (Location *loc, bool make_current)
 	added (loc); /* EMIT SIGNAL */
 
 	if (make_current) {
-		 current_changed (current_location); /* EMIT SIGNAL */
+		current_changed (current_location); /* EMIT SIGNAL */
 	}
 
 	if (loc->is_session_range()) {
@@ -1008,7 +1023,7 @@ Locations::remove (Location *loc)
 		removed (loc); /* EMIT SIGNAL */
                 
 		if (was_current) {
-			 current_changed (0); /* EMIT SIGNAL */
+			current_changed (0); /* EMIT SIGNAL */
 		}
 	}
 }
@@ -1069,6 +1084,8 @@ Locations::set_state (const XMLNode& node, int version)
 				if (i != locations.end()) {
 					/* we can re-use an old Location object */
 					loc = *i;
+                    
+					// changed locations will be updated by Locations::changed signal
 					loc->set_state (**niter, version);
 				} else {
 					loc = new Location (_session, **niter);
@@ -1156,16 +1173,16 @@ typedef std::pair<framepos_t,Location*> LocationPair;
 
 struct LocationStartEarlierComparison
 {
-    bool operator() (LocationPair a, LocationPair b) {
-	    return a.first < b.first;
-    }
+	bool operator() (LocationPair a, LocationPair b) {
+		return a.first < b.first;
+	}
 };
 
 struct LocationStartLaterComparison
 {
-    bool operator() (LocationPair a, LocationPair b) {
-	    return a.first > b.first;
-    }
+	bool operator() (LocationPair a, LocationPair b) {
+		return a.first > b.first;
+	}
 };
 
 framepos_t
@@ -1374,7 +1391,7 @@ Locations::auto_punch_location () const
 			return const_cast<Location*> (*i);
 		}
 	}
-       return 0;
+	return 0;
 }
 
 uint32_t
@@ -1393,12 +1410,12 @@ Locations::num_range_markers () const
 Location *
 Locations::get_location_by_id(PBD::ID id)
 {
-    LocationList::iterator it;
-    for (it  = locations.begin(); it != locations.end(); ++it)
-        if (id == (*it)->id())
-            return *it;
+	LocationList::iterator it;
+	for (it  = locations.begin(); it != locations.end(); ++it)
+		if (id == (*it)->id())
+			return *it;
 
-    return 0;
+	return 0;
 }
 
 void
diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc
index c5840f6..ab84cf6 100644
--- a/libs/ardour/ltc_slave.cc
+++ b/libs/ardour/ltc_slave.cc
@@ -26,6 +26,7 @@
 #include "pbd/pthread_utils.h"
 
 #include "ardour/debug.h"
+#include "ardour/profile.h"
 #include "ardour/slave.h"
 #include "ardour/session.h"
 #include "ardour/audioengine.h"
@@ -151,6 +152,8 @@ LTC_Slave::reset()
 	ltc_speed = 0;
 	engine_dll_initstate = 0;
 	sync_lock_broken = false;
+
+	ActiveChanged (false); /* EMIT SIGNAL */
 }
 
 void
@@ -443,8 +446,10 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos)
 	if (last_timestamp == 0) {
 		engine_dll_initstate = 0;
 		if (delayedlocked < 10) ++delayedlocked;
-	}
-	else if (engine_dll_initstate != transport_direction && ltc_speed != 0) {
+	} else if (engine_dll_initstate != transport_direction && ltc_speed != 0) {
+
+		ActiveChanged (true); /* EMIT SIGNAL */
+
 		engine_dll_initstate = transport_direction;
 		init_engine_dll(last_ltc_frame + rint(ltc_speed * double(2 * nframes + now - last_timestamp)),
 				session.engine().samples_per_cycle());
@@ -488,6 +493,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos)
 		reset();
 		speed = 0;
 		pos = session.transport_frame();
+		ActiveChanged (false); /* EMIT SIGNAL */
 		return true;
 	}
 
@@ -556,7 +562,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos)
 	        speed = 1.0;
 	}
 
-	if (speed != 0 && delayedlocked == 0 && fabsf(speed) != 1.0) {
+	if (speed != 0 && delayedlocked == 0 && fabs(speed) != 1.0) {
 		sync_lock_broken = true;
 		DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC speed not locked %1 %2\n", speed, ltc_speed));
 	}
@@ -604,7 +610,7 @@ LTC_Slave::approximate_current_delta() const
 	} else {
 		snprintf(delta, sizeof(delta), "\u0394<span foreground=\"%s\" face=\"monospace\" >%s%s%lld</span>sm",
 				sync_lock_broken ? "red" : "green",
-				LEADINGZERO(llabs(current_delta)), PLUSMINUS(-current_delta), llabs(current_delta));
+				LEADINGZERO(::llabs(current_delta)), PLUSMINUS(-current_delta), ::llabs(current_delta));
 	}
 	return std::string(delta);
 }
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index 243312f..e5b8ffd 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -309,7 +309,6 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
 	_latency_control_port   = 0;
 	_next_cycle_start       = std::numeric_limits<framepos_t>::max();
 	_next_cycle_speed       = 1.0;
-	_block_length           = _engine.samples_per_cycle();
 	_seq_size               = _engine.raw_buffer_size(DataType::MIDI);
 	_state_version          = 0;
 	_was_activated          = false;
@@ -355,11 +354,17 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
 
 #ifdef HAVE_LV2_1_2_0
 	LV2_URID atom_Int = _uri_map.uri_to_id(LV2_ATOM__Int);
+	static const int32_t _min_block_length = 1;   // may happen during split-cycles
+	static const int32_t _max_block_length = 8192; // max possible (with all engines and during export)
+	/* @drobilla: Does it make sense to re-instantiate all plugins
+	 * whenever the buffersize changes?
+	 * Is there a way to find plugins that require the min/max blocksize option?
+	 */
 	LV2_Options_Option options[] = {
 		{ LV2_OPTIONS_INSTANCE, 0, _uri_map.uri_to_id(LV2_BUF_SIZE__minBlockLength),
-		  sizeof(int32_t), atom_Int, &_block_length },
+		  sizeof(int32_t), atom_Int, &_min_block_length },
 		{ LV2_OPTIONS_INSTANCE, 0, _uri_map.uri_to_id(LV2_BUF_SIZE__maxBlockLength),
-		  sizeof(int32_t), atom_Int, &_block_length },
+		  sizeof(int32_t), atom_Int, &_max_block_length },
 		{ LV2_OPTIONS_INSTANCE, 0, _uri_map.uri_to_id(LV2_BUF_SIZE__sequenceSize),
 		  sizeof(int32_t), atom_Int, &_seq_size },
 		{ LV2_OPTIONS_INSTANCE, 0, 0, 0, 0, NULL }
@@ -1908,7 +1913,7 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
 	TempoMetric             tmetric  = tmap.metric_at(_session.transport_frame(), &metric_i);
 
 	if (_freewheel_control_port) {
-		*_freewheel_control_port = _session.engine().freewheeling();
+		*_freewheel_control_port = _session.engine().freewheeling() ? 1.f : 0.f;
 	}
 
 	if (_bpm_control_port) {
diff --git a/libs/ardour/macosx/libardour.xcodeproj/project.pbxproj b/libs/ardour/macosx/libardour.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..c31e8b0
--- /dev/null
+++ b/libs/ardour/macosx/libardour.xcodeproj/project.pbxproj
@@ -0,0 +1,3464 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		432653E6194EF73C00BEFB46 /* amp.h in Headers */ = {isa = PBXBuildFile; fileRef = 432652FC194EF73C00BEFB46 /* amp.h */; };
+		432653E7194EF73C00BEFB46 /* analyser.h in Headers */ = {isa = PBXBuildFile; fileRef = 432652FD194EF73C00BEFB46 /* analyser.h */; };
+		432653E8194EF73C00BEFB46 /* ardour.h in Headers */ = {isa = PBXBuildFile; fileRef = 432652FE194EF73C00BEFB46 /* ardour.h */; };
+		432653E9194EF73C00BEFB46 /* async_midi_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 432652FF194EF73C00BEFB46 /* async_midi_port.h */; };
+		432653EA194EF73C00BEFB46 /* audio_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265300194EF73C00BEFB46 /* audio_backend.h */; };
+		432653EB194EF73C00BEFB46 /* audio_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265301194EF73C00BEFB46 /* audio_buffer.h */; };
+		432653EC194EF73C00BEFB46 /* audio_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265302194EF73C00BEFB46 /* audio_diskstream.h */; };
+		432653ED194EF73C00BEFB46 /* audio_library.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265303194EF73C00BEFB46 /* audio_library.h */; };
+		432653EE194EF73C00BEFB46 /* audio_playlist_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265304194EF73C00BEFB46 /* audio_playlist_importer.h */; };
+		432653EF194EF73C00BEFB46 /* audio_playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265305194EF73C00BEFB46 /* audio_playlist_source.h */; };
+		432653F0194EF73C00BEFB46 /* audio_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265306194EF73C00BEFB46 /* audio_port.h */; };
+		432653F1194EF73C00BEFB46 /* audio_region_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265307194EF73C00BEFB46 /* audio_region_importer.h */; };
+		432653F2194EF73C00BEFB46 /* audio_track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265308194EF73C00BEFB46 /* audio_track.h */; };
+		432653F3194EF73C00BEFB46 /* audio_track_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265309194EF73C00BEFB46 /* audio_track_importer.h */; };
+		432653F4194EF73C00BEFB46 /* audio_unit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530A194EF73C00BEFB46 /* audio_unit.h */; };
+		432653F5194EF73C00BEFB46 /* audioanalyser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530B194EF73C00BEFB46 /* audioanalyser.h */; };
+		432653F6194EF73C00BEFB46 /* audioengine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530C194EF73C00BEFB46 /* audioengine.h */; };
+		432653F7194EF73C00BEFB46 /* audiofile_tagger.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530D194EF73C00BEFB46 /* audiofile_tagger.h */; };
+		432653F8194EF73C00BEFB46 /* audiofilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530E194EF73C00BEFB46 /* audiofilesource.h */; };
+		432653F9194EF73C00BEFB46 /* audioplaylist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530F194EF73C00BEFB46 /* audioplaylist.h */; };
+		432653FA194EF73C00BEFB46 /* audioregion.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265310194EF73C00BEFB46 /* audioregion.h */; };
+		432653FB194EF73C00BEFB46 /* audiosource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265311194EF73C00BEFB46 /* audiosource.h */; };
+		432653FC194EF73C00BEFB46 /* auditioner.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265312194EF73C00BEFB46 /* auditioner.h */; };
+		432653FD194EF73C00BEFB46 /* auto_bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265313194EF73C00BEFB46 /* auto_bundle.h */; };
+		432653FE194EF73C00BEFB46 /* automatable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265314194EF73C00BEFB46 /* automatable.h */; };
+		432653FF194EF73C00BEFB46 /* automatable_sequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265315194EF73C00BEFB46 /* automatable_sequence.h */; };
+		43265400194EF73C00BEFB46 /* automation_control.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265316194EF73C00BEFB46 /* automation_control.h */; };
+		43265401194EF73C00BEFB46 /* automation_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265317194EF73C00BEFB46 /* automation_list.h */; };
+		43265402194EF73C00BEFB46 /* automation_watch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265318194EF73C00BEFB46 /* automation_watch.h */; };
+		43265403194EF73C00BEFB46 /* beats_frames_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265319194EF73C00BEFB46 /* beats_frames_converter.h */; };
+		43265404194EF73C00BEFB46 /* broadcast_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531A194EF73C00BEFB46 /* broadcast_info.h */; };
+		43265405194EF73C00BEFB46 /* buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531B194EF73C00BEFB46 /* buffer.h */; };
+		43265406194EF73C00BEFB46 /* buffer_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531C194EF73C00BEFB46 /* buffer_manager.h */; };
+		43265407194EF73C00BEFB46 /* buffer_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531D194EF73C00BEFB46 /* buffer_set.h */; };
+		43265408194EF73C00BEFB46 /* bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531E194EF73C00BEFB46 /* bundle.h */; };
+		43265409194EF73C00BEFB46 /* butler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531F194EF73C00BEFB46 /* butler.h */; };
+		4326540A194EF73C00BEFB46 /* caimportable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265320194EF73C00BEFB46 /* caimportable.h */; };
+		4326540B194EF73C00BEFB46 /* capturing_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265321194EF73C00BEFB46 /* capturing_processor.h */; };
+		4326540C194EF73C00BEFB46 /* chan_count.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265322194EF73C00BEFB46 /* chan_count.h */; };
+		4326540D194EF73D00BEFB46 /* chan_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265323194EF73C00BEFB46 /* chan_mapping.h */; };
+		4326540E194EF73D00BEFB46 /* click.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265324194EF73C00BEFB46 /* click.h */; };
+		4326540F194EF73D00BEFB46 /* comparable_shared_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265325194EF73C00BEFB46 /* comparable_shared_ptr.h */; };
+		43265410194EF73D00BEFB46 /* configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265326194EF73C00BEFB46 /* configuration.h */; };
+		43265411194EF73D00BEFB46 /* configuration_variable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265327194EF73C00BEFB46 /* configuration_variable.h */; };
+		43265412194EF73D00BEFB46 /* control_protocol_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265328194EF73C00BEFB46 /* control_protocol_manager.h */; };
+		43265413194EF73D00BEFB46 /* coreaudiosource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265329194EF73C00BEFB46 /* coreaudiosource.h */; };
+		43265414194EF73D00BEFB46 /* cycle_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532A194EF73C00BEFB46 /* cycle_timer.h */; };
+		43265415194EF73D00BEFB46 /* cycles.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532B194EF73C00BEFB46 /* cycles.h */; };
+		43265416194EF73D00BEFB46 /* data_type.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532C194EF73C00BEFB46 /* data_type.h */; };
+		43265417194EF73D00BEFB46 /* dB.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532D194EF73C00BEFB46 /* dB.h */; };
+		43265418194EF73D00BEFB46 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532E194EF73C00BEFB46 /* debug.h */; };
+		43265419194EF73D00BEFB46 /* delivery.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532F194EF73C00BEFB46 /* delivery.h */; };
+		4326541A194EF73D00BEFB46 /* directory_names.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265330194EF73C00BEFB46 /* directory_names.h */; };
+		4326541B194EF73D00BEFB46 /* diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265331194EF73C00BEFB46 /* diskstream.h */; };
+		4326541C194EF73D00BEFB46 /* element_import_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265332194EF73C00BEFB46 /* element_import_handler.h */; };
+		4326541D194EF73D00BEFB46 /* element_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265333194EF73C00BEFB46 /* element_importer.h */; };
+		4326541E194EF73D00BEFB46 /* engine_state_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265334194EF73C00BEFB46 /* engine_state_controller.h */; };
+		4326541F194EF73D00BEFB46 /* event_type_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265335194EF73C00BEFB46 /* event_type_map.h */; };
+		43265420194EF73D00BEFB46 /* export_channel.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265336194EF73C00BEFB46 /* export_channel.h */; };
+		43265421194EF73D00BEFB46 /* export_channel_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265337194EF73C00BEFB46 /* export_channel_configuration.h */; };
+		43265422194EF73D00BEFB46 /* export_failed.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265338194EF73C00BEFB46 /* export_failed.h */; };
+		43265423194EF73D00BEFB46 /* export_filename.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265339194EF73C00BEFB46 /* export_filename.h */; };
+		43265424194EF73D00BEFB46 /* export_format_base.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533A194EF73C00BEFB46 /* export_format_base.h */; };
+		43265425194EF73D00BEFB46 /* export_format_compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533B194EF73C00BEFB46 /* export_format_compatibility.h */; };
+		43265426194EF73D00BEFB46 /* export_format_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533C194EF73C00BEFB46 /* export_format_manager.h */; };
+		43265427194EF73D00BEFB46 /* export_format_specification.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533D194EF73C00BEFB46 /* export_format_specification.h */; };
+		43265428194EF73D00BEFB46 /* export_formats.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533E194EF73C00BEFB46 /* export_formats.h */; };
+		43265429194EF73D00BEFB46 /* export_graph_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533F194EF73C00BEFB46 /* export_graph_builder.h */; };
+		4326542A194EF73D00BEFB46 /* export_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265340194EF73C00BEFB46 /* export_handler.h */; };
+		4326542B194EF73D00BEFB46 /* export_multiplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265341194EF73C00BEFB46 /* export_multiplication.h */; };
+		4326542C194EF73D00BEFB46 /* export_pointers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265342194EF73C00BEFB46 /* export_pointers.h */; };
+		4326542D194EF73D00BEFB46 /* export_preset.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265343194EF73C00BEFB46 /* export_preset.h */; };
+		4326542E194EF73D00BEFB46 /* export_profile_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265344194EF73C00BEFB46 /* export_profile_manager.h */; };
+		4326542F194EF73D00BEFB46 /* export_status.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265345194EF73C00BEFB46 /* export_status.h */; };
+		43265430194EF73D00BEFB46 /* export_timespan.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265346194EF73C00BEFB46 /* export_timespan.h */; };
+		43265431194EF73D00BEFB46 /* file_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265347194EF73C00BEFB46 /* file_source.h */; };
+		43265432194EF73D00BEFB46 /* filename_extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265348194EF73C00BEFB46 /* filename_extensions.h */; };
+		43265433194EF73D00BEFB46 /* filesystem_paths.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265349194EF73C00BEFB46 /* filesystem_paths.h */; };
+		43265434194EF73D00BEFB46 /* filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534A194EF73C00BEFB46 /* filter.h */; };
+		43265435194EF73D00BEFB46 /* graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534B194EF73C00BEFB46 /* graph.h */; };
+		43265436194EF73D00BEFB46 /* graphnode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534C194EF73C00BEFB46 /* graphnode.h */; };
+		43265437194EF73D00BEFB46 /* iec1ppmdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534D194EF73C00BEFB46 /* iec1ppmdsp.h */; };
+		43265438194EF73D00BEFB46 /* iec2ppmdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534E194EF73C00BEFB46 /* iec2ppmdsp.h */; };
+		43265439194EF73D00BEFB46 /* import_status.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534F194EF73C00BEFB46 /* import_status.h */; };
+		4326543A194EF73D00BEFB46 /* importable_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265350194EF73C00BEFB46 /* importable_source.h */; };
+		4326543B194EF73D00BEFB46 /* instrument_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265351194EF73C00BEFB46 /* instrument_info.h */; };
+		4326543C194EF73D00BEFB46 /* internal_return.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265352194EF73C00BEFB46 /* internal_return.h */; };
+		4326543D194EF73D00BEFB46 /* internal_send.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265353194EF73C00BEFB46 /* internal_send.h */; };
+		4326543E194EF73D00BEFB46 /* interpolation.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265354194EF73C00BEFB46 /* interpolation.h */; };
+		4326543F194EF73D00BEFB46 /* interthread_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265355194EF73C00BEFB46 /* interthread_info.h */; };
+		43265440194EF73D00BEFB46 /* io.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265356194EF73C00BEFB46 /* io.h */; };
+		43265441194EF73D00BEFB46 /* io_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265357194EF73C00BEFB46 /* io_processor.h */; };
+		43265442194EF73D00BEFB46 /* jack_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265358194EF73C00BEFB46 /* jack_utils.h */; };
+		43265443194EF73D00BEFB46 /* kmeterdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265359194EF73C00BEFB46 /* kmeterdsp.h */; };
+		43265444194EF73D00BEFB46 /* ladspa.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535A194EF73C00BEFB46 /* ladspa.h */; };
+		43265445194EF73D00BEFB46 /* ladspa_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535B194EF73C00BEFB46 /* ladspa_plugin.h */; };
+		43265446194EF73D00BEFB46 /* latent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535C194EF73C00BEFB46 /* latent.h */; };
+		43265447194EF73D00BEFB46 /* libardour_visibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535D194EF73C00BEFB46 /* libardour_visibility.h */; };
+		43265448194EF73D00BEFB46 /* linux_vst_support.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535E194EF73C00BEFB46 /* linux_vst_support.h */; };
+		43265449194EF73D00BEFB46 /* location.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535F194EF73C00BEFB46 /* location.h */; };
+		4326544A194EF73D00BEFB46 /* location_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265360194EF73C00BEFB46 /* location_importer.h */; };
+		4326544B194EF73D00BEFB46 /* logcurve.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265361194EF73C00BEFB46 /* logcurve.h */; };
+		4326544C194EF73D00BEFB46 /* lv2_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265362194EF73C00BEFB46 /* lv2_plugin.h */; };
+		4326544D194EF73D00BEFB46 /* lxvst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265363194EF73C00BEFB46 /* lxvst_plugin.h */; };
+		4326544E194EF73D00BEFB46 /* meter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265364194EF73C00BEFB46 /* meter.h */; };
+		4326544F194EF73D00BEFB46 /* midi_automation_list_binder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265365194EF73C00BEFB46 /* midi_automation_list_binder.h */; };
+		43265450194EF73D00BEFB46 /* midi_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265366194EF73C00BEFB46 /* midi_buffer.h */; };
+		43265451194EF73D00BEFB46 /* midi_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265367194EF73C00BEFB46 /* midi_diskstream.h */; };
+		43265452194EF73D00BEFB46 /* midi_model.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265368194EF73C00BEFB46 /* midi_model.h */; };
+		43265453194EF73D00BEFB46 /* midi_operator.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265369194EF73C00BEFB46 /* midi_operator.h */; };
+		43265454194EF73D00BEFB46 /* midi_patch_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536A194EF73C00BEFB46 /* midi_patch_manager.h */; };
+		43265455194EF73D00BEFB46 /* midi_playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536B194EF73C00BEFB46 /* midi_playlist.h */; };
+		43265456194EF73D00BEFB46 /* midi_playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536C194EF73C00BEFB46 /* midi_playlist_source.h */; };
+		43265457194EF73D00BEFB46 /* midi_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536D194EF73C00BEFB46 /* midi_port.h */; };
+		43265458194EF73D00BEFB46 /* midi_region.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536E194EF73C00BEFB46 /* midi_region.h */; };
+		43265459194EF73D00BEFB46 /* midi_ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536F194EF73C00BEFB46 /* midi_ring_buffer.h */; };
+		4326545A194EF73D00BEFB46 /* midi_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265370194EF73C00BEFB46 /* midi_source.h */; };
+		4326545B194EF73D00BEFB46 /* midi_state_tracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265371194EF73C00BEFB46 /* midi_state_tracker.h */; };
+		4326545C194EF73D00BEFB46 /* midi_stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265372194EF73C00BEFB46 /* midi_stretch.h */; };
+		4326545D194EF73D00BEFB46 /* midi_track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265373194EF73C00BEFB46 /* midi_track.h */; };
+		4326545E194EF73D00BEFB46 /* midi_ui.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265374194EF73C00BEFB46 /* midi_ui.h */; };
+		4326545F194EF73D00BEFB46 /* midiport_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265375194EF73C00BEFB46 /* midiport_manager.h */; };
+		43265460194EF73D00BEFB46 /* mix.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265376194EF73C00BEFB46 /* mix.h */; };
+		43265461194EF73D00BEFB46 /* monitor_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265377194EF73C00BEFB46 /* monitor_processor.h */; };
+		43265462194EF73D00BEFB46 /* movable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265378194EF73C00BEFB46 /* movable.h */; };
+		43265463194EF73D00BEFB46 /* msvc_libardour.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265379194EF73C00BEFB46 /* msvc_libardour.h */; };
+		43265464194EF73D00BEFB46 /* mtdm.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537A194EF73C00BEFB46 /* mtdm.h */; };
+		43265465194EF73D00BEFB46 /* mute_master.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537B194EF73C00BEFB46 /* mute_master.h */; };
+		43265466194EF73D00BEFB46 /* noise.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537C194EF73C00BEFB46 /* noise.h */; };
+		43265467194EF73D00BEFB46 /* onset_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537D194EF73C00BEFB46 /* onset_detector.h */; };
+		43265468194EF73D00BEFB46 /* operations.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537E194EF73C00BEFB46 /* operations.h */; };
+		43265469194EF73D00BEFB46 /* pan_controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537F194EF73C00BEFB46 /* pan_controllable.h */; };
+		4326546A194EF73D00BEFB46 /* pannable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265380194EF73C00BEFB46 /* pannable.h */; };
+		4326546B194EF73D00BEFB46 /* panner.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265381194EF73C00BEFB46 /* panner.h */; };
+		4326546C194EF73D00BEFB46 /* panner_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265382194EF73C00BEFB46 /* panner_manager.h */; };
+		4326546D194EF73D00BEFB46 /* panner_shell.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265383194EF73C00BEFB46 /* panner_shell.h */; };
+		4326546E194EF73D00BEFB46 /* pcm_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265384194EF73C00BEFB46 /* pcm_utils.h */; };
+		4326546F194EF73D00BEFB46 /* peak.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265385194EF73C00BEFB46 /* peak.h */; };
+		43265470194EF73D00BEFB46 /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265386194EF73C00BEFB46 /* pi_controller.h */; };
+		43265471194EF73D00BEFB46 /* pitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265387194EF73C00BEFB46 /* pitch.h */; };
+		43265472194EF73D00BEFB46 /* playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265388194EF73C00BEFB46 /* playlist.h */; };
+		43265473194EF73D00BEFB46 /* playlist_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265389194EF73C00BEFB46 /* playlist_factory.h */; };
+		43265474194EF73D00BEFB46 /* playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538A194EF73C00BEFB46 /* playlist_source.h */; };
+		43265475194EF73D00BEFB46 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538B194EF73C00BEFB46 /* plugin.h */; };
+		43265476194EF73D00BEFB46 /* plugin_insert.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538C194EF73C00BEFB46 /* plugin_insert.h */; };
+		43265477194EF73D00BEFB46 /* plugin_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538D194EF73C00BEFB46 /* plugin_manager.h */; };
+		43265478194EF73D00BEFB46 /* plugin_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538E194EF73C00BEFB46 /* plugin_types.h */; };
+		43265479194EF73D00BEFB46 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538F194EF73C00BEFB46 /* port.h */; };
+		4326547A194EF73D00BEFB46 /* port_engine.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265390194EF73C00BEFB46 /* port_engine.h */; };
+		4326547B194EF73D00BEFB46 /* port_insert.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265391194EF73C00BEFB46 /* port_insert.h */; };
+		4326547C194EF73D00BEFB46 /* port_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265392194EF73C00BEFB46 /* port_manager.h */; };
+		4326547D194EF73D00BEFB46 /* port_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265393194EF73C00BEFB46 /* port_set.h */; };
+		4326547E194EF73D00BEFB46 /* process_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265394194EF73C00BEFB46 /* process_thread.h */; };
+		4326547F194EF73D00BEFB46 /* processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265395194EF73C00BEFB46 /* processor.h */; };
+		43265480194EF73D00BEFB46 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265396194EF73C00BEFB46 /* profile.h */; };
+		43265481194EF73D00BEFB46 /* progress.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265397194EF73C00BEFB46 /* progress.h */; };
+		43265482194EF73D00BEFB46 /* proxy_controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265398194EF73C00BEFB46 /* proxy_controllable.h */; };
+		43265483194EF73D00BEFB46 /* public_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265399194EF73C00BEFB46 /* public_diskstream.h */; };
+		43265484194EF73D00BEFB46 /* quantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539A194EF73C00BEFB46 /* quantize.h */; };
+		43265485194EF73D00BEFB46 /* rb_effect.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539B194EF73C00BEFB46 /* rb_effect.h */; };
+		43265486194EF73D00BEFB46 /* rc_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539C194EF73C00BEFB46 /* rc_configuration.h */; };
+		43265487194EF73D00BEFB46 /* rc_configuration_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539D194EF73C00BEFB46 /* rc_configuration_vars.h */; };
+		43265488194EF73D00BEFB46 /* readable.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539E194EF73C00BEFB46 /* readable.h */; };
+		43265489194EF73D00BEFB46 /* recent_sessions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539F194EF73C00BEFB46 /* recent_sessions.h */; };
+		4326548A194EF73D00BEFB46 /* region.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A0194EF73C00BEFB46 /* region.h */; };
+		4326548B194EF73D00BEFB46 /* region_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A1194EF73C00BEFB46 /* region_factory.h */; };
+		4326548C194EF73D00BEFB46 /* region_sorters.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A2194EF73C00BEFB46 /* region_sorters.h */; };
+		4326548D194EF73D00BEFB46 /* resampled_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A3194EF73C00BEFB46 /* resampled_source.h */; };
+		4326548E194EF73D00BEFB46 /* return.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A4194EF73C00BEFB46 /* return.h */; };
+		4326548F194EF73D00BEFB46 /* reverse.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A5194EF73C00BEFB46 /* reverse.h */; };
+		43265490194EF73D00BEFB46 /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A6194EF73C00BEFB46 /* revision.h */; };
+		43265491194EF73D00BEFB46 /* route.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A7194EF73C00BEFB46 /* route.h */; };
+		43265492194EF73D00BEFB46 /* route_graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A8194EF73C00BEFB46 /* route_graph.h */; };
+		43265493194EF73D00BEFB46 /* route_group.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A9194EF73C00BEFB46 /* route_group.h */; };
+		43265494194EF73D00BEFB46 /* route_group_member.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AA194EF73C00BEFB46 /* route_group_member.h */; };
+		43265495194EF73D00BEFB46 /* route_group_specialized.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AB194EF73C00BEFB46 /* route_group_specialized.h */; };
+		43265496194EF73D00BEFB46 /* runtime_functions.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AC194EF73C00BEFB46 /* runtime_functions.h */; };
+		43265497194EF73D00BEFB46 /* search_paths.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AD194EF73C00BEFB46 /* search_paths.h */; };
+		43265498194EF73D00BEFB46 /* send.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AE194EF73C00BEFB46 /* send.h */; };
+		43265499194EF73D00BEFB46 /* session.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AF194EF73C00BEFB46 /* session.h */; };
+		4326549A194EF73D00BEFB46 /* session_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B0194EF73C00BEFB46 /* session_configuration.h */; };
+		4326549B194EF73D00BEFB46 /* session_configuration_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B1194EF73C00BEFB46 /* session_configuration_vars.h */; };
+		4326549C194EF73D00BEFB46 /* session_directory.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B2194EF73C00BEFB46 /* session_directory.h */; };
+		4326549D194EF73D00BEFB46 /* session_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B3194EF73C00BEFB46 /* session_event.h */; };
+		4326549E194EF73D00BEFB46 /* session_handle.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B4194EF73C00BEFB46 /* session_handle.h */; };
+		4326549F194EF73D00BEFB46 /* session_metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B5194EF73C00BEFB46 /* session_metadata.h */; };
+		432654A0194EF73D00BEFB46 /* session_object.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B6194EF73C00BEFB46 /* session_object.h */; };
+		432654A1194EF73D00BEFB46 /* session_playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B7194EF73C00BEFB46 /* session_playlist.h */; };
+		432654A2194EF73D00BEFB46 /* session_playlists.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B8194EF73C00BEFB46 /* session_playlists.h */; };
+		432654A3194EF73D00BEFB46 /* session_route.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B9194EF73C00BEFB46 /* session_route.h */; };
+		432654A4194EF73D00BEFB46 /* session_state_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BA194EF73C00BEFB46 /* session_state_utils.h */; };
+		432654A5194EF73D00BEFB46 /* session_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BB194EF73C00BEFB46 /* session_utils.h */; };
+		432654A6194EF73D00BEFB46 /* silentfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BC194EF73C00BEFB46 /* silentfilesource.h */; };
+		432654A7194EF73D00BEFB46 /* slave.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BD194EF73C00BEFB46 /* slave.h */; };
+		432654A8194EF73D00BEFB46 /* smf_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BE194EF73C00BEFB46 /* smf_source.h */; };
+		432654A9194EF73D00BEFB46 /* sndfile_helpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BF194EF73C00BEFB46 /* sndfile_helpers.h */; };
+		432654AA194EF73D00BEFB46 /* sndfileimportable.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C0194EF73C00BEFB46 /* sndfileimportable.h */; };
+		432654AB194EF73D00BEFB46 /* sndfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C1194EF73C00BEFB46 /* sndfilesource.h */; };
+		432654AC194EF73D00BEFB46 /* soundseq.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C2194EF73C00BEFB46 /* soundseq.h */; };
+		432654AD194EF73D00BEFB46 /* source.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C3194EF73C00BEFB46 /* source.h */; };
+		432654AE194EF73D00BEFB46 /* source_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C4194EF73C00BEFB46 /* source_factory.h */; };
+		432654AF194EF73D00BEFB46 /* speaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C5194EF73C00BEFB46 /* speaker.h */; };
+		432654B0194EF73D00BEFB46 /* speakers.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C6194EF73C00BEFB46 /* speakers.h */; };
+		432654B1194EF73D00BEFB46 /* spline.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C7194EF73C00BEFB46 /* spline.h */; };
+		432654B2194EF73D00BEFB46 /* srcfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C8194EF73C00BEFB46 /* srcfilesource.h */; };
+		432654B3194EF73D00BEFB46 /* stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C9194EF73C00BEFB46 /* stretch.h */; };
+		432654B4194EF73D00BEFB46 /* strip_silence.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CA194EF73C00BEFB46 /* strip_silence.h */; };
+		432654B5194EF73D00BEFB46 /* system_exec.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CB194EF73C00BEFB46 /* system_exec.h */; };
+		432654B6194EF73D00BEFB46 /* tape_file_matcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CC194EF73C00BEFB46 /* tape_file_matcher.h */; };
+		432654B7194EF73D00BEFB46 /* template_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CD194EF73C00BEFB46 /* template_utils.h */; };
+		432654B8194EF73D00BEFB46 /* tempo.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CE194EF73C00BEFB46 /* tempo.h */; };
+		432654B9194EF73D00BEFB46 /* tempo_map_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CF194EF73C00BEFB46 /* tempo_map_importer.h */; };
+		432654BA194EF73D00BEFB46 /* thread_buffers.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D0194EF73C00BEFB46 /* thread_buffers.h */; };
+		432654BB194EF73D00BEFB46 /* ticker.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D1194EF73C00BEFB46 /* ticker.h */; };
+		432654BC194EF73D00BEFB46 /* timecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D2194EF73C00BEFB46 /* timecode.h */; };
+		432654BD194EF73D00BEFB46 /* timefx_request.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D3194EF73C00BEFB46 /* timefx_request.h */; };
+		432654BE194EF73D00BEFB46 /* timestamps.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D4194EF73C00BEFB46 /* timestamps.h */; };
+		432654BF194EF73D00BEFB46 /* track.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D5194EF73C00BEFB46 /* track.h */; };
+		432654C0194EF73D00BEFB46 /* transient_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D6194EF73C00BEFB46 /* transient_detector.h */; };
+		432654C1194EF73D00BEFB46 /* trimmable.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D7194EF73C00BEFB46 /* trimmable.h */; };
+		432654C2194EF73D00BEFB46 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D8194EF73C00BEFB46 /* types.h */; };
+		432654C3194EF73D00BEFB46 /* unknown_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D9194EF73C00BEFB46 /* unknown_processor.h */; };
+		432654C4194EF73D00BEFB46 /* uri_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DA194EF73C00BEFB46 /* uri_map.h */; };
+		432654C5194EF73D00BEFB46 /* user_bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DB194EF73C00BEFB46 /* user_bundle.h */; };
+		432654C6194EF73D00BEFB46 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DC194EF73C00BEFB46 /* utils.h */; };
+		432654C7194EF73D00BEFB46 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DD194EF73C00BEFB46 /* version.h */; };
+		432654C8194EF73D00BEFB46 /* aeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DF194EF73C00BEFB46 /* aeffectx.h */; };
+		432654C9194EF73D00BEFB46 /* vst_info_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E0194EF73C00BEFB46 /* vst_info_file.h */; };
+		432654CA194EF73D00BEFB46 /* vst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E1194EF73C00BEFB46 /* vst_plugin.h */; };
+		432654CB194EF73D00BEFB46 /* vst_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E2194EF73C00BEFB46 /* vst_types.h */; };
+		432654CC194EF73D00BEFB46 /* vumeterdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E3194EF73C00BEFB46 /* vumeterdsp.h */; };
+		432654CD194EF73D00BEFB46 /* windows_vst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E4194EF73C00BEFB46 /* windows_vst_plugin.h */; };
+		432654CE194EF73D00BEFB46 /* worker.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E5194EF73C00BEFB46 /* worker.h */; };
+		432859E61A10F415006C3E03 /* midi_scene_change.h in Headers */ = {isa = PBXBuildFile; fileRef = 432859E21A10F415006C3E03 /* midi_scene_change.h */; };
+		432859E71A10F415006C3E03 /* midi_scene_changer.h in Headers */ = {isa = PBXBuildFile; fileRef = 432859E31A10F415006C3E03 /* midi_scene_changer.h */; };
+		432859E81A10F415006C3E03 /* mididm.h in Headers */ = {isa = PBXBuildFile; fileRef = 432859E41A10F415006C3E03 /* mididm.h */; };
+		432859E91A10F415006C3E03 /* soundcloud_upload.h in Headers */ = {isa = PBXBuildFile; fileRef = 432859E51A10F415006C3E03 /* soundcloud_upload.h */; };
+		432859F31A10F436006C3E03 /* midi_scene_change.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859EE1A10F436006C3E03 /* midi_scene_change.cc */; };
+		432859F41A10F436006C3E03 /* midi_scene_changer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859EF1A10F436006C3E03 /* midi_scene_changer.cc */; };
+		432859F51A10F436006C3E03 /* mididm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859F01A10F436006C3E03 /* mididm.cc */; };
+		432859F61A10F436006C3E03 /* scene_change.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859F11A10F436006C3E03 /* scene_change.cc */; };
+		432859F71A10F436006C3E03 /* soundcloud_upload.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859F21A10F436006C3E03 /* soundcloud_upload.cc */; };
+		43AA8383194EEB2600A67B56 /* amp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82AE194EEB2600A67B56 /* amp.cc */; };
+		43AA8384194EEB2600A67B56 /* analyser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82AF194EEB2600A67B56 /* analyser.cc */; };
+		43AA8385194EEB2600A67B56 /* async_midi_port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B0194EEB2600A67B56 /* async_midi_port.cc */; };
+		43AA8386194EEB2600A67B56 /* audio_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B1194EEB2600A67B56 /* audio_buffer.cc */; };
+		43AA8387194EEB2600A67B56 /* audio_diskstream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B2194EEB2600A67B56 /* audio_diskstream.cc */; };
+		43AA8388194EEB2600A67B56 /* audio_library.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B3194EEB2600A67B56 /* audio_library.cc */; };
+		43AA8389194EEB2600A67B56 /* audio_playlist_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B4194EEB2600A67B56 /* audio_playlist_importer.cc */; };
+		43AA838A194EEB2600A67B56 /* audio_playlist_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B5194EEB2600A67B56 /* audio_playlist_source.cc */; };
+		43AA838B194EEB2600A67B56 /* audio_playlist.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B6194EEB2600A67B56 /* audio_playlist.cc */; };
+		43AA838C194EEB2600A67B56 /* audio_port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B7194EEB2600A67B56 /* audio_port.cc */; };
+		43AA838D194EEB2600A67B56 /* audio_region_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B8194EEB2600A67B56 /* audio_region_importer.cc */; };
+		43AA838E194EEB2600A67B56 /* audio_track_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B9194EEB2600A67B56 /* audio_track_importer.cc */; };
+		43AA838F194EEB2600A67B56 /* audio_track.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BA194EEB2600A67B56 /* audio_track.cc */; };
+		43AA8390194EEB2600A67B56 /* audio_unit.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BB194EEB2600A67B56 /* audio_unit.cc */; };
+		43AA8391194EEB2600A67B56 /* audioanalyser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BC194EEB2600A67B56 /* audioanalyser.cc */; };
+		43AA8392194EEB2600A67B56 /* audioengine.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BD194EEB2600A67B56 /* audioengine.cc */; };
+		43AA8393194EEB2600A67B56 /* audiofile_tagger.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BE194EEB2600A67B56 /* audiofile_tagger.cc */; };
+		43AA8394194EEB2600A67B56 /* audiofilesource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BF194EEB2600A67B56 /* audiofilesource.cc */; };
+		43AA8395194EEB2600A67B56 /* audioregion.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C0194EEB2600A67B56 /* audioregion.cc */; };
+		43AA8396194EEB2600A67B56 /* audiosource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C1194EEB2600A67B56 /* audiosource.cc */; };
+		43AA8397194EEB2600A67B56 /* auditioner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C2194EEB2600A67B56 /* auditioner.cc */; };
+		43AA8398194EEB2600A67B56 /* auto_bundle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C3194EEB2600A67B56 /* auto_bundle.cc */; };
+		43AA8399194EEB2600A67B56 /* automatable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C4194EEB2600A67B56 /* automatable.cc */; };
+		43AA839A194EEB2600A67B56 /* automation_control.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C5194EEB2600A67B56 /* automation_control.cc */; };
+		43AA839B194EEB2600A67B56 /* automation_list.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C6194EEB2600A67B56 /* automation_list.cc */; };
+		43AA839C194EEB2600A67B56 /* automation_watch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C7194EEB2600A67B56 /* automation_watch.cc */; };
+		43AA839D194EEB2600A67B56 /* automation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C8194EEB2600A67B56 /* automation.cc */; };
+		43AA839E194EEB2600A67B56 /* beats_frames_converter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C9194EEB2600A67B56 /* beats_frames_converter.cc */; };
+		43AA839F194EEB2600A67B56 /* broadcast_info.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CA194EEB2600A67B56 /* broadcast_info.cc */; };
+		43AA83A0194EEB2600A67B56 /* buffer_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CB194EEB2600A67B56 /* buffer_manager.cc */; };
+		43AA83A1194EEB2600A67B56 /* buffer_set.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CC194EEB2600A67B56 /* buffer_set.cc */; };
+		43AA83A2194EEB2600A67B56 /* buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CD194EEB2600A67B56 /* buffer.cc */; };
+		43AA83A3194EEB2600A67B56 /* bundle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CE194EEB2600A67B56 /* bundle.cc */; };
+		43AA83A4194EEB2600A67B56 /* butler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CF194EEB2600A67B56 /* butler.cc */; };
+		43AA83A5194EEB2600A67B56 /* caimportable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D0194EEB2600A67B56 /* caimportable.cc */; };
+		43AA83A6194EEB2600A67B56 /* capturing_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D1194EEB2600A67B56 /* capturing_processor.cc */; };
+		43AA83A7194EEB2600A67B56 /* chan_count.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D2194EEB2600A67B56 /* chan_count.cc */; };
+		43AA83A8194EEB2600A67B56 /* chan_mapping.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D3194EEB2600A67B56 /* chan_mapping.cc */; };
+		43AA83A9194EEB2600A67B56 /* config_text.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D4194EEB2600A67B56 /* config_text.cc */; };
+		43AA83AA194EEB2600A67B56 /* configuration.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D5194EEB2600A67B56 /* configuration.cc */; };
+		43AA83AB194EEB2600A67B56 /* control_protocol_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D6194EEB2600A67B56 /* control_protocol_manager.cc */; };
+		43AA83AC194EEB2600A67B56 /* coreaudiosource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D7194EEB2600A67B56 /* coreaudiosource.cc */; };
+		43AA83AD194EEB2600A67B56 /* cycle_timer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D8194EEB2600A67B56 /* cycle_timer.cc */; };
+		43AA83AE194EEB2600A67B56 /* data_type.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D9194EEB2600A67B56 /* data_type.cc */; };
+		43AA83AF194EEB2600A67B56 /* debug.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DA194EEB2600A67B56 /* debug.cc */; };
+		43AA83B0194EEB2600A67B56 /* default_click.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DB194EEB2600A67B56 /* default_click.cc */; };
+		43AA83B1194EEB2600A67B56 /* delivery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DC194EEB2600A67B56 /* delivery.cc */; };
+		43AA83B2194EEB2600A67B56 /* directory_names.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DD194EEB2600A67B56 /* directory_names.cc */; };
+		43AA83B3194EEB2600A67B56 /* diskstream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DE194EEB2600A67B56 /* diskstream.cc */; };
+		43AA83B4194EEB2600A67B56 /* element_import_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DF194EEB2600A67B56 /* element_import_handler.cc */; };
+		43AA83B5194EEB2600A67B56 /* element_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E0194EEB2600A67B56 /* element_importer.cc */; };
+		43AA83B6194EEB2600A67B56 /* engine_slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E1194EEB2600A67B56 /* engine_slave.cc */; };
+		43AA83B7194EEB2600A67B56 /* engine_state_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E2194EEB2600A67B56 /* engine_state_controller.cc */; };
+		43AA83B8194EEB2600A67B56 /* enums.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E3194EEB2600A67B56 /* enums.cc */; };
+		43AA83B9194EEB2600A67B56 /* event_type_map.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E4194EEB2600A67B56 /* event_type_map.cc */; };
+		43AA83BA194EEB2600A67B56 /* export_channel_configuration.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E5194EEB2600A67B56 /* export_channel_configuration.cc */; };
+		43AA83BB194EEB2600A67B56 /* export_channel.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E6194EEB2600A67B56 /* export_channel.cc */; };
+		43AA83BC194EEB2600A67B56 /* export_failed.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E7194EEB2600A67B56 /* export_failed.cc */; };
+		43AA83BD194EEB2600A67B56 /* export_filename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E8194EEB2600A67B56 /* export_filename.cc */; };
+		43AA83BE194EEB2600A67B56 /* export_format_base.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E9194EEB2600A67B56 /* export_format_base.cc */; };
+		43AA83BF194EEB2600A67B56 /* export_format_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EA194EEB2600A67B56 /* export_format_manager.cc */; };
+		43AA83C0194EEB2600A67B56 /* export_format_specification.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EB194EEB2600A67B56 /* export_format_specification.cc */; };
+		43AA83C1194EEB2600A67B56 /* export_formats.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EC194EEB2600A67B56 /* export_formats.cc */; };
+		43AA83C2194EEB2600A67B56 /* export_graph_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82ED194EEB2600A67B56 /* export_graph_builder.cc */; };
+		43AA83C3194EEB2600A67B56 /* export_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EE194EEB2600A67B56 /* export_handler.cc */; };
+		43AA83C4194EEB2600A67B56 /* export_multiplication.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EF194EEB2600A67B56 /* export_multiplication.cc */; };
+		43AA83C5194EEB2600A67B56 /* export_preset.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F0194EEB2600A67B56 /* export_preset.cc */; };
+		43AA83C6194EEB2600A67B56 /* export_profile_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F1194EEB2600A67B56 /* export_profile_manager.cc */; };
+		43AA83C7194EEB2600A67B56 /* export_status.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F2194EEB2600A67B56 /* export_status.cc */; };
+		43AA83C8194EEB2600A67B56 /* export_timespan.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F3194EEB2600A67B56 /* export_timespan.cc */; };
+		43AA83C9194EEB2600A67B56 /* file_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F4194EEB2600A67B56 /* file_source.cc */; };
+		43AA83CA194EEB2600A67B56 /* filename_extensions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F5194EEB2600A67B56 /* filename_extensions.cc */; };
+		43AA83CB194EEB2600A67B56 /* filesystem_paths.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F6194EEB2600A67B56 /* filesystem_paths.cc */; };
+		43AA83CC194EEB2600A67B56 /* filter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F7194EEB2600A67B56 /* filter.cc */; };
+		43AA83CD194EEB2600A67B56 /* find_session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F8194EEB2600A67B56 /* find_session.cc */; };
+		43AA83CE194EEB2600A67B56 /* globals.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F9194EEB2600A67B56 /* globals.cc */; };
+		43AA83CF194EEB2600A67B56 /* graph.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FA194EEB2600A67B56 /* graph.cc */; };
+		43AA83D0194EEB2600A67B56 /* graphnode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FB194EEB2600A67B56 /* graphnode.cc */; };
+		43AA83D1194EEB2600A67B56 /* iec1ppmdsp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FC194EEB2600A67B56 /* iec1ppmdsp.cc */; };
+		43AA83D2194EEB2600A67B56 /* iec2ppmdsp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FD194EEB2600A67B56 /* iec2ppmdsp.cc */; };
+		43AA83D3194EEB2600A67B56 /* import.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FE194EEB2600A67B56 /* import.cc */; };
+		43AA83D4194EEB2600A67B56 /* instrument_info.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FF194EEB2600A67B56 /* instrument_info.cc */; };
+		43AA83D5194EEB2600A67B56 /* internal_return.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8300194EEB2600A67B56 /* internal_return.cc */; };
+		43AA83D6194EEB2600A67B56 /* internal_send.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8301194EEB2600A67B56 /* internal_send.cc */; };
+		43AA83D7194EEB2600A67B56 /* interpolation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8302194EEB2600A67B56 /* interpolation.cc */; };
+		43AA83D8194EEB2600A67B56 /* io_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8303194EEB2600A67B56 /* io_processor.cc */; };
+		43AA83D9194EEB2600A67B56 /* io.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8304194EEB2600A67B56 /* io.cc */; };
+		43AA83DA194EEB2600A67B56 /* kmeterdsp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8305194EEB2600A67B56 /* kmeterdsp.cc */; };
+		43AA83DB194EEB2600A67B56 /* ladspa_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8306194EEB2600A67B56 /* ladspa_plugin.cc */; };
+		43AA83DC194EEB2600A67B56 /* linux_vst_support.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8307194EEB2600A67B56 /* linux_vst_support.cc */; };
+		43AA83DD194EEB2600A67B56 /* location_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8308194EEB2600A67B56 /* location_importer.cc */; };
+		43AA83DE194EEB2600A67B56 /* location.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8309194EEB2600A67B56 /* location.cc */; };
+		43AA83DF194EEB2600A67B56 /* ltc_slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830A194EEB2600A67B56 /* ltc_slave.cc */; };
+		43AA83E0194EEB2600A67B56 /* lv2_evbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830B194EEB2600A67B56 /* lv2_evbuf.c */; };
+		43AA83E1194EEB2600A67B56 /* lv2_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830C194EEB2600A67B56 /* lv2_plugin.cc */; };
+		43AA83E2194EEB2600A67B56 /* lxvst_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830D194EEB2600A67B56 /* lxvst_plugin.cc */; };
+		43AA83E3194EEB2600A67B56 /* meter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830E194EEB2600A67B56 /* meter.cc */; };
+		43AA83E4194EEB2600A67B56 /* midi_automation_list_binder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830F194EEB2600A67B56 /* midi_automation_list_binder.cc */; };
+		43AA83E5194EEB2600A67B56 /* midi_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8310194EEB2600A67B56 /* midi_buffer.cc */; };
+		43AA83E6194EEB2600A67B56 /* midi_clock_slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8311194EEB2600A67B56 /* midi_clock_slave.cc */; };
+		43AA83E7194EEB2600A67B56 /* midi_diskstream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8312194EEB2600A67B56 /* midi_diskstream.cc */; };
+		43AA83E8194EEB2600A67B56 /* midi_model.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8313194EEB2600A67B56 /* midi_model.cc */; };
+		43AA83E9194EEB2600A67B56 /* midi_patch_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8314194EEB2600A67B56 /* midi_patch_manager.cc */; };
+		43AA83EA194EEB2600A67B56 /* midi_playlist_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8315194EEB2600A67B56 /* midi_playlist_source.cc */; };
+		43AA83EB194EEB2600A67B56 /* midi_playlist.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8316194EEB2600A67B56 /* midi_playlist.cc */; };
+		43AA83EC194EEB2600A67B56 /* midi_port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8317194EEB2600A67B56 /* midi_port.cc */; };
+		43AA83ED194EEB2600A67B56 /* midi_region.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8318194EEB2600A67B56 /* midi_region.cc */; };
+		43AA83EE194EEB2600A67B56 /* midi_ring_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8319194EEB2600A67B56 /* midi_ring_buffer.cc */; };
+		43AA83EF194EEB2600A67B56 /* midi_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831A194EEB2600A67B56 /* midi_source.cc */; };
+		43AA83F0194EEB2600A67B56 /* midi_state_tracker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831B194EEB2600A67B56 /* midi_state_tracker.cc */; };
+		43AA83F1194EEB2600A67B56 /* midi_stretch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831C194EEB2600A67B56 /* midi_stretch.cc */; };
+		43AA83F2194EEB2600A67B56 /* midi_track.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831D194EEB2600A67B56 /* midi_track.cc */; };
+		43AA83F3194EEB2600A67B56 /* midi_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831E194EEB2600A67B56 /* midi_ui.cc */; };
+		43AA83F4194EEB2600A67B56 /* midiport_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831F194EEB2600A67B56 /* midiport_manager.cc */; };
+		43AA83F5194EEB2600A67B56 /* mix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8320194EEB2600A67B56 /* mix.cc */; };
+		43AA83F6194EEB2600A67B56 /* monitor_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8321194EEB2600A67B56 /* monitor_processor.cc */; };
+		43AA83F7194EEB2600A67B56 /* mtc_slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8322194EEB2600A67B56 /* mtc_slave.cc */; };
+		43AA83F8194EEB2600A67B56 /* mtdm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8323194EEB2600A67B56 /* mtdm.cc */; };
+		43AA83F9194EEB2600A67B56 /* mute_master.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8324194EEB2600A67B56 /* mute_master.cc */; };
+		43AA83FA194EEB2600A67B56 /* onset_detector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8325194EEB2600A67B56 /* onset_detector.cc */; };
+		43AA83FB194EEB2600A67B56 /* operations.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8326194EEB2600A67B56 /* operations.cc */; };
+		43AA83FC194EEB2600A67B56 /* pan_controllable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8327194EEB2600A67B56 /* pan_controllable.cc */; };
+		43AA83FD194EEB2600A67B56 /* pannable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8328194EEB2600A67B56 /* pannable.cc */; };
+		43AA83FE194EEB2600A67B56 /* panner_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8329194EEB2600A67B56 /* panner_manager.cc */; };
+		43AA83FF194EEB2600A67B56 /* panner_shell.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832A194EEB2600A67B56 /* panner_shell.cc */; };
+		43AA8400194EEB2600A67B56 /* panner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832B194EEB2600A67B56 /* panner.cc */; };
+		43AA8401194EEB2600A67B56 /* pcm_utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832C194EEB2600A67B56 /* pcm_utils.cc */; };
+		43AA8402194EEB2600A67B56 /* pi_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832D194EEB2600A67B56 /* pi_controller.cc */; };
+		43AA8403194EEB2600A67B56 /* playlist_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832E194EEB2600A67B56 /* playlist_factory.cc */; };
+		43AA8404194EEB2600A67B56 /* playlist_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832F194EEB2600A67B56 /* playlist_source.cc */; };
+		43AA8405194EEB2600A67B56 /* playlist.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8330194EEB2600A67B56 /* playlist.cc */; };
+		43AA8406194EEB2600A67B56 /* plugin_insert.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8331194EEB2600A67B56 /* plugin_insert.cc */; };
+		43AA8407194EEB2600A67B56 /* plugin_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8332194EEB2600A67B56 /* plugin_manager.cc */; };
+		43AA8408194EEB2600A67B56 /* plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8333194EEB2600A67B56 /* plugin.cc */; };
+		43AA8409194EEB2600A67B56 /* port_insert.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8334194EEB2600A67B56 /* port_insert.cc */; };
+		43AA840A194EEB2600A67B56 /* port_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8335194EEB2600A67B56 /* port_manager.cc */; };
+		43AA840B194EEB2600A67B56 /* port_set.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8336194EEB2600A67B56 /* port_set.cc */; };
+		43AA840C194EEB2600A67B56 /* port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8337194EEB2600A67B56 /* port.cc */; };
+		43AA840D194EEB2600A67B56 /* process_thread.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8338194EEB2600A67B56 /* process_thread.cc */; };
+		43AA840E194EEB2600A67B56 /* processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8339194EEB2600A67B56 /* processor.cc */; };
+		43AA840F194EEB2600A67B56 /* progress.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833A194EEB2600A67B56 /* progress.cc */; };
+		43AA8410194EEB2600A67B56 /* quantize.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833B194EEB2600A67B56 /* quantize.cc */; };
+		43AA8411194EEB2600A67B56 /* rb_effect.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833C194EEB2600A67B56 /* rb_effect.cc */; };
+		43AA8412194EEB2600A67B56 /* rc_configuration.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833D194EEB2600A67B56 /* rc_configuration.cc */; };
+		43AA8413194EEB2600A67B56 /* rdff.c in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833E194EEB2600A67B56 /* rdff.c */; };
+		43AA8414194EEB2600A67B56 /* recent_sessions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833F194EEB2600A67B56 /* recent_sessions.cc */; };
+		43AA8415194EEB2600A67B56 /* region_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8340194EEB2600A67B56 /* region_factory.cc */; };
+		43AA8416194EEB2600A67B56 /* region.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8341194EEB2600A67B56 /* region.cc */; };
+		43AA8417194EEB2600A67B56 /* resampled_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8342194EEB2600A67B56 /* resampled_source.cc */; };
+		43AA8418194EEB2600A67B56 /* return.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8343194EEB2600A67B56 /* return.cc */; };
+		43AA8419194EEB2600A67B56 /* reverse.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8344194EEB2600A67B56 /* reverse.cc */; };
+		43AA841A194EEB2600A67B56 /* revision.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8345194EEB2600A67B56 /* revision.cc */; };
+		43AA841B194EEB2600A67B56 /* route_graph.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8346194EEB2600A67B56 /* route_graph.cc */; };
+		43AA841C194EEB2600A67B56 /* route_group_member.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8347194EEB2600A67B56 /* route_group_member.cc */; };
+		43AA841D194EEB2600A67B56 /* route_group.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8348194EEB2600A67B56 /* route_group.cc */; };
+		43AA841E194EEB2600A67B56 /* route.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8349194EEB2600A67B56 /* route.cc */; };
+		43AA841F194EEB2600A67B56 /* search_paths.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834A194EEB2600A67B56 /* search_paths.cc */; };
+		43AA8420194EEB2600A67B56 /* send.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834B194EEB2600A67B56 /* send.cc */; };
+		43AA8421194EEB2600A67B56 /* session_butler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834C194EEB2600A67B56 /* session_butler.cc */; };
+		43AA8422194EEB2600A67B56 /* session_click.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834D194EEB2600A67B56 /* session_click.cc */; };
+		43AA8423194EEB2600A67B56 /* session_command.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834E194EEB2600A67B56 /* session_command.cc */; };
+		43AA8424194EEB2600A67B56 /* session_configuration.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834F194EEB2600A67B56 /* session_configuration.cc */; };
+		43AA8425194EEB2600A67B56 /* session_directory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8350194EEB2600A67B56 /* session_directory.cc */; };
+		43AA8426194EEB2600A67B56 /* session_events.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8351194EEB2600A67B56 /* session_events.cc */; };
+		43AA8427194EEB2600A67B56 /* session_export.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8352194EEB2600A67B56 /* session_export.cc */; };
+		43AA8428194EEB2600A67B56 /* session_handle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8353194EEB2600A67B56 /* session_handle.cc */; };
+		43AA8429194EEB2600A67B56 /* session_ltc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8354194EEB2600A67B56 /* session_ltc.cc */; };
+		43AA842A194EEB2600A67B56 /* session_metadata.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8355194EEB2600A67B56 /* session_metadata.cc */; };
+		43AA842B194EEB2600A67B56 /* session_midi.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8356194EEB2600A67B56 /* session_midi.cc */; };
+		43AA842C194EEB2600A67B56 /* session_object.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8357194EEB2600A67B56 /* session_object.cc */; };
+		43AA842D194EEB2600A67B56 /* session_playlists.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8358194EEB2600A67B56 /* session_playlists.cc */; };
+		43AA842E194EEB2600A67B56 /* session_process.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8359194EEB2600A67B56 /* session_process.cc */; };
+		43AA842F194EEB2600A67B56 /* session_rtevents.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835A194EEB2600A67B56 /* session_rtevents.cc */; };
+		43AA8430194EEB2600A67B56 /* session_state_utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835B194EEB2600A67B56 /* session_state_utils.cc */; };
+		43AA8431194EEB2600A67B56 /* session_state.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835C194EEB2600A67B56 /* session_state.cc */; };
+		43AA8432194EEB2600A67B56 /* session_time.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835D194EEB2600A67B56 /* session_time.cc */; };
+		43AA8433194EEB2600A67B56 /* session_transport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835E194EEB2600A67B56 /* session_transport.cc */; };
+		43AA8434194EEB2600A67B56 /* session_vst.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835F194EEB2600A67B56 /* session_vst.cc */; };
+		43AA8435194EEB2600A67B56 /* session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8360194EEB2600A67B56 /* session.cc */; };
+		43AA8436194EEB2600A67B56 /* slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8361194EEB2600A67B56 /* slave.cc */; };
+		43AA8437194EEB2600A67B56 /* smf_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8362194EEB2600A67B56 /* smf_source.cc */; };
+		43AA8438194EEB2600A67B56 /* sndfile_helpers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8363194EEB2600A67B56 /* sndfile_helpers.cc */; };
+		43AA8439194EEB2600A67B56 /* sndfileimportable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8364194EEB2600A67B56 /* sndfileimportable.cc */; };
+		43AA843A194EEB2600A67B56 /* sndfilesource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8365194EEB2600A67B56 /* sndfilesource.cc */; };
+		43AA843B194EEB2600A67B56 /* source_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8366194EEB2600A67B56 /* source_factory.cc */; };
+		43AA843C194EEB2600A67B56 /* source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8367194EEB2600A67B56 /* source.cc */; };
+		43AA843D194EEB2600A67B56 /* speakers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8368194EEB2600A67B56 /* speakers.cc */; };
+		43AA843E194EEB2600A67B56 /* srcfilesource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8369194EEB2600A67B56 /* srcfilesource.cc */; };
+		43AA843F194EEB2600A67B56 /* sse_functions_64bit.s in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836A194EEB2600A67B56 /* sse_functions_64bit.s */; };
+		43AA8440194EEB2600A67B56 /* sse_functions_xmm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836B194EEB2600A67B56 /* sse_functions_xmm.cc */; };
+		43AA8441194EEB2600A67B56 /* sse_functions.s in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836C194EEB2600A67B56 /* sse_functions.s */; };
+		43AA8442194EEB2600A67B56 /* st_pitch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836D194EEB2600A67B56 /* st_pitch.cc */; };
+		43AA8443194EEB2600A67B56 /* st_stretch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836E194EEB2600A67B56 /* st_stretch.cc */; };
+		43AA8444194EEB2600A67B56 /* strip_silence.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836F194EEB2600A67B56 /* strip_silence.cc */; };
+		43AA8445194EEB2600A67B56 /* system_exec.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8370194EEB2600A67B56 /* system_exec.cc */; };
+		43AA8446194EEB2600A67B56 /* tape_file_matcher.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8371194EEB2600A67B56 /* tape_file_matcher.cc */; };
+		43AA8447194EEB2600A67B56 /* template_utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8372194EEB2600A67B56 /* template_utils.cc */; };
+		43AA8448194EEB2600A67B56 /* tempo_map_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8373194EEB2600A67B56 /* tempo_map_importer.cc */; };
+		43AA8449194EEB2600A67B56 /* tempo.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8374194EEB2600A67B56 /* tempo.cc */; };
+		43AA844A194EEB2600A67B56 /* thread_buffers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8375194EEB2600A67B56 /* thread_buffers.cc */; };
+		43AA844B194EEB2600A67B56 /* ticker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8376194EEB2600A67B56 /* ticker.cc */; };
+		43AA844C194EEB2600A67B56 /* track.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8377194EEB2600A67B56 /* track.cc */; };
+		43AA844D194EEB2600A67B56 /* transient_detector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8378194EEB2600A67B56 /* transient_detector.cc */; };
+		43AA844E194EEB2600A67B56 /* unknown_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8379194EEB2600A67B56 /* unknown_processor.cc */; };
+		43AA844F194EEB2600A67B56 /* uri_map.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837A194EEB2600A67B56 /* uri_map.cc */; };
+		43AA8450194EEB2600A67B56 /* user_bundle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837B194EEB2600A67B56 /* user_bundle.cc */; };
+		43AA8451194EEB2600A67B56 /* utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837C194EEB2600A67B56 /* utils.cc */; };
+		43AA8452194EEB2600A67B56 /* version.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837D194EEB2600A67B56 /* version.cc */; };
+		43AA8453194EEB2600A67B56 /* vst_info_file.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837E194EEB2600A67B56 /* vst_info_file.cc */; };
+		43AA8454194EEB2600A67B56 /* vst_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837F194EEB2600A67B56 /* vst_plugin.cc */; };
+		43AA8455194EEB2600A67B56 /* vumeterdsp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8380194EEB2600A67B56 /* vumeterdsp.cc */; };
+		43AA8456194EEB2600A67B56 /* windows_vst_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8381194EEB2600A67B56 /* windows_vst_plugin.cc */; };
+		43AA8457194EEB2600A67B56 /* worker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8382194EEB2600A67B56 /* worker.cc */; };
+		43AA84B9194EEB5F00A67B56 /* audio_engine_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8459194EEB5F00A67B56 /* audio_engine_test.cc */; };
+		43AA84BA194EEB5F00A67B56 /* audio_engine_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA845A194EEB5F00A67B56 /* audio_engine_test.h */; };
+		43AA84BB194EEB5F00A67B56 /* audio_region_read_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA845B194EEB5F00A67B56 /* audio_region_read_test.cc */; };
+		43AA84BC194EEB5F00A67B56 /* audio_region_read_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA845C194EEB5F00A67B56 /* audio_region_read_test.h */; };
+		43AA84BD194EEB5F00A67B56 /* audio_region_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA845D194EEB5F00A67B56 /* audio_region_test.cc */; };
+		43AA84BE194EEB5F00A67B56 /* audio_region_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA845E194EEB5F00A67B56 /* audio_region_test.h */; };
+		43AA84BF194EEB5F00A67B56 /* automation_list_property_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA845F194EEB5F00A67B56 /* automation_list_property_test.cc */; };
+		43AA84C0194EEB5F00A67B56 /* automation_list_property_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8460194EEB5F00A67B56 /* automation_list_property_test.h */; };
+		43AA84C1194EEB5F00A67B56 /* bbt_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8461194EEB5F00A67B56 /* bbt_test.cc */; };
+		43AA84C2194EEB5F00A67B56 /* bbt_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8462194EEB5F00A67B56 /* bbt_test.h */; };
+		43AA84C3194EEB5F00A67B56 /* combine_regions_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8463194EEB5F00A67B56 /* combine_regions_test.cc */; };
+		43AA84C4194EEB5F00A67B56 /* combine_regions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8464194EEB5F00A67B56 /* combine_regions_test.h */; };
+		43AA84C5194EEB5F00A67B56 /* control_surfaces_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8465194EEB5F00A67B56 /* control_surfaces_test.cc */; };
+		43AA84C6194EEB5F00A67B56 /* control_surfaces_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8466194EEB5F00A67B56 /* control_surfaces_test.h */; };
+		43AA84C7194EEB5F00A67B56 /* dummy_lxvst.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA847C194EEB5F00A67B56 /* dummy_lxvst.cc */; };
+		43AA84C8194EEB5F00A67B56 /* framepos_minus_beats_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA847D194EEB5F00A67B56 /* framepos_minus_beats_test.cc */; };
+		43AA84C9194EEB5F00A67B56 /* framepos_minus_beats_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA847E194EEB5F00A67B56 /* framepos_minus_beats_test.h */; };
+		43AA84CA194EEB5F00A67B56 /* framepos_plus_beats_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA847F194EEB5F00A67B56 /* framepos_plus_beats_test.cc */; };
+		43AA84CB194EEB5F00A67B56 /* framepos_plus_beats_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8480194EEB5F00A67B56 /* framepos_plus_beats_test.h */; };
+		43AA84CC194EEB5F00A67B56 /* framewalk_to_beats_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8481194EEB5F00A67B56 /* framewalk_to_beats_test.cc */; };
+		43AA84CD194EEB5F00A67B56 /* framewalk_to_beats_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8482194EEB5F00A67B56 /* framewalk_to_beats_test.h */; };
+		43AA84CE194EEB5F00A67B56 /* interpolation_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8483194EEB5F00A67B56 /* interpolation_test.cc */; };
+		43AA84CF194EEB5F00A67B56 /* interpolation_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8484194EEB5F00A67B56 /* interpolation_test.h */; };
+		43AA84D0194EEB5F00A67B56 /* jack_utils_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8485194EEB5F00A67B56 /* jack_utils_test.cc */; };
+		43AA84D1194EEB5F00A67B56 /* jack_utils_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8486194EEB5F00A67B56 /* jack_utils_test.h */; };
+		43AA84D2194EEB5F00A67B56 /* load_session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8487194EEB5F00A67B56 /* load_session.cc */; };
+		43AA84D3194EEB5F00A67B56 /* load_sessions_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8488194EEB5F00A67B56 /* load_sessions_test.cc */; };
+		43AA84D4194EEB5F00A67B56 /* load_sessions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8489194EEB5F00A67B56 /* load_sessions_test.h */; };
+		43AA84D5194EEB5F00A67B56 /* midi_clock_slave_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA848A194EEB5F00A67B56 /* midi_clock_slave_test.cc */; };
+		43AA84D6194EEB5F00A67B56 /* midi_clock_slave_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA848B194EEB5F00A67B56 /* midi_clock_slave_test.h */; };
+		43AA84D7194EEB5F00A67B56 /* mtdm_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA848C194EEB5F00A67B56 /* mtdm_test.cc */; };
+		43AA84D8194EEB5F00A67B56 /* mtdm_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA848D194EEB5F00A67B56 /* mtdm_test.h */; };
+		43AA84D9194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA848E194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc */; };
+		43AA84DA194EEB5F00A67B56 /* playlist_equivalent_regions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA848F194EEB5F00A67B56 /* playlist_equivalent_regions_test.h */; };
+		43AA84DB194EEB5F00A67B56 /* playlist_layering_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8490194EEB5F00A67B56 /* playlist_layering_test.cc */; };
+		43AA84DC194EEB5F00A67B56 /* playlist_layering_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8491194EEB5F00A67B56 /* playlist_layering_test.h */; };
+		43AA84DD194EEB5F00A67B56 /* playlist_read_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8492194EEB5F00A67B56 /* playlist_read_test.cc */; };
+		43AA84DE194EEB5F00A67B56 /* playlist_read_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8493194EEB5F00A67B56 /* playlist_read_test.h */; };
+		43AA84DF194EEB5F00A67B56 /* plugins_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8494194EEB5F00A67B56 /* plugins_test.cc */; };
+		43AA84E0194EEB5F00A67B56 /* plugins_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8495194EEB5F00A67B56 /* plugins_test.h */; };
+		43AA84E1194EEB5F00A67B56 /* load_session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8497194EEB5F00A67B56 /* load_session.cc */; };
+		43AA84E2194EEB5F00A67B56 /* lots_of_regions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8498194EEB5F00A67B56 /* lots_of_regions.cc */; };
+		43AA84E3194EEB5F00A67B56 /* runpc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8499194EEB5F00A67B56 /* runpc.cc */; };
+		43AA84E4194EEB5F00A67B56 /* region_naming_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84AA194EEB5F00A67B56 /* region_naming_test.cc */; };
+		43AA84E5194EEB5F00A67B56 /* region_naming_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84AB194EEB5F00A67B56 /* region_naming_test.h */; };
+		43AA84E6194EEB5F00A67B56 /* resampled_source_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84AC194EEB5F00A67B56 /* resampled_source_test.cc */; };
+		43AA84E7194EEB5F00A67B56 /* resampled_source_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84AD194EEB5F00A67B56 /* resampled_source_test.h */; };
+		43AA84E8194EEB5F00A67B56 /* session_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84AE194EEB5F00A67B56 /* session_test.cc */; };
+		43AA84E9194EEB5F00A67B56 /* session_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84AF194EEB5F00A67B56 /* session_test.h */; };
+		43AA84EA194EEB5F00A67B56 /* tempo_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B0194EEB5F00A67B56 /* tempo_test.cc */; };
+		43AA84EB194EEB5F00A67B56 /* tempo_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84B1194EEB5F00A67B56 /* tempo_test.h */; };
+		43AA84EC194EEB5F00A67B56 /* test_common.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B2194EEB5F00A67B56 /* test_common.cc */; };
+		43AA84ED194EEB5F00A67B56 /* test_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84B3194EEB5F00A67B56 /* test_common.h */; };
+		43AA84EE194EEB5F00A67B56 /* test_needing_session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B4194EEB5F00A67B56 /* test_needing_session.cc */; };
+		43AA84EF194EEB5F00A67B56 /* test_needing_session.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84B5194EEB5F00A67B56 /* test_needing_session.h */; };
+		43AA84F0194EEB5F00A67B56 /* test_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B6194EEB5F00A67B56 /* test_util.cc */; };
+		43AA84F1194EEB5F00A67B56 /* test_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84B7194EEB5F00A67B56 /* test_util.h */; };
+		43AA84F2194EEB5F00A67B56 /* testrunner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B8194EEB5F00A67B56 /* testrunner.cc */; };
+		43AA85DC194EEB8B00A67B56 /* amp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F4194EEB8B00A67B56 /* amp.h */; };
+		43AA85DD194EEB8B00A67B56 /* analyser.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F5194EEB8B00A67B56 /* analyser.h */; };
+		43AA85DE194EEB8B00A67B56 /* ardour.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F6194EEB8B00A67B56 /* ardour.h */; };
+		43AA85DF194EEB8B00A67B56 /* async_midi_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F7194EEB8B00A67B56 /* async_midi_port.h */; };
+		43AA85E0194EEB8B00A67B56 /* audio_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F8194EEB8B00A67B56 /* audio_backend.h */; };
+		43AA85E1194EEB8B00A67B56 /* audio_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F9194EEB8B00A67B56 /* audio_buffer.h */; };
+		43AA85E2194EEB8B00A67B56 /* audio_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FA194EEB8B00A67B56 /* audio_diskstream.h */; };
+		43AA85E3194EEB8B00A67B56 /* audio_library.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FB194EEB8B00A67B56 /* audio_library.h */; };
+		43AA85E4194EEB8B00A67B56 /* audio_playlist_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FC194EEB8B00A67B56 /* audio_playlist_importer.h */; };
+		43AA85E5194EEB8B00A67B56 /* audio_playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FD194EEB8B00A67B56 /* audio_playlist_source.h */; };
+		43AA85E6194EEB8B00A67B56 /* audio_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FE194EEB8B00A67B56 /* audio_port.h */; };
+		43AA85E7194EEB8B00A67B56 /* audio_region_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FF194EEB8B00A67B56 /* audio_region_importer.h */; };
+		43AA85E8194EEB8B00A67B56 /* audio_track_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8500194EEB8B00A67B56 /* audio_track_importer.h */; };
+		43AA85E9194EEB8B00A67B56 /* audio_track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8501194EEB8B00A67B56 /* audio_track.h */; };
+		43AA85EA194EEB8B00A67B56 /* audio_unit.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8502194EEB8B00A67B56 /* audio_unit.h */; };
+		43AA85EB194EEB8B00A67B56 /* audioanalyser.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8503194EEB8B00A67B56 /* audioanalyser.h */; };
+		43AA85EC194EEB8B00A67B56 /* audioengine.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8504194EEB8B00A67B56 /* audioengine.h */; };
+		43AA85ED194EEB8B00A67B56 /* audiofile_tagger.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8505194EEB8B00A67B56 /* audiofile_tagger.h */; };
+		43AA85EE194EEB8B00A67B56 /* audiofilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8506194EEB8B00A67B56 /* audiofilesource.h */; };
+		43AA85EF194EEB8B00A67B56 /* audioplaylist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8507194EEB8B00A67B56 /* audioplaylist.h */; };
+		43AA85F0194EEB8B00A67B56 /* audioregion.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8508194EEB8B00A67B56 /* audioregion.h */; };
+		43AA85F1194EEB8B00A67B56 /* audiosource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8509194EEB8B00A67B56 /* audiosource.h */; };
+		43AA85F2194EEB8B00A67B56 /* auditioner.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850A194EEB8B00A67B56 /* auditioner.h */; };
+		43AA85F3194EEB8B00A67B56 /* auto_bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850B194EEB8B00A67B56 /* auto_bundle.h */; };
+		43AA85F4194EEB8B00A67B56 /* automatable_sequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850C194EEB8B00A67B56 /* automatable_sequence.h */; };
+		43AA85F5194EEB8B00A67B56 /* automatable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850D194EEB8B00A67B56 /* automatable.h */; };
+		43AA85F6194EEB8B00A67B56 /* automation_control.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850E194EEB8B00A67B56 /* automation_control.h */; };
+		43AA85F7194EEB8B00A67B56 /* automation_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850F194EEB8B00A67B56 /* automation_list.h */; };
+		43AA85F8194EEB8B00A67B56 /* automation_watch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8510194EEB8B00A67B56 /* automation_watch.h */; };
+		43AA85F9194EEB8B00A67B56 /* beats_frames_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8511194EEB8B00A67B56 /* beats_frames_converter.h */; };
+		43AA85FA194EEB8B00A67B56 /* broadcast_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8512194EEB8B00A67B56 /* broadcast_info.h */; };
+		43AA85FB194EEB8B00A67B56 /* buffer_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8513194EEB8B00A67B56 /* buffer_manager.h */; };
+		43AA85FC194EEB8B00A67B56 /* buffer_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8514194EEB8B00A67B56 /* buffer_set.h */; };
+		43AA85FD194EEB8B00A67B56 /* buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8515194EEB8B00A67B56 /* buffer.h */; };
+		43AA85FE194EEB8B00A67B56 /* bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8516194EEB8B00A67B56 /* bundle.h */; };
+		43AA85FF194EEB8B00A67B56 /* butler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8517194EEB8B00A67B56 /* butler.h */; };
+		43AA8600194EEB8B00A67B56 /* caimportable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8518194EEB8B00A67B56 /* caimportable.h */; };
+		43AA8601194EEB8B00A67B56 /* capturing_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8519194EEB8B00A67B56 /* capturing_processor.h */; };
+		43AA8602194EEB8B00A67B56 /* chan_count.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851A194EEB8B00A67B56 /* chan_count.h */; };
+		43AA8603194EEB8B00A67B56 /* chan_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851B194EEB8B00A67B56 /* chan_mapping.h */; };
+		43AA8604194EEB8B00A67B56 /* click.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851C194EEB8B00A67B56 /* click.h */; };
+		43AA8605194EEB8B00A67B56 /* comparable_shared_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851D194EEB8B00A67B56 /* comparable_shared_ptr.h */; };
+		43AA8606194EEB8B00A67B56 /* configuration_variable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851E194EEB8B00A67B56 /* configuration_variable.h */; };
+		43AA8607194EEB8B00A67B56 /* configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851F194EEB8B00A67B56 /* configuration.h */; };
+		43AA8608194EEB8B00A67B56 /* control_protocol_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8520194EEB8B00A67B56 /* control_protocol_manager.h */; };
+		43AA8609194EEB8B00A67B56 /* coreaudiosource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8521194EEB8B00A67B56 /* coreaudiosource.h */; };
+		43AA860A194EEB8B00A67B56 /* cycle_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8522194EEB8B00A67B56 /* cycle_timer.h */; };
+		43AA860B194EEB8B00A67B56 /* cycles.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8523194EEB8B00A67B56 /* cycles.h */; };
+		43AA860C194EEB8B00A67B56 /* data_type.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8524194EEB8B00A67B56 /* data_type.h */; };
+		43AA860D194EEB8B00A67B56 /* dB.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8525194EEB8B00A67B56 /* dB.h */; };
+		43AA860E194EEB8B00A67B56 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8526194EEB8B00A67B56 /* debug.h */; };
+		43AA860F194EEB8B00A67B56 /* delivery.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8527194EEB8B00A67B56 /* delivery.h */; };
+		43AA8610194EEB8B00A67B56 /* directory_names.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8528194EEB8B00A67B56 /* directory_names.h */; };
+		43AA8611194EEB8B00A67B56 /* diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8529194EEB8B00A67B56 /* diskstream.h */; };
+		43AA8612194EEB8B00A67B56 /* element_import_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852A194EEB8B00A67B56 /* element_import_handler.h */; };
+		43AA8613194EEB8B00A67B56 /* element_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852B194EEB8B00A67B56 /* element_importer.h */; };
+		43AA8614194EEB8B00A67B56 /* engine_state_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852C194EEB8B00A67B56 /* engine_state_controller.h */; };
+		43AA8615194EEB8B00A67B56 /* event_type_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852D194EEB8B00A67B56 /* event_type_map.h */; };
+		43AA8616194EEB8B00A67B56 /* export_channel_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852E194EEB8B00A67B56 /* export_channel_configuration.h */; };
+		43AA8617194EEB8B00A67B56 /* export_channel.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852F194EEB8B00A67B56 /* export_channel.h */; };
+		43AA8618194EEB8B00A67B56 /* export_failed.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8530194EEB8B00A67B56 /* export_failed.h */; };
+		43AA8619194EEB8B00A67B56 /* export_filename.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8531194EEB8B00A67B56 /* export_filename.h */; };
+		43AA861A194EEB8B00A67B56 /* export_format_base.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8532194EEB8B00A67B56 /* export_format_base.h */; };
+		43AA861B194EEB8B00A67B56 /* export_format_compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8533194EEB8B00A67B56 /* export_format_compatibility.h */; };
+		43AA861C194EEB8B00A67B56 /* export_format_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8534194EEB8B00A67B56 /* export_format_manager.h */; };
+		43AA861D194EEB8B00A67B56 /* export_format_specification.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8535194EEB8B00A67B56 /* export_format_specification.h */; };
+		43AA861E194EEB8B00A67B56 /* export_formats.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8536194EEB8B00A67B56 /* export_formats.h */; };
+		43AA861F194EEB8B00A67B56 /* export_graph_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8537194EEB8B00A67B56 /* export_graph_builder.h */; };
+		43AA8620194EEB8B00A67B56 /* export_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8538194EEB8B00A67B56 /* export_handler.h */; };
+		43AA8621194EEB8B00A67B56 /* export_multiplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8539194EEB8B00A67B56 /* export_multiplication.h */; };
+		43AA8622194EEB8B00A67B56 /* export_pointers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853A194EEB8B00A67B56 /* export_pointers.h */; };
+		43AA8623194EEB8B00A67B56 /* export_preset.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853B194EEB8B00A67B56 /* export_preset.h */; };
+		43AA8624194EEB8B00A67B56 /* export_profile_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853C194EEB8B00A67B56 /* export_profile_manager.h */; };
+		43AA8625194EEB8B00A67B56 /* export_status.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853D194EEB8B00A67B56 /* export_status.h */; };
+		43AA8626194EEB8B00A67B56 /* export_timespan.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853E194EEB8B00A67B56 /* export_timespan.h */; };
+		43AA8627194EEB8B00A67B56 /* file_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853F194EEB8B00A67B56 /* file_source.h */; };
+		43AA8628194EEB8B00A67B56 /* filename_extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8540194EEB8B00A67B56 /* filename_extensions.h */; };
+		43AA8629194EEB8B00A67B56 /* filesystem_paths.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8541194EEB8B00A67B56 /* filesystem_paths.h */; };
+		43AA862A194EEB8B00A67B56 /* filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8542194EEB8B00A67B56 /* filter.h */; };
+		43AA862B194EEB8B00A67B56 /* graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8543194EEB8B00A67B56 /* graph.h */; };
+		43AA862C194EEB8B00A67B56 /* graphnode.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8544194EEB8B00A67B56 /* graphnode.h */; };
+		43AA862D194EEB8B00A67B56 /* iec1ppmdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8545194EEB8B00A67B56 /* iec1ppmdsp.h */; };
+		43AA862E194EEB8B00A67B56 /* iec2ppmdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8546194EEB8B00A67B56 /* iec2ppmdsp.h */; };
+		43AA862F194EEB8B00A67B56 /* import_status.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8547194EEB8B00A67B56 /* import_status.h */; };
+		43AA8630194EEB8B00A67B56 /* importable_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8548194EEB8B00A67B56 /* importable_source.h */; };
+		43AA8631194EEB8B00A67B56 /* instrument_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8549194EEB8B00A67B56 /* instrument_info.h */; };
+		43AA8632194EEB8B00A67B56 /* internal_return.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854A194EEB8B00A67B56 /* internal_return.h */; };
+		43AA8633194EEB8B00A67B56 /* internal_send.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854B194EEB8B00A67B56 /* internal_send.h */; };
+		43AA8634194EEB8B00A67B56 /* interpolation.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854C194EEB8B00A67B56 /* interpolation.h */; };
+		43AA8635194EEB8B00A67B56 /* interthread_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854D194EEB8B00A67B56 /* interthread_info.h */; };
+		43AA8636194EEB8B00A67B56 /* io_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854E194EEB8B00A67B56 /* io_processor.h */; };
+		43AA8637194EEB8B00A67B56 /* io.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854F194EEB8B00A67B56 /* io.h */; };
+		43AA8638194EEB8B00A67B56 /* jack_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8550194EEB8B00A67B56 /* jack_utils.h */; };
+		43AA8639194EEB8B00A67B56 /* kmeterdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8551194EEB8B00A67B56 /* kmeterdsp.h */; };
+		43AA863A194EEB8B00A67B56 /* ladspa_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8552194EEB8B00A67B56 /* ladspa_plugin.h */; };
+		43AA863B194EEB8B00A67B56 /* ladspa.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8553194EEB8B00A67B56 /* ladspa.h */; };
+		43AA863C194EEB8B00A67B56 /* latent.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8554194EEB8B00A67B56 /* latent.h */; };
+		43AA863D194EEB8B00A67B56 /* libardour_visibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8555194EEB8B00A67B56 /* libardour_visibility.h */; };
+		43AA863E194EEB8B00A67B56 /* linux_vst_support.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8556194EEB8B00A67B56 /* linux_vst_support.h */; };
+		43AA863F194EEB8B00A67B56 /* location_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8557194EEB8B00A67B56 /* location_importer.h */; };
+		43AA8640194EEB8B00A67B56 /* location.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8558194EEB8B00A67B56 /* location.h */; };
+		43AA8641194EEB8B00A67B56 /* logcurve.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8559194EEB8B00A67B56 /* logcurve.h */; };
+		43AA8642194EEB8B00A67B56 /* lv2_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855A194EEB8B00A67B56 /* lv2_plugin.h */; };
+		43AA8643194EEB8B00A67B56 /* lxvst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855B194EEB8B00A67B56 /* lxvst_plugin.h */; };
+		43AA8644194EEB8B00A67B56 /* meter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855C194EEB8B00A67B56 /* meter.h */; };
+		43AA8645194EEB8B00A67B56 /* midi_automation_list_binder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855D194EEB8B00A67B56 /* midi_automation_list_binder.h */; };
+		43AA8646194EEB8B00A67B56 /* midi_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855E194EEB8B00A67B56 /* midi_buffer.h */; };
+		43AA8647194EEB8B00A67B56 /* midi_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855F194EEB8B00A67B56 /* midi_diskstream.h */; };
+		43AA8648194EEB8B00A67B56 /* midi_model.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8560194EEB8B00A67B56 /* midi_model.h */; };
+		43AA8649194EEB8B00A67B56 /* midi_operator.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8561194EEB8B00A67B56 /* midi_operator.h */; };
+		43AA864A194EEB8B00A67B56 /* midi_patch_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8562194EEB8B00A67B56 /* midi_patch_manager.h */; };
+		43AA864B194EEB8B00A67B56 /* midi_playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8563194EEB8B00A67B56 /* midi_playlist_source.h */; };
+		43AA864C194EEB8B00A67B56 /* midi_playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8564194EEB8B00A67B56 /* midi_playlist.h */; };
+		43AA864D194EEB8B00A67B56 /* midi_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8565194EEB8B00A67B56 /* midi_port.h */; };
+		43AA864E194EEB8B00A67B56 /* midi_region.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8566194EEB8B00A67B56 /* midi_region.h */; };
+		43AA864F194EEB8B00A67B56 /* midi_ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8567194EEB8B00A67B56 /* midi_ring_buffer.h */; };
+		43AA8650194EEB8B00A67B56 /* midi_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8568194EEB8B00A67B56 /* midi_source.h */; };
+		43AA8651194EEB8B00A67B56 /* midi_state_tracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8569194EEB8B00A67B56 /* midi_state_tracker.h */; };
+		43AA8652194EEB8B00A67B56 /* midi_stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856A194EEB8B00A67B56 /* midi_stretch.h */; };
+		43AA8653194EEB8B00A67B56 /* midi_track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856B194EEB8B00A67B56 /* midi_track.h */; };
+		43AA8654194EEB8B00A67B56 /* midi_ui.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856C194EEB8B00A67B56 /* midi_ui.h */; };
+		43AA8655194EEB8B00A67B56 /* midiport_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856D194EEB8B00A67B56 /* midiport_manager.h */; };
+		43AA8656194EEB8B00A67B56 /* mix.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856E194EEB8B00A67B56 /* mix.h */; };
+		43AA8657194EEB8B00A67B56 /* monitor_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856F194EEB8B00A67B56 /* monitor_processor.h */; };
+		43AA8658194EEB8B00A67B56 /* movable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8570194EEB8B00A67B56 /* movable.h */; };
+		43AA8659194EEB8B00A67B56 /* msvc_libardour.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8571194EEB8B00A67B56 /* msvc_libardour.h */; };
+		43AA865A194EEB8B00A67B56 /* mtdm.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8572194EEB8B00A67B56 /* mtdm.h */; };
+		43AA865B194EEB8B00A67B56 /* mute_master.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8573194EEB8B00A67B56 /* mute_master.h */; };
+		43AA865C194EEB8B00A67B56 /* noise.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8574194EEB8B00A67B56 /* noise.h */; };
+		43AA865D194EEB8B00A67B56 /* onset_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8575194EEB8B00A67B56 /* onset_detector.h */; };
+		43AA865E194EEB8B00A67B56 /* operations.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8576194EEB8B00A67B56 /* operations.h */; };
+		43AA865F194EEB8B00A67B56 /* pan_controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8577194EEB8B00A67B56 /* pan_controllable.h */; };
+		43AA8660194EEB8B00A67B56 /* pannable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8578194EEB8B00A67B56 /* pannable.h */; };
+		43AA8661194EEB8B00A67B56 /* panner_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8579194EEB8B00A67B56 /* panner_manager.h */; };
+		43AA8662194EEB8B00A67B56 /* panner_shell.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857A194EEB8B00A67B56 /* panner_shell.h */; };
+		43AA8663194EEB8B00A67B56 /* panner.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857B194EEB8B00A67B56 /* panner.h */; };
+		43AA8664194EEB8B00A67B56 /* pcm_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857C194EEB8B00A67B56 /* pcm_utils.h */; };
+		43AA8665194EEB8B00A67B56 /* peak.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857D194EEB8B00A67B56 /* peak.h */; };
+		43AA8666194EEB8B00A67B56 /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857E194EEB8B00A67B56 /* pi_controller.h */; };
+		43AA8667194EEB8B00A67B56 /* pitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857F194EEB8B00A67B56 /* pitch.h */; };
+		43AA8668194EEB8B00A67B56 /* playlist_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8580194EEB8B00A67B56 /* playlist_factory.h */; };
+		43AA8669194EEB8B00A67B56 /* playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8581194EEB8B00A67B56 /* playlist_source.h */; };
+		43AA866A194EEB8B00A67B56 /* playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8582194EEB8B00A67B56 /* playlist.h */; };
+		43AA866B194EEB8B00A67B56 /* plugin_insert.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8583194EEB8B00A67B56 /* plugin_insert.h */; };
+		43AA866C194EEB8B00A67B56 /* plugin_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8584194EEB8B00A67B56 /* plugin_manager.h */; };
+		43AA866D194EEB8B00A67B56 /* plugin_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8585194EEB8B00A67B56 /* plugin_types.h */; };
+		43AA866E194EEB8B00A67B56 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8586194EEB8B00A67B56 /* plugin.h */; };
+		43AA866F194EEB8B00A67B56 /* port_engine.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8587194EEB8B00A67B56 /* port_engine.h */; };
+		43AA8670194EEB8B00A67B56 /* port_insert.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8588194EEB8B00A67B56 /* port_insert.h */; };
+		43AA8671194EEB8B00A67B56 /* port_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8589194EEB8B00A67B56 /* port_manager.h */; };
+		43AA8672194EEB8B00A67B56 /* port_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858A194EEB8B00A67B56 /* port_set.h */; };
+		43AA8673194EEB8B00A67B56 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858B194EEB8B00A67B56 /* port.h */; };
+		43AA8674194EEB8B00A67B56 /* process_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858C194EEB8B00A67B56 /* process_thread.h */; };
+		43AA8675194EEB8B00A67B56 /* processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858D194EEB8B00A67B56 /* processor.h */; };
+		43AA8676194EEB8B00A67B56 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858E194EEB8B00A67B56 /* profile.h */; };
+		43AA8677194EEB8B00A67B56 /* progress.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858F194EEB8B00A67B56 /* progress.h */; };
+		43AA8678194EEB8B00A67B56 /* proxy_controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8590194EEB8B00A67B56 /* proxy_controllable.h */; };
+		43AA8679194EEB8B00A67B56 /* public_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8591194EEB8B00A67B56 /* public_diskstream.h */; };
+		43AA867A194EEB8B00A67B56 /* quantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8592194EEB8B00A67B56 /* quantize.h */; };
+		43AA867B194EEB8B00A67B56 /* rb_effect.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8593194EEB8B00A67B56 /* rb_effect.h */; };
+		43AA867C194EEB8B00A67B56 /* rc_configuration_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8594194EEB8B00A67B56 /* rc_configuration_vars.h */; };
+		43AA867D194EEB8B00A67B56 /* rc_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8595194EEB8B00A67B56 /* rc_configuration.h */; };
+		43AA867E194EEB8B00A67B56 /* readable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8596194EEB8B00A67B56 /* readable.h */; };
+		43AA867F194EEB8B00A67B56 /* recent_sessions.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8597194EEB8B00A67B56 /* recent_sessions.h */; };
+		43AA8680194EEB8B00A67B56 /* region_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8598194EEB8B00A67B56 /* region_factory.h */; };
+		43AA8681194EEB8B00A67B56 /* region_sorters.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8599194EEB8B00A67B56 /* region_sorters.h */; };
+		43AA8682194EEB8B00A67B56 /* region.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859A194EEB8B00A67B56 /* region.h */; };
+		43AA8683194EEB8B00A67B56 /* resampled_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859B194EEB8B00A67B56 /* resampled_source.h */; };
+		43AA8684194EEB8B00A67B56 /* return.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859C194EEB8B00A67B56 /* return.h */; };
+		43AA8685194EEB8B00A67B56 /* reverse.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859D194EEB8B00A67B56 /* reverse.h */; };
+		43AA8686194EEB8B00A67B56 /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859E194EEB8B00A67B56 /* revision.h */; };
+		43AA8687194EEB8B00A67B56 /* route_graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859F194EEB8B00A67B56 /* route_graph.h */; };
+		43AA8688194EEB8B00A67B56 /* route_group_member.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A0194EEB8B00A67B56 /* route_group_member.h */; };
+		43AA8689194EEB8B00A67B56 /* route_group_specialized.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A1194EEB8B00A67B56 /* route_group_specialized.h */; };
+		43AA868A194EEB8B00A67B56 /* route_group.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A2194EEB8B00A67B56 /* route_group.h */; };
+		43AA868B194EEB8B00A67B56 /* route.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A3194EEB8B00A67B56 /* route.h */; };
+		43AA868C194EEB8B00A67B56 /* runtime_functions.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A4194EEB8B00A67B56 /* runtime_functions.h */; };
+		43AA868D194EEB8B00A67B56 /* search_paths.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A5194EEB8B00A67B56 /* search_paths.h */; };
+		43AA868E194EEB8B00A67B56 /* send.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A6194EEB8B00A67B56 /* send.h */; };
+		43AA868F194EEB8B00A67B56 /* session_configuration_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A7194EEB8B00A67B56 /* session_configuration_vars.h */; };
+		43AA8690194EEB8B00A67B56 /* session_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A8194EEB8B00A67B56 /* session_configuration.h */; };
+		43AA8691194EEB8B00A67B56 /* session_directory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A9194EEB8B00A67B56 /* session_directory.h */; };
+		43AA8692194EEB8B00A67B56 /* session_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AA194EEB8B00A67B56 /* session_event.h */; };
+		43AA8693194EEB8B00A67B56 /* session_handle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AB194EEB8B00A67B56 /* session_handle.h */; };
+		43AA8694194EEB8B00A67B56 /* session_metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AC194EEB8B00A67B56 /* session_metadata.h */; };
+		43AA8695194EEB8B00A67B56 /* session_object.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AD194EEB8B00A67B56 /* session_object.h */; };
+		43AA8696194EEB8B00A67B56 /* session_playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AE194EEB8B00A67B56 /* session_playlist.h */; };
+		43AA8697194EEB8B00A67B56 /* session_playlists.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AF194EEB8B00A67B56 /* session_playlists.h */; };
+		43AA8698194EEB8B00A67B56 /* session_route.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B0194EEB8B00A67B56 /* session_route.h */; };
+		43AA8699194EEB8B00A67B56 /* session_state_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B1194EEB8B00A67B56 /* session_state_utils.h */; };
+		43AA869A194EEB8B00A67B56 /* session_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B2194EEB8B00A67B56 /* session_utils.h */; };
+		43AA869B194EEB8B00A67B56 /* session.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B3194EEB8B00A67B56 /* session.h */; };
+		43AA869C194EEB8B00A67B56 /* silentfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B4194EEB8B00A67B56 /* silentfilesource.h */; };
+		43AA869D194EEB8B00A67B56 /* slave.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B5194EEB8B00A67B56 /* slave.h */; };
+		43AA869E194EEB8B00A67B56 /* smf_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B6194EEB8B00A67B56 /* smf_source.h */; };
+		43AA869F194EEB8B00A67B56 /* sndfile_helpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B7194EEB8B00A67B56 /* sndfile_helpers.h */; };
+		43AA86A0194EEB8B00A67B56 /* sndfileimportable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B8194EEB8B00A67B56 /* sndfileimportable.h */; };
+		43AA86A1194EEB8B00A67B56 /* sndfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B9194EEB8B00A67B56 /* sndfilesource.h */; };
+		43AA86A2194EEB8B00A67B56 /* soundseq.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BA194EEB8B00A67B56 /* soundseq.h */; };
+		43AA86A3194EEB8B00A67B56 /* source_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BB194EEB8B00A67B56 /* source_factory.h */; };
+		43AA86A4194EEB8B00A67B56 /* source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BC194EEB8B00A67B56 /* source.h */; };
+		43AA86A5194EEB8B00A67B56 /* speaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BD194EEB8B00A67B56 /* speaker.h */; };
+		43AA86A6194EEB8B00A67B56 /* speakers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BE194EEB8B00A67B56 /* speakers.h */; };
+		43AA86A7194EEB8B00A67B56 /* spline.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BF194EEB8B00A67B56 /* spline.h */; };
+		43AA86A8194EEB8B00A67B56 /* srcfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C0194EEB8B00A67B56 /* srcfilesource.h */; };
+		43AA86A9194EEB8B00A67B56 /* stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C1194EEB8B00A67B56 /* stretch.h */; };
+		43AA86AA194EEB8B00A67B56 /* strip_silence.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C2194EEB8B00A67B56 /* strip_silence.h */; };
+		43AA86AB194EEB8B00A67B56 /* system_exec.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C3194EEB8B00A67B56 /* system_exec.h */; };
+		43AA86AC194EEB8B00A67B56 /* tape_file_matcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C4194EEB8B00A67B56 /* tape_file_matcher.h */; };
+		43AA86AD194EEB8B00A67B56 /* template_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C5194EEB8B00A67B56 /* template_utils.h */; };
+		43AA86AE194EEB8B00A67B56 /* tempo_map_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C6194EEB8B00A67B56 /* tempo_map_importer.h */; };
+		43AA86AF194EEB8B00A67B56 /* tempo.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C7194EEB8B00A67B56 /* tempo.h */; };
+		43AA86B0194EEB8B00A67B56 /* thread_buffers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C8194EEB8B00A67B56 /* thread_buffers.h */; };
+		43AA86B1194EEB8B00A67B56 /* ticker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C9194EEB8B00A67B56 /* ticker.h */; };
+		43AA86B2194EEB8B00A67B56 /* timecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CA194EEB8B00A67B56 /* timecode.h */; };
+		43AA86B3194EEB8B00A67B56 /* timefx_request.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CB194EEB8B00A67B56 /* timefx_request.h */; };
+		43AA86B4194EEB8B00A67B56 /* timestamps.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CC194EEB8B00A67B56 /* timestamps.h */; };
+		43AA86B5194EEB8B00A67B56 /* track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CD194EEB8B00A67B56 /* track.h */; };
+		43AA86B6194EEB8B00A67B56 /* transient_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CE194EEB8B00A67B56 /* transient_detector.h */; };
+		43AA86B7194EEB8B00A67B56 /* trimmable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CF194EEB8B00A67B56 /* trimmable.h */; };
+		43AA86B8194EEB8B00A67B56 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D0194EEB8B00A67B56 /* types.h */; };
+		43AA86B9194EEB8B00A67B56 /* unknown_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D1194EEB8B00A67B56 /* unknown_processor.h */; };
+		43AA86BA194EEB8B00A67B56 /* uri_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D2194EEB8B00A67B56 /* uri_map.h */; };
+		43AA86BB194EEB8B00A67B56 /* user_bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D3194EEB8B00A67B56 /* user_bundle.h */; };
+		43AA86BC194EEB8B00A67B56 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D4194EEB8B00A67B56 /* utils.h */; };
+		43AA86BD194EEB8B00A67B56 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D5194EEB8B00A67B56 /* version.h */; };
+		43AA86BE194EEB8B00A67B56 /* vst_info_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D6194EEB8B00A67B56 /* vst_info_file.h */; };
+		43AA86BF194EEB8B00A67B56 /* vst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D7194EEB8B00A67B56 /* vst_plugin.h */; };
+		43AA86C0194EEB8B00A67B56 /* vst_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D8194EEB8B00A67B56 /* vst_types.h */; };
+		43AA86C1194EEB8B00A67B56 /* vumeterdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D9194EEB8B00A67B56 /* vumeterdsp.h */; };
+		43AA86C2194EEB8B00A67B56 /* windows_vst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85DA194EEB8B00A67B56 /* windows_vst_plugin.h */; };
+		43AA86C3194EEB8B00A67B56 /* worker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85DB194EEB8B00A67B56 /* worker.h */; };
+		43AA86C6194EEBAF00A67B56 /* aeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86C5194EEBAF00A67B56 /* aeffectx.h */; };
+		43AA86D0194EEC1400A67B56 /* gettext.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86CD194EEC1400A67B56 /* gettext.h */; };
+		43AA86D1194EEC1400A67B56 /* lv2_evbuf.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86CE194EEC1400A67B56 /* lv2_evbuf.h */; };
+		43AA86D2194EEC1400A67B56 /* rdff.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86CF194EEC1400A67B56 /* rdff.h */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		432652FC194EF73C00BEFB46 /* amp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amp.h; sourceTree = "<group>"; };
+		432652FD194EF73C00BEFB46 /* analyser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = analyser.h; sourceTree = "<group>"; };
+		432652FE194EF73C00BEFB46 /* ardour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ardour.h; sourceTree = "<group>"; };
+		432652FF194EF73C00BEFB46 /* async_midi_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = async_midi_port.h; sourceTree = "<group>"; };
+		43265300194EF73C00BEFB46 /* audio_backend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_backend.h; sourceTree = "<group>"; };
+		43265301194EF73C00BEFB46 /* audio_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_buffer.h; sourceTree = "<group>"; };
+		43265302194EF73C00BEFB46 /* audio_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_diskstream.h; sourceTree = "<group>"; };
+		43265303194EF73C00BEFB46 /* audio_library.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_library.h; sourceTree = "<group>"; };
+		43265304194EF73C00BEFB46 /* audio_playlist_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_playlist_importer.h; sourceTree = "<group>"; };
+		43265305194EF73C00BEFB46 /* audio_playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_playlist_source.h; sourceTree = "<group>"; };
+		43265306194EF73C00BEFB46 /* audio_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_port.h; sourceTree = "<group>"; };
+		43265307194EF73C00BEFB46 /* audio_region_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_region_importer.h; sourceTree = "<group>"; };
+		43265308194EF73C00BEFB46 /* audio_track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_track.h; sourceTree = "<group>"; };
+		43265309194EF73C00BEFB46 /* audio_track_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_track_importer.h; sourceTree = "<group>"; };
+		4326530A194EF73C00BEFB46 /* audio_unit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_unit.h; sourceTree = "<group>"; };
+		4326530B194EF73C00BEFB46 /* audioanalyser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioanalyser.h; sourceTree = "<group>"; };
+		4326530C194EF73C00BEFB46 /* audioengine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioengine.h; sourceTree = "<group>"; };
+		4326530D194EF73C00BEFB46 /* audiofile_tagger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audiofile_tagger.h; sourceTree = "<group>"; };
+		4326530E194EF73C00BEFB46 /* audiofilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audiofilesource.h; sourceTree = "<group>"; };
+		4326530F194EF73C00BEFB46 /* audioplaylist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioplaylist.h; sourceTree = "<group>"; };
+		43265310194EF73C00BEFB46 /* audioregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioregion.h; sourceTree = "<group>"; };
+		43265311194EF73C00BEFB46 /* audiosource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audiosource.h; sourceTree = "<group>"; };
+		43265312194EF73C00BEFB46 /* auditioner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auditioner.h; sourceTree = "<group>"; };
+		43265313194EF73C00BEFB46 /* auto_bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auto_bundle.h; sourceTree = "<group>"; };
+		43265314194EF73C00BEFB46 /* automatable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automatable.h; sourceTree = "<group>"; };
+		43265315194EF73C00BEFB46 /* automatable_sequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automatable_sequence.h; sourceTree = "<group>"; };
+		43265316194EF73C00BEFB46 /* automation_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_control.h; sourceTree = "<group>"; };
+		43265317194EF73C00BEFB46 /* automation_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_list.h; sourceTree = "<group>"; };
+		43265318194EF73C00BEFB46 /* automation_watch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_watch.h; sourceTree = "<group>"; };
+		43265319194EF73C00BEFB46 /* beats_frames_converter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = beats_frames_converter.h; sourceTree = "<group>"; };
+		4326531A194EF73C00BEFB46 /* broadcast_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = broadcast_info.h; sourceTree = "<group>"; };
+		4326531B194EF73C00BEFB46 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = "<group>"; };
+		4326531C194EF73C00BEFB46 /* buffer_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer_manager.h; sourceTree = "<group>"; };
+		4326531D194EF73C00BEFB46 /* buffer_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer_set.h; sourceTree = "<group>"; };
+		4326531E194EF73C00BEFB46 /* bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bundle.h; sourceTree = "<group>"; };
+		4326531F194EF73C00BEFB46 /* butler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = butler.h; sourceTree = "<group>"; };
+		43265320194EF73C00BEFB46 /* caimportable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = caimportable.h; sourceTree = "<group>"; };
+		43265321194EF73C00BEFB46 /* capturing_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = capturing_processor.h; sourceTree = "<group>"; };
+		43265322194EF73C00BEFB46 /* chan_count.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chan_count.h; sourceTree = "<group>"; };
+		43265323194EF73C00BEFB46 /* chan_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chan_mapping.h; sourceTree = "<group>"; };
+		43265324194EF73C00BEFB46 /* click.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = click.h; sourceTree = "<group>"; };
+		43265325194EF73C00BEFB46 /* comparable_shared_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comparable_shared_ptr.h; sourceTree = "<group>"; };
+		43265326194EF73C00BEFB46 /* configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = configuration.h; sourceTree = "<group>"; };
+		43265327194EF73C00BEFB46 /* configuration_variable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = configuration_variable.h; sourceTree = "<group>"; };
+		43265328194EF73C00BEFB46 /* control_protocol_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = control_protocol_manager.h; sourceTree = "<group>"; };
+		43265329194EF73C00BEFB46 /* coreaudiosource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coreaudiosource.h; sourceTree = "<group>"; };
+		4326532A194EF73C00BEFB46 /* cycle_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cycle_timer.h; sourceTree = "<group>"; };
+		4326532B194EF73C00BEFB46 /* cycles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cycles.h; sourceTree = "<group>"; };
+		4326532C194EF73C00BEFB46 /* data_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = data_type.h; sourceTree = "<group>"; };
+		4326532D194EF73C00BEFB46 /* dB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dB.h; sourceTree = "<group>"; };
+		4326532E194EF73C00BEFB46 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = "<group>"; };
+		4326532F194EF73C00BEFB46 /* delivery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = delivery.h; sourceTree = "<group>"; };
+		43265330194EF73C00BEFB46 /* directory_names.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = directory_names.h; sourceTree = "<group>"; };
+		43265331194EF73C00BEFB46 /* diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diskstream.h; sourceTree = "<group>"; };
+		43265332194EF73C00BEFB46 /* element_import_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = element_import_handler.h; sourceTree = "<group>"; };
+		43265333194EF73C00BEFB46 /* element_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = element_importer.h; sourceTree = "<group>"; };
+		43265334194EF73C00BEFB46 /* engine_state_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine_state_controller.h; sourceTree = "<group>"; };
+		43265335194EF73C00BEFB46 /* event_type_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = event_type_map.h; sourceTree = "<group>"; };
+		43265336194EF73C00BEFB46 /* export_channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_channel.h; sourceTree = "<group>"; };
+		43265337194EF73C00BEFB46 /* export_channel_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_channel_configuration.h; sourceTree = "<group>"; };
+		43265338194EF73C00BEFB46 /* export_failed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_failed.h; sourceTree = "<group>"; };
+		43265339194EF73C00BEFB46 /* export_filename.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_filename.h; sourceTree = "<group>"; };
+		4326533A194EF73C00BEFB46 /* export_format_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_format_base.h; sourceTree = "<group>"; };
+		4326533B194EF73C00BEFB46 /* export_format_compatibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_format_compatibility.h; sourceTree = "<group>"; };
+		4326533C194EF73C00BEFB46 /* export_format_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_format_manager.h; sourceTree = "<group>"; };
+		4326533D194EF73C00BEFB46 /* export_format_specification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_format_specification.h; sourceTree = "<group>"; };
+		4326533E194EF73C00BEFB46 /* export_formats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_formats.h; sourceTree = "<group>"; };
+		4326533F194EF73C00BEFB46 /* export_graph_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_graph_builder.h; sourceTree = "<group>"; };
+		43265340194EF73C00BEFB46 /* export_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_handler.h; sourceTree = "<group>"; };
+		43265341194EF73C00BEFB46 /* export_multiplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_multiplication.h; sourceTree = "<group>"; };
+		43265342194EF73C00BEFB46 /* export_pointers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_pointers.h; sourceTree = "<group>"; };
+		43265343194EF73C00BEFB46 /* export_preset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_preset.h; sourceTree = "<group>"; };
+		43265344194EF73C00BEFB46 /* export_profile_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_profile_manager.h; sourceTree = "<group>"; };
+		43265345194EF73C00BEFB46 /* export_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_status.h; sourceTree = "<group>"; };
+		43265346194EF73C00BEFB46 /* export_timespan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_timespan.h; sourceTree = "<group>"; };
+		43265347194EF73C00BEFB46 /* file_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file_source.h; sourceTree = "<group>"; };
+		43265348194EF73C00BEFB46 /* filename_extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filename_extensions.h; sourceTree = "<group>"; };
+		43265349194EF73C00BEFB46 /* filesystem_paths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filesystem_paths.h; sourceTree = "<group>"; };
+		4326534A194EF73C00BEFB46 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter.h; sourceTree = "<group>"; };
+		4326534B194EF73C00BEFB46 /* graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = graph.h; sourceTree = "<group>"; };
+		4326534C194EF73C00BEFB46 /* graphnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = graphnode.h; sourceTree = "<group>"; };
+		4326534D194EF73C00BEFB46 /* iec1ppmdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iec1ppmdsp.h; sourceTree = "<group>"; };
+		4326534E194EF73C00BEFB46 /* iec2ppmdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iec2ppmdsp.h; sourceTree = "<group>"; };
+		4326534F194EF73C00BEFB46 /* import_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = import_status.h; sourceTree = "<group>"; };
+		43265350194EF73C00BEFB46 /* importable_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = importable_source.h; sourceTree = "<group>"; };
+		43265351194EF73C00BEFB46 /* instrument_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrument_info.h; sourceTree = "<group>"; };
+		43265352194EF73C00BEFB46 /* internal_return.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal_return.h; sourceTree = "<group>"; };
+		43265353194EF73C00BEFB46 /* internal_send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal_send.h; sourceTree = "<group>"; };
+		43265354194EF73C00BEFB46 /* interpolation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interpolation.h; sourceTree = "<group>"; };
+		43265355194EF73C00BEFB46 /* interthread_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interthread_info.h; sourceTree = "<group>"; };
+		43265356194EF73C00BEFB46 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = "<group>"; };
+		43265357194EF73C00BEFB46 /* io_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io_processor.h; sourceTree = "<group>"; };
+		43265358194EF73C00BEFB46 /* jack_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jack_utils.h; sourceTree = "<group>"; };
+		43265359194EF73C00BEFB46 /* kmeterdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kmeterdsp.h; sourceTree = "<group>"; };
+		4326535A194EF73C00BEFB46 /* ladspa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ladspa.h; sourceTree = "<group>"; };
+		4326535B194EF73C00BEFB46 /* ladspa_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ladspa_plugin.h; sourceTree = "<group>"; };
+		4326535C194EF73C00BEFB46 /* latent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latent.h; sourceTree = "<group>"; };
+		4326535D194EF73C00BEFB46 /* libardour_visibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libardour_visibility.h; sourceTree = "<group>"; };
+		4326535E194EF73C00BEFB46 /* linux_vst_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linux_vst_support.h; sourceTree = "<group>"; };
+		4326535F194EF73C00BEFB46 /* location.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = location.h; sourceTree = "<group>"; };
+		43265360194EF73C00BEFB46 /* location_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = location_importer.h; sourceTree = "<group>"; };
+		43265361194EF73C00BEFB46 /* logcurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logcurve.h; sourceTree = "<group>"; };
+		43265362194EF73C00BEFB46 /* lv2_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lv2_plugin.h; sourceTree = "<group>"; };
+		43265363194EF73C00BEFB46 /* lxvst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lxvst_plugin.h; sourceTree = "<group>"; };
+		43265364194EF73C00BEFB46 /* meter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meter.h; sourceTree = "<group>"; };
+		43265365194EF73C00BEFB46 /* midi_automation_list_binder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_automation_list_binder.h; sourceTree = "<group>"; };
+		43265366194EF73C00BEFB46 /* midi_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_buffer.h; sourceTree = "<group>"; };
+		43265367194EF73C00BEFB46 /* midi_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_diskstream.h; sourceTree = "<group>"; };
+		43265368194EF73C00BEFB46 /* midi_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_model.h; sourceTree = "<group>"; };
+		43265369194EF73C00BEFB46 /* midi_operator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_operator.h; sourceTree = "<group>"; };
+		4326536A194EF73C00BEFB46 /* midi_patch_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_patch_manager.h; sourceTree = "<group>"; };
+		4326536B194EF73C00BEFB46 /* midi_playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_playlist.h; sourceTree = "<group>"; };
+		4326536C194EF73C00BEFB46 /* midi_playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_playlist_source.h; sourceTree = "<group>"; };
+		4326536D194EF73C00BEFB46 /* midi_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_port.h; sourceTree = "<group>"; };
+		4326536E194EF73C00BEFB46 /* midi_region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_region.h; sourceTree = "<group>"; };
+		4326536F194EF73C00BEFB46 /* midi_ring_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_ring_buffer.h; sourceTree = "<group>"; };
+		43265370194EF73C00BEFB46 /* midi_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_source.h; sourceTree = "<group>"; };
+		43265371194EF73C00BEFB46 /* midi_state_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_state_tracker.h; sourceTree = "<group>"; };
+		43265372194EF73C00BEFB46 /* midi_stretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_stretch.h; sourceTree = "<group>"; };
+		43265373194EF73C00BEFB46 /* midi_track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_track.h; sourceTree = "<group>"; };
+		43265374194EF73C00BEFB46 /* midi_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_ui.h; sourceTree = "<group>"; };
+		43265375194EF73C00BEFB46 /* midiport_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midiport_manager.h; sourceTree = "<group>"; };
+		43265376194EF73C00BEFB46 /* mix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mix.h; sourceTree = "<group>"; };
+		43265377194EF73C00BEFB46 /* monitor_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = monitor_processor.h; sourceTree = "<group>"; };
+		43265378194EF73C00BEFB46 /* movable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = movable.h; sourceTree = "<group>"; };
+		43265379194EF73C00BEFB46 /* msvc_libardour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msvc_libardour.h; sourceTree = "<group>"; };
+		4326537A194EF73C00BEFB46 /* mtdm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mtdm.h; sourceTree = "<group>"; };
+		4326537B194EF73C00BEFB46 /* mute_master.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mute_master.h; sourceTree = "<group>"; };
+		4326537C194EF73C00BEFB46 /* noise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = noise.h; sourceTree = "<group>"; };
+		4326537D194EF73C00BEFB46 /* onset_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = onset_detector.h; sourceTree = "<group>"; };
+		4326537E194EF73C00BEFB46 /* operations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operations.h; sourceTree = "<group>"; };
+		4326537F194EF73C00BEFB46 /* pan_controllable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pan_controllable.h; sourceTree = "<group>"; };
+		43265380194EF73C00BEFB46 /* pannable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pannable.h; sourceTree = "<group>"; };
+		43265381194EF73C00BEFB46 /* panner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = panner.h; sourceTree = "<group>"; };
+		43265382194EF73C00BEFB46 /* panner_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = panner_manager.h; sourceTree = "<group>"; };
+		43265383194EF73C00BEFB46 /* panner_shell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = panner_shell.h; sourceTree = "<group>"; };
+		43265384194EF73C00BEFB46 /* pcm_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pcm_utils.h; sourceTree = "<group>"; };
+		43265385194EF73C00BEFB46 /* peak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = peak.h; sourceTree = "<group>"; };
+		43265386194EF73C00BEFB46 /* pi_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pi_controller.h; sourceTree = "<group>"; };
+		43265387194EF73C00BEFB46 /* pitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pitch.h; sourceTree = "<group>"; };
+		43265388194EF73C00BEFB46 /* playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = playlist.h; sourceTree = "<group>"; };
+		43265389194EF73C00BEFB46 /* playlist_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = playlist_factory.h; sourceTree = "<group>"; };
+		4326538A194EF73C00BEFB46 /* playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = playlist_source.h; sourceTree = "<group>"; };
+		4326538B194EF73C00BEFB46 /* plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugin.h; sourceTree = "<group>"; };
+		4326538C194EF73C00BEFB46 /* plugin_insert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugin_insert.h; sourceTree = "<group>"; };
+		4326538D194EF73C00BEFB46 /* plugin_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugin_manager.h; sourceTree = "<group>"; };
+		4326538E194EF73C00BEFB46 /* plugin_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugin_types.h; sourceTree = "<group>"; };
+		4326538F194EF73C00BEFB46 /* port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port.h; sourceTree = "<group>"; };
+		43265390194EF73C00BEFB46 /* port_engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port_engine.h; sourceTree = "<group>"; };
+		43265391194EF73C00BEFB46 /* port_insert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port_insert.h; sourceTree = "<group>"; };
+		43265392194EF73C00BEFB46 /* port_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port_manager.h; sourceTree = "<group>"; };
+		43265393194EF73C00BEFB46 /* port_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port_set.h; sourceTree = "<group>"; };
+		43265394194EF73C00BEFB46 /* process_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = process_thread.h; sourceTree = "<group>"; };
+		43265395194EF73C00BEFB46 /* processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = processor.h; sourceTree = "<group>"; };
+		43265396194EF73C00BEFB46 /* profile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile.h; sourceTree = "<group>"; };
+		43265397194EF73C00BEFB46 /* progress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = progress.h; sourceTree = "<group>"; };
+		43265398194EF73C00BEFB46 /* proxy_controllable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = proxy_controllable.h; sourceTree = "<group>"; };
+		43265399194EF73C00BEFB46 /* public_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = public_diskstream.h; sourceTree = "<group>"; };
+		4326539A194EF73C00BEFB46 /* quantize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quantize.h; sourceTree = "<group>"; };
+		4326539B194EF73C00BEFB46 /* rb_effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rb_effect.h; sourceTree = "<group>"; };
+		4326539C194EF73C00BEFB46 /* rc_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc_configuration.h; sourceTree = "<group>"; };
+		4326539D194EF73C00BEFB46 /* rc_configuration_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc_configuration_vars.h; sourceTree = "<group>"; };
+		4326539E194EF73C00BEFB46 /* readable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = readable.h; sourceTree = "<group>"; };
+		4326539F194EF73C00BEFB46 /* recent_sessions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = recent_sessions.h; sourceTree = "<group>"; };
+		432653A0194EF73C00BEFB46 /* region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = region.h; sourceTree = "<group>"; };
+		432653A1194EF73C00BEFB46 /* region_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = region_factory.h; sourceTree = "<group>"; };
+		432653A2194EF73C00BEFB46 /* region_sorters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = region_sorters.h; sourceTree = "<group>"; };
+		432653A3194EF73C00BEFB46 /* resampled_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resampled_source.h; sourceTree = "<group>"; };
+		432653A4194EF73C00BEFB46 /* return.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = return.h; sourceTree = "<group>"; };
+		432653A5194EF73C00BEFB46 /* reverse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reverse.h; sourceTree = "<group>"; };
+		432653A6194EF73C00BEFB46 /* revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = revision.h; sourceTree = "<group>"; };
+		432653A7194EF73C00BEFB46 /* route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route.h; sourceTree = "<group>"; };
+		432653A8194EF73C00BEFB46 /* route_graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route_graph.h; sourceTree = "<group>"; };
+		432653A9194EF73C00BEFB46 /* route_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route_group.h; sourceTree = "<group>"; };
+		432653AA194EF73C00BEFB46 /* route_group_member.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route_group_member.h; sourceTree = "<group>"; };
+		432653AB194EF73C00BEFB46 /* route_group_specialized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route_group_specialized.h; sourceTree = "<group>"; };
+		432653AC194EF73C00BEFB46 /* runtime_functions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = runtime_functions.h; sourceTree = "<group>"; };
+		432653AD194EF73C00BEFB46 /* search_paths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = search_paths.h; sourceTree = "<group>"; };
+		432653AE194EF73C00BEFB46 /* send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = send.h; sourceTree = "<group>"; };
+		432653AF194EF73C00BEFB46 /* session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session.h; sourceTree = "<group>"; };
+		432653B0194EF73C00BEFB46 /* session_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_configuration.h; sourceTree = "<group>"; };
+		432653B1194EF73C00BEFB46 /* session_configuration_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_configuration_vars.h; sourceTree = "<group>"; };
+		432653B2194EF73C00BEFB46 /* session_directory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_directory.h; sourceTree = "<group>"; };
+		432653B3194EF73C00BEFB46 /* session_event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_event.h; sourceTree = "<group>"; };
+		432653B4194EF73C00BEFB46 /* session_handle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_handle.h; sourceTree = "<group>"; };
+		432653B5194EF73C00BEFB46 /* session_metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_metadata.h; sourceTree = "<group>"; };
+		432653B6194EF73C00BEFB46 /* session_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_object.h; sourceTree = "<group>"; };
+		432653B7194EF73C00BEFB46 /* session_playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_playlist.h; sourceTree = "<group>"; };
+		432653B8194EF73C00BEFB46 /* session_playlists.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_playlists.h; sourceTree = "<group>"; };
+		432653B9194EF73C00BEFB46 /* session_route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_route.h; sourceTree = "<group>"; };
+		432653BA194EF73C00BEFB46 /* session_state_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_state_utils.h; sourceTree = "<group>"; };
+		432653BB194EF73C00BEFB46 /* session_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_utils.h; sourceTree = "<group>"; };
+		432653BC194EF73C00BEFB46 /* silentfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = silentfilesource.h; sourceTree = "<group>"; };
+		432653BD194EF73C00BEFB46 /* slave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slave.h; sourceTree = "<group>"; };
+		432653BE194EF73C00BEFB46 /* smf_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smf_source.h; sourceTree = "<group>"; };
+		432653BF194EF73C00BEFB46 /* sndfile_helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndfile_helpers.h; sourceTree = "<group>"; };
+		432653C0194EF73C00BEFB46 /* sndfileimportable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndfileimportable.h; sourceTree = "<group>"; };
+		432653C1194EF73C00BEFB46 /* sndfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndfilesource.h; sourceTree = "<group>"; };
+		432653C2194EF73C00BEFB46 /* soundseq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = soundseq.h; sourceTree = "<group>"; };
+		432653C3194EF73C00BEFB46 /* source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = source.h; sourceTree = "<group>"; };
+		432653C4194EF73C00BEFB46 /* source_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = source_factory.h; sourceTree = "<group>"; };
+		432653C5194EF73C00BEFB46 /* speaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speaker.h; sourceTree = "<group>"; };
+		432653C6194EF73C00BEFB46 /* speakers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speakers.h; sourceTree = "<group>"; };
+		432653C7194EF73C00BEFB46 /* spline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spline.h; sourceTree = "<group>"; };
+		432653C8194EF73C00BEFB46 /* srcfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = srcfilesource.h; sourceTree = "<group>"; };
+		432653C9194EF73C00BEFB46 /* stretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stretch.h; sourceTree = "<group>"; };
+		432653CA194EF73C00BEFB46 /* strip_silence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_silence.h; sourceTree = "<group>"; };
+		432653CB194EF73C00BEFB46 /* system_exec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = system_exec.h; sourceTree = "<group>"; };
+		432653CC194EF73C00BEFB46 /* tape_file_matcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tape_file_matcher.h; sourceTree = "<group>"; };
+		432653CD194EF73C00BEFB46 /* template_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = template_utils.h; sourceTree = "<group>"; };
+		432653CE194EF73C00BEFB46 /* tempo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tempo.h; sourceTree = "<group>"; };
+		432653CF194EF73C00BEFB46 /* tempo_map_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tempo_map_importer.h; sourceTree = "<group>"; };
+		432653D0194EF73C00BEFB46 /* thread_buffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = thread_buffers.h; sourceTree = "<group>"; };
+		432653D1194EF73C00BEFB46 /* ticker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ticker.h; sourceTree = "<group>"; };
+		432653D2194EF73C00BEFB46 /* timecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timecode.h; sourceTree = "<group>"; };
+		432653D3194EF73C00BEFB46 /* timefx_request.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timefx_request.h; sourceTree = "<group>"; };
+		432653D4194EF73C00BEFB46 /* timestamps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timestamps.h; sourceTree = "<group>"; };
+		432653D5194EF73C00BEFB46 /* track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = track.h; sourceTree = "<group>"; };
+		432653D6194EF73C00BEFB46 /* transient_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transient_detector.h; sourceTree = "<group>"; };
+		432653D7194EF73C00BEFB46 /* trimmable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trimmable.h; sourceTree = "<group>"; };
+		432653D8194EF73C00BEFB46 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
+		432653D9194EF73C00BEFB46 /* unknown_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unknown_processor.h; sourceTree = "<group>"; };
+		432653DA194EF73C00BEFB46 /* uri_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uri_map.h; sourceTree = "<group>"; };
+		432653DB194EF73C00BEFB46 /* user_bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = user_bundle.h; sourceTree = "<group>"; };
+		432653DC194EF73C00BEFB46 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = "<group>"; };
+		432653DD194EF73C00BEFB46 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
+		432653DF194EF73C00BEFB46 /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffectx.h; sourceTree = "<group>"; };
+		432653E0194EF73C00BEFB46 /* vst_info_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vst_info_file.h; sourceTree = "<group>"; };
+		432653E1194EF73C00BEFB46 /* vst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vst_plugin.h; sourceTree = "<group>"; };
+		432653E2194EF73C00BEFB46 /* vst_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vst_types.h; sourceTree = "<group>"; };
+		432653E3194EF73C00BEFB46 /* vumeterdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vumeterdsp.h; sourceTree = "<group>"; };
+		432653E4194EF73C00BEFB46 /* windows_vst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = windows_vst_plugin.h; sourceTree = "<group>"; };
+		432653E5194EF73C00BEFB46 /* worker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = worker.h; sourceTree = "<group>"; };
+		432859E21A10F415006C3E03 /* midi_scene_change.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_scene_change.h; path = ../ardour/midi_scene_change.h; sourceTree = "<group>"; };
+		432859E31A10F415006C3E03 /* midi_scene_changer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_scene_changer.h; path = ../ardour/midi_scene_changer.h; sourceTree = "<group>"; };
+		432859E41A10F415006C3E03 /* mididm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mididm.h; path = ../ardour/mididm.h; sourceTree = "<group>"; };
+		432859E51A10F415006C3E03 /* soundcloud_upload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = soundcloud_upload.h; path = ../ardour/soundcloud_upload.h; sourceTree = "<group>"; };
+		432859EB1A10F436006C3E03 /* libardour.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libardour.xcodeproj; sourceTree = "<group>"; };
+		432859EE1A10F436006C3E03 /* midi_scene_change.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_scene_change.cc; path = ../midi_scene_change.cc; sourceTree = "<group>"; };
+		432859EF1A10F436006C3E03 /* midi_scene_changer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_scene_changer.cc; path = ../midi_scene_changer.cc; sourceTree = "<group>"; };
+		432859F01A10F436006C3E03 /* mididm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mididm.cc; path = ../mididm.cc; sourceTree = "<group>"; };
+		432859F11A10F436006C3E03 /* scene_change.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scene_change.cc; path = ../scene_change.cc; sourceTree = "<group>"; };
+		432859F21A10F436006C3E03 /* soundcloud_upload.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = soundcloud_upload.cc; path = ../soundcloud_upload.cc; sourceTree = "<group>"; };
+		43AA82A9194EEAAF00A67B56 /* liblibardour.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblibardour.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		43AA82AE194EEB2600A67B56 /* amp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = amp.cc; path = ../amp.cc; sourceTree = SOURCE_ROOT; };
+		43AA82AF194EEB2600A67B56 /* analyser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = analyser.cc; path = ../analyser.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B0194EEB2600A67B56 /* async_midi_port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = async_midi_port.cc; path = ../async_midi_port.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B1194EEB2600A67B56 /* audio_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_buffer.cc; path = ../audio_buffer.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B2194EEB2600A67B56 /* audio_diskstream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_diskstream.cc; path = ../audio_diskstream.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B3194EEB2600A67B56 /* audio_library.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_library.cc; path = ../audio_library.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B4194EEB2600A67B56 /* audio_playlist_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_playlist_importer.cc; path = ../audio_playlist_importer.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B5194EEB2600A67B56 /* audio_playlist_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_playlist_source.cc; path = ../audio_playlist_source.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B6194EEB2600A67B56 /* audio_playlist.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_playlist.cc; path = ../audio_playlist.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B7194EEB2600A67B56 /* audio_port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_port.cc; path = ../audio_port.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B8194EEB2600A67B56 /* audio_region_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_importer.cc; path = ../audio_region_importer.cc; sourceTree = SOURCE_ROOT; };
+		43AA82B9194EEB2600A67B56 /* audio_track_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_track_importer.cc; path = ../audio_track_importer.cc; sourceTree = SOURCE_ROOT; };
+		43AA82BA194EEB2600A67B56 /* audio_track.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_track.cc; path = ../audio_track.cc; sourceTree = SOURCE_ROOT; };
+		43AA82BB194EEB2600A67B56 /* audio_unit.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_unit.cc; path = ../audio_unit.cc; sourceTree = SOURCE_ROOT; };
+		43AA82BC194EEB2600A67B56 /* audioanalyser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audioanalyser.cc; path = ../audioanalyser.cc; sourceTree = SOURCE_ROOT; };
+		43AA82BD194EEB2600A67B56 /* audioengine.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audioengine.cc; path = ../audioengine.cc; sourceTree = SOURCE_ROOT; };
+		43AA82BE194EEB2600A67B56 /* audiofile_tagger.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audiofile_tagger.cc; path = ../audiofile_tagger.cc; sourceTree = SOURCE_ROOT; };
+		43AA82BF194EEB2600A67B56 /* audiofilesource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audiofilesource.cc; path = ../audiofilesource.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C0194EEB2600A67B56 /* audioregion.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audioregion.cc; path = ../audioregion.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C1194EEB2600A67B56 /* audiosource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audiosource.cc; path = ../audiosource.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C2194EEB2600A67B56 /* auditioner.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = auditioner.cc; path = ../auditioner.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C3194EEB2600A67B56 /* auto_bundle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = auto_bundle.cc; path = ../auto_bundle.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C4194EEB2600A67B56 /* automatable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automatable.cc; path = ../automatable.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C5194EEB2600A67B56 /* automation_control.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation_control.cc; path = ../automation_control.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C6194EEB2600A67B56 /* automation_list.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation_list.cc; path = ../automation_list.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C7194EEB2600A67B56 /* automation_watch.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation_watch.cc; path = ../automation_watch.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C8194EEB2600A67B56 /* automation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation.cc; path = ../automation.cc; sourceTree = SOURCE_ROOT; };
+		43AA82C9194EEB2600A67B56 /* beats_frames_converter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = beats_frames_converter.cc; path = ../beats_frames_converter.cc; sourceTree = SOURCE_ROOT; };
+		43AA82CA194EEB2600A67B56 /* broadcast_info.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = broadcast_info.cc; path = ../broadcast_info.cc; sourceTree = SOURCE_ROOT; };
+		43AA82CB194EEB2600A67B56 /* buffer_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = buffer_manager.cc; path = ../buffer_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA82CC194EEB2600A67B56 /* buffer_set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = buffer_set.cc; path = ../buffer_set.cc; sourceTree = SOURCE_ROOT; };
+		43AA82CD194EEB2600A67B56 /* buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = buffer.cc; path = ../buffer.cc; sourceTree = SOURCE_ROOT; };
+		43AA82CE194EEB2600A67B56 /* bundle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bundle.cc; path = ../bundle.cc; sourceTree = SOURCE_ROOT; };
+		43AA82CF194EEB2600A67B56 /* butler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = butler.cc; path = ../butler.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D0194EEB2600A67B56 /* caimportable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = caimportable.cc; path = ../caimportable.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D1194EEB2600A67B56 /* capturing_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = capturing_processor.cc; path = ../capturing_processor.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D2194EEB2600A67B56 /* chan_count.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = chan_count.cc; path = ../chan_count.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D3194EEB2600A67B56 /* chan_mapping.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = chan_mapping.cc; path = ../chan_mapping.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D4194EEB2600A67B56 /* config_text.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = config_text.cc; path = ../config_text.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D5194EEB2600A67B56 /* configuration.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = configuration.cc; path = ../configuration.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D6194EEB2600A67B56 /* control_protocol_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = control_protocol_manager.cc; path = ../control_protocol_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D7194EEB2600A67B56 /* coreaudiosource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = coreaudiosource.cc; path = ../coreaudiosource.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D8194EEB2600A67B56 /* cycle_timer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cycle_timer.cc; path = ../cycle_timer.cc; sourceTree = SOURCE_ROOT; };
+		43AA82D9194EEB2600A67B56 /* data_type.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = data_type.cc; path = ../data_type.cc; sourceTree = SOURCE_ROOT; };
+		43AA82DA194EEB2600A67B56 /* debug.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = debug.cc; path = ../debug.cc; sourceTree = SOURCE_ROOT; };
+		43AA82DB194EEB2600A67B56 /* default_click.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = default_click.cc; path = ../default_click.cc; sourceTree = SOURCE_ROOT; };
+		43AA82DC194EEB2600A67B56 /* delivery.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = delivery.cc; path = ../delivery.cc; sourceTree = SOURCE_ROOT; };
+		43AA82DD194EEB2600A67B56 /* directory_names.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = directory_names.cc; path = ../directory_names.cc; sourceTree = SOURCE_ROOT; };
+		43AA82DE194EEB2600A67B56 /* diskstream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = diskstream.cc; path = ../diskstream.cc; sourceTree = SOURCE_ROOT; };
+		43AA82DF194EEB2600A67B56 /* element_import_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = element_import_handler.cc; path = ../element_import_handler.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E0194EEB2600A67B56 /* element_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = element_importer.cc; path = ../element_importer.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E1194EEB2600A67B56 /* engine_slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = engine_slave.cc; path = ../engine_slave.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E2194EEB2600A67B56 /* engine_state_controller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = engine_state_controller.cc; path = ../engine_state_controller.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E3194EEB2600A67B56 /* enums.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = enums.cc; path = ../enums.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E4194EEB2600A67B56 /* event_type_map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = event_type_map.cc; path = ../event_type_map.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E5194EEB2600A67B56 /* export_channel_configuration.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_channel_configuration.cc; path = ../export_channel_configuration.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E6194EEB2600A67B56 /* export_channel.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_channel.cc; path = ../export_channel.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E7194EEB2600A67B56 /* export_failed.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_failed.cc; path = ../export_failed.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E8194EEB2600A67B56 /* export_filename.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_filename.cc; path = ../export_filename.cc; sourceTree = SOURCE_ROOT; };
+		43AA82E9194EEB2600A67B56 /* export_format_base.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_base.cc; path = ../export_format_base.cc; sourceTree = SOURCE_ROOT; };
+		43AA82EA194EEB2600A67B56 /* export_format_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_manager.cc; path = ../export_format_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA82EB194EEB2600A67B56 /* export_format_specification.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_specification.cc; path = ../export_format_specification.cc; sourceTree = SOURCE_ROOT; };
+		43AA82EC194EEB2600A67B56 /* export_formats.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_formats.cc; path = ../export_formats.cc; sourceTree = SOURCE_ROOT; };
+		43AA82ED194EEB2600A67B56 /* export_graph_builder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_graph_builder.cc; path = ../export_graph_builder.cc; sourceTree = SOURCE_ROOT; };
+		43AA82EE194EEB2600A67B56 /* export_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_handler.cc; path = ../export_handler.cc; sourceTree = SOURCE_ROOT; };
+		43AA82EF194EEB2600A67B56 /* export_multiplication.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_multiplication.cc; path = ../export_multiplication.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F0194EEB2600A67B56 /* export_preset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_preset.cc; path = ../export_preset.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F1194EEB2600A67B56 /* export_profile_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_profile_manager.cc; path = ../export_profile_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F2194EEB2600A67B56 /* export_status.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_status.cc; path = ../export_status.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F3194EEB2600A67B56 /* export_timespan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_timespan.cc; path = ../export_timespan.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F4194EEB2600A67B56 /* file_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_source.cc; path = ../file_source.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F5194EEB2600A67B56 /* filename_extensions.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_extensions.cc; path = ../filename_extensions.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F6194EEB2600A67B56 /* filesystem_paths.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filesystem_paths.cc; path = ../filesystem_paths.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F7194EEB2600A67B56 /* filter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filter.cc; path = ../filter.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F8194EEB2600A67B56 /* find_session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = find_session.cc; path = ../find_session.cc; sourceTree = SOURCE_ROOT; };
+		43AA82F9194EEB2600A67B56 /* globals.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = globals.cc; path = ../globals.cc; sourceTree = SOURCE_ROOT; };
+		43AA82FA194EEB2600A67B56 /* graph.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = graph.cc; path = ../graph.cc; sourceTree = SOURCE_ROOT; };
+		43AA82FB194EEB2600A67B56 /* graphnode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = graphnode.cc; path = ../graphnode.cc; sourceTree = SOURCE_ROOT; };
+		43AA82FC194EEB2600A67B56 /* iec1ppmdsp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iec1ppmdsp.cc; path = ../iec1ppmdsp.cc; sourceTree = SOURCE_ROOT; };
+		43AA82FD194EEB2600A67B56 /* iec2ppmdsp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iec2ppmdsp.cc; path = ../iec2ppmdsp.cc; sourceTree = SOURCE_ROOT; };
+		43AA82FE194EEB2600A67B56 /* import.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = import.cc; path = ../import.cc; sourceTree = SOURCE_ROOT; };
+		43AA82FF194EEB2600A67B56 /* instrument_info.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = instrument_info.cc; path = ../instrument_info.cc; sourceTree = SOURCE_ROOT; };
+		43AA8300194EEB2600A67B56 /* internal_return.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = internal_return.cc; path = ../internal_return.cc; sourceTree = SOURCE_ROOT; };
+		43AA8301194EEB2600A67B56 /* internal_send.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = internal_send.cc; path = ../internal_send.cc; sourceTree = SOURCE_ROOT; };
+		43AA8302194EEB2600A67B56 /* interpolation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = interpolation.cc; path = ../interpolation.cc; sourceTree = SOURCE_ROOT; };
+		43AA8303194EEB2600A67B56 /* io_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = io_processor.cc; path = ../io_processor.cc; sourceTree = SOURCE_ROOT; };
+		43AA8304194EEB2600A67B56 /* io.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = io.cc; path = ../io.cc; sourceTree = SOURCE_ROOT; };
+		43AA8305194EEB2600A67B56 /* kmeterdsp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kmeterdsp.cc; path = ../kmeterdsp.cc; sourceTree = SOURCE_ROOT; };
+		43AA8306194EEB2600A67B56 /* ladspa_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ladspa_plugin.cc; path = ../ladspa_plugin.cc; sourceTree = SOURCE_ROOT; };
+		43AA8307194EEB2600A67B56 /* linux_vst_support.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = linux_vst_support.cc; path = ../linux_vst_support.cc; sourceTree = SOURCE_ROOT; };
+		43AA8308194EEB2600A67B56 /* location_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = location_importer.cc; path = ../location_importer.cc; sourceTree = SOURCE_ROOT; };
+		43AA8309194EEB2600A67B56 /* location.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = location.cc; path = ../location.cc; sourceTree = SOURCE_ROOT; };
+		43AA830A194EEB2600A67B56 /* ltc_slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ltc_slave.cc; path = ../ltc_slave.cc; sourceTree = SOURCE_ROOT; };
+		43AA830B194EEB2600A67B56 /* lv2_evbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lv2_evbuf.c; path = ../lv2_evbuf.c; sourceTree = SOURCE_ROOT; };
+		43AA830C194EEB2600A67B56 /* lv2_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lv2_plugin.cc; path = ../lv2_plugin.cc; sourceTree = SOURCE_ROOT; };
+		43AA830D194EEB2600A67B56 /* lxvst_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lxvst_plugin.cc; path = ../lxvst_plugin.cc; sourceTree = SOURCE_ROOT; };
+		43AA830E194EEB2600A67B56 /* meter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = meter.cc; path = ../meter.cc; sourceTree = SOURCE_ROOT; };
+		43AA830F194EEB2600A67B56 /* midi_automation_list_binder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_automation_list_binder.cc; path = ../midi_automation_list_binder.cc; sourceTree = SOURCE_ROOT; };
+		43AA8310194EEB2600A67B56 /* midi_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_buffer.cc; path = ../midi_buffer.cc; sourceTree = SOURCE_ROOT; };
+		43AA8311194EEB2600A67B56 /* midi_clock_slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_clock_slave.cc; path = ../midi_clock_slave.cc; sourceTree = SOURCE_ROOT; };
+		43AA8312194EEB2600A67B56 /* midi_diskstream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_diskstream.cc; path = ../midi_diskstream.cc; sourceTree = SOURCE_ROOT; };
+		43AA8313194EEB2600A67B56 /* midi_model.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_model.cc; path = ../midi_model.cc; sourceTree = SOURCE_ROOT; };
+		43AA8314194EEB2600A67B56 /* midi_patch_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_patch_manager.cc; path = ../midi_patch_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA8315194EEB2600A67B56 /* midi_playlist_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_playlist_source.cc; path = ../midi_playlist_source.cc; sourceTree = SOURCE_ROOT; };
+		43AA8316194EEB2600A67B56 /* midi_playlist.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_playlist.cc; path = ../midi_playlist.cc; sourceTree = SOURCE_ROOT; };
+		43AA8317194EEB2600A67B56 /* midi_port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_port.cc; path = ../midi_port.cc; sourceTree = SOURCE_ROOT; };
+		43AA8318194EEB2600A67B56 /* midi_region.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_region.cc; path = ../midi_region.cc; sourceTree = SOURCE_ROOT; };
+		43AA8319194EEB2600A67B56 /* midi_ring_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_ring_buffer.cc; path = ../midi_ring_buffer.cc; sourceTree = SOURCE_ROOT; };
+		43AA831A194EEB2600A67B56 /* midi_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_source.cc; path = ../midi_source.cc; sourceTree = SOURCE_ROOT; };
+		43AA831B194EEB2600A67B56 /* midi_state_tracker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_state_tracker.cc; path = ../midi_state_tracker.cc; sourceTree = SOURCE_ROOT; };
+		43AA831C194EEB2600A67B56 /* midi_stretch.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_stretch.cc; path = ../midi_stretch.cc; sourceTree = SOURCE_ROOT; };
+		43AA831D194EEB2600A67B56 /* midi_track.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_track.cc; path = ../midi_track.cc; sourceTree = SOURCE_ROOT; };
+		43AA831E194EEB2600A67B56 /* midi_ui.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_ui.cc; path = ../midi_ui.cc; sourceTree = SOURCE_ROOT; };
+		43AA831F194EEB2600A67B56 /* midiport_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midiport_manager.cc; path = ../midiport_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA8320194EEB2600A67B56 /* mix.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mix.cc; path = ../mix.cc; sourceTree = SOURCE_ROOT; };
+		43AA8321194EEB2600A67B56 /* monitor_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = monitor_processor.cc; path = ../monitor_processor.cc; sourceTree = SOURCE_ROOT; };
+		43AA8322194EEB2600A67B56 /* mtc_slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mtc_slave.cc; path = ../mtc_slave.cc; sourceTree = SOURCE_ROOT; };
+		43AA8323194EEB2600A67B56 /* mtdm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mtdm.cc; path = ../mtdm.cc; sourceTree = SOURCE_ROOT; };
+		43AA8324194EEB2600A67B56 /* mute_master.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mute_master.cc; path = ../mute_master.cc; sourceTree = SOURCE_ROOT; };
+		43AA8325194EEB2600A67B56 /* onset_detector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = onset_detector.cc; path = ../onset_detector.cc; sourceTree = SOURCE_ROOT; };
+		43AA8326194EEB2600A67B56 /* operations.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = operations.cc; path = ../operations.cc; sourceTree = SOURCE_ROOT; };
+		43AA8327194EEB2600A67B56 /* pan_controllable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pan_controllable.cc; path = ../pan_controllable.cc; sourceTree = SOURCE_ROOT; };
+		43AA8328194EEB2600A67B56 /* pannable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pannable.cc; path = ../pannable.cc; sourceTree = SOURCE_ROOT; };
+		43AA8329194EEB2600A67B56 /* panner_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = panner_manager.cc; path = ../panner_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA832A194EEB2600A67B56 /* panner_shell.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = panner_shell.cc; path = ../panner_shell.cc; sourceTree = SOURCE_ROOT; };
+		43AA832B194EEB2600A67B56 /* panner.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = panner.cc; path = ../panner.cc; sourceTree = SOURCE_ROOT; };
+		43AA832C194EEB2600A67B56 /* pcm_utils.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pcm_utils.cc; path = ../pcm_utils.cc; sourceTree = SOURCE_ROOT; };
+		43AA832D194EEB2600A67B56 /* pi_controller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pi_controller.cc; path = ../pi_controller.cc; sourceTree = SOURCE_ROOT; };
+		43AA832E194EEB2600A67B56 /* playlist_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_factory.cc; path = ../playlist_factory.cc; sourceTree = SOURCE_ROOT; };
+		43AA832F194EEB2600A67B56 /* playlist_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_source.cc; path = ../playlist_source.cc; sourceTree = SOURCE_ROOT; };
+		43AA8330194EEB2600A67B56 /* playlist.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist.cc; path = ../playlist.cc; sourceTree = SOURCE_ROOT; };
+		43AA8331194EEB2600A67B56 /* plugin_insert.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_insert.cc; path = ../plugin_insert.cc; sourceTree = SOURCE_ROOT; };
+		43AA8332194EEB2600A67B56 /* plugin_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_manager.cc; path = ../plugin_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA8333194EEB2600A67B56 /* plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plugin.cc; path = ../plugin.cc; sourceTree = SOURCE_ROOT; };
+		43AA8334194EEB2600A67B56 /* port_insert.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = port_insert.cc; path = ../port_insert.cc; sourceTree = SOURCE_ROOT; };
+		43AA8335194EEB2600A67B56 /* port_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = port_manager.cc; path = ../port_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA8336194EEB2600A67B56 /* port_set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = port_set.cc; path = ../port_set.cc; sourceTree = SOURCE_ROOT; };
+		43AA8337194EEB2600A67B56 /* port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = port.cc; path = ../port.cc; sourceTree = SOURCE_ROOT; };
+		43AA8338194EEB2600A67B56 /* process_thread.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = process_thread.cc; path = ../process_thread.cc; sourceTree = SOURCE_ROOT; };
+		43AA8339194EEB2600A67B56 /* processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = processor.cc; path = ../processor.cc; sourceTree = SOURCE_ROOT; };
+		43AA833A194EEB2600A67B56 /* progress.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = progress.cc; path = ../progress.cc; sourceTree = SOURCE_ROOT; };
+		43AA833B194EEB2600A67B56 /* quantize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quantize.cc; path = ../quantize.cc; sourceTree = SOURCE_ROOT; };
+		43AA833C194EEB2600A67B56 /* rb_effect.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rb_effect.cc; path = ../rb_effect.cc; sourceTree = SOURCE_ROOT; };
+		43AA833D194EEB2600A67B56 /* rc_configuration.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rc_configuration.cc; path = ../rc_configuration.cc; sourceTree = SOURCE_ROOT; };
+		43AA833E194EEB2600A67B56 /* rdff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rdff.c; path = ../rdff.c; sourceTree = SOURCE_ROOT; };
+		43AA833F194EEB2600A67B56 /* recent_sessions.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = recent_sessions.cc; path = ../recent_sessions.cc; sourceTree = SOURCE_ROOT; };
+		43AA8340194EEB2600A67B56 /* region_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = region_factory.cc; path = ../region_factory.cc; sourceTree = SOURCE_ROOT; };
+		43AA8341194EEB2600A67B56 /* region.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = region.cc; path = ../region.cc; sourceTree = SOURCE_ROOT; };
+		43AA8342194EEB2600A67B56 /* resampled_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = resampled_source.cc; path = ../resampled_source.cc; sourceTree = SOURCE_ROOT; };
+		43AA8343194EEB2600A67B56 /* return.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = return.cc; path = ../return.cc; sourceTree = SOURCE_ROOT; };
+		43AA8344194EEB2600A67B56 /* reverse.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = reverse.cc; path = ../reverse.cc; sourceTree = SOURCE_ROOT; };
+		43AA8345194EEB2600A67B56 /* revision.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = revision.cc; path = ../revision.cc; sourceTree = SOURCE_ROOT; };
+		43AA8346194EEB2600A67B56 /* route_graph.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route_graph.cc; path = ../route_graph.cc; sourceTree = SOURCE_ROOT; };
+		43AA8347194EEB2600A67B56 /* route_group_member.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route_group_member.cc; path = ../route_group_member.cc; sourceTree = SOURCE_ROOT; };
+		43AA8348194EEB2600A67B56 /* route_group.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route_group.cc; path = ../route_group.cc; sourceTree = SOURCE_ROOT; };
+		43AA8349194EEB2600A67B56 /* route.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route.cc; path = ../route.cc; sourceTree = SOURCE_ROOT; };
+		43AA834A194EEB2600A67B56 /* search_paths.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = search_paths.cc; path = ../search_paths.cc; sourceTree = SOURCE_ROOT; };
+		43AA834B194EEB2600A67B56 /* send.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = send.cc; path = ../send.cc; sourceTree = SOURCE_ROOT; };
+		43AA834C194EEB2600A67B56 /* session_butler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_butler.cc; path = ../session_butler.cc; sourceTree = SOURCE_ROOT; };
+		43AA834D194EEB2600A67B56 /* session_click.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_click.cc; path = ../session_click.cc; sourceTree = SOURCE_ROOT; };
+		43AA834E194EEB2600A67B56 /* session_command.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_command.cc; path = ../session_command.cc; sourceTree = SOURCE_ROOT; };
+		43AA834F194EEB2600A67B56 /* session_configuration.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_configuration.cc; path = ../session_configuration.cc; sourceTree = SOURCE_ROOT; };
+		43AA8350194EEB2600A67B56 /* session_directory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_directory.cc; path = ../session_directory.cc; sourceTree = SOURCE_ROOT; };
+		43AA8351194EEB2600A67B56 /* session_events.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_events.cc; path = ../session_events.cc; sourceTree = SOURCE_ROOT; };
+		43AA8352194EEB2600A67B56 /* session_export.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_export.cc; path = ../session_export.cc; sourceTree = SOURCE_ROOT; };
+		43AA8353194EEB2600A67B56 /* session_handle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_handle.cc; path = ../session_handle.cc; sourceTree = SOURCE_ROOT; };
+		43AA8354194EEB2600A67B56 /* session_ltc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_ltc.cc; path = ../session_ltc.cc; sourceTree = SOURCE_ROOT; };
+		43AA8355194EEB2600A67B56 /* session_metadata.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_metadata.cc; path = ../session_metadata.cc; sourceTree = SOURCE_ROOT; };
+		43AA8356194EEB2600A67B56 /* session_midi.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_midi.cc; path = ../session_midi.cc; sourceTree = SOURCE_ROOT; };
+		43AA8357194EEB2600A67B56 /* session_object.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_object.cc; path = ../session_object.cc; sourceTree = SOURCE_ROOT; };
+		43AA8358194EEB2600A67B56 /* session_playlists.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_playlists.cc; path = ../session_playlists.cc; sourceTree = SOURCE_ROOT; };
+		43AA8359194EEB2600A67B56 /* session_process.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_process.cc; path = ../session_process.cc; sourceTree = SOURCE_ROOT; };
+		43AA835A194EEB2600A67B56 /* session_rtevents.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_rtevents.cc; path = ../session_rtevents.cc; sourceTree = SOURCE_ROOT; };
+		43AA835B194EEB2600A67B56 /* session_state_utils.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_state_utils.cc; path = ../session_state_utils.cc; sourceTree = SOURCE_ROOT; };
+		43AA835C194EEB2600A67B56 /* session_state.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_state.cc; path = ../session_state.cc; sourceTree = SOURCE_ROOT; };
+		43AA835D194EEB2600A67B56 /* session_time.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_time.cc; path = ../session_time.cc; sourceTree = SOURCE_ROOT; };
+		43AA835E194EEB2600A67B56 /* session_transport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_transport.cc; path = ../session_transport.cc; sourceTree = SOURCE_ROOT; };
+		43AA835F194EEB2600A67B56 /* session_vst.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_vst.cc; path = ../session_vst.cc; sourceTree = SOURCE_ROOT; };
+		43AA8360194EEB2600A67B56 /* session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session.cc; path = ../session.cc; sourceTree = SOURCE_ROOT; };
+		43AA8361194EEB2600A67B56 /* slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = slave.cc; path = ../slave.cc; sourceTree = SOURCE_ROOT; };
+		43AA8362194EEB2600A67B56 /* smf_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = smf_source.cc; path = ../smf_source.cc; sourceTree = SOURCE_ROOT; };
+		43AA8363194EEB2600A67B56 /* sndfile_helpers.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sndfile_helpers.cc; path = ../sndfile_helpers.cc; sourceTree = SOURCE_ROOT; };
+		43AA8364194EEB2600A67B56 /* sndfileimportable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sndfileimportable.cc; path = ../sndfileimportable.cc; sourceTree = SOURCE_ROOT; };
+		43AA8365194EEB2600A67B56 /* sndfilesource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sndfilesource.cc; path = ../sndfilesource.cc; sourceTree = SOURCE_ROOT; };
+		43AA8366194EEB2600A67B56 /* source_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = source_factory.cc; path = ../source_factory.cc; sourceTree = SOURCE_ROOT; };
+		43AA8367194EEB2600A67B56 /* source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = source.cc; path = ../source.cc; sourceTree = SOURCE_ROOT; };
+		43AA8368194EEB2600A67B56 /* speakers.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = speakers.cc; path = ../speakers.cc; sourceTree = SOURCE_ROOT; };
+		43AA8369194EEB2600A67B56 /* srcfilesource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srcfilesource.cc; path = ../srcfilesource.cc; sourceTree = SOURCE_ROOT; };
+		43AA836A194EEB2600A67B56 /* sse_functions_64bit.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = sse_functions_64bit.s; path = ../sse_functions_64bit.s; sourceTree = SOURCE_ROOT; };
+		43AA836B194EEB2600A67B56 /* sse_functions_xmm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sse_functions_xmm.cc; path = ../sse_functions_xmm.cc; sourceTree = SOURCE_ROOT; };
+		43AA836C194EEB2600A67B56 /* sse_functions.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = sse_functions.s; path = ../sse_functions.s; sourceTree = SOURCE_ROOT; };
+		43AA836D194EEB2600A67B56 /* st_pitch.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = st_pitch.cc; path = ../st_pitch.cc; sourceTree = SOURCE_ROOT; };
+		43AA836E194EEB2600A67B56 /* st_stretch.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = st_stretch.cc; path = ../st_stretch.cc; sourceTree = SOURCE_ROOT; };
+		43AA836F194EEB2600A67B56 /* strip_silence.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = strip_silence.cc; path = ../strip_silence.cc; sourceTree = SOURCE_ROOT; };
+		43AA8370194EEB2600A67B56 /* system_exec.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = system_exec.cc; path = ../system_exec.cc; sourceTree = SOURCE_ROOT; };
+		43AA8371194EEB2600A67B56 /* tape_file_matcher.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tape_file_matcher.cc; path = ../tape_file_matcher.cc; sourceTree = SOURCE_ROOT; };
+		43AA8372194EEB2600A67B56 /* template_utils.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = template_utils.cc; path = ../template_utils.cc; sourceTree = SOURCE_ROOT; };
+		43AA8373194EEB2600A67B56 /* tempo_map_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tempo_map_importer.cc; path = ../tempo_map_importer.cc; sourceTree = SOURCE_ROOT; };
+		43AA8374194EEB2600A67B56 /* tempo.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tempo.cc; path = ../tempo.cc; sourceTree = SOURCE_ROOT; };
+		43AA8375194EEB2600A67B56 /* thread_buffers.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thread_buffers.cc; path = ../thread_buffers.cc; sourceTree = SOURCE_ROOT; };
+		43AA8376194EEB2600A67B56 /* ticker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ticker.cc; path = ../ticker.cc; sourceTree = SOURCE_ROOT; };
+		43AA8377194EEB2600A67B56 /* track.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track.cc; path = ../track.cc; sourceTree = SOURCE_ROOT; };
+		43AA8378194EEB2600A67B56 /* transient_detector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = transient_detector.cc; path = ../transient_detector.cc; sourceTree = SOURCE_ROOT; };
+		43AA8379194EEB2600A67B56 /* unknown_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = unknown_processor.cc; path = ../unknown_processor.cc; sourceTree = SOURCE_ROOT; };
+		43AA837A194EEB2600A67B56 /* uri_map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = uri_map.cc; path = ../uri_map.cc; sourceTree = SOURCE_ROOT; };
+		43AA837B194EEB2600A67B56 /* user_bundle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = user_bundle.cc; path = ../user_bundle.cc; sourceTree = SOURCE_ROOT; };
+		43AA837C194EEB2600A67B56 /* utils.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utils.cc; path = ../utils.cc; sourceTree = SOURCE_ROOT; };
+		43AA837D194EEB2600A67B56 /* version.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = version.cc; path = ../version.cc; sourceTree = SOURCE_ROOT; };
+		43AA837E194EEB2600A67B56 /* vst_info_file.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vst_info_file.cc; path = ../vst_info_file.cc; sourceTree = SOURCE_ROOT; };
+		43AA837F194EEB2600A67B56 /* vst_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vst_plugin.cc; path = ../vst_plugin.cc; sourceTree = SOURCE_ROOT; };
+		43AA8380194EEB2600A67B56 /* vumeterdsp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vumeterdsp.cc; path = ../vumeterdsp.cc; sourceTree = SOURCE_ROOT; };
+		43AA8381194EEB2600A67B56 /* windows_vst_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = windows_vst_plugin.cc; path = ../windows_vst_plugin.cc; sourceTree = SOURCE_ROOT; };
+		43AA8382194EEB2600A67B56 /* worker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = worker.cc; path = ../worker.cc; sourceTree = SOURCE_ROOT; };
+		43AA8459194EEB5F00A67B56 /* audio_engine_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_engine_test.cc; path = ../test/audio_engine_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA845A194EEB5F00A67B56 /* audio_engine_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_engine_test.h; path = ../test/audio_engine_test.h; sourceTree = SOURCE_ROOT; };
+		43AA845B194EEB5F00A67B56 /* audio_region_read_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_read_test.cc; path = ../test/audio_region_read_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA845C194EEB5F00A67B56 /* audio_region_read_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_read_test.h; path = ../test/audio_region_read_test.h; sourceTree = SOURCE_ROOT; };
+		43AA845D194EEB5F00A67B56 /* audio_region_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_test.cc; path = ../test/audio_region_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA845E194EEB5F00A67B56 /* audio_region_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_test.h; path = ../test/audio_region_test.h; sourceTree = SOURCE_ROOT; };
+		43AA845F194EEB5F00A67B56 /* automation_list_property_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation_list_property_test.cc; path = ../test/automation_list_property_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8460194EEB5F00A67B56 /* automation_list_property_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_list_property_test.h; path = ../test/automation_list_property_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8461194EEB5F00A67B56 /* bbt_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bbt_test.cc; path = ../test/bbt_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8462194EEB5F00A67B56 /* bbt_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bbt_test.h; path = ../test/bbt_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8463194EEB5F00A67B56 /* combine_regions_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = combine_regions_test.cc; path = ../test/combine_regions_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8464194EEB5F00A67B56 /* combine_regions_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = combine_regions_test.h; path = ../test/combine_regions_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8465194EEB5F00A67B56 /* control_surfaces_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = control_surfaces_test.cc; path = ../test/control_surfaces_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8466194EEB5F00A67B56 /* control_surfaces_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control_surfaces_test.h; path = ../test/control_surfaces_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8469194EEB5F00A67B56 = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; sourceTree = "<group>"; };
+		43AA846A194EEB5F00A67B56 /* automation_list_property_test1.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = automation_list_property_test1.ref; path = ../test/data/automation_list_property_test1.ref; sourceTree = SOURCE_ROOT; };
+		43AA846B194EEB5F00A67B56 /* automation_list_property_test2.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = automation_list_property_test2.ref; path = ../test/data/automation_list_property_test2.ref; sourceTree = SOURCE_ROOT; };
+		43AA846C194EEB5F00A67B56 /* automation_list_property_test3.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = automation_list_property_test3.ref; path = ../test/data/automation_list_property_test3.ref; sourceTree = SOURCE_ROOT; };
+		43AA846D194EEB5F00A67B56 /* automation_list_property_test4.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = automation_list_property_test4.ref; path = ../test/data/automation_list_property_test4.ref; sourceTree = SOURCE_ROOT; };
+		43AA846F194EEB5F00A67B56 /* instant.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = instant.xml; path = ../test/data/mantis_3356/instant.xml; sourceTree = SOURCE_ROOT; };
+		43AA8473194EEB5F00A67B56 /* Midi 1-1.mid */ = {isa = PBXFileReference; lastKnownFileType = audio.midi; path = "Midi 1-1.mid"; sourceTree = "<group>"; };
+		43AA8474194EEB5F00A67B56 /* mantis_3356.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = mantis_3356.ardour; path = ../test/data/mantis_3356/mantis_3356.ardour; sourceTree = SOURCE_ROOT; };
+		43AA8475194EEB5F00A67B56 /* mantis_3356.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = mantis_3356.ref; path = ../test/data/mantis_3356.ref; sourceTree = SOURCE_ROOT; };
+		43AA8478194EEB5F00A67B56 /* instant.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = instant.xml; sourceTree = "<group>"; };
+		43AA8479194EEB5F00A67B56 /* rec_enabled.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = rec_enabled.ardour; sourceTree = "<group>"; };
+		43AA847A194EEB5F00A67B56 /* rec_enabled.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = rec_enabled.history; sourceTree = "<group>"; };
+		43AA847B194EEB5F00A67B56 /* test.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = test.wav; sourceTree = "<group>"; };
+		43AA847C194EEB5F00A67B56 /* dummy_lxvst.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dummy_lxvst.cc; path = ../test/dummy_lxvst.cc; sourceTree = SOURCE_ROOT; };
+		43AA847D194EEB5F00A67B56 /* framepos_minus_beats_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = framepos_minus_beats_test.cc; path = ../test/framepos_minus_beats_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA847E194EEB5F00A67B56 /* framepos_minus_beats_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = framepos_minus_beats_test.h; path = ../test/framepos_minus_beats_test.h; sourceTree = SOURCE_ROOT; };
+		43AA847F194EEB5F00A67B56 /* framepos_plus_beats_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = framepos_plus_beats_test.cc; path = ../test/framepos_plus_beats_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8480194EEB5F00A67B56 /* framepos_plus_beats_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = framepos_plus_beats_test.h; path = ../test/framepos_plus_beats_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8481194EEB5F00A67B56 /* framewalk_to_beats_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = framewalk_to_beats_test.cc; path = ../test/framewalk_to_beats_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8482194EEB5F00A67B56 /* framewalk_to_beats_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = framewalk_to_beats_test.h; path = ../test/framewalk_to_beats_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8483194EEB5F00A67B56 /* interpolation_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = interpolation_test.cc; path = ../test/interpolation_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8484194EEB5F00A67B56 /* interpolation_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interpolation_test.h; path = ../test/interpolation_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8485194EEB5F00A67B56 /* jack_utils_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jack_utils_test.cc; path = ../test/jack_utils_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8486194EEB5F00A67B56 /* jack_utils_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jack_utils_test.h; path = ../test/jack_utils_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8487194EEB5F00A67B56 /* load_session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = load_session.cc; path = ../test/load_session.cc; sourceTree = SOURCE_ROOT; };
+		43AA8488194EEB5F00A67B56 /* load_sessions_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = load_sessions_test.cc; path = ../test/load_sessions_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8489194EEB5F00A67B56 /* load_sessions_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = load_sessions_test.h; path = ../test/load_sessions_test.h; sourceTree = SOURCE_ROOT; };
+		43AA848A194EEB5F00A67B56 /* midi_clock_slave_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_clock_slave_test.cc; path = ../test/midi_clock_slave_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA848B194EEB5F00A67B56 /* midi_clock_slave_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_clock_slave_test.h; path = ../test/midi_clock_slave_test.h; sourceTree = SOURCE_ROOT; };
+		43AA848C194EEB5F00A67B56 /* mtdm_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mtdm_test.cc; path = ../test/mtdm_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA848D194EEB5F00A67B56 /* mtdm_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mtdm_test.h; path = ../test/mtdm_test.h; sourceTree = SOURCE_ROOT; };
+		43AA848E194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_equivalent_regions_test.cc; path = ../test/playlist_equivalent_regions_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA848F194EEB5F00A67B56 /* playlist_equivalent_regions_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_equivalent_regions_test.h; path = ../test/playlist_equivalent_regions_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8490194EEB5F00A67B56 /* playlist_layering_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_layering_test.cc; path = ../test/playlist_layering_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8491194EEB5F00A67B56 /* playlist_layering_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_layering_test.h; path = ../test/playlist_layering_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8492194EEB5F00A67B56 /* playlist_read_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_read_test.cc; path = ../test/playlist_read_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8493194EEB5F00A67B56 /* playlist_read_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_read_test.h; path = ../test/playlist_read_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8494194EEB5F00A67B56 /* plugins_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plugins_test.cc; path = ../test/plugins_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA8495194EEB5F00A67B56 /* plugins_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugins_test.h; path = ../test/plugins_test.h; sourceTree = SOURCE_ROOT; };
+		43AA8497194EEB5F00A67B56 /* load_session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = load_session.cc; sourceTree = "<group>"; };
+		43AA8498194EEB5F00A67B56 /* lots_of_regions.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lots_of_regions.cc; sourceTree = "<group>"; };
+		43AA8499194EEB5F00A67B56 /* runpc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = runpc.cc; sourceTree = "<group>"; };
+		43AA849C194EEB5F00A67B56 /* 0tracks.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 0tracks.ardour; sourceTree = "<group>"; };
+		43AA849D194EEB5F00A67B56 /* 0tracks.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 0tracks.history; sourceTree = "<group>"; };
+		43AA849F194EEB5F00A67B56 /* 1region.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 1region.ardour; sourceTree = "<group>"; };
+		43AA84A0194EEB5F00A67B56 /* 1region.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 1region.history; sourceTree = "<group>"; };
+		43AA84A1194EEB5F00A67B56 /* instant.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = instant.xml; sourceTree = "<group>"; };
+		43AA84A5194EEB5F00A67B56 /* MIDI 1-1.mid */ = {isa = PBXFileReference; lastKnownFileType = audio.midi; path = "MIDI 1-1.mid"; sourceTree = "<group>"; };
+		43AA84A7194EEB5F00A67B56 /* 32tracks.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 32tracks.ardour; sourceTree = "<group>"; };
+		43AA84A8194EEB5F00A67B56 /* 32tracks.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 32tracks.history; sourceTree = "<group>"; };
+		43AA84A9194EEB5F00A67B56 /* instant.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = instant.xml; sourceTree = "<group>"; };
+		43AA84AA194EEB5F00A67B56 /* region_naming_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = region_naming_test.cc; path = ../test/region_naming_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA84AB194EEB5F00A67B56 /* region_naming_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_naming_test.h; path = ../test/region_naming_test.h; sourceTree = SOURCE_ROOT; };
+		43AA84AC194EEB5F00A67B56 /* resampled_source_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = resampled_source_test.cc; path = ../test/resampled_source_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA84AD194EEB5F00A67B56 /* resampled_source_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = resampled_source_test.h; path = ../test/resampled_source_test.h; sourceTree = SOURCE_ROOT; };
+		43AA84AE194EEB5F00A67B56 /* session_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_test.cc; path = ../test/session_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA84AF194EEB5F00A67B56 /* session_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_test.h; path = ../test/session_test.h; sourceTree = SOURCE_ROOT; };
+		43AA84B0194EEB5F00A67B56 /* tempo_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tempo_test.cc; path = ../test/tempo_test.cc; sourceTree = SOURCE_ROOT; };
+		43AA84B1194EEB5F00A67B56 /* tempo_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo_test.h; path = ../test/tempo_test.h; sourceTree = SOURCE_ROOT; };
+		43AA84B2194EEB5F00A67B56 /* test_common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_common.cc; path = ../test/test_common.cc; sourceTree = SOURCE_ROOT; };
+		43AA84B3194EEB5F00A67B56 /* test_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_common.h; path = ../test/test_common.h; sourceTree = SOURCE_ROOT; };
+		43AA84B4194EEB5F00A67B56 /* test_needing_session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_needing_session.cc; path = ../test/test_needing_session.cc; sourceTree = SOURCE_ROOT; };
+		43AA84B5194EEB5F00A67B56 /* test_needing_session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_needing_session.h; path = ../test/test_needing_session.h; sourceTree = SOURCE_ROOT; };
+		43AA84B6194EEB5F00A67B56 /* test_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_util.cc; path = ../test/test_util.cc; sourceTree = SOURCE_ROOT; };
+		43AA84B7194EEB5F00A67B56 /* test_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_util.h; path = ../test/test_util.h; sourceTree = SOURCE_ROOT; };
+		43AA84B8194EEB5F00A67B56 /* testrunner.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testrunner.cc; path = ../test/testrunner.cc; sourceTree = SOURCE_ROOT; };
+		43AA84F4194EEB8B00A67B56 /* amp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = amp.h; path = ../ardour/amp.h; sourceTree = SOURCE_ROOT; };
+		43AA84F5194EEB8B00A67B56 /* analyser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = analyser.h; path = ../ardour/analyser.h; sourceTree = SOURCE_ROOT; };
+		43AA84F6194EEB8B00A67B56 /* ardour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour.h; path = ../ardour/ardour.h; sourceTree = SOURCE_ROOT; };
+		43AA84F7194EEB8B00A67B56 /* async_midi_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = async_midi_port.h; path = ../ardour/async_midi_port.h; sourceTree = SOURCE_ROOT; };
+		43AA84F8194EEB8B00A67B56 /* audio_backend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_backend.h; path = ../ardour/audio_backend.h; sourceTree = SOURCE_ROOT; };
+		43AA84F9194EEB8B00A67B56 /* audio_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_buffer.h; path = ../ardour/audio_buffer.h; sourceTree = SOURCE_ROOT; };
+		43AA84FA194EEB8B00A67B56 /* audio_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_diskstream.h; path = ../ardour/audio_diskstream.h; sourceTree = SOURCE_ROOT; };
+		43AA84FB194EEB8B00A67B56 /* audio_library.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_library.h; path = ../ardour/audio_library.h; sourceTree = SOURCE_ROOT; };
+		43AA84FC194EEB8B00A67B56 /* audio_playlist_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_playlist_importer.h; path = ../ardour/audio_playlist_importer.h; sourceTree = SOURCE_ROOT; };
+		43AA84FD194EEB8B00A67B56 /* audio_playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_playlist_source.h; path = ../ardour/audio_playlist_source.h; sourceTree = SOURCE_ROOT; };
+		43AA84FE194EEB8B00A67B56 /* audio_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_port.h; path = ../ardour/audio_port.h; sourceTree = SOURCE_ROOT; };
+		43AA84FF194EEB8B00A67B56 /* audio_region_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_importer.h; path = ../ardour/audio_region_importer.h; sourceTree = SOURCE_ROOT; };
+		43AA8500194EEB8B00A67B56 /* audio_track_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_track_importer.h; path = ../ardour/audio_track_importer.h; sourceTree = SOURCE_ROOT; };
+		43AA8501194EEB8B00A67B56 /* audio_track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_track.h; path = ../ardour/audio_track.h; sourceTree = SOURCE_ROOT; };
+		43AA8502194EEB8B00A67B56 /* audio_unit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_unit.h; path = ../ardour/audio_unit.h; sourceTree = SOURCE_ROOT; };
+		43AA8503194EEB8B00A67B56 /* audioanalyser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audioanalyser.h; path = ../ardour/audioanalyser.h; sourceTree = SOURCE_ROOT; };
+		43AA8504194EEB8B00A67B56 /* audioengine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audioengine.h; path = ../ardour/audioengine.h; sourceTree = SOURCE_ROOT; };
+		43AA8505194EEB8B00A67B56 /* audiofile_tagger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audiofile_tagger.h; path = ../ardour/audiofile_tagger.h; sourceTree = SOURCE_ROOT; };
+		43AA8506194EEB8B00A67B56 /* audiofilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audiofilesource.h; path = ../ardour/audiofilesource.h; sourceTree = SOURCE_ROOT; };
+		43AA8507194EEB8B00A67B56 /* audioplaylist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audioplaylist.h; path = ../ardour/audioplaylist.h; sourceTree = SOURCE_ROOT; };
+		43AA8508194EEB8B00A67B56 /* audioregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audioregion.h; path = ../ardour/audioregion.h; sourceTree = SOURCE_ROOT; };
+		43AA8509194EEB8B00A67B56 /* audiosource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audiosource.h; path = ../ardour/audiosource.h; sourceTree = SOURCE_ROOT; };
+		43AA850A194EEB8B00A67B56 /* auditioner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = auditioner.h; path = ../ardour/auditioner.h; sourceTree = SOURCE_ROOT; };
+		43AA850B194EEB8B00A67B56 /* auto_bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = auto_bundle.h; path = ../ardour/auto_bundle.h; sourceTree = SOURCE_ROOT; };
+		43AA850C194EEB8B00A67B56 /* automatable_sequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automatable_sequence.h; path = ../ardour/automatable_sequence.h; sourceTree = SOURCE_ROOT; };
+		43AA850D194EEB8B00A67B56 /* automatable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automatable.h; path = ../ardour/automatable.h; sourceTree = SOURCE_ROOT; };
+		43AA850E194EEB8B00A67B56 /* automation_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_control.h; path = ../ardour/automation_control.h; sourceTree = SOURCE_ROOT; };
+		43AA850F194EEB8B00A67B56 /* automation_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_list.h; path = ../ardour/automation_list.h; sourceTree = SOURCE_ROOT; };
+		43AA8510194EEB8B00A67B56 /* automation_watch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_watch.h; path = ../ardour/automation_watch.h; sourceTree = SOURCE_ROOT; };
+		43AA8511194EEB8B00A67B56 /* beats_frames_converter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = beats_frames_converter.h; path = ../ardour/beats_frames_converter.h; sourceTree = SOURCE_ROOT; };
+		43AA8512194EEB8B00A67B56 /* broadcast_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = broadcast_info.h; path = ../ardour/broadcast_info.h; sourceTree = SOURCE_ROOT; };
+		43AA8513194EEB8B00A67B56 /* buffer_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = buffer_manager.h; path = ../ardour/buffer_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA8514194EEB8B00A67B56 /* buffer_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = buffer_set.h; path = ../ardour/buffer_set.h; sourceTree = SOURCE_ROOT; };
+		43AA8515194EEB8B00A67B56 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = buffer.h; path = ../ardour/buffer.h; sourceTree = SOURCE_ROOT; };
+		43AA8516194EEB8B00A67B56 /* bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bundle.h; path = ../ardour/bundle.h; sourceTree = SOURCE_ROOT; };
+		43AA8517194EEB8B00A67B56 /* butler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = butler.h; path = ../ardour/butler.h; sourceTree = SOURCE_ROOT; };
+		43AA8518194EEB8B00A67B56 /* caimportable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = caimportable.h; path = ../ardour/caimportable.h; sourceTree = SOURCE_ROOT; };
+		43AA8519194EEB8B00A67B56 /* capturing_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = capturing_processor.h; path = ../ardour/capturing_processor.h; sourceTree = SOURCE_ROOT; };
+		43AA851A194EEB8B00A67B56 /* chan_count.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = chan_count.h; path = ../ardour/chan_count.h; sourceTree = SOURCE_ROOT; };
+		43AA851B194EEB8B00A67B56 /* chan_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = chan_mapping.h; path = ../ardour/chan_mapping.h; sourceTree = SOURCE_ROOT; };
+		43AA851C194EEB8B00A67B56 /* click.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = click.h; path = ../ardour/click.h; sourceTree = SOURCE_ROOT; };
+		43AA851D194EEB8B00A67B56 /* comparable_shared_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = comparable_shared_ptr.h; path = ../ardour/comparable_shared_ptr.h; sourceTree = SOURCE_ROOT; };
+		43AA851E194EEB8B00A67B56 /* configuration_variable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = configuration_variable.h; path = ../ardour/configuration_variable.h; sourceTree = SOURCE_ROOT; };
+		43AA851F194EEB8B00A67B56 /* configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = configuration.h; path = ../ardour/configuration.h; sourceTree = SOURCE_ROOT; };
+		43AA8520194EEB8B00A67B56 /* control_protocol_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control_protocol_manager.h; path = ../ardour/control_protocol_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA8521194EEB8B00A67B56 /* coreaudiosource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = coreaudiosource.h; path = ../ardour/coreaudiosource.h; sourceTree = SOURCE_ROOT; };
+		43AA8522194EEB8B00A67B56 /* cycle_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cycle_timer.h; path = ../ardour/cycle_timer.h; sourceTree = SOURCE_ROOT; };
+		43AA8523194EEB8B00A67B56 /* cycles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cycles.h; path = ../ardour/cycles.h; sourceTree = SOURCE_ROOT; };
+		43AA8524194EEB8B00A67B56 /* data_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = data_type.h; path = ../ardour/data_type.h; sourceTree = SOURCE_ROOT; };
+		43AA8525194EEB8B00A67B56 /* dB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dB.h; path = ../ardour/dB.h; sourceTree = SOURCE_ROOT; };
+		43AA8526194EEB8B00A67B56 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../ardour/debug.h; sourceTree = SOURCE_ROOT; };
+		43AA8527194EEB8B00A67B56 /* delivery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = delivery.h; path = ../ardour/delivery.h; sourceTree = SOURCE_ROOT; };
+		43AA8528194EEB8B00A67B56 /* directory_names.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = directory_names.h; path = ../ardour/directory_names.h; sourceTree = SOURCE_ROOT; };
+		43AA8529194EEB8B00A67B56 /* diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = diskstream.h; path = ../ardour/diskstream.h; sourceTree = SOURCE_ROOT; };
+		43AA852A194EEB8B00A67B56 /* element_import_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = element_import_handler.h; path = ../ardour/element_import_handler.h; sourceTree = SOURCE_ROOT; };
+		43AA852B194EEB8B00A67B56 /* element_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = element_importer.h; path = ../ardour/element_importer.h; sourceTree = SOURCE_ROOT; };
+		43AA852C194EEB8B00A67B56 /* engine_state_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = engine_state_controller.h; path = ../ardour/engine_state_controller.h; sourceTree = SOURCE_ROOT; };
+		43AA852D194EEB8B00A67B56 /* event_type_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = event_type_map.h; path = ../ardour/event_type_map.h; sourceTree = SOURCE_ROOT; };
+		43AA852E194EEB8B00A67B56 /* export_channel_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_channel_configuration.h; path = ../ardour/export_channel_configuration.h; sourceTree = SOURCE_ROOT; };
+		43AA852F194EEB8B00A67B56 /* export_channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_channel.h; path = ../ardour/export_channel.h; sourceTree = SOURCE_ROOT; };
+		43AA8530194EEB8B00A67B56 /* export_failed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_failed.h; path = ../ardour/export_failed.h; sourceTree = SOURCE_ROOT; };
+		43AA8531194EEB8B00A67B56 /* export_filename.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_filename.h; path = ../ardour/export_filename.h; sourceTree = SOURCE_ROOT; };
+		43AA8532194EEB8B00A67B56 /* export_format_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_base.h; path = ../ardour/export_format_base.h; sourceTree = SOURCE_ROOT; };
+		43AA8533194EEB8B00A67B56 /* export_format_compatibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_compatibility.h; path = ../ardour/export_format_compatibility.h; sourceTree = SOURCE_ROOT; };
+		43AA8534194EEB8B00A67B56 /* export_format_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_manager.h; path = ../ardour/export_format_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA8535194EEB8B00A67B56 /* export_format_specification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_specification.h; path = ../ardour/export_format_specification.h; sourceTree = SOURCE_ROOT; };
+		43AA8536194EEB8B00A67B56 /* export_formats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_formats.h; path = ../ardour/export_formats.h; sourceTree = SOURCE_ROOT; };
+		43AA8537194EEB8B00A67B56 /* export_graph_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_graph_builder.h; path = ../ardour/export_graph_builder.h; sourceTree = SOURCE_ROOT; };
+		43AA8538194EEB8B00A67B56 /* export_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_handler.h; path = ../ardour/export_handler.h; sourceTree = SOURCE_ROOT; };
+		43AA8539194EEB8B00A67B56 /* export_multiplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_multiplication.h; path = ../ardour/export_multiplication.h; sourceTree = SOURCE_ROOT; };
+		43AA853A194EEB8B00A67B56 /* export_pointers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_pointers.h; path = ../ardour/export_pointers.h; sourceTree = SOURCE_ROOT; };
+		43AA853B194EEB8B00A67B56 /* export_preset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_preset.h; path = ../ardour/export_preset.h; sourceTree = SOURCE_ROOT; };
+		43AA853C194EEB8B00A67B56 /* export_profile_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_profile_manager.h; path = ../ardour/export_profile_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA853D194EEB8B00A67B56 /* export_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_status.h; path = ../ardour/export_status.h; sourceTree = SOURCE_ROOT; };
+		43AA853E194EEB8B00A67B56 /* export_timespan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_timespan.h; path = ../ardour/export_timespan.h; sourceTree = SOURCE_ROOT; };
+		43AA853F194EEB8B00A67B56 /* file_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = file_source.h; path = ../ardour/file_source.h; sourceTree = SOURCE_ROOT; };
+		43AA8540194EEB8B00A67B56 /* filename_extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filename_extensions.h; path = ../ardour/filename_extensions.h; sourceTree = SOURCE_ROOT; };
+		43AA8541194EEB8B00A67B56 /* filesystem_paths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filesystem_paths.h; path = ../ardour/filesystem_paths.h; sourceTree = SOURCE_ROOT; };
+		43AA8542194EEB8B00A67B56 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filter.h; path = ../ardour/filter.h; sourceTree = SOURCE_ROOT; };
+		43AA8543194EEB8B00A67B56 /* graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = graph.h; path = ../ardour/graph.h; sourceTree = SOURCE_ROOT; };
+		43AA8544194EEB8B00A67B56 /* graphnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = graphnode.h; path = ../ardour/graphnode.h; sourceTree = SOURCE_ROOT; };
+		43AA8545194EEB8B00A67B56 /* iec1ppmdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iec1ppmdsp.h; path = ../ardour/iec1ppmdsp.h; sourceTree = SOURCE_ROOT; };
+		43AA8546194EEB8B00A67B56 /* iec2ppmdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iec2ppmdsp.h; path = ../ardour/iec2ppmdsp.h; sourceTree = SOURCE_ROOT; };
+		43AA8547194EEB8B00A67B56 /* import_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = import_status.h; path = ../ardour/import_status.h; sourceTree = SOURCE_ROOT; };
+		43AA8548194EEB8B00A67B56 /* importable_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = importable_source.h; path = ../ardour/importable_source.h; sourceTree = SOURCE_ROOT; };
+		43AA8549194EEB8B00A67B56 /* instrument_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = instrument_info.h; path = ../ardour/instrument_info.h; sourceTree = SOURCE_ROOT; };
+		43AA854A194EEB8B00A67B56 /* internal_return.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = internal_return.h; path = ../ardour/internal_return.h; sourceTree = SOURCE_ROOT; };
+		43AA854B194EEB8B00A67B56 /* internal_send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = internal_send.h; path = ../ardour/internal_send.h; sourceTree = SOURCE_ROOT; };
+		43AA854C194EEB8B00A67B56 /* interpolation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interpolation.h; path = ../ardour/interpolation.h; sourceTree = SOURCE_ROOT; };
+		43AA854D194EEB8B00A67B56 /* interthread_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interthread_info.h; path = ../ardour/interthread_info.h; sourceTree = SOURCE_ROOT; };
+		43AA854E194EEB8B00A67B56 /* io_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = io_processor.h; path = ../ardour/io_processor.h; sourceTree = SOURCE_ROOT; };
+		43AA854F194EEB8B00A67B56 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = io.h; path = ../ardour/io.h; sourceTree = SOURCE_ROOT; };
+		43AA8550194EEB8B00A67B56 /* jack_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jack_utils.h; path = ../ardour/jack_utils.h; sourceTree = SOURCE_ROOT; };
+		43AA8551194EEB8B00A67B56 /* kmeterdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = kmeterdsp.h; path = ../ardour/kmeterdsp.h; sourceTree = SOURCE_ROOT; };
+		43AA8552194EEB8B00A67B56 /* ladspa_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ladspa_plugin.h; path = ../ardour/ladspa_plugin.h; sourceTree = SOURCE_ROOT; };
+		43AA8553194EEB8B00A67B56 /* ladspa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ladspa.h; path = ../ardour/ladspa.h; sourceTree = SOURCE_ROOT; };
+		43AA8554194EEB8B00A67B56 /* latent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = latent.h; path = ../ardour/latent.h; sourceTree = SOURCE_ROOT; };
+		43AA8555194EEB8B00A67B56 /* libardour_visibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libardour_visibility.h; path = ../ardour/libardour_visibility.h; sourceTree = SOURCE_ROOT; };
+		43AA8556194EEB8B00A67B56 /* linux_vst_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = linux_vst_support.h; path = ../ardour/linux_vst_support.h; sourceTree = SOURCE_ROOT; };
+		43AA8557194EEB8B00A67B56 /* location_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = location_importer.h; path = ../ardour/location_importer.h; sourceTree = SOURCE_ROOT; };
+		43AA8558194EEB8B00A67B56 /* location.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = location.h; path = ../ardour/location.h; sourceTree = SOURCE_ROOT; };
+		43AA8559194EEB8B00A67B56 /* logcurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = logcurve.h; path = ../ardour/logcurve.h; sourceTree = SOURCE_ROOT; };
+		43AA855A194EEB8B00A67B56 /* lv2_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv2_plugin.h; path = ../ardour/lv2_plugin.h; sourceTree = SOURCE_ROOT; };
+		43AA855B194EEB8B00A67B56 /* lxvst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lxvst_plugin.h; path = ../ardour/lxvst_plugin.h; sourceTree = SOURCE_ROOT; };
+		43AA855C194EEB8B00A67B56 /* meter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = meter.h; path = ../ardour/meter.h; sourceTree = SOURCE_ROOT; };
+		43AA855D194EEB8B00A67B56 /* midi_automation_list_binder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_automation_list_binder.h; path = ../ardour/midi_automation_list_binder.h; sourceTree = SOURCE_ROOT; };
+		43AA855E194EEB8B00A67B56 /* midi_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_buffer.h; path = ../ardour/midi_buffer.h; sourceTree = SOURCE_ROOT; };
+		43AA855F194EEB8B00A67B56 /* midi_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_diskstream.h; path = ../ardour/midi_diskstream.h; sourceTree = SOURCE_ROOT; };
+		43AA8560194EEB8B00A67B56 /* midi_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_model.h; path = ../ardour/midi_model.h; sourceTree = SOURCE_ROOT; };
+		43AA8561194EEB8B00A67B56 /* midi_operator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_operator.h; path = ../ardour/midi_operator.h; sourceTree = SOURCE_ROOT; };
+		43AA8562194EEB8B00A67B56 /* midi_patch_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_patch_manager.h; path = ../ardour/midi_patch_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA8563194EEB8B00A67B56 /* midi_playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_playlist_source.h; path = ../ardour/midi_playlist_source.h; sourceTree = SOURCE_ROOT; };
+		43AA8564194EEB8B00A67B56 /* midi_playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_playlist.h; path = ../ardour/midi_playlist.h; sourceTree = SOURCE_ROOT; };
+		43AA8565194EEB8B00A67B56 /* midi_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_port.h; path = ../ardour/midi_port.h; sourceTree = SOURCE_ROOT; };
+		43AA8566194EEB8B00A67B56 /* midi_region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_region.h; path = ../ardour/midi_region.h; sourceTree = SOURCE_ROOT; };
+		43AA8567194EEB8B00A67B56 /* midi_ring_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_ring_buffer.h; path = ../ardour/midi_ring_buffer.h; sourceTree = SOURCE_ROOT; };
+		43AA8568194EEB8B00A67B56 /* midi_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_source.h; path = ../ardour/midi_source.h; sourceTree = SOURCE_ROOT; };
+		43AA8569194EEB8B00A67B56 /* midi_state_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_state_tracker.h; path = ../ardour/midi_state_tracker.h; sourceTree = SOURCE_ROOT; };
+		43AA856A194EEB8B00A67B56 /* midi_stretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_stretch.h; path = ../ardour/midi_stretch.h; sourceTree = SOURCE_ROOT; };
+		43AA856B194EEB8B00A67B56 /* midi_track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_track.h; path = ../ardour/midi_track.h; sourceTree = SOURCE_ROOT; };
+		43AA856C194EEB8B00A67B56 /* midi_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_ui.h; path = ../ardour/midi_ui.h; sourceTree = SOURCE_ROOT; };
+		43AA856D194EEB8B00A67B56 /* midiport_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midiport_manager.h; path = ../ardour/midiport_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA856E194EEB8B00A67B56 /* mix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mix.h; path = ../ardour/mix.h; sourceTree = SOURCE_ROOT; };
+		43AA856F194EEB8B00A67B56 /* monitor_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = monitor_processor.h; path = ../ardour/monitor_processor.h; sourceTree = SOURCE_ROOT; };
+		43AA8570194EEB8B00A67B56 /* movable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = movable.h; path = ../ardour/movable.h; sourceTree = SOURCE_ROOT; };
+		43AA8571194EEB8B00A67B56 /* msvc_libardour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = msvc_libardour.h; path = ../ardour/msvc_libardour.h; sourceTree = SOURCE_ROOT; };
+		43AA8572194EEB8B00A67B56 /* mtdm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mtdm.h; path = ../ardour/mtdm.h; sourceTree = SOURCE_ROOT; };
+		43AA8573194EEB8B00A67B56 /* mute_master.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mute_master.h; path = ../ardour/mute_master.h; sourceTree = SOURCE_ROOT; };
+		43AA8574194EEB8B00A67B56 /* noise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = noise.h; path = ../ardour/noise.h; sourceTree = SOURCE_ROOT; };
+		43AA8575194EEB8B00A67B56 /* onset_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = onset_detector.h; path = ../ardour/onset_detector.h; sourceTree = SOURCE_ROOT; };
+		43AA8576194EEB8B00A67B56 /* operations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = operations.h; path = ../ardour/operations.h; sourceTree = SOURCE_ROOT; };
+		43AA8577194EEB8B00A67B56 /* pan_controllable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pan_controllable.h; path = ../ardour/pan_controllable.h; sourceTree = SOURCE_ROOT; };
+		43AA8578194EEB8B00A67B56 /* pannable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pannable.h; path = ../ardour/pannable.h; sourceTree = SOURCE_ROOT; };
+		43AA8579194EEB8B00A67B56 /* panner_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_manager.h; path = ../ardour/panner_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA857A194EEB8B00A67B56 /* panner_shell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_shell.h; path = ../ardour/panner_shell.h; sourceTree = SOURCE_ROOT; };
+		43AA857B194EEB8B00A67B56 /* panner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner.h; path = ../ardour/panner.h; sourceTree = SOURCE_ROOT; };
+		43AA857C194EEB8B00A67B56 /* pcm_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pcm_utils.h; path = ../ardour/pcm_utils.h; sourceTree = SOURCE_ROOT; };
+		43AA857D194EEB8B00A67B56 /* peak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = peak.h; path = ../ardour/peak.h; sourceTree = SOURCE_ROOT; };
+		43AA857E194EEB8B00A67B56 /* pi_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pi_controller.h; path = ../ardour/pi_controller.h; sourceTree = SOURCE_ROOT; };
+		43AA857F194EEB8B00A67B56 /* pitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pitch.h; path = ../ardour/pitch.h; sourceTree = SOURCE_ROOT; };
+		43AA8580194EEB8B00A67B56 /* playlist_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_factory.h; path = ../ardour/playlist_factory.h; sourceTree = SOURCE_ROOT; };
+		43AA8581194EEB8B00A67B56 /* playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_source.h; path = ../ardour/playlist_source.h; sourceTree = SOURCE_ROOT; };
+		43AA8582194EEB8B00A67B56 /* playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist.h; path = ../ardour/playlist.h; sourceTree = SOURCE_ROOT; };
+		43AA8583194EEB8B00A67B56 /* plugin_insert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_insert.h; path = ../ardour/plugin_insert.h; sourceTree = SOURCE_ROOT; };
+		43AA8584194EEB8B00A67B56 /* plugin_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_manager.h; path = ../ardour/plugin_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA8585194EEB8B00A67B56 /* plugin_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_types.h; path = ../ardour/plugin_types.h; sourceTree = SOURCE_ROOT; };
+		43AA8586194EEB8B00A67B56 /* plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin.h; path = ../ardour/plugin.h; sourceTree = SOURCE_ROOT; };
+		43AA8587194EEB8B00A67B56 /* port_engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_engine.h; path = ../ardour/port_engine.h; sourceTree = SOURCE_ROOT; };
+		43AA8588194EEB8B00A67B56 /* port_insert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_insert.h; path = ../ardour/port_insert.h; sourceTree = SOURCE_ROOT; };
+		43AA8589194EEB8B00A67B56 /* port_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_manager.h; path = ../ardour/port_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA858A194EEB8B00A67B56 /* port_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_set.h; path = ../ardour/port_set.h; sourceTree = SOURCE_ROOT; };
+		43AA858B194EEB8B00A67B56 /* port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port.h; path = ../ardour/port.h; sourceTree = SOURCE_ROOT; };
+		43AA858C194EEB8B00A67B56 /* process_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = process_thread.h; path = ../ardour/process_thread.h; sourceTree = SOURCE_ROOT; };
+		43AA858D194EEB8B00A67B56 /* processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = processor.h; path = ../ardour/processor.h; sourceTree = SOURCE_ROOT; };
+		43AA858E194EEB8B00A67B56 /* profile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = profile.h; path = ../ardour/profile.h; sourceTree = SOURCE_ROOT; };
+		43AA858F194EEB8B00A67B56 /* progress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = progress.h; path = ../ardour/progress.h; sourceTree = SOURCE_ROOT; };
+		43AA8590194EEB8B00A67B56 /* proxy_controllable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = proxy_controllable.h; path = ../ardour/proxy_controllable.h; sourceTree = SOURCE_ROOT; };
+		43AA8591194EEB8B00A67B56 /* public_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = public_diskstream.h; path = ../ardour/public_diskstream.h; sourceTree = SOURCE_ROOT; };
+		43AA8592194EEB8B00A67B56 /* quantize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quantize.h; path = ../ardour/quantize.h; sourceTree = SOURCE_ROOT; };
+		43AA8593194EEB8B00A67B56 /* rb_effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rb_effect.h; path = ../ardour/rb_effect.h; sourceTree = SOURCE_ROOT; };
+		43AA8594194EEB8B00A67B56 /* rc_configuration_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rc_configuration_vars.h; path = ../ardour/rc_configuration_vars.h; sourceTree = SOURCE_ROOT; };
+		43AA8595194EEB8B00A67B56 /* rc_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rc_configuration.h; path = ../ardour/rc_configuration.h; sourceTree = SOURCE_ROOT; };
+		43AA8596194EEB8B00A67B56 /* readable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = readable.h; path = ../ardour/readable.h; sourceTree = SOURCE_ROOT; };
+		43AA8597194EEB8B00A67B56 /* recent_sessions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = recent_sessions.h; path = ../ardour/recent_sessions.h; sourceTree = SOURCE_ROOT; };
+		43AA8598194EEB8B00A67B56 /* region_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_factory.h; path = ../ardour/region_factory.h; sourceTree = SOURCE_ROOT; };
+		43AA8599194EEB8B00A67B56 /* region_sorters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_sorters.h; path = ../ardour/region_sorters.h; sourceTree = SOURCE_ROOT; };
+		43AA859A194EEB8B00A67B56 /* region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region.h; path = ../ardour/region.h; sourceTree = SOURCE_ROOT; };
+		43AA859B194EEB8B00A67B56 /* resampled_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = resampled_source.h; path = ../ardour/resampled_source.h; sourceTree = SOURCE_ROOT; };
+		43AA859C194EEB8B00A67B56 /* return.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = return.h; path = ../ardour/return.h; sourceTree = SOURCE_ROOT; };
+		43AA859D194EEB8B00A67B56 /* reverse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reverse.h; path = ../ardour/reverse.h; sourceTree = SOURCE_ROOT; };
+		43AA859E194EEB8B00A67B56 /* revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = revision.h; path = ../ardour/revision.h; sourceTree = SOURCE_ROOT; };
+		43AA859F194EEB8B00A67B56 /* route_graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_graph.h; path = ../ardour/route_graph.h; sourceTree = SOURCE_ROOT; };
+		43AA85A0194EEB8B00A67B56 /* route_group_member.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group_member.h; path = ../ardour/route_group_member.h; sourceTree = SOURCE_ROOT; };
+		43AA85A1194EEB8B00A67B56 /* route_group_specialized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group_specialized.h; path = ../ardour/route_group_specialized.h; sourceTree = SOURCE_ROOT; };
+		43AA85A2194EEB8B00A67B56 /* route_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group.h; path = ../ardour/route_group.h; sourceTree = SOURCE_ROOT; };
+		43AA85A3194EEB8B00A67B56 /* route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route.h; path = ../ardour/route.h; sourceTree = SOURCE_ROOT; };
+		43AA85A4194EEB8B00A67B56 /* runtime_functions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = runtime_functions.h; path = ../ardour/runtime_functions.h; sourceTree = SOURCE_ROOT; };
+		43AA85A5194EEB8B00A67B56 /* search_paths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = search_paths.h; path = ../ardour/search_paths.h; sourceTree = SOURCE_ROOT; };
+		43AA85A6194EEB8B00A67B56 /* send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = send.h; path = ../ardour/send.h; sourceTree = SOURCE_ROOT; };
+		43AA85A7194EEB8B00A67B56 /* session_configuration_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_configuration_vars.h; path = ../ardour/session_configuration_vars.h; sourceTree = SOURCE_ROOT; };
+		43AA85A8194EEB8B00A67B56 /* session_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_configuration.h; path = ../ardour/session_configuration.h; sourceTree = SOURCE_ROOT; };
+		43AA85A9194EEB8B00A67B56 /* session_directory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_directory.h; path = ../ardour/session_directory.h; sourceTree = SOURCE_ROOT; };
+		43AA85AA194EEB8B00A67B56 /* session_event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_event.h; path = ../ardour/session_event.h; sourceTree = SOURCE_ROOT; };
+		43AA85AB194EEB8B00A67B56 /* session_handle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_handle.h; path = ../ardour/session_handle.h; sourceTree = SOURCE_ROOT; };
+		43AA85AC194EEB8B00A67B56 /* session_metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_metadata.h; path = ../ardour/session_metadata.h; sourceTree = SOURCE_ROOT; };
+		43AA85AD194EEB8B00A67B56 /* session_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_object.h; path = ../ardour/session_object.h; sourceTree = SOURCE_ROOT; };
+		43AA85AE194EEB8B00A67B56 /* session_playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_playlist.h; path = ../ardour/session_playlist.h; sourceTree = SOURCE_ROOT; };
+		43AA85AF194EEB8B00A67B56 /* session_playlists.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_playlists.h; path = ../ardour/session_playlists.h; sourceTree = SOURCE_ROOT; };
+		43AA85B0194EEB8B00A67B56 /* session_route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_route.h; path = ../ardour/session_route.h; sourceTree = SOURCE_ROOT; };
+		43AA85B1194EEB8B00A67B56 /* session_state_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_state_utils.h; path = ../ardour/session_state_utils.h; sourceTree = SOURCE_ROOT; };
+		43AA85B2194EEB8B00A67B56 /* session_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_utils.h; path = ../ardour/session_utils.h; sourceTree = SOURCE_ROOT; };
+		43AA85B3194EEB8B00A67B56 /* session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session.h; path = ../ardour/session.h; sourceTree = SOURCE_ROOT; };
+		43AA85B4194EEB8B00A67B56 /* silentfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = silentfilesource.h; path = ../ardour/silentfilesource.h; sourceTree = SOURCE_ROOT; };
+		43AA85B5194EEB8B00A67B56 /* slave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = slave.h; path = ../ardour/slave.h; sourceTree = SOURCE_ROOT; };
+		43AA85B6194EEB8B00A67B56 /* smf_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = smf_source.h; path = ../ardour/smf_source.h; sourceTree = SOURCE_ROOT; };
+		43AA85B7194EEB8B00A67B56 /* sndfile_helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sndfile_helpers.h; path = ../ardour/sndfile_helpers.h; sourceTree = SOURCE_ROOT; };
+		43AA85B8194EEB8B00A67B56 /* sndfileimportable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sndfileimportable.h; path = ../ardour/sndfileimportable.h; sourceTree = SOURCE_ROOT; };
+		43AA85B9194EEB8B00A67B56 /* sndfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sndfilesource.h; path = ../ardour/sndfilesource.h; sourceTree = SOURCE_ROOT; };
+		43AA85BA194EEB8B00A67B56 /* soundseq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = soundseq.h; path = ../ardour/soundseq.h; sourceTree = SOURCE_ROOT; };
+		43AA85BB194EEB8B00A67B56 /* source_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = source_factory.h; path = ../ardour/source_factory.h; sourceTree = SOURCE_ROOT; };
+		43AA85BC194EEB8B00A67B56 /* source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = source.h; path = ../ardour/source.h; sourceTree = SOURCE_ROOT; };
+		43AA85BD194EEB8B00A67B56 /* speaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = speaker.h; path = ../ardour/speaker.h; sourceTree = SOURCE_ROOT; };
+		43AA85BE194EEB8B00A67B56 /* speakers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = speakers.h; path = ../ardour/speakers.h; sourceTree = SOURCE_ROOT; };
+		43AA85BF194EEB8B00A67B56 /* spline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spline.h; path = ../ardour/spline.h; sourceTree = SOURCE_ROOT; };
+		43AA85C0194EEB8B00A67B56 /* srcfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = srcfilesource.h; path = ../ardour/srcfilesource.h; sourceTree = SOURCE_ROOT; };
+		43AA85C1194EEB8B00A67B56 /* stretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stretch.h; path = ../ardour/stretch.h; sourceTree = SOURCE_ROOT; };
+		43AA85C2194EEB8B00A67B56 /* strip_silence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strip_silence.h; path = ../ardour/strip_silence.h; sourceTree = SOURCE_ROOT; };
+		43AA85C3194EEB8B00A67B56 /* system_exec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = system_exec.h; path = ../ardour/system_exec.h; sourceTree = SOURCE_ROOT; };
+		43AA85C4194EEB8B00A67B56 /* tape_file_matcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tape_file_matcher.h; path = ../ardour/tape_file_matcher.h; sourceTree = SOURCE_ROOT; };
+		43AA85C5194EEB8B00A67B56 /* template_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = template_utils.h; path = ../ardour/template_utils.h; sourceTree = SOURCE_ROOT; };
+		43AA85C6194EEB8B00A67B56 /* tempo_map_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo_map_importer.h; path = ../ardour/tempo_map_importer.h; sourceTree = SOURCE_ROOT; };
+		43AA85C7194EEB8B00A67B56 /* tempo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo.h; path = ../ardour/tempo.h; sourceTree = SOURCE_ROOT; };
+		43AA85C8194EEB8B00A67B56 /* thread_buffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thread_buffers.h; path = ../ardour/thread_buffers.h; sourceTree = SOURCE_ROOT; };
+		43AA85C9194EEB8B00A67B56 /* ticker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ticker.h; path = ../ardour/ticker.h; sourceTree = SOURCE_ROOT; };
+		43AA85CA194EEB8B00A67B56 /* timecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timecode.h; path = ../ardour/timecode.h; sourceTree = SOURCE_ROOT; };
+		43AA85CB194EEB8B00A67B56 /* timefx_request.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timefx_request.h; path = ../ardour/timefx_request.h; sourceTree = SOURCE_ROOT; };
+		43AA85CC194EEB8B00A67B56 /* timestamps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timestamps.h; path = ../ardour/timestamps.h; sourceTree = SOURCE_ROOT; };
+		43AA85CD194EEB8B00A67B56 /* track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = track.h; path = ../ardour/track.h; sourceTree = SOURCE_ROOT; };
+		43AA85CE194EEB8B00A67B56 /* transient_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transient_detector.h; path = ../ardour/transient_detector.h; sourceTree = SOURCE_ROOT; };
+		43AA85CF194EEB8B00A67B56 /* trimmable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trimmable.h; path = ../ardour/trimmable.h; sourceTree = SOURCE_ROOT; };
+		43AA85D0194EEB8B00A67B56 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../ardour/types.h; sourceTree = SOURCE_ROOT; };
+		43AA85D1194EEB8B00A67B56 /* unknown_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unknown_processor.h; path = ../ardour/unknown_processor.h; sourceTree = SOURCE_ROOT; };
+		43AA85D2194EEB8B00A67B56 /* uri_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = uri_map.h; path = ../ardour/uri_map.h; sourceTree = SOURCE_ROOT; };
+		43AA85D3194EEB8B00A67B56 /* user_bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = user_bundle.h; path = ../ardour/user_bundle.h; sourceTree = SOURCE_ROOT; };
+		43AA85D4194EEB8B00A67B56 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../ardour/utils.h; sourceTree = SOURCE_ROOT; };
+		43AA85D5194EEB8B00A67B56 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../ardour/version.h; sourceTree = SOURCE_ROOT; };
+		43AA85D6194EEB8B00A67B56 /* vst_info_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vst_info_file.h; path = ../ardour/vst_info_file.h; sourceTree = SOURCE_ROOT; };
+		43AA85D7194EEB8B00A67B56 /* vst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vst_plugin.h; path = ../ardour/vst_plugin.h; sourceTree = SOURCE_ROOT; };
+		43AA85D8194EEB8B00A67B56 /* vst_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vst_types.h; path = ../ardour/vst_types.h; sourceTree = SOURCE_ROOT; };
+		43AA85D9194EEB8B00A67B56 /* vumeterdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vumeterdsp.h; path = ../ardour/vumeterdsp.h; sourceTree = SOURCE_ROOT; };
+		43AA85DA194EEB8B00A67B56 /* windows_vst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = windows_vst_plugin.h; path = ../ardour/windows_vst_plugin.h; sourceTree = SOURCE_ROOT; };
+		43AA85DB194EEB8B00A67B56 /* worker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = worker.h; path = ../ardour/worker.h; sourceTree = SOURCE_ROOT; };
+		43AA86C5194EEBAF00A67B56 /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aeffectx.h; path = ../ardour/vestige/aeffectx.h; sourceTree = SOURCE_ROOT; };
+		43AA86C8194EEBF100A67B56 /* run-profiling.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "run-profiling.sh"; path = "../run-profiling.sh"; sourceTree = SOURCE_ROOT; };
+		43AA86C9194EEBF100A67B56 /* run-session-tests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "run-session-tests.sh"; path = "../run-session-tests.sh"; sourceTree = SOURCE_ROOT; };
+		43AA86CA194EEBF100A67B56 /* run-tests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "run-tests.sh"; path = "../run-tests.sh"; sourceTree = SOURCE_ROOT; };
+		43AA86CB194EEBF100A67B56 /* test-env.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "test-env.sh"; path = "../test-env.sh"; sourceTree = SOURCE_ROOT; };
+		43AA86CC194EEBF100A67B56 /* wscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = wscript; path = ../wscript; sourceTree = SOURCE_ROOT; };
+		43AA86CD194EEC1400A67B56 /* gettext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gettext.h; path = ../gettext.h; sourceTree = SOURCE_ROOT; };
+		43AA86CE194EEC1400A67B56 /* lv2_evbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv2_evbuf.h; path = ../lv2_evbuf.h; sourceTree = SOURCE_ROOT; };
+		43AA86CF194EEC1400A67B56 /* rdff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rdff.h; path = ../rdff.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		43AA82A6194EEAAF00A67B56 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		432652FB194EF72700BEFB46 /* ardour */ = {
+			isa = PBXGroup;
+			children = (
+				432652FC194EF73C00BEFB46 /* amp.h */,
+				432652FD194EF73C00BEFB46 /* analyser.h */,
+				432652FE194EF73C00BEFB46 /* ardour.h */,
+				432652FF194EF73C00BEFB46 /* async_midi_port.h */,
+				43265300194EF73C00BEFB46 /* audio_backend.h */,
+				43265301194EF73C00BEFB46 /* audio_buffer.h */,
+				43265302194EF73C00BEFB46 /* audio_diskstream.h */,
+				43265303194EF73C00BEFB46 /* audio_library.h */,
+				43265304194EF73C00BEFB46 /* audio_playlist_importer.h */,
+				43265305194EF73C00BEFB46 /* audio_playlist_source.h */,
+				43265306194EF73C00BEFB46 /* audio_port.h */,
+				43265307194EF73C00BEFB46 /* audio_region_importer.h */,
+				43265308194EF73C00BEFB46 /* audio_track.h */,
+				43265309194EF73C00BEFB46 /* audio_track_importer.h */,
+				4326530A194EF73C00BEFB46 /* audio_unit.h */,
+				4326530B194EF73C00BEFB46 /* audioanalyser.h */,
+				4326530C194EF73C00BEFB46 /* audioengine.h */,
+				4326530D194EF73C00BEFB46 /* audiofile_tagger.h */,
+				4326530E194EF73C00BEFB46 /* audiofilesource.h */,
+				4326530F194EF73C00BEFB46 /* audioplaylist.h */,
+				43265310194EF73C00BEFB46 /* audioregion.h */,
+				43265311194EF73C00BEFB46 /* audiosource.h */,
+				43265312194EF73C00BEFB46 /* auditioner.h */,
+				43265313194EF73C00BEFB46 /* auto_bundle.h */,
+				43265314194EF73C00BEFB46 /* automatable.h */,
+				43265315194EF73C00BEFB46 /* automatable_sequence.h */,
+				43265316194EF73C00BEFB46 /* automation_control.h */,
+				43265317194EF73C00BEFB46 /* automation_list.h */,
+				43265318194EF73C00BEFB46 /* automation_watch.h */,
+				43265319194EF73C00BEFB46 /* beats_frames_converter.h */,
+				4326531A194EF73C00BEFB46 /* broadcast_info.h */,
+				4326531B194EF73C00BEFB46 /* buffer.h */,
+				4326531C194EF73C00BEFB46 /* buffer_manager.h */,
+				4326531D194EF73C00BEFB46 /* buffer_set.h */,
+				4326531E194EF73C00BEFB46 /* bundle.h */,
+				4326531F194EF73C00BEFB46 /* butler.h */,
+				43265320194EF73C00BEFB46 /* caimportable.h */,
+				43265321194EF73C00BEFB46 /* capturing_processor.h */,
+				43265322194EF73C00BEFB46 /* chan_count.h */,
+				43265323194EF73C00BEFB46 /* chan_mapping.h */,
+				43265324194EF73C00BEFB46 /* click.h */,
+				43265325194EF73C00BEFB46 /* comparable_shared_ptr.h */,
+				43265326194EF73C00BEFB46 /* configuration.h */,
+				43265327194EF73C00BEFB46 /* configuration_variable.h */,
+				43265328194EF73C00BEFB46 /* control_protocol_manager.h */,
+				43265329194EF73C00BEFB46 /* coreaudiosource.h */,
+				4326532A194EF73C00BEFB46 /* cycle_timer.h */,
+				4326532B194EF73C00BEFB46 /* cycles.h */,
+				4326532C194EF73C00BEFB46 /* data_type.h */,
+				4326532D194EF73C00BEFB46 /* dB.h */,
+				4326532E194EF73C00BEFB46 /* debug.h */,
+				4326532F194EF73C00BEFB46 /* delivery.h */,
+				43265330194EF73C00BEFB46 /* directory_names.h */,
+				43265331194EF73C00BEFB46 /* diskstream.h */,
+				43265332194EF73C00BEFB46 /* element_import_handler.h */,
+				43265333194EF73C00BEFB46 /* element_importer.h */,
+				43265334194EF73C00BEFB46 /* engine_state_controller.h */,
+				43265335194EF73C00BEFB46 /* event_type_map.h */,
+				43265336194EF73C00BEFB46 /* export_channel.h */,
+				43265337194EF73C00BEFB46 /* export_channel_configuration.h */,
+				43265338194EF73C00BEFB46 /* export_failed.h */,
+				43265339194EF73C00BEFB46 /* export_filename.h */,
+				4326533A194EF73C00BEFB46 /* export_format_base.h */,
+				4326533B194EF73C00BEFB46 /* export_format_compatibility.h */,
+				4326533C194EF73C00BEFB46 /* export_format_manager.h */,
+				4326533D194EF73C00BEFB46 /* export_format_specification.h */,
+				4326533E194EF73C00BEFB46 /* export_formats.h */,
+				4326533F194EF73C00BEFB46 /* export_graph_builder.h */,
+				43265340194EF73C00BEFB46 /* export_handler.h */,
+				43265341194EF73C00BEFB46 /* export_multiplication.h */,
+				43265342194EF73C00BEFB46 /* export_pointers.h */,
+				43265343194EF73C00BEFB46 /* export_preset.h */,
+				43265344194EF73C00BEFB46 /* export_profile_manager.h */,
+				43265345194EF73C00BEFB46 /* export_status.h */,
+				43265346194EF73C00BEFB46 /* export_timespan.h */,
+				43265347194EF73C00BEFB46 /* file_source.h */,
+				43265348194EF73C00BEFB46 /* filename_extensions.h */,
+				43265349194EF73C00BEFB46 /* filesystem_paths.h */,
+				4326534A194EF73C00BEFB46 /* filter.h */,
+				4326534B194EF73C00BEFB46 /* graph.h */,
+				4326534C194EF73C00BEFB46 /* graphnode.h */,
+				4326534D194EF73C00BEFB46 /* iec1ppmdsp.h */,
+				4326534E194EF73C00BEFB46 /* iec2ppmdsp.h */,
+				4326534F194EF73C00BEFB46 /* import_status.h */,
+				43265350194EF73C00BEFB46 /* importable_source.h */,
+				43265351194EF73C00BEFB46 /* instrument_info.h */,
+				43265352194EF73C00BEFB46 /* internal_return.h */,
+				43265353194EF73C00BEFB46 /* internal_send.h */,
+				43265354194EF73C00BEFB46 /* interpolation.h */,
+				43265355194EF73C00BEFB46 /* interthread_info.h */,
+				43265356194EF73C00BEFB46 /* io.h */,
+				43265357194EF73C00BEFB46 /* io_processor.h */,
+				43265358194EF73C00BEFB46 /* jack_utils.h */,
+				43265359194EF73C00BEFB46 /* kmeterdsp.h */,
+				4326535A194EF73C00BEFB46 /* ladspa.h */,
+				4326535B194EF73C00BEFB46 /* ladspa_plugin.h */,
+				4326535C194EF73C00BEFB46 /* latent.h */,
+				4326535D194EF73C00BEFB46 /* libardour_visibility.h */,
+				4326535E194EF73C00BEFB46 /* linux_vst_support.h */,
+				4326535F194EF73C00BEFB46 /* location.h */,
+				43265360194EF73C00BEFB46 /* location_importer.h */,
+				43265361194EF73C00BEFB46 /* logcurve.h */,
+				43265362194EF73C00BEFB46 /* lv2_plugin.h */,
+				43265363194EF73C00BEFB46 /* lxvst_plugin.h */,
+				43265364194EF73C00BEFB46 /* meter.h */,
+				43265365194EF73C00BEFB46 /* midi_automation_list_binder.h */,
+				43265366194EF73C00BEFB46 /* midi_buffer.h */,
+				43265367194EF73C00BEFB46 /* midi_diskstream.h */,
+				43265368194EF73C00BEFB46 /* midi_model.h */,
+				43265369194EF73C00BEFB46 /* midi_operator.h */,
+				4326536A194EF73C00BEFB46 /* midi_patch_manager.h */,
+				4326536B194EF73C00BEFB46 /* midi_playlist.h */,
+				4326536C194EF73C00BEFB46 /* midi_playlist_source.h */,
+				4326536D194EF73C00BEFB46 /* midi_port.h */,
+				4326536E194EF73C00BEFB46 /* midi_region.h */,
+				4326536F194EF73C00BEFB46 /* midi_ring_buffer.h */,
+				43265370194EF73C00BEFB46 /* midi_source.h */,
+				43265371194EF73C00BEFB46 /* midi_state_tracker.h */,
+				43265372194EF73C00BEFB46 /* midi_stretch.h */,
+				43265373194EF73C00BEFB46 /* midi_track.h */,
+				43265374194EF73C00BEFB46 /* midi_ui.h */,
+				43265375194EF73C00BEFB46 /* midiport_manager.h */,
+				43265376194EF73C00BEFB46 /* mix.h */,
+				43265377194EF73C00BEFB46 /* monitor_processor.h */,
+				43265378194EF73C00BEFB46 /* movable.h */,
+				43265379194EF73C00BEFB46 /* msvc_libardour.h */,
+				4326537A194EF73C00BEFB46 /* mtdm.h */,
+				4326537B194EF73C00BEFB46 /* mute_master.h */,
+				4326537C194EF73C00BEFB46 /* noise.h */,
+				4326537D194EF73C00BEFB46 /* onset_detector.h */,
+				4326537E194EF73C00BEFB46 /* operations.h */,
+				4326537F194EF73C00BEFB46 /* pan_controllable.h */,
+				43265380194EF73C00BEFB46 /* pannable.h */,
+				43265381194EF73C00BEFB46 /* panner.h */,
+				43265382194EF73C00BEFB46 /* panner_manager.h */,
+				43265383194EF73C00BEFB46 /* panner_shell.h */,
+				43265384194EF73C00BEFB46 /* pcm_utils.h */,
+				43265385194EF73C00BEFB46 /* peak.h */,
+				43265386194EF73C00BEFB46 /* pi_controller.h */,
+				43265387194EF73C00BEFB46 /* pitch.h */,
+				43265388194EF73C00BEFB46 /* playlist.h */,
+				43265389194EF73C00BEFB46 /* playlist_factory.h */,
+				4326538A194EF73C00BEFB46 /* playlist_source.h */,
+				4326538B194EF73C00BEFB46 /* plugin.h */,
+				4326538C194EF73C00BEFB46 /* plugin_insert.h */,
+				4326538D194EF73C00BEFB46 /* plugin_manager.h */,
+				4326538E194EF73C00BEFB46 /* plugin_types.h */,
+				4326538F194EF73C00BEFB46 /* port.h */,
+				43265390194EF73C00BEFB46 /* port_engine.h */,
+				43265391194EF73C00BEFB46 /* port_insert.h */,
+				43265392194EF73C00BEFB46 /* port_manager.h */,
+				43265393194EF73C00BEFB46 /* port_set.h */,
+				43265394194EF73C00BEFB46 /* process_thread.h */,
+				43265395194EF73C00BEFB46 /* processor.h */,
+				43265396194EF73C00BEFB46 /* profile.h */,
+				43265397194EF73C00BEFB46 /* progress.h */,
+				43265398194EF73C00BEFB46 /* proxy_controllable.h */,
+				43265399194EF73C00BEFB46 /* public_diskstream.h */,
+				4326539A194EF73C00BEFB46 /* quantize.h */,
+				4326539B194EF73C00BEFB46 /* rb_effect.h */,
+				4326539C194EF73C00BEFB46 /* rc_configuration.h */,
+				4326539D194EF73C00BEFB46 /* rc_configuration_vars.h */,
+				4326539E194EF73C00BEFB46 /* readable.h */,
+				4326539F194EF73C00BEFB46 /* recent_sessions.h */,
+				432653A0194EF73C00BEFB46 /* region.h */,
+				432653A1194EF73C00BEFB46 /* region_factory.h */,
+				432653A2194EF73C00BEFB46 /* region_sorters.h */,
+				432653A3194EF73C00BEFB46 /* resampled_source.h */,
+				432653A4194EF73C00BEFB46 /* return.h */,
+				432653A5194EF73C00BEFB46 /* reverse.h */,
+				432653A6194EF73C00BEFB46 /* revision.h */,
+				432653A7194EF73C00BEFB46 /* route.h */,
+				432653A8194EF73C00BEFB46 /* route_graph.h */,
+				432653A9194EF73C00BEFB46 /* route_group.h */,
+				432653AA194EF73C00BEFB46 /* route_group_member.h */,
+				432653AB194EF73C00BEFB46 /* route_group_specialized.h */,
+				432653AC194EF73C00BEFB46 /* runtime_functions.h */,
+				432653AD194EF73C00BEFB46 /* search_paths.h */,
+				432653AE194EF73C00BEFB46 /* send.h */,
+				432653AF194EF73C00BEFB46 /* session.h */,
+				432653B0194EF73C00BEFB46 /* session_configuration.h */,
+				432653B1194EF73C00BEFB46 /* session_configuration_vars.h */,
+				432653B2194EF73C00BEFB46 /* session_directory.h */,
+				432653B3194EF73C00BEFB46 /* session_event.h */,
+				432653B4194EF73C00BEFB46 /* session_handle.h */,
+				432653B5194EF73C00BEFB46 /* session_metadata.h */,
+				432653B6194EF73C00BEFB46 /* session_object.h */,
+				432653B7194EF73C00BEFB46 /* session_playlist.h */,
+				432653B8194EF73C00BEFB46 /* session_playlists.h */,
+				432653B9194EF73C00BEFB46 /* session_route.h */,
+				432653BA194EF73C00BEFB46 /* session_state_utils.h */,
+				432653BB194EF73C00BEFB46 /* session_utils.h */,
+				432653BC194EF73C00BEFB46 /* silentfilesource.h */,
+				432653BD194EF73C00BEFB46 /* slave.h */,
+				432653BE194EF73C00BEFB46 /* smf_source.h */,
+				432653BF194EF73C00BEFB46 /* sndfile_helpers.h */,
+				432653C0194EF73C00BEFB46 /* sndfileimportable.h */,
+				432653C1194EF73C00BEFB46 /* sndfilesource.h */,
+				432653C2194EF73C00BEFB46 /* soundseq.h */,
+				432653C3194EF73C00BEFB46 /* source.h */,
+				432653C4194EF73C00BEFB46 /* source_factory.h */,
+				432653C5194EF73C00BEFB46 /* speaker.h */,
+				432653C6194EF73C00BEFB46 /* speakers.h */,
+				432653C7194EF73C00BEFB46 /* spline.h */,
+				432653C8194EF73C00BEFB46 /* srcfilesource.h */,
+				432653C9194EF73C00BEFB46 /* stretch.h */,
+				432653CA194EF73C00BEFB46 /* strip_silence.h */,
+				432653CB194EF73C00BEFB46 /* system_exec.h */,
+				432653CC194EF73C00BEFB46 /* tape_file_matcher.h */,
+				432653CD194EF73C00BEFB46 /* template_utils.h */,
+				432653CE194EF73C00BEFB46 /* tempo.h */,
+				432653CF194EF73C00BEFB46 /* tempo_map_importer.h */,
+				432653D0194EF73C00BEFB46 /* thread_buffers.h */,
+				432653D1194EF73C00BEFB46 /* ticker.h */,
+				432653D2194EF73C00BEFB46 /* timecode.h */,
+				432653D3194EF73C00BEFB46 /* timefx_request.h */,
+				432653D4194EF73C00BEFB46 /* timestamps.h */,
+				432653D5194EF73C00BEFB46 /* track.h */,
+				432653D6194EF73C00BEFB46 /* transient_detector.h */,
+				432653D7194EF73C00BEFB46 /* trimmable.h */,
+				432653D8194EF73C00BEFB46 /* types.h */,
+				432653D9194EF73C00BEFB46 /* unknown_processor.h */,
+				432653DA194EF73C00BEFB46 /* uri_map.h */,
+				432653DB194EF73C00BEFB46 /* user_bundle.h */,
+				432653DC194EF73C00BEFB46 /* utils.h */,
+				432653DD194EF73C00BEFB46 /* version.h */,
+				432653DE194EF73C00BEFB46 /* vestige */,
+				432653E0194EF73C00BEFB46 /* vst_info_file.h */,
+				432653E1194EF73C00BEFB46 /* vst_plugin.h */,
+				432653E2194EF73C00BEFB46 /* vst_types.h */,
+				432653E3194EF73C00BEFB46 /* vumeterdsp.h */,
+				432653E4194EF73C00BEFB46 /* windows_vst_plugin.h */,
+				432653E5194EF73C00BEFB46 /* worker.h */,
+			);
+			name = ardour;
+			path = ../ardour;
+			sourceTree = "<group>";
+		};
+		432653DE194EF73C00BEFB46 /* vestige */ = {
+			isa = PBXGroup;
+			children = (
+				432653DF194EF73C00BEFB46 /* aeffectx.h */,
+			);
+			path = vestige;
+			sourceTree = "<group>";
+		};
+		432859EA1A10F436006C3E03 /* macosx */ = {
+			isa = PBXGroup;
+			children = (
+				432859EB1A10F436006C3E03 /* libardour.xcodeproj */,
+			);
+			name = macosx;
+			sourceTree = "<group>";
+		};
+		432859EC1A10F436006C3E03 /* Products */ = {
+			isa = PBXGroup;
+			name = Products;
+			sourceTree = "<group>";
+		};
+		43AA8295194EEA6F00A67B56 = {
+			isa = PBXGroup;
+			children = (
+				43AA86C7194EEBC300A67B56 /* scripts */,
+				43AA84F3194EEB6F00A67B56 /* headers */,
+				43AA8458194EEB5F00A67B56 /* test */,
+				43AA82AD194EEACB00A67B56 /* source */,
+				43AA829F194EEA6F00A67B56 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		43AA829F194EEA6F00A67B56 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				43AA82A9194EEAAF00A67B56 /* liblibardour.dylib */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		43AA82AD194EEACB00A67B56 /* source */ = {
+			isa = PBXGroup;
+			children = (
+				432859EA1A10F436006C3E03 /* macosx */,
+				432859EE1A10F436006C3E03 /* midi_scene_change.cc */,
+				432859EF1A10F436006C3E03 /* midi_scene_changer.cc */,
+				432859F01A10F436006C3E03 /* mididm.cc */,
+				432859F11A10F436006C3E03 /* scene_change.cc */,
+				432859F21A10F436006C3E03 /* soundcloud_upload.cc */,
+				43AA82AE194EEB2600A67B56 /* amp.cc */,
+				43AA82AF194EEB2600A67B56 /* analyser.cc */,
+				43AA82B0194EEB2600A67B56 /* async_midi_port.cc */,
+				43AA82B1194EEB2600A67B56 /* audio_buffer.cc */,
+				43AA82B2194EEB2600A67B56 /* audio_diskstream.cc */,
+				43AA82B3194EEB2600A67B56 /* audio_library.cc */,
+				43AA82B4194EEB2600A67B56 /* audio_playlist_importer.cc */,
+				43AA82B5194EEB2600A67B56 /* audio_playlist_source.cc */,
+				43AA82B6194EEB2600A67B56 /* audio_playlist.cc */,
+				43AA82B7194EEB2600A67B56 /* audio_port.cc */,
+				43AA82B8194EEB2600A67B56 /* audio_region_importer.cc */,
+				43AA82B9194EEB2600A67B56 /* audio_track_importer.cc */,
+				43AA82BA194EEB2600A67B56 /* audio_track.cc */,
+				43AA82BB194EEB2600A67B56 /* audio_unit.cc */,
+				43AA82BC194EEB2600A67B56 /* audioanalyser.cc */,
+				43AA82BD194EEB2600A67B56 /* audioengine.cc */,
+				43AA82BE194EEB2600A67B56 /* audiofile_tagger.cc */,
+				43AA82BF194EEB2600A67B56 /* audiofilesource.cc */,
+				43AA82C0194EEB2600A67B56 /* audioregion.cc */,
+				43AA82C1194EEB2600A67B56 /* audiosource.cc */,
+				43AA82C2194EEB2600A67B56 /* auditioner.cc */,
+				43AA82C3194EEB2600A67B56 /* auto_bundle.cc */,
+				43AA82C4194EEB2600A67B56 /* automatable.cc */,
+				43AA82C5194EEB2600A67B56 /* automation_control.cc */,
+				43AA82C6194EEB2600A67B56 /* automation_list.cc */,
+				43AA82C7194EEB2600A67B56 /* automation_watch.cc */,
+				43AA82C8194EEB2600A67B56 /* automation.cc */,
+				43AA82C9194EEB2600A67B56 /* beats_frames_converter.cc */,
+				43AA82CA194EEB2600A67B56 /* broadcast_info.cc */,
+				43AA82CB194EEB2600A67B56 /* buffer_manager.cc */,
+				43AA82CC194EEB2600A67B56 /* buffer_set.cc */,
+				43AA82CD194EEB2600A67B56 /* buffer.cc */,
+				43AA82CE194EEB2600A67B56 /* bundle.cc */,
+				43AA82CF194EEB2600A67B56 /* butler.cc */,
+				43AA82D0194EEB2600A67B56 /* caimportable.cc */,
+				43AA82D1194EEB2600A67B56 /* capturing_processor.cc */,
+				43AA82D2194EEB2600A67B56 /* chan_count.cc */,
+				43AA82D3194EEB2600A67B56 /* chan_mapping.cc */,
+				43AA82D4194EEB2600A67B56 /* config_text.cc */,
+				43AA82D5194EEB2600A67B56 /* configuration.cc */,
+				43AA82D6194EEB2600A67B56 /* control_protocol_manager.cc */,
+				43AA82D7194EEB2600A67B56 /* coreaudiosource.cc */,
+				43AA82D8194EEB2600A67B56 /* cycle_timer.cc */,
+				43AA82D9194EEB2600A67B56 /* data_type.cc */,
+				43AA82DA194EEB2600A67B56 /* debug.cc */,
+				43AA82DB194EEB2600A67B56 /* default_click.cc */,
+				43AA82DC194EEB2600A67B56 /* delivery.cc */,
+				43AA82DD194EEB2600A67B56 /* directory_names.cc */,
+				43AA82DE194EEB2600A67B56 /* diskstream.cc */,
+				43AA82DF194EEB2600A67B56 /* element_import_handler.cc */,
+				43AA82E0194EEB2600A67B56 /* element_importer.cc */,
+				43AA82E1194EEB2600A67B56 /* engine_slave.cc */,
+				43AA82E2194EEB2600A67B56 /* engine_state_controller.cc */,
+				43AA82E3194EEB2600A67B56 /* enums.cc */,
+				43AA82E4194EEB2600A67B56 /* event_type_map.cc */,
+				43AA82E5194EEB2600A67B56 /* export_channel_configuration.cc */,
+				43AA82E6194EEB2600A67B56 /* export_channel.cc */,
+				43AA82E7194EEB2600A67B56 /* export_failed.cc */,
+				43AA82E8194EEB2600A67B56 /* export_filename.cc */,
+				43AA82E9194EEB2600A67B56 /* export_format_base.cc */,
+				43AA82EA194EEB2600A67B56 /* export_format_manager.cc */,
+				43AA82EB194EEB2600A67B56 /* export_format_specification.cc */,
+				43AA82EC194EEB2600A67B56 /* export_formats.cc */,
+				43AA82ED194EEB2600A67B56 /* export_graph_builder.cc */,
+				43AA82EE194EEB2600A67B56 /* export_handler.cc */,
+				43AA82EF194EEB2600A67B56 /* export_multiplication.cc */,
+				43AA82F0194EEB2600A67B56 /* export_preset.cc */,
+				43AA82F1194EEB2600A67B56 /* export_profile_manager.cc */,
+				43AA82F2194EEB2600A67B56 /* export_status.cc */,
+				43AA82F3194EEB2600A67B56 /* export_timespan.cc */,
+				43AA82F4194EEB2600A67B56 /* file_source.cc */,
+				43AA82F5194EEB2600A67B56 /* filename_extensions.cc */,
+				43AA82F6194EEB2600A67B56 /* filesystem_paths.cc */,
+				43AA82F7194EEB2600A67B56 /* filter.cc */,
+				43AA82F8194EEB2600A67B56 /* find_session.cc */,
+				43AA82F9194EEB2600A67B56 /* globals.cc */,
+				43AA82FA194EEB2600A67B56 /* graph.cc */,
+				43AA82FB194EEB2600A67B56 /* graphnode.cc */,
+				43AA82FC194EEB2600A67B56 /* iec1ppmdsp.cc */,
+				43AA82FD194EEB2600A67B56 /* iec2ppmdsp.cc */,
+				43AA82FE194EEB2600A67B56 /* import.cc */,
+				43AA82FF194EEB2600A67B56 /* instrument_info.cc */,
+				43AA8300194EEB2600A67B56 /* internal_return.cc */,
+				43AA8301194EEB2600A67B56 /* internal_send.cc */,
+				43AA8302194EEB2600A67B56 /* interpolation.cc */,
+				43AA8303194EEB2600A67B56 /* io_processor.cc */,
+				43AA8304194EEB2600A67B56 /* io.cc */,
+				43AA8305194EEB2600A67B56 /* kmeterdsp.cc */,
+				43AA8306194EEB2600A67B56 /* ladspa_plugin.cc */,
+				43AA8307194EEB2600A67B56 /* linux_vst_support.cc */,
+				43AA8308194EEB2600A67B56 /* location_importer.cc */,
+				43AA8309194EEB2600A67B56 /* location.cc */,
+				43AA830A194EEB2600A67B56 /* ltc_slave.cc */,
+				43AA830B194EEB2600A67B56 /* lv2_evbuf.c */,
+				43AA830C194EEB2600A67B56 /* lv2_plugin.cc */,
+				43AA830D194EEB2600A67B56 /* lxvst_plugin.cc */,
+				43AA830E194EEB2600A67B56 /* meter.cc */,
+				43AA830F194EEB2600A67B56 /* midi_automation_list_binder.cc */,
+				43AA8310194EEB2600A67B56 /* midi_buffer.cc */,
+				43AA8311194EEB2600A67B56 /* midi_clock_slave.cc */,
+				43AA8312194EEB2600A67B56 /* midi_diskstream.cc */,
+				43AA8313194EEB2600A67B56 /* midi_model.cc */,
+				43AA8314194EEB2600A67B56 /* midi_patch_manager.cc */,
+				43AA8315194EEB2600A67B56 /* midi_playlist_source.cc */,
+				43AA8316194EEB2600A67B56 /* midi_playlist.cc */,
+				43AA8317194EEB2600A67B56 /* midi_port.cc */,
+				43AA8318194EEB2600A67B56 /* midi_region.cc */,
+				43AA8319194EEB2600A67B56 /* midi_ring_buffer.cc */,
+				43AA831A194EEB2600A67B56 /* midi_source.cc */,
+				43AA831B194EEB2600A67B56 /* midi_state_tracker.cc */,
+				43AA831C194EEB2600A67B56 /* midi_stretch.cc */,
+				43AA831D194EEB2600A67B56 /* midi_track.cc */,
+				43AA831E194EEB2600A67B56 /* midi_ui.cc */,
+				43AA831F194EEB2600A67B56 /* midiport_manager.cc */,
+				43AA8320194EEB2600A67B56 /* mix.cc */,
+				43AA8321194EEB2600A67B56 /* monitor_processor.cc */,
+				43AA8322194EEB2600A67B56 /* mtc_slave.cc */,
+				43AA8323194EEB2600A67B56 /* mtdm.cc */,
+				43AA8324194EEB2600A67B56 /* mute_master.cc */,
+				43AA8325194EEB2600A67B56 /* onset_detector.cc */,
+				43AA8326194EEB2600A67B56 /* operations.cc */,
+				43AA8327194EEB2600A67B56 /* pan_controllable.cc */,
+				43AA8328194EEB2600A67B56 /* pannable.cc */,
+				43AA8329194EEB2600A67B56 /* panner_manager.cc */,
+				43AA832A194EEB2600A67B56 /* panner_shell.cc */,
+				43AA832B194EEB2600A67B56 /* panner.cc */,
+				43AA832C194EEB2600A67B56 /* pcm_utils.cc */,
+				43AA832D194EEB2600A67B56 /* pi_controller.cc */,
+				43AA832E194EEB2600A67B56 /* playlist_factory.cc */,
+				43AA832F194EEB2600A67B56 /* playlist_source.cc */,
+				43AA8330194EEB2600A67B56 /* playlist.cc */,
+				43AA8331194EEB2600A67B56 /* plugin_insert.cc */,
+				43AA8332194EEB2600A67B56 /* plugin_manager.cc */,
+				43AA8333194EEB2600A67B56 /* plugin.cc */,
+				43AA8334194EEB2600A67B56 /* port_insert.cc */,
+				43AA8335194EEB2600A67B56 /* port_manager.cc */,
+				43AA8336194EEB2600A67B56 /* port_set.cc */,
+				43AA8337194EEB2600A67B56 /* port.cc */,
+				43AA8338194EEB2600A67B56 /* process_thread.cc */,
+				43AA8339194EEB2600A67B56 /* processor.cc */,
+				43AA833A194EEB2600A67B56 /* progress.cc */,
+				43AA833B194EEB2600A67B56 /* quantize.cc */,
+				43AA833C194EEB2600A67B56 /* rb_effect.cc */,
+				43AA833D194EEB2600A67B56 /* rc_configuration.cc */,
+				43AA833E194EEB2600A67B56 /* rdff.c */,
+				43AA833F194EEB2600A67B56 /* recent_sessions.cc */,
+				43AA8340194EEB2600A67B56 /* region_factory.cc */,
+				43AA8341194EEB2600A67B56 /* region.cc */,
+				43AA8342194EEB2600A67B56 /* resampled_source.cc */,
+				43AA8343194EEB2600A67B56 /* return.cc */,
+				43AA8344194EEB2600A67B56 /* reverse.cc */,
+				43AA8345194EEB2600A67B56 /* revision.cc */,
+				43AA8346194EEB2600A67B56 /* route_graph.cc */,
+				43AA8347194EEB2600A67B56 /* route_group_member.cc */,
+				43AA8348194EEB2600A67B56 /* route_group.cc */,
+				43AA8349194EEB2600A67B56 /* route.cc */,
+				43AA834A194EEB2600A67B56 /* search_paths.cc */,
+				43AA834B194EEB2600A67B56 /* send.cc */,
+				43AA834C194EEB2600A67B56 /* session_butler.cc */,
+				43AA834D194EEB2600A67B56 /* session_click.cc */,
+				43AA834E194EEB2600A67B56 /* session_command.cc */,
+				43AA834F194EEB2600A67B56 /* session_configuration.cc */,
+				43AA8350194EEB2600A67B56 /* session_directory.cc */,
+				43AA8351194EEB2600A67B56 /* session_events.cc */,
+				43AA8352194EEB2600A67B56 /* session_export.cc */,
+				43AA8353194EEB2600A67B56 /* session_handle.cc */,
+				43AA8354194EEB2600A67B56 /* session_ltc.cc */,
+				43AA8355194EEB2600A67B56 /* session_metadata.cc */,
+				43AA8356194EEB2600A67B56 /* session_midi.cc */,
+				43AA8357194EEB2600A67B56 /* session_object.cc */,
+				43AA8358194EEB2600A67B56 /* session_playlists.cc */,
+				43AA8359194EEB2600A67B56 /* session_process.cc */,
+				43AA835A194EEB2600A67B56 /* session_rtevents.cc */,
+				43AA835B194EEB2600A67B56 /* session_state_utils.cc */,
+				43AA835C194EEB2600A67B56 /* session_state.cc */,
+				43AA835D194EEB2600A67B56 /* session_time.cc */,
+				43AA835E194EEB2600A67B56 /* session_transport.cc */,
+				43AA835F194EEB2600A67B56 /* session_vst.cc */,
+				43AA8360194EEB2600A67B56 /* session.cc */,
+				43AA8361194EEB2600A67B56 /* slave.cc */,
+				43AA8362194EEB2600A67B56 /* smf_source.cc */,
+				43AA8363194EEB2600A67B56 /* sndfile_helpers.cc */,
+				43AA8364194EEB2600A67B56 /* sndfileimportable.cc */,
+				43AA8365194EEB2600A67B56 /* sndfilesource.cc */,
+				43AA8366194EEB2600A67B56 /* source_factory.cc */,
+				43AA8367194EEB2600A67B56 /* source.cc */,
+				43AA8368194EEB2600A67B56 /* speakers.cc */,
+				43AA8369194EEB2600A67B56 /* srcfilesource.cc */,
+				43AA836A194EEB2600A67B56 /* sse_functions_64bit.s */,
+				43AA836B194EEB2600A67B56 /* sse_functions_xmm.cc */,
+				43AA836C194EEB2600A67B56 /* sse_functions.s */,
+				43AA836D194EEB2600A67B56 /* st_pitch.cc */,
+				43AA836E194EEB2600A67B56 /* st_stretch.cc */,
+				43AA836F194EEB2600A67B56 /* strip_silence.cc */,
+				43AA8370194EEB2600A67B56 /* system_exec.cc */,
+				43AA8371194EEB2600A67B56 /* tape_file_matcher.cc */,
+				43AA8372194EEB2600A67B56 /* template_utils.cc */,
+				43AA8373194EEB2600A67B56 /* tempo_map_importer.cc */,
+				43AA8374194EEB2600A67B56 /* tempo.cc */,
+				43AA8375194EEB2600A67B56 /* thread_buffers.cc */,
+				43AA8376194EEB2600A67B56 /* ticker.cc */,
+				43AA8377194EEB2600A67B56 /* track.cc */,
+				43AA8378194EEB2600A67B56 /* transient_detector.cc */,
+				43AA8379194EEB2600A67B56 /* unknown_processor.cc */,
+				43AA837A194EEB2600A67B56 /* uri_map.cc */,
+				43AA837B194EEB2600A67B56 /* user_bundle.cc */,
+				43AA837C194EEB2600A67B56 /* utils.cc */,
+				43AA837D194EEB2600A67B56 /* version.cc */,
+				43AA837E194EEB2600A67B56 /* vst_info_file.cc */,
+				43AA837F194EEB2600A67B56 /* vst_plugin.cc */,
+				43AA8380194EEB2600A67B56 /* vumeterdsp.cc */,
+				43AA8381194EEB2600A67B56 /* windows_vst_plugin.cc */,
+				43AA8382194EEB2600A67B56 /* worker.cc */,
+			);
+			name = source;
+			sourceTree = "<group>";
+		};
+		43AA8458194EEB5F00A67B56 /* test */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8459194EEB5F00A67B56 /* audio_engine_test.cc */,
+				43AA845A194EEB5F00A67B56 /* audio_engine_test.h */,
+				43AA845B194EEB5F00A67B56 /* audio_region_read_test.cc */,
+				43AA845C194EEB5F00A67B56 /* audio_region_read_test.h */,
+				43AA845D194EEB5F00A67B56 /* audio_region_test.cc */,
+				43AA845E194EEB5F00A67B56 /* audio_region_test.h */,
+				43AA845F194EEB5F00A67B56 /* automation_list_property_test.cc */,
+				43AA8460194EEB5F00A67B56 /* automation_list_property_test.h */,
+				43AA8461194EEB5F00A67B56 /* bbt_test.cc */,
+				43AA8462194EEB5F00A67B56 /* bbt_test.h */,
+				43AA8463194EEB5F00A67B56 /* combine_regions_test.cc */,
+				43AA8464194EEB5F00A67B56 /* combine_regions_test.h */,
+				43AA8465194EEB5F00A67B56 /* control_surfaces_test.cc */,
+				43AA8466194EEB5F00A67B56 /* control_surfaces_test.h */,
+				43AA8467194EEB5F00A67B56 /* data */,
+				43AA847C194EEB5F00A67B56 /* dummy_lxvst.cc */,
+				43AA847D194EEB5F00A67B56 /* framepos_minus_beats_test.cc */,
+				43AA847E194EEB5F00A67B56 /* framepos_minus_beats_test.h */,
+				43AA847F194EEB5F00A67B56 /* framepos_plus_beats_test.cc */,
+				43AA8480194EEB5F00A67B56 /* framepos_plus_beats_test.h */,
+				43AA8481194EEB5F00A67B56 /* framewalk_to_beats_test.cc */,
+				43AA8482194EEB5F00A67B56 /* framewalk_to_beats_test.h */,
+				43AA8483194EEB5F00A67B56 /* interpolation_test.cc */,
+				43AA8484194EEB5F00A67B56 /* interpolation_test.h */,
+				43AA8485194EEB5F00A67B56 /* jack_utils_test.cc */,
+				43AA8486194EEB5F00A67B56 /* jack_utils_test.h */,
+				43AA8487194EEB5F00A67B56 /* load_session.cc */,
+				43AA8488194EEB5F00A67B56 /* load_sessions_test.cc */,
+				43AA8489194EEB5F00A67B56 /* load_sessions_test.h */,
+				43AA848A194EEB5F00A67B56 /* midi_clock_slave_test.cc */,
+				43AA848B194EEB5F00A67B56 /* midi_clock_slave_test.h */,
+				43AA848C194EEB5F00A67B56 /* mtdm_test.cc */,
+				43AA848D194EEB5F00A67B56 /* mtdm_test.h */,
+				43AA848E194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc */,
+				43AA848F194EEB5F00A67B56 /* playlist_equivalent_regions_test.h */,
+				43AA8490194EEB5F00A67B56 /* playlist_layering_test.cc */,
+				43AA8491194EEB5F00A67B56 /* playlist_layering_test.h */,
+				43AA8492194EEB5F00A67B56 /* playlist_read_test.cc */,
+				43AA8493194EEB5F00A67B56 /* playlist_read_test.h */,
+				43AA8494194EEB5F00A67B56 /* plugins_test.cc */,
+				43AA8495194EEB5F00A67B56 /* plugins_test.h */,
+				43AA8496194EEB5F00A67B56 /* profiling */,
+				43AA84AA194EEB5F00A67B56 /* region_naming_test.cc */,
+				43AA84AB194EEB5F00A67B56 /* region_naming_test.h */,
+				43AA84AC194EEB5F00A67B56 /* resampled_source_test.cc */,
+				43AA84AD194EEB5F00A67B56 /* resampled_source_test.h */,
+				43AA84AE194EEB5F00A67B56 /* session_test.cc */,
+				43AA84AF194EEB5F00A67B56 /* session_test.h */,
+				43AA84B0194EEB5F00A67B56 /* tempo_test.cc */,
+				43AA84B1194EEB5F00A67B56 /* tempo_test.h */,
+				43AA84B2194EEB5F00A67B56 /* test_common.cc */,
+				43AA84B3194EEB5F00A67B56 /* test_common.h */,
+				43AA84B4194EEB5F00A67B56 /* test_needing_session.cc */,
+				43AA84B5194EEB5F00A67B56 /* test_needing_session.h */,
+				43AA84B6194EEB5F00A67B56 /* test_util.cc */,
+				43AA84B7194EEB5F00A67B56 /* test_util.h */,
+				43AA84B8194EEB5F00A67B56 /* testrunner.cc */,
+			);
+			name = test;
+			path = ../../../libs/ardour/test;
+			sourceTree = "<group>";
+		};
+		43AA8467194EEB5F00A67B56 /* data */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8468194EEB5F00A67B56 /* 2 Track-template */,
+				43AA846A194EEB5F00A67B56 /* automation_list_property_test1.ref */,
+				43AA846B194EEB5F00A67B56 /* automation_list_property_test2.ref */,
+				43AA846C194EEB5F00A67B56 /* automation_list_property_test3.ref */,
+				43AA846D194EEB5F00A67B56 /* automation_list_property_test4.ref */,
+				43AA846E194EEB5F00A67B56 /* mantis_3356 */,
+				43AA8475194EEB5F00A67B56 /* mantis_3356.ref */,
+				43AA8476194EEB5F00A67B56 /* sessions */,
+				43AA847B194EEB5F00A67B56 /* test.wav */,
+			);
+			path = data;
+			sourceTree = "<group>";
+		};
+		43AA8468194EEB5F00A67B56 /* 2 Track-template */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8469194EEB5F00A67B56,
+			);
+			path = "2 Track-template";
+			sourceTree = "<group>";
+		};
+		43AA846E194EEB5F00A67B56 /* mantis_3356 */ = {
+			isa = PBXGroup;
+			children = (
+				43AA846F194EEB5F00A67B56 /* instant.xml */,
+				43AA8470194EEB5F00A67B56 /* interchange */,
+				43AA8474194EEB5F00A67B56 /* mantis_3356.ardour */,
+			);
+			path = mantis_3356;
+			sourceTree = "<group>";
+		};
+		43AA8470194EEB5F00A67B56 /* interchange */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8471194EEB5F00A67B56 /* mantis_3356 */,
+			);
+			path = interchange;
+			sourceTree = "<group>";
+		};
+		43AA8471194EEB5F00A67B56 /* mantis_3356 */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8472194EEB5F00A67B56 /* midifiles */,
+			);
+			path = mantis_3356;
+			sourceTree = "<group>";
+		};
+		43AA8472194EEB5F00A67B56 /* midifiles */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8473194EEB5F00A67B56 /* Midi 1-1.mid */,
+			);
+			path = midifiles;
+			sourceTree = "<group>";
+		};
+		43AA8476194EEB5F00A67B56 /* sessions */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8477194EEB5F00A67B56 /* rec_enabled */,
+			);
+			path = sessions;
+			sourceTree = "<group>";
+		};
+		43AA8477194EEB5F00A67B56 /* rec_enabled */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8478194EEB5F00A67B56 /* instant.xml */,
+				43AA8479194EEB5F00A67B56 /* rec_enabled.ardour */,
+				43AA847A194EEB5F00A67B56 /* rec_enabled.history */,
+			);
+			path = rec_enabled;
+			sourceTree = "<group>";
+		};
+		43AA8496194EEB5F00A67B56 /* profiling */ = {
+			isa = PBXGroup;
+			children = (
+				43AA8497194EEB5F00A67B56 /* load_session.cc */,
+				43AA8498194EEB5F00A67B56 /* lots_of_regions.cc */,
+				43AA8499194EEB5F00A67B56 /* runpc.cc */,
+				43AA849A194EEB5F00A67B56 /* sessions */,
+			);
+			path = profiling;
+			sourceTree = "<group>";
+		};
+		43AA849A194EEB5F00A67B56 /* sessions */ = {
+			isa = PBXGroup;
+			children = (
+				43AA849B194EEB5F00A67B56 /* 0tracks */,
+				43AA849E194EEB5F00A67B56 /* 1region */,
+				43AA84A6194EEB5F00A67B56 /* 32tracks */,
+			);
+			path = sessions;
+			sourceTree = "<group>";
+		};
+		43AA849B194EEB5F00A67B56 /* 0tracks */ = {
+			isa = PBXGroup;
+			children = (
+				43AA849C194EEB5F00A67B56 /* 0tracks.ardour */,
+				43AA849D194EEB5F00A67B56 /* 0tracks.history */,
+			);
+			path = 0tracks;
+			sourceTree = "<group>";
+		};
+		43AA849E194EEB5F00A67B56 /* 1region */ = {
+			isa = PBXGroup;
+			children = (
+				43AA849F194EEB5F00A67B56 /* 1region.ardour */,
+				43AA84A0194EEB5F00A67B56 /* 1region.history */,
+				43AA84A1194EEB5F00A67B56 /* instant.xml */,
+				43AA84A2194EEB5F00A67B56 /* interchange */,
+			);
+			path = 1region;
+			sourceTree = "<group>";
+		};
+		43AA84A2194EEB5F00A67B56 /* interchange */ = {
+			isa = PBXGroup;
+			children = (
+				43AA84A3194EEB5F00A67B56 /* 1region */,
+			);
+			path = interchange;
+			sourceTree = "<group>";
+		};
+		43AA84A3194EEB5F00A67B56 /* 1region */ = {
+			isa = PBXGroup;
+			children = (
+				43AA84A4194EEB5F00A67B56 /* midifiles */,
+			);
+			path = 1region;
+			sourceTree = "<group>";
+		};
+		43AA84A4194EEB5F00A67B56 /* midifiles */ = {
+			isa = PBXGroup;
+			children = (
+				43AA84A5194EEB5F00A67B56 /* MIDI 1-1.mid */,
+			);
+			path = midifiles;
+			sourceTree = "<group>";
+		};
+		43AA84A6194EEB5F00A67B56 /* 32tracks */ = {
+			isa = PBXGroup;
+			children = (
+				43AA84A7194EEB5F00A67B56 /* 32tracks.ardour */,
+				43AA84A8194EEB5F00A67B56 /* 32tracks.history */,
+				43AA84A9194EEB5F00A67B56 /* instant.xml */,
+			);
+			path = 32tracks;
+			sourceTree = "<group>";
+		};
+		43AA84F3194EEB6F00A67B56 /* headers */ = {
+			isa = PBXGroup;
+			children = (
+				432859E21A10F415006C3E03 /* midi_scene_change.h */,
+				432859E31A10F415006C3E03 /* midi_scene_changer.h */,
+				432859E41A10F415006C3E03 /* mididm.h */,
+				432859E51A10F415006C3E03 /* soundcloud_upload.h */,
+				43AA86CD194EEC1400A67B56 /* gettext.h */,
+				43AA86CE194EEC1400A67B56 /* lv2_evbuf.h */,
+				43AA86CF194EEC1400A67B56 /* rdff.h */,
+				43AA86C4194EEBAF00A67B56 /* vestige */,
+				43AA84F4194EEB8B00A67B56 /* amp.h */,
+				43AA84F5194EEB8B00A67B56 /* analyser.h */,
+				43AA84F6194EEB8B00A67B56 /* ardour.h */,
+				43AA84F7194EEB8B00A67B56 /* async_midi_port.h */,
+				43AA84F8194EEB8B00A67B56 /* audio_backend.h */,
+				43AA84F9194EEB8B00A67B56 /* audio_buffer.h */,
+				432652FB194EF72700BEFB46 /* ardour */,
+				43AA84FA194EEB8B00A67B56 /* audio_diskstream.h */,
+				43AA84FB194EEB8B00A67B56 /* audio_library.h */,
+				43AA84FC194EEB8B00A67B56 /* audio_playlist_importer.h */,
+				43AA84FD194EEB8B00A67B56 /* audio_playlist_source.h */,
+				43AA84FE194EEB8B00A67B56 /* audio_port.h */,
+				43AA84FF194EEB8B00A67B56 /* audio_region_importer.h */,
+				43AA8500194EEB8B00A67B56 /* audio_track_importer.h */,
+				43AA8501194EEB8B00A67B56 /* audio_track.h */,
+				43AA8502194EEB8B00A67B56 /* audio_unit.h */,
+				43AA8503194EEB8B00A67B56 /* audioanalyser.h */,
+				43AA8504194EEB8B00A67B56 /* audioengine.h */,
+				43AA8505194EEB8B00A67B56 /* audiofile_tagger.h */,
+				43AA8506194EEB8B00A67B56 /* audiofilesource.h */,
+				43AA8507194EEB8B00A67B56 /* audioplaylist.h */,
+				43AA8508194EEB8B00A67B56 /* audioregion.h */,
+				43AA8509194EEB8B00A67B56 /* audiosource.h */,
+				43AA850A194EEB8B00A67B56 /* auditioner.h */,
+				43AA850B194EEB8B00A67B56 /* auto_bundle.h */,
+				43AA850C194EEB8B00A67B56 /* automatable_sequence.h */,
+				43AA850D194EEB8B00A67B56 /* automatable.h */,
+				43AA850E194EEB8B00A67B56 /* automation_control.h */,
+				43AA850F194EEB8B00A67B56 /* automation_list.h */,
+				43AA8510194EEB8B00A67B56 /* automation_watch.h */,
+				43AA8511194EEB8B00A67B56 /* beats_frames_converter.h */,
+				43AA8512194EEB8B00A67B56 /* broadcast_info.h */,
+				43AA8513194EEB8B00A67B56 /* buffer_manager.h */,
+				43AA8514194EEB8B00A67B56 /* buffer_set.h */,
+				43AA8515194EEB8B00A67B56 /* buffer.h */,
+				43AA8516194EEB8B00A67B56 /* bundle.h */,
+				43AA8517194EEB8B00A67B56 /* butler.h */,
+				43AA8518194EEB8B00A67B56 /* caimportable.h */,
+				43AA8519194EEB8B00A67B56 /* capturing_processor.h */,
+				43AA851A194EEB8B00A67B56 /* chan_count.h */,
+				43AA851B194EEB8B00A67B56 /* chan_mapping.h */,
+				43AA851C194EEB8B00A67B56 /* click.h */,
+				43AA851D194EEB8B00A67B56 /* comparable_shared_ptr.h */,
+				43AA851E194EEB8B00A67B56 /* configuration_variable.h */,
+				43AA851F194EEB8B00A67B56 /* configuration.h */,
+				43AA8520194EEB8B00A67B56 /* control_protocol_manager.h */,
+				43AA8521194EEB8B00A67B56 /* coreaudiosource.h */,
+				43AA8522194EEB8B00A67B56 /* cycle_timer.h */,
+				43AA8523194EEB8B00A67B56 /* cycles.h */,
+				43AA8524194EEB8B00A67B56 /* data_type.h */,
+				43AA8525194EEB8B00A67B56 /* dB.h */,
+				43AA8526194EEB8B00A67B56 /* debug.h */,
+				43AA8527194EEB8B00A67B56 /* delivery.h */,
+				43AA8528194EEB8B00A67B56 /* directory_names.h */,
+				43AA8529194EEB8B00A67B56 /* diskstream.h */,
+				43AA852A194EEB8B00A67B56 /* element_import_handler.h */,
+				43AA852B194EEB8B00A67B56 /* element_importer.h */,
+				43AA852C194EEB8B00A67B56 /* engine_state_controller.h */,
+				43AA852D194EEB8B00A67B56 /* event_type_map.h */,
+				43AA852E194EEB8B00A67B56 /* export_channel_configuration.h */,
+				43AA852F194EEB8B00A67B56 /* export_channel.h */,
+				43AA8530194EEB8B00A67B56 /* export_failed.h */,
+				43AA8531194EEB8B00A67B56 /* export_filename.h */,
+				43AA8532194EEB8B00A67B56 /* export_format_base.h */,
+				43AA8533194EEB8B00A67B56 /* export_format_compatibility.h */,
+				43AA8534194EEB8B00A67B56 /* export_format_manager.h */,
+				43AA8535194EEB8B00A67B56 /* export_format_specification.h */,
+				43AA8536194EEB8B00A67B56 /* export_formats.h */,
+				43AA8537194EEB8B00A67B56 /* export_graph_builder.h */,
+				43AA8538194EEB8B00A67B56 /* export_handler.h */,
+				43AA8539194EEB8B00A67B56 /* export_multiplication.h */,
+				43AA853A194EEB8B00A67B56 /* export_pointers.h */,
+				43AA853B194EEB8B00A67B56 /* export_preset.h */,
+				43AA853C194EEB8B00A67B56 /* export_profile_manager.h */,
+				43AA853D194EEB8B00A67B56 /* export_status.h */,
+				43AA853E194EEB8B00A67B56 /* export_timespan.h */,
+				43AA853F194EEB8B00A67B56 /* file_source.h */,
+				43AA8540194EEB8B00A67B56 /* filename_extensions.h */,
+				43AA8541194EEB8B00A67B56 /* filesystem_paths.h */,
+				43AA8542194EEB8B00A67B56 /* filter.h */,
+				43AA8543194EEB8B00A67B56 /* graph.h */,
+				43AA8544194EEB8B00A67B56 /* graphnode.h */,
+				43AA8545194EEB8B00A67B56 /* iec1ppmdsp.h */,
+				43AA8546194EEB8B00A67B56 /* iec2ppmdsp.h */,
+				43AA8547194EEB8B00A67B56 /* import_status.h */,
+				43AA8548194EEB8B00A67B56 /* importable_source.h */,
+				43AA8549194EEB8B00A67B56 /* instrument_info.h */,
+				43AA854A194EEB8B00A67B56 /* internal_return.h */,
+				43AA854B194EEB8B00A67B56 /* internal_send.h */,
+				43AA854C194EEB8B00A67B56 /* interpolation.h */,
+				43AA854D194EEB8B00A67B56 /* interthread_info.h */,
+				43AA854E194EEB8B00A67B56 /* io_processor.h */,
+				43AA854F194EEB8B00A67B56 /* io.h */,
+				43AA8550194EEB8B00A67B56 /* jack_utils.h */,
+				43AA8551194EEB8B00A67B56 /* kmeterdsp.h */,
+				43AA8552194EEB8B00A67B56 /* ladspa_plugin.h */,
+				43AA8553194EEB8B00A67B56 /* ladspa.h */,
+				43AA8554194EEB8B00A67B56 /* latent.h */,
+				43AA8555194EEB8B00A67B56 /* libardour_visibility.h */,
+				43AA8556194EEB8B00A67B56 /* linux_vst_support.h */,
+				43AA8557194EEB8B00A67B56 /* location_importer.h */,
+				43AA8558194EEB8B00A67B56 /* location.h */,
+				43AA8559194EEB8B00A67B56 /* logcurve.h */,
+				43AA855A194EEB8B00A67B56 /* lv2_plugin.h */,
+				43AA855B194EEB8B00A67B56 /* lxvst_plugin.h */,
+				43AA855C194EEB8B00A67B56 /* meter.h */,
+				43AA855D194EEB8B00A67B56 /* midi_automation_list_binder.h */,
+				43AA855E194EEB8B00A67B56 /* midi_buffer.h */,
+				43AA855F194EEB8B00A67B56 /* midi_diskstream.h */,
+				43AA8560194EEB8B00A67B56 /* midi_model.h */,
+				43AA8561194EEB8B00A67B56 /* midi_operator.h */,
+				43AA8562194EEB8B00A67B56 /* midi_patch_manager.h */,
+				43AA8563194EEB8B00A67B56 /* midi_playlist_source.h */,
+				43AA8564194EEB8B00A67B56 /* midi_playlist.h */,
+				43AA8565194EEB8B00A67B56 /* midi_port.h */,
+				43AA8566194EEB8B00A67B56 /* midi_region.h */,
+				43AA8567194EEB8B00A67B56 /* midi_ring_buffer.h */,
+				43AA8568194EEB8B00A67B56 /* midi_source.h */,
+				43AA8569194EEB8B00A67B56 /* midi_state_tracker.h */,
+				43AA856A194EEB8B00A67B56 /* midi_stretch.h */,
+				43AA856B194EEB8B00A67B56 /* midi_track.h */,
+				43AA856C194EEB8B00A67B56 /* midi_ui.h */,
+				43AA856D194EEB8B00A67B56 /* midiport_manager.h */,
+				43AA856E194EEB8B00A67B56 /* mix.h */,
+				43AA856F194EEB8B00A67B56 /* monitor_processor.h */,
+				43AA8570194EEB8B00A67B56 /* movable.h */,
+				43AA8571194EEB8B00A67B56 /* msvc_libardour.h */,
+				43AA8572194EEB8B00A67B56 /* mtdm.h */,
+				43AA8573194EEB8B00A67B56 /* mute_master.h */,
+				43AA8574194EEB8B00A67B56 /* noise.h */,
+				43AA8575194EEB8B00A67B56 /* onset_detector.h */,
+				43AA8576194EEB8B00A67B56 /* operations.h */,
+				43AA8577194EEB8B00A67B56 /* pan_controllable.h */,
+				43AA8578194EEB8B00A67B56 /* pannable.h */,
+				43AA8579194EEB8B00A67B56 /* panner_manager.h */,
+				43AA857A194EEB8B00A67B56 /* panner_shell.h */,
+				43AA857B194EEB8B00A67B56 /* panner.h */,
+				43AA857C194EEB8B00A67B56 /* pcm_utils.h */,
+				43AA857D194EEB8B00A67B56 /* peak.h */,
+				43AA857E194EEB8B00A67B56 /* pi_controller.h */,
+				43AA857F194EEB8B00A67B56 /* pitch.h */,
+				43AA8580194EEB8B00A67B56 /* playlist_factory.h */,
+				43AA8581194EEB8B00A67B56 /* playlist_source.h */,
+				43AA8582194EEB8B00A67B56 /* playlist.h */,
+				43AA8583194EEB8B00A67B56 /* plugin_insert.h */,
+				43AA8584194EEB8B00A67B56 /* plugin_manager.h */,
+				43AA8585194EEB8B00A67B56 /* plugin_types.h */,
+				43AA8586194EEB8B00A67B56 /* plugin.h */,
+				43AA8587194EEB8B00A67B56 /* port_engine.h */,
+				43AA8588194EEB8B00A67B56 /* port_insert.h */,
+				43AA8589194EEB8B00A67B56 /* port_manager.h */,
+				43AA858A194EEB8B00A67B56 /* port_set.h */,
+				43AA858B194EEB8B00A67B56 /* port.h */,
+				43AA858C194EEB8B00A67B56 /* process_thread.h */,
+				43AA858D194EEB8B00A67B56 /* processor.h */,
+				43AA858E194EEB8B00A67B56 /* profile.h */,
+				43AA858F194EEB8B00A67B56 /* progress.h */,
+				43AA8590194EEB8B00A67B56 /* proxy_controllable.h */,
+				43AA8591194EEB8B00A67B56 /* public_diskstream.h */,
+				43AA8592194EEB8B00A67B56 /* quantize.h */,
+				43AA8593194EEB8B00A67B56 /* rb_effect.h */,
+				43AA8594194EEB8B00A67B56 /* rc_configuration_vars.h */,
+				43AA8595194EEB8B00A67B56 /* rc_configuration.h */,
+				43AA8596194EEB8B00A67B56 /* readable.h */,
+				43AA8597194EEB8B00A67B56 /* recent_sessions.h */,
+				43AA8598194EEB8B00A67B56 /* region_factory.h */,
+				43AA8599194EEB8B00A67B56 /* region_sorters.h */,
+				43AA859A194EEB8B00A67B56 /* region.h */,
+				43AA859B194EEB8B00A67B56 /* resampled_source.h */,
+				43AA859C194EEB8B00A67B56 /* return.h */,
+				43AA859D194EEB8B00A67B56 /* reverse.h */,
+				43AA859E194EEB8B00A67B56 /* revision.h */,
+				43AA859F194EEB8B00A67B56 /* route_graph.h */,
+				43AA85A0194EEB8B00A67B56 /* route_group_member.h */,
+				43AA85A1194EEB8B00A67B56 /* route_group_specialized.h */,
+				43AA85A2194EEB8B00A67B56 /* route_group.h */,
+				43AA85A3194EEB8B00A67B56 /* route.h */,
+				43AA85A4194EEB8B00A67B56 /* runtime_functions.h */,
+				43AA85A5194EEB8B00A67B56 /* search_paths.h */,
+				43AA85A6194EEB8B00A67B56 /* send.h */,
+				43AA85A7194EEB8B00A67B56 /* session_configuration_vars.h */,
+				43AA85A8194EEB8B00A67B56 /* session_configuration.h */,
+				43AA85A9194EEB8B00A67B56 /* session_directory.h */,
+				43AA85AA194EEB8B00A67B56 /* session_event.h */,
+				43AA85AB194EEB8B00A67B56 /* session_handle.h */,
+				43AA85AC194EEB8B00A67B56 /* session_metadata.h */,
+				43AA85AD194EEB8B00A67B56 /* session_object.h */,
+				43AA85AE194EEB8B00A67B56 /* session_playlist.h */,
+				43AA85AF194EEB8B00A67B56 /* session_playlists.h */,
+				43AA85B0194EEB8B00A67B56 /* session_route.h */,
+				43AA85B1194EEB8B00A67B56 /* session_state_utils.h */,
+				43AA85B2194EEB8B00A67B56 /* session_utils.h */,
+				43AA85B3194EEB8B00A67B56 /* session.h */,
+				43AA85B4194EEB8B00A67B56 /* silentfilesource.h */,
+				43AA85B5194EEB8B00A67B56 /* slave.h */,
+				43AA85B6194EEB8B00A67B56 /* smf_source.h */,
+				43AA85B7194EEB8B00A67B56 /* sndfile_helpers.h */,
+				43AA85B8194EEB8B00A67B56 /* sndfileimportable.h */,
+				43AA85B9194EEB8B00A67B56 /* sndfilesource.h */,
+				43AA85BA194EEB8B00A67B56 /* soundseq.h */,
+				43AA85BB194EEB8B00A67B56 /* source_factory.h */,
+				43AA85BC194EEB8B00A67B56 /* source.h */,
+				43AA85BD194EEB8B00A67B56 /* speaker.h */,
+				43AA85BE194EEB8B00A67B56 /* speakers.h */,
+				43AA85BF194EEB8B00A67B56 /* spline.h */,
+				43AA85C0194EEB8B00A67B56 /* srcfilesource.h */,
+				43AA85C1194EEB8B00A67B56 /* stretch.h */,
+				43AA85C2194EEB8B00A67B56 /* strip_silence.h */,
+				43AA85C3194EEB8B00A67B56 /* system_exec.h */,
+				43AA85C4194EEB8B00A67B56 /* tape_file_matcher.h */,
+				43AA85C5194EEB8B00A67B56 /* template_utils.h */,
+				43AA85C6194EEB8B00A67B56 /* tempo_map_importer.h */,
+				43AA85C7194EEB8B00A67B56 /* tempo.h */,
+				43AA85C8194EEB8B00A67B56 /* thread_buffers.h */,
+				43AA85C9194EEB8B00A67B56 /* ticker.h */,
+				43AA85CA194EEB8B00A67B56 /* timecode.h */,
+				43AA85CB194EEB8B00A67B56 /* timefx_request.h */,
+				43AA85CC194EEB8B00A67B56 /* timestamps.h */,
+				43AA85CD194EEB8B00A67B56 /* track.h */,
+				43AA85CE194EEB8B00A67B56 /* transient_detector.h */,
+				43AA85CF194EEB8B00A67B56 /* trimmable.h */,
+				43AA85D0194EEB8B00A67B56 /* types.h */,
+				43AA85D1194EEB8B00A67B56 /* unknown_processor.h */,
+				43AA85D2194EEB8B00A67B56 /* uri_map.h */,
+				43AA85D3194EEB8B00A67B56 /* user_bundle.h */,
+				43AA85D4194EEB8B00A67B56 /* utils.h */,
+				43AA85D5194EEB8B00A67B56 /* version.h */,
+				43AA85D6194EEB8B00A67B56 /* vst_info_file.h */,
+				43AA85D7194EEB8B00A67B56 /* vst_plugin.h */,
+				43AA85D8194EEB8B00A67B56 /* vst_types.h */,
+				43AA85D9194EEB8B00A67B56 /* vumeterdsp.h */,
+				43AA85DA194EEB8B00A67B56 /* windows_vst_plugin.h */,
+				43AA85DB194EEB8B00A67B56 /* worker.h */,
+			);
+			name = headers;
+			sourceTree = "<group>";
+		};
+		43AA86C4194EEBAF00A67B56 /* vestige */ = {
+			isa = PBXGroup;
+			children = (
+				43AA86C5194EEBAF00A67B56 /* aeffectx.h */,
+			);
+			name = vestige;
+			path = ../../../libs/ardour/ardour/vestige;
+			sourceTree = "<group>";
+		};
+		43AA86C7194EEBC300A67B56 /* scripts */ = {
+			isa = PBXGroup;
+			children = (
+				43AA86C8194EEBF100A67B56 /* run-profiling.sh */,
+				43AA86C9194EEBF100A67B56 /* run-session-tests.sh */,
+				43AA86CA194EEBF100A67B56 /* run-tests.sh */,
+				43AA86CB194EEBF100A67B56 /* test-env.sh */,
+				43AA86CC194EEBF100A67B56 /* wscript */,
+			);
+			name = scripts;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		43AA82A7194EEAAF00A67B56 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				43AA84BA194EEB5F00A67B56 /* audio_engine_test.h in Headers */,
+				43AA84BC194EEB5F00A67B56 /* audio_region_read_test.h in Headers */,
+				43AA84BE194EEB5F00A67B56 /* audio_region_test.h in Headers */,
+				43AA84C0194EEB5F00A67B56 /* automation_list_property_test.h in Headers */,
+				43AA84C2194EEB5F00A67B56 /* bbt_test.h in Headers */,
+				43AA84C4194EEB5F00A67B56 /* combine_regions_test.h in Headers */,
+				43AA84C6194EEB5F00A67B56 /* control_surfaces_test.h in Headers */,
+				43AA84C9194EEB5F00A67B56 /* framepos_minus_beats_test.h in Headers */,
+				43AA84CB194EEB5F00A67B56 /* framepos_plus_beats_test.h in Headers */,
+				43AA84CD194EEB5F00A67B56 /* framewalk_to_beats_test.h in Headers */,
+				43AA84CF194EEB5F00A67B56 /* interpolation_test.h in Headers */,
+				43AA84D1194EEB5F00A67B56 /* jack_utils_test.h in Headers */,
+				43AA84D4194EEB5F00A67B56 /* load_sessions_test.h in Headers */,
+				43AA84D6194EEB5F00A67B56 /* midi_clock_slave_test.h in Headers */,
+				43AA84D8194EEB5F00A67B56 /* mtdm_test.h in Headers */,
+				43AA84DA194EEB5F00A67B56 /* playlist_equivalent_regions_test.h in Headers */,
+				43AA84DC194EEB5F00A67B56 /* playlist_layering_test.h in Headers */,
+				43AA84DE194EEB5F00A67B56 /* playlist_read_test.h in Headers */,
+				43AA84E0194EEB5F00A67B56 /* plugins_test.h in Headers */,
+				43AA84E5194EEB5F00A67B56 /* region_naming_test.h in Headers */,
+				43AA84E7194EEB5F00A67B56 /* resampled_source_test.h in Headers */,
+				43AA84E9194EEB5F00A67B56 /* session_test.h in Headers */,
+				43AA84EB194EEB5F00A67B56 /* tempo_test.h in Headers */,
+				43AA84ED194EEB5F00A67B56 /* test_common.h in Headers */,
+				43AA84EF194EEB5F00A67B56 /* test_needing_session.h in Headers */,
+				43AA84F1194EEB5F00A67B56 /* test_util.h in Headers */,
+				43AA85DC194EEB8B00A67B56 /* amp.h in Headers */,
+				43AA85DD194EEB8B00A67B56 /* analyser.h in Headers */,
+				43AA85DE194EEB8B00A67B56 /* ardour.h in Headers */,
+				43AA85DF194EEB8B00A67B56 /* async_midi_port.h in Headers */,
+				43AA85E0194EEB8B00A67B56 /* audio_backend.h in Headers */,
+				43AA85E1194EEB8B00A67B56 /* audio_buffer.h in Headers */,
+				43AA85E2194EEB8B00A67B56 /* audio_diskstream.h in Headers */,
+				43AA85E3194EEB8B00A67B56 /* audio_library.h in Headers */,
+				43AA85E4194EEB8B00A67B56 /* audio_playlist_importer.h in Headers */,
+				43AA85E5194EEB8B00A67B56 /* audio_playlist_source.h in Headers */,
+				43AA85E6194EEB8B00A67B56 /* audio_port.h in Headers */,
+				43AA85E7194EEB8B00A67B56 /* audio_region_importer.h in Headers */,
+				43AA85E8194EEB8B00A67B56 /* audio_track_importer.h in Headers */,
+				43AA85E9194EEB8B00A67B56 /* audio_track.h in Headers */,
+				43AA85EA194EEB8B00A67B56 /* audio_unit.h in Headers */,
+				43AA85EB194EEB8B00A67B56 /* audioanalyser.h in Headers */,
+				43AA85EC194EEB8B00A67B56 /* audioengine.h in Headers */,
+				43AA85ED194EEB8B00A67B56 /* audiofile_tagger.h in Headers */,
+				43AA85EE194EEB8B00A67B56 /* audiofilesource.h in Headers */,
+				43AA85EF194EEB8B00A67B56 /* audioplaylist.h in Headers */,
+				43AA85F0194EEB8B00A67B56 /* audioregion.h in Headers */,
+				43AA85F1194EEB8B00A67B56 /* audiosource.h in Headers */,
+				43AA85F2194EEB8B00A67B56 /* auditioner.h in Headers */,
+				43AA85F3194EEB8B00A67B56 /* auto_bundle.h in Headers */,
+				43AA85F4194EEB8B00A67B56 /* automatable_sequence.h in Headers */,
+				43AA85F5194EEB8B00A67B56 /* automatable.h in Headers */,
+				43AA85F6194EEB8B00A67B56 /* automation_control.h in Headers */,
+				43AA85F7194EEB8B00A67B56 /* automation_list.h in Headers */,
+				43AA85F8194EEB8B00A67B56 /* automation_watch.h in Headers */,
+				43AA85F9194EEB8B00A67B56 /* beats_frames_converter.h in Headers */,
+				43AA85FA194EEB8B00A67B56 /* broadcast_info.h in Headers */,
+				43AA85FB194EEB8B00A67B56 /* buffer_manager.h in Headers */,
+				43AA85FC194EEB8B00A67B56 /* buffer_set.h in Headers */,
+				43AA85FD194EEB8B00A67B56 /* buffer.h in Headers */,
+				43AA85FE194EEB8B00A67B56 /* bundle.h in Headers */,
+				43AA85FF194EEB8B00A67B56 /* butler.h in Headers */,
+				43AA8600194EEB8B00A67B56 /* caimportable.h in Headers */,
+				43AA8601194EEB8B00A67B56 /* capturing_processor.h in Headers */,
+				43AA8602194EEB8B00A67B56 /* chan_count.h in Headers */,
+				43AA8603194EEB8B00A67B56 /* chan_mapping.h in Headers */,
+				43AA8604194EEB8B00A67B56 /* click.h in Headers */,
+				43AA8605194EEB8B00A67B56 /* comparable_shared_ptr.h in Headers */,
+				43AA8606194EEB8B00A67B56 /* configuration_variable.h in Headers */,
+				43AA8607194EEB8B00A67B56 /* configuration.h in Headers */,
+				43AA8608194EEB8B00A67B56 /* control_protocol_manager.h in Headers */,
+				43AA8609194EEB8B00A67B56 /* coreaudiosource.h in Headers */,
+				43AA860A194EEB8B00A67B56 /* cycle_timer.h in Headers */,
+				43AA860B194EEB8B00A67B56 /* cycles.h in Headers */,
+				43AA860C194EEB8B00A67B56 /* data_type.h in Headers */,
+				43AA860D194EEB8B00A67B56 /* dB.h in Headers */,
+				43AA860E194EEB8B00A67B56 /* debug.h in Headers */,
+				43AA860F194EEB8B00A67B56 /* delivery.h in Headers */,
+				43AA8610194EEB8B00A67B56 /* directory_names.h in Headers */,
+				43AA8611194EEB8B00A67B56 /* diskstream.h in Headers */,
+				43AA8612194EEB8B00A67B56 /* element_import_handler.h in Headers */,
+				43AA8613194EEB8B00A67B56 /* element_importer.h in Headers */,
+				43AA8614194EEB8B00A67B56 /* engine_state_controller.h in Headers */,
+				43AA8615194EEB8B00A67B56 /* event_type_map.h in Headers */,
+				43AA8616194EEB8B00A67B56 /* export_channel_configuration.h in Headers */,
+				43AA8617194EEB8B00A67B56 /* export_channel.h in Headers */,
+				43AA8618194EEB8B00A67B56 /* export_failed.h in Headers */,
+				43AA8619194EEB8B00A67B56 /* export_filename.h in Headers */,
+				43AA861A194EEB8B00A67B56 /* export_format_base.h in Headers */,
+				43AA861B194EEB8B00A67B56 /* export_format_compatibility.h in Headers */,
+				43AA861C194EEB8B00A67B56 /* export_format_manager.h in Headers */,
+				43AA861D194EEB8B00A67B56 /* export_format_specification.h in Headers */,
+				43AA861E194EEB8B00A67B56 /* export_formats.h in Headers */,
+				43AA861F194EEB8B00A67B56 /* export_graph_builder.h in Headers */,
+				43AA8620194EEB8B00A67B56 /* export_handler.h in Headers */,
+				43AA8621194EEB8B00A67B56 /* export_multiplication.h in Headers */,
+				43AA8622194EEB8B00A67B56 /* export_pointers.h in Headers */,
+				43AA8623194EEB8B00A67B56 /* export_preset.h in Headers */,
+				43AA8624194EEB8B00A67B56 /* export_profile_manager.h in Headers */,
+				43AA8625194EEB8B00A67B56 /* export_status.h in Headers */,
+				43AA8626194EEB8B00A67B56 /* export_timespan.h in Headers */,
+				43AA8627194EEB8B00A67B56 /* file_source.h in Headers */,
+				43AA8628194EEB8B00A67B56 /* filename_extensions.h in Headers */,
+				43AA8629194EEB8B00A67B56 /* filesystem_paths.h in Headers */,
+				43AA862A194EEB8B00A67B56 /* filter.h in Headers */,
+				43AA862B194EEB8B00A67B56 /* graph.h in Headers */,
+				43AA862C194EEB8B00A67B56 /* graphnode.h in Headers */,
+				43AA862D194EEB8B00A67B56 /* iec1ppmdsp.h in Headers */,
+				43AA862E194EEB8B00A67B56 /* iec2ppmdsp.h in Headers */,
+				43AA862F194EEB8B00A67B56 /* import_status.h in Headers */,
+				432859E61A10F415006C3E03 /* midi_scene_change.h in Headers */,
+				43AA8630194EEB8B00A67B56 /* importable_source.h in Headers */,
+				43AA8631194EEB8B00A67B56 /* instrument_info.h in Headers */,
+				43AA8632194EEB8B00A67B56 /* internal_return.h in Headers */,
+				432859E81A10F415006C3E03 /* mididm.h in Headers */,
+				43AA8633194EEB8B00A67B56 /* internal_send.h in Headers */,
+				43AA8634194EEB8B00A67B56 /* interpolation.h in Headers */,
+				43AA8635194EEB8B00A67B56 /* interthread_info.h in Headers */,
+				43AA8636194EEB8B00A67B56 /* io_processor.h in Headers */,
+				43AA8637194EEB8B00A67B56 /* io.h in Headers */,
+				43AA8638194EEB8B00A67B56 /* jack_utils.h in Headers */,
+				43AA8639194EEB8B00A67B56 /* kmeterdsp.h in Headers */,
+				43AA863A194EEB8B00A67B56 /* ladspa_plugin.h in Headers */,
+				43AA863B194EEB8B00A67B56 /* ladspa.h in Headers */,
+				43AA863C194EEB8B00A67B56 /* latent.h in Headers */,
+				43AA863D194EEB8B00A67B56 /* libardour_visibility.h in Headers */,
+				43AA863E194EEB8B00A67B56 /* linux_vst_support.h in Headers */,
+				43AA863F194EEB8B00A67B56 /* location_importer.h in Headers */,
+				43AA8640194EEB8B00A67B56 /* location.h in Headers */,
+				43AA8641194EEB8B00A67B56 /* logcurve.h in Headers */,
+				43AA8642194EEB8B00A67B56 /* lv2_plugin.h in Headers */,
+				43AA8643194EEB8B00A67B56 /* lxvst_plugin.h in Headers */,
+				43AA8644194EEB8B00A67B56 /* meter.h in Headers */,
+				43AA8645194EEB8B00A67B56 /* midi_automation_list_binder.h in Headers */,
+				43AA8646194EEB8B00A67B56 /* midi_buffer.h in Headers */,
+				43AA8647194EEB8B00A67B56 /* midi_diskstream.h in Headers */,
+				43AA8648194EEB8B00A67B56 /* midi_model.h in Headers */,
+				43AA8649194EEB8B00A67B56 /* midi_operator.h in Headers */,
+				43AA864A194EEB8B00A67B56 /* midi_patch_manager.h in Headers */,
+				43AA864B194EEB8B00A67B56 /* midi_playlist_source.h in Headers */,
+				43AA864C194EEB8B00A67B56 /* midi_playlist.h in Headers */,
+				43AA864D194EEB8B00A67B56 /* midi_port.h in Headers */,
+				43AA864E194EEB8B00A67B56 /* midi_region.h in Headers */,
+				43AA864F194EEB8B00A67B56 /* midi_ring_buffer.h in Headers */,
+				43AA8650194EEB8B00A67B56 /* midi_source.h in Headers */,
+				43AA8651194EEB8B00A67B56 /* midi_state_tracker.h in Headers */,
+				43AA8652194EEB8B00A67B56 /* midi_stretch.h in Headers */,
+				43AA8653194EEB8B00A67B56 /* midi_track.h in Headers */,
+				43AA8654194EEB8B00A67B56 /* midi_ui.h in Headers */,
+				43AA8655194EEB8B00A67B56 /* midiport_manager.h in Headers */,
+				43AA8656194EEB8B00A67B56 /* mix.h in Headers */,
+				43AA8657194EEB8B00A67B56 /* monitor_processor.h in Headers */,
+				43AA8658194EEB8B00A67B56 /* movable.h in Headers */,
+				43AA8659194EEB8B00A67B56 /* msvc_libardour.h in Headers */,
+				43AA865A194EEB8B00A67B56 /* mtdm.h in Headers */,
+				43AA865B194EEB8B00A67B56 /* mute_master.h in Headers */,
+				43AA865C194EEB8B00A67B56 /* noise.h in Headers */,
+				43AA865D194EEB8B00A67B56 /* onset_detector.h in Headers */,
+				43AA865E194EEB8B00A67B56 /* operations.h in Headers */,
+				43AA865F194EEB8B00A67B56 /* pan_controllable.h in Headers */,
+				432859E71A10F415006C3E03 /* midi_scene_changer.h in Headers */,
+				43AA8660194EEB8B00A67B56 /* pannable.h in Headers */,
+				43AA8661194EEB8B00A67B56 /* panner_manager.h in Headers */,
+				43AA8662194EEB8B00A67B56 /* panner_shell.h in Headers */,
+				43AA8663194EEB8B00A67B56 /* panner.h in Headers */,
+				43AA8664194EEB8B00A67B56 /* pcm_utils.h in Headers */,
+				43AA8665194EEB8B00A67B56 /* peak.h in Headers */,
+				43AA8666194EEB8B00A67B56 /* pi_controller.h in Headers */,
+				43AA8667194EEB8B00A67B56 /* pitch.h in Headers */,
+				43AA8668194EEB8B00A67B56 /* playlist_factory.h in Headers */,
+				43AA8669194EEB8B00A67B56 /* playlist_source.h in Headers */,
+				43AA866A194EEB8B00A67B56 /* playlist.h in Headers */,
+				43AA866B194EEB8B00A67B56 /* plugin_insert.h in Headers */,
+				43AA866C194EEB8B00A67B56 /* plugin_manager.h in Headers */,
+				43AA866D194EEB8B00A67B56 /* plugin_types.h in Headers */,
+				43AA866E194EEB8B00A67B56 /* plugin.h in Headers */,
+				43AA866F194EEB8B00A67B56 /* port_engine.h in Headers */,
+				43AA8670194EEB8B00A67B56 /* port_insert.h in Headers */,
+				43AA8671194EEB8B00A67B56 /* port_manager.h in Headers */,
+				43AA8672194EEB8B00A67B56 /* port_set.h in Headers */,
+				43AA8673194EEB8B00A67B56 /* port.h in Headers */,
+				43AA8674194EEB8B00A67B56 /* process_thread.h in Headers */,
+				43AA8675194EEB8B00A67B56 /* processor.h in Headers */,
+				43AA8676194EEB8B00A67B56 /* profile.h in Headers */,
+				43AA8677194EEB8B00A67B56 /* progress.h in Headers */,
+				43AA8678194EEB8B00A67B56 /* proxy_controllable.h in Headers */,
+				43AA8679194EEB8B00A67B56 /* public_diskstream.h in Headers */,
+				43AA867A194EEB8B00A67B56 /* quantize.h in Headers */,
+				43AA867B194EEB8B00A67B56 /* rb_effect.h in Headers */,
+				43AA867C194EEB8B00A67B56 /* rc_configuration_vars.h in Headers */,
+				43AA867D194EEB8B00A67B56 /* rc_configuration.h in Headers */,
+				43AA867E194EEB8B00A67B56 /* readable.h in Headers */,
+				43AA867F194EEB8B00A67B56 /* recent_sessions.h in Headers */,
+				43AA8680194EEB8B00A67B56 /* region_factory.h in Headers */,
+				43AA8681194EEB8B00A67B56 /* region_sorters.h in Headers */,
+				43AA8682194EEB8B00A67B56 /* region.h in Headers */,
+				43AA8683194EEB8B00A67B56 /* resampled_source.h in Headers */,
+				43AA8684194EEB8B00A67B56 /* return.h in Headers */,
+				43AA8685194EEB8B00A67B56 /* reverse.h in Headers */,
+				43AA8686194EEB8B00A67B56 /* revision.h in Headers */,
+				43AA8687194EEB8B00A67B56 /* route_graph.h in Headers */,
+				43AA8688194EEB8B00A67B56 /* route_group_member.h in Headers */,
+				43AA8689194EEB8B00A67B56 /* route_group_specialized.h in Headers */,
+				43AA868A194EEB8B00A67B56 /* route_group.h in Headers */,
+				43AA868B194EEB8B00A67B56 /* route.h in Headers */,
+				43AA868C194EEB8B00A67B56 /* runtime_functions.h in Headers */,
+				43AA868D194EEB8B00A67B56 /* search_paths.h in Headers */,
+				43AA868E194EEB8B00A67B56 /* send.h in Headers */,
+				43AA868F194EEB8B00A67B56 /* session_configuration_vars.h in Headers */,
+				43AA8690194EEB8B00A67B56 /* session_configuration.h in Headers */,
+				43AA8691194EEB8B00A67B56 /* session_directory.h in Headers */,
+				43AA8692194EEB8B00A67B56 /* session_event.h in Headers */,
+				43AA8693194EEB8B00A67B56 /* session_handle.h in Headers */,
+				43AA8694194EEB8B00A67B56 /* session_metadata.h in Headers */,
+				43AA8695194EEB8B00A67B56 /* session_object.h in Headers */,
+				43AA8696194EEB8B00A67B56 /* session_playlist.h in Headers */,
+				43AA8697194EEB8B00A67B56 /* session_playlists.h in Headers */,
+				43AA8698194EEB8B00A67B56 /* session_route.h in Headers */,
+				43AA8699194EEB8B00A67B56 /* session_state_utils.h in Headers */,
+				43AA869A194EEB8B00A67B56 /* session_utils.h in Headers */,
+				43AA869B194EEB8B00A67B56 /* session.h in Headers */,
+				43AA869C194EEB8B00A67B56 /* silentfilesource.h in Headers */,
+				43AA869D194EEB8B00A67B56 /* slave.h in Headers */,
+				43AA869E194EEB8B00A67B56 /* smf_source.h in Headers */,
+				43AA869F194EEB8B00A67B56 /* sndfile_helpers.h in Headers */,
+				43AA86A0194EEB8B00A67B56 /* sndfileimportable.h in Headers */,
+				43AA86A1194EEB8B00A67B56 /* sndfilesource.h in Headers */,
+				43AA86A2194EEB8B00A67B56 /* soundseq.h in Headers */,
+				43AA86A3194EEB8B00A67B56 /* source_factory.h in Headers */,
+				43AA86A4194EEB8B00A67B56 /* source.h in Headers */,
+				43AA86A5194EEB8B00A67B56 /* speaker.h in Headers */,
+				43AA86A6194EEB8B00A67B56 /* speakers.h in Headers */,
+				43AA86A7194EEB8B00A67B56 /* spline.h in Headers */,
+				43AA86A8194EEB8B00A67B56 /* srcfilesource.h in Headers */,
+				43AA86A9194EEB8B00A67B56 /* stretch.h in Headers */,
+				43AA86AA194EEB8B00A67B56 /* strip_silence.h in Headers */,
+				43AA86AB194EEB8B00A67B56 /* system_exec.h in Headers */,
+				43AA86AC194EEB8B00A67B56 /* tape_file_matcher.h in Headers */,
+				43AA86AD194EEB8B00A67B56 /* template_utils.h in Headers */,
+				43AA86AE194EEB8B00A67B56 /* tempo_map_importer.h in Headers */,
+				43AA86AF194EEB8B00A67B56 /* tempo.h in Headers */,
+				43AA86B0194EEB8B00A67B56 /* thread_buffers.h in Headers */,
+				43AA86B1194EEB8B00A67B56 /* ticker.h in Headers */,
+				43AA86B2194EEB8B00A67B56 /* timecode.h in Headers */,
+				43AA86B3194EEB8B00A67B56 /* timefx_request.h in Headers */,
+				43AA86B4194EEB8B00A67B56 /* timestamps.h in Headers */,
+				43AA86B5194EEB8B00A67B56 /* track.h in Headers */,
+				43AA86B6194EEB8B00A67B56 /* transient_detector.h in Headers */,
+				43AA86B7194EEB8B00A67B56 /* trimmable.h in Headers */,
+				43AA86B8194EEB8B00A67B56 /* types.h in Headers */,
+				43AA86B9194EEB8B00A67B56 /* unknown_processor.h in Headers */,
+				43AA86BA194EEB8B00A67B56 /* uri_map.h in Headers */,
+				43AA86BB194EEB8B00A67B56 /* user_bundle.h in Headers */,
+				43AA86BC194EEB8B00A67B56 /* utils.h in Headers */,
+				43AA86BD194EEB8B00A67B56 /* version.h in Headers */,
+				43AA86BE194EEB8B00A67B56 /* vst_info_file.h in Headers */,
+				43AA86BF194EEB8B00A67B56 /* vst_plugin.h in Headers */,
+				43AA86C0194EEB8B00A67B56 /* vst_types.h in Headers */,
+				43AA86C1194EEB8B00A67B56 /* vumeterdsp.h in Headers */,
+				43AA86C2194EEB8B00A67B56 /* windows_vst_plugin.h in Headers */,
+				43AA86C3194EEB8B00A67B56 /* worker.h in Headers */,
+				43AA86C6194EEBAF00A67B56 /* aeffectx.h in Headers */,
+				43AA86D0194EEC1400A67B56 /* gettext.h in Headers */,
+				43AA86D1194EEC1400A67B56 /* lv2_evbuf.h in Headers */,
+				43AA86D2194EEC1400A67B56 /* rdff.h in Headers */,
+				432653E6194EF73C00BEFB46 /* amp.h in Headers */,
+				432653E7194EF73C00BEFB46 /* analyser.h in Headers */,
+				432653E8194EF73C00BEFB46 /* ardour.h in Headers */,
+				432653E9194EF73C00BEFB46 /* async_midi_port.h in Headers */,
+				432653EA194EF73C00BEFB46 /* audio_backend.h in Headers */,
+				432653EB194EF73C00BEFB46 /* audio_buffer.h in Headers */,
+				432653EC194EF73C00BEFB46 /* audio_diskstream.h in Headers */,
+				432653ED194EF73C00BEFB46 /* audio_library.h in Headers */,
+				432653EE194EF73C00BEFB46 /* audio_playlist_importer.h in Headers */,
+				432653EF194EF73C00BEFB46 /* audio_playlist_source.h in Headers */,
+				432653F0194EF73C00BEFB46 /* audio_port.h in Headers */,
+				432653F1194EF73C00BEFB46 /* audio_region_importer.h in Headers */,
+				432653F2194EF73C00BEFB46 /* audio_track.h in Headers */,
+				432653F3194EF73C00BEFB46 /* audio_track_importer.h in Headers */,
+				432653F4194EF73C00BEFB46 /* audio_unit.h in Headers */,
+				432653F5194EF73C00BEFB46 /* audioanalyser.h in Headers */,
+				432653F6194EF73C00BEFB46 /* audioengine.h in Headers */,
+				432653F7194EF73C00BEFB46 /* audiofile_tagger.h in Headers */,
+				432653F8194EF73C00BEFB46 /* audiofilesource.h in Headers */,
+				432653F9194EF73C00BEFB46 /* audioplaylist.h in Headers */,
+				432653FA194EF73C00BEFB46 /* audioregion.h in Headers */,
+				432653FB194EF73C00BEFB46 /* audiosource.h in Headers */,
+				432653FC194EF73C00BEFB46 /* auditioner.h in Headers */,
+				432653FD194EF73C00BEFB46 /* auto_bundle.h in Headers */,
+				432653FE194EF73C00BEFB46 /* automatable.h in Headers */,
+				432653FF194EF73C00BEFB46 /* automatable_sequence.h in Headers */,
+				43265400194EF73C00BEFB46 /* automation_control.h in Headers */,
+				43265401194EF73C00BEFB46 /* automation_list.h in Headers */,
+				43265402194EF73C00BEFB46 /* automation_watch.h in Headers */,
+				43265403194EF73C00BEFB46 /* beats_frames_converter.h in Headers */,
+				43265404194EF73C00BEFB46 /* broadcast_info.h in Headers */,
+				43265405194EF73C00BEFB46 /* buffer.h in Headers */,
+				43265406194EF73C00BEFB46 /* buffer_manager.h in Headers */,
+				43265407194EF73C00BEFB46 /* buffer_set.h in Headers */,
+				43265408194EF73C00BEFB46 /* bundle.h in Headers */,
+				43265409194EF73C00BEFB46 /* butler.h in Headers */,
+				4326540A194EF73C00BEFB46 /* caimportable.h in Headers */,
+				4326540B194EF73C00BEFB46 /* capturing_processor.h in Headers */,
+				4326540C194EF73C00BEFB46 /* chan_count.h in Headers */,
+				4326540D194EF73D00BEFB46 /* chan_mapping.h in Headers */,
+				4326540E194EF73D00BEFB46 /* click.h in Headers */,
+				4326540F194EF73D00BEFB46 /* comparable_shared_ptr.h in Headers */,
+				43265410194EF73D00BEFB46 /* configuration.h in Headers */,
+				43265411194EF73D00BEFB46 /* configuration_variable.h in Headers */,
+				43265412194EF73D00BEFB46 /* control_protocol_manager.h in Headers */,
+				43265413194EF73D00BEFB46 /* coreaudiosource.h in Headers */,
+				43265414194EF73D00BEFB46 /* cycle_timer.h in Headers */,
+				43265415194EF73D00BEFB46 /* cycles.h in Headers */,
+				43265416194EF73D00BEFB46 /* data_type.h in Headers */,
+				43265417194EF73D00BEFB46 /* dB.h in Headers */,
+				43265418194EF73D00BEFB46 /* debug.h in Headers */,
+				43265419194EF73D00BEFB46 /* delivery.h in Headers */,
+				4326541A194EF73D00BEFB46 /* directory_names.h in Headers */,
+				4326541B194EF73D00BEFB46 /* diskstream.h in Headers */,
+				4326541C194EF73D00BEFB46 /* element_import_handler.h in Headers */,
+				4326541D194EF73D00BEFB46 /* element_importer.h in Headers */,
+				4326541E194EF73D00BEFB46 /* engine_state_controller.h in Headers */,
+				4326541F194EF73D00BEFB46 /* event_type_map.h in Headers */,
+				43265420194EF73D00BEFB46 /* export_channel.h in Headers */,
+				43265421194EF73D00BEFB46 /* export_channel_configuration.h in Headers */,
+				43265422194EF73D00BEFB46 /* export_failed.h in Headers */,
+				43265423194EF73D00BEFB46 /* export_filename.h in Headers */,
+				43265424194EF73D00BEFB46 /* export_format_base.h in Headers */,
+				43265425194EF73D00BEFB46 /* export_format_compatibility.h in Headers */,
+				43265426194EF73D00BEFB46 /* export_format_manager.h in Headers */,
+				43265427194EF73D00BEFB46 /* export_format_specification.h in Headers */,
+				43265428194EF73D00BEFB46 /* export_formats.h in Headers */,
+				43265429194EF73D00BEFB46 /* export_graph_builder.h in Headers */,
+				4326542A194EF73D00BEFB46 /* export_handler.h in Headers */,
+				4326542B194EF73D00BEFB46 /* export_multiplication.h in Headers */,
+				4326542C194EF73D00BEFB46 /* export_pointers.h in Headers */,
+				4326542D194EF73D00BEFB46 /* export_preset.h in Headers */,
+				4326542E194EF73D00BEFB46 /* export_profile_manager.h in Headers */,
+				4326542F194EF73D00BEFB46 /* export_status.h in Headers */,
+				43265430194EF73D00BEFB46 /* export_timespan.h in Headers */,
+				43265431194EF73D00BEFB46 /* file_source.h in Headers */,
+				43265432194EF73D00BEFB46 /* filename_extensions.h in Headers */,
+				43265433194EF73D00BEFB46 /* filesystem_paths.h in Headers */,
+				43265434194EF73D00BEFB46 /* filter.h in Headers */,
+				43265435194EF73D00BEFB46 /* graph.h in Headers */,
+				43265436194EF73D00BEFB46 /* graphnode.h in Headers */,
+				43265437194EF73D00BEFB46 /* iec1ppmdsp.h in Headers */,
+				43265438194EF73D00BEFB46 /* iec2ppmdsp.h in Headers */,
+				43265439194EF73D00BEFB46 /* import_status.h in Headers */,
+				4326543A194EF73D00BEFB46 /* importable_source.h in Headers */,
+				4326543B194EF73D00BEFB46 /* instrument_info.h in Headers */,
+				4326543C194EF73D00BEFB46 /* internal_return.h in Headers */,
+				4326543D194EF73D00BEFB46 /* internal_send.h in Headers */,
+				4326543E194EF73D00BEFB46 /* interpolation.h in Headers */,
+				4326543F194EF73D00BEFB46 /* interthread_info.h in Headers */,
+				43265440194EF73D00BEFB46 /* io.h in Headers */,
+				43265441194EF73D00BEFB46 /* io_processor.h in Headers */,
+				43265442194EF73D00BEFB46 /* jack_utils.h in Headers */,
+				43265443194EF73D00BEFB46 /* kmeterdsp.h in Headers */,
+				43265444194EF73D00BEFB46 /* ladspa.h in Headers */,
+				43265445194EF73D00BEFB46 /* ladspa_plugin.h in Headers */,
+				43265446194EF73D00BEFB46 /* latent.h in Headers */,
+				43265447194EF73D00BEFB46 /* libardour_visibility.h in Headers */,
+				43265448194EF73D00BEFB46 /* linux_vst_support.h in Headers */,
+				43265449194EF73D00BEFB46 /* location.h in Headers */,
+				4326544A194EF73D00BEFB46 /* location_importer.h in Headers */,
+				4326544B194EF73D00BEFB46 /* logcurve.h in Headers */,
+				4326544C194EF73D00BEFB46 /* lv2_plugin.h in Headers */,
+				4326544D194EF73D00BEFB46 /* lxvst_plugin.h in Headers */,
+				4326544E194EF73D00BEFB46 /* meter.h in Headers */,
+				4326544F194EF73D00BEFB46 /* midi_automation_list_binder.h in Headers */,
+				43265450194EF73D00BEFB46 /* midi_buffer.h in Headers */,
+				43265451194EF73D00BEFB46 /* midi_diskstream.h in Headers */,
+				43265452194EF73D00BEFB46 /* midi_model.h in Headers */,
+				43265453194EF73D00BEFB46 /* midi_operator.h in Headers */,
+				43265454194EF73D00BEFB46 /* midi_patch_manager.h in Headers */,
+				43265455194EF73D00BEFB46 /* midi_playlist.h in Headers */,
+				43265456194EF73D00BEFB46 /* midi_playlist_source.h in Headers */,
+				43265457194EF73D00BEFB46 /* midi_port.h in Headers */,
+				43265458194EF73D00BEFB46 /* midi_region.h in Headers */,
+				43265459194EF73D00BEFB46 /* midi_ring_buffer.h in Headers */,
+				4326545A194EF73D00BEFB46 /* midi_source.h in Headers */,
+				4326545B194EF73D00BEFB46 /* midi_state_tracker.h in Headers */,
+				4326545C194EF73D00BEFB46 /* midi_stretch.h in Headers */,
+				4326545D194EF73D00BEFB46 /* midi_track.h in Headers */,
+				4326545E194EF73D00BEFB46 /* midi_ui.h in Headers */,
+				4326545F194EF73D00BEFB46 /* midiport_manager.h in Headers */,
+				43265460194EF73D00BEFB46 /* mix.h in Headers */,
+				43265461194EF73D00BEFB46 /* monitor_processor.h in Headers */,
+				43265462194EF73D00BEFB46 /* movable.h in Headers */,
+				43265463194EF73D00BEFB46 /* msvc_libardour.h in Headers */,
+				43265464194EF73D00BEFB46 /* mtdm.h in Headers */,
+				43265465194EF73D00BEFB46 /* mute_master.h in Headers */,
+				43265466194EF73D00BEFB46 /* noise.h in Headers */,
+				43265467194EF73D00BEFB46 /* onset_detector.h in Headers */,
+				43265468194EF73D00BEFB46 /* operations.h in Headers */,
+				43265469194EF73D00BEFB46 /* pan_controllable.h in Headers */,
+				4326546A194EF73D00BEFB46 /* pannable.h in Headers */,
+				4326546B194EF73D00BEFB46 /* panner.h in Headers */,
+				4326546C194EF73D00BEFB46 /* panner_manager.h in Headers */,
+				4326546D194EF73D00BEFB46 /* panner_shell.h in Headers */,
+				4326546E194EF73D00BEFB46 /* pcm_utils.h in Headers */,
+				4326546F194EF73D00BEFB46 /* peak.h in Headers */,
+				43265470194EF73D00BEFB46 /* pi_controller.h in Headers */,
+				43265471194EF73D00BEFB46 /* pitch.h in Headers */,
+				43265472194EF73D00BEFB46 /* playlist.h in Headers */,
+				43265473194EF73D00BEFB46 /* playlist_factory.h in Headers */,
+				43265474194EF73D00BEFB46 /* playlist_source.h in Headers */,
+				43265475194EF73D00BEFB46 /* plugin.h in Headers */,
+				43265476194EF73D00BEFB46 /* plugin_insert.h in Headers */,
+				43265477194EF73D00BEFB46 /* plugin_manager.h in Headers */,
+				43265478194EF73D00BEFB46 /* plugin_types.h in Headers */,
+				43265479194EF73D00BEFB46 /* port.h in Headers */,
+				4326547A194EF73D00BEFB46 /* port_engine.h in Headers */,
+				4326547B194EF73D00BEFB46 /* port_insert.h in Headers */,
+				4326547C194EF73D00BEFB46 /* port_manager.h in Headers */,
+				4326547D194EF73D00BEFB46 /* port_set.h in Headers */,
+				4326547E194EF73D00BEFB46 /* process_thread.h in Headers */,
+				4326547F194EF73D00BEFB46 /* processor.h in Headers */,
+				43265480194EF73D00BEFB46 /* profile.h in Headers */,
+				43265481194EF73D00BEFB46 /* progress.h in Headers */,
+				43265482194EF73D00BEFB46 /* proxy_controllable.h in Headers */,
+				43265483194EF73D00BEFB46 /* public_diskstream.h in Headers */,
+				43265484194EF73D00BEFB46 /* quantize.h in Headers */,
+				43265485194EF73D00BEFB46 /* rb_effect.h in Headers */,
+				43265486194EF73D00BEFB46 /* rc_configuration.h in Headers */,
+				43265487194EF73D00BEFB46 /* rc_configuration_vars.h in Headers */,
+				43265488194EF73D00BEFB46 /* readable.h in Headers */,
+				43265489194EF73D00BEFB46 /* recent_sessions.h in Headers */,
+				4326548A194EF73D00BEFB46 /* region.h in Headers */,
+				4326548B194EF73D00BEFB46 /* region_factory.h in Headers */,
+				4326548C194EF73D00BEFB46 /* region_sorters.h in Headers */,
+				4326548D194EF73D00BEFB46 /* resampled_source.h in Headers */,
+				4326548E194EF73D00BEFB46 /* return.h in Headers */,
+				4326548F194EF73D00BEFB46 /* reverse.h in Headers */,
+				43265490194EF73D00BEFB46 /* revision.h in Headers */,
+				43265491194EF73D00BEFB46 /* route.h in Headers */,
+				43265492194EF73D00BEFB46 /* route_graph.h in Headers */,
+				43265493194EF73D00BEFB46 /* route_group.h in Headers */,
+				43265494194EF73D00BEFB46 /* route_group_member.h in Headers */,
+				43265495194EF73D00BEFB46 /* route_group_specialized.h in Headers */,
+				43265496194EF73D00BEFB46 /* runtime_functions.h in Headers */,
+				43265497194EF73D00BEFB46 /* search_paths.h in Headers */,
+				43265498194EF73D00BEFB46 /* send.h in Headers */,
+				43265499194EF73D00BEFB46 /* session.h in Headers */,
+				4326549A194EF73D00BEFB46 /* session_configuration.h in Headers */,
+				4326549B194EF73D00BEFB46 /* session_configuration_vars.h in Headers */,
+				4326549C194EF73D00BEFB46 /* session_directory.h in Headers */,
+				4326549D194EF73D00BEFB46 /* session_event.h in Headers */,
+				4326549E194EF73D00BEFB46 /* session_handle.h in Headers */,
+				4326549F194EF73D00BEFB46 /* session_metadata.h in Headers */,
+				432654A0194EF73D00BEFB46 /* session_object.h in Headers */,
+				432859E91A10F415006C3E03 /* soundcloud_upload.h in Headers */,
+				432654A1194EF73D00BEFB46 /* session_playlist.h in Headers */,
+				432654A2194EF73D00BEFB46 /* session_playlists.h in Headers */,
+				432654A3194EF73D00BEFB46 /* session_route.h in Headers */,
+				432654A4194EF73D00BEFB46 /* session_state_utils.h in Headers */,
+				432654A5194EF73D00BEFB46 /* session_utils.h in Headers */,
+				432654A6194EF73D00BEFB46 /* silentfilesource.h in Headers */,
+				432654A7194EF73D00BEFB46 /* slave.h in Headers */,
+				432654A8194EF73D00BEFB46 /* smf_source.h in Headers */,
+				432654A9194EF73D00BEFB46 /* sndfile_helpers.h in Headers */,
+				432654AA194EF73D00BEFB46 /* sndfileimportable.h in Headers */,
+				432654AB194EF73D00BEFB46 /* sndfilesource.h in Headers */,
+				432654AC194EF73D00BEFB46 /* soundseq.h in Headers */,
+				432654AD194EF73D00BEFB46 /* source.h in Headers */,
+				432654AE194EF73D00BEFB46 /* source_factory.h in Headers */,
+				432654AF194EF73D00BEFB46 /* speaker.h in Headers */,
+				432654B0194EF73D00BEFB46 /* speakers.h in Headers */,
+				432654B1194EF73D00BEFB46 /* spline.h in Headers */,
+				432654B2194EF73D00BEFB46 /* srcfilesource.h in Headers */,
+				432654B3194EF73D00BEFB46 /* stretch.h in Headers */,
+				432654B4194EF73D00BEFB46 /* strip_silence.h in Headers */,
+				432654B5194EF73D00BEFB46 /* system_exec.h in Headers */,
+				432654B6194EF73D00BEFB46 /* tape_file_matcher.h in Headers */,
+				432654B7194EF73D00BEFB46 /* template_utils.h in Headers */,
+				432654B8194EF73D00BEFB46 /* tempo.h in Headers */,
+				432654B9194EF73D00BEFB46 /* tempo_map_importer.h in Headers */,
+				432654BA194EF73D00BEFB46 /* thread_buffers.h in Headers */,
+				432654BB194EF73D00BEFB46 /* ticker.h in Headers */,
+				432654BC194EF73D00BEFB46 /* timecode.h in Headers */,
+				432654BD194EF73D00BEFB46 /* timefx_request.h in Headers */,
+				432654BE194EF73D00BEFB46 /* timestamps.h in Headers */,
+				432654BF194EF73D00BEFB46 /* track.h in Headers */,
+				432654C0194EF73D00BEFB46 /* transient_detector.h in Headers */,
+				432654C1194EF73D00BEFB46 /* trimmable.h in Headers */,
+				432654C2194EF73D00BEFB46 /* types.h in Headers */,
+				432654C3194EF73D00BEFB46 /* unknown_processor.h in Headers */,
+				432654C4194EF73D00BEFB46 /* uri_map.h in Headers */,
+				432654C5194EF73D00BEFB46 /* user_bundle.h in Headers */,
+				432654C6194EF73D00BEFB46 /* utils.h in Headers */,
+				432654C7194EF73D00BEFB46 /* version.h in Headers */,
+				432654C8194EF73D00BEFB46 /* aeffectx.h in Headers */,
+				432654C9194EF73D00BEFB46 /* vst_info_file.h in Headers */,
+				432654CA194EF73D00BEFB46 /* vst_plugin.h in Headers */,
+				432654CB194EF73D00BEFB46 /* vst_types.h in Headers */,
+				432654CC194EF73D00BEFB46 /* vumeterdsp.h in Headers */,
+				432654CD194EF73D00BEFB46 /* windows_vst_plugin.h in Headers */,
+				432654CE194EF73D00BEFB46 /* worker.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		43AA82A8194EEAAF00A67B56 /* libardour */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 43AA82AA194EEAAF00A67B56 /* Build configuration list for PBXNativeTarget "libardour" */;
+			buildPhases = (
+				43AA82A5194EEAAF00A67B56 /* Sources */,
+				43AA82A6194EEAAF00A67B56 /* Frameworks */,
+				43AA82A7194EEAAF00A67B56 /* Headers */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = libardour;
+			productName = ardour;
+			productReference = 43AA82A9194EEAAF00A67B56 /* liblibardour.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		43AA8296194EEA6F00A67B56 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0460;
+				ORGANIZATIONNAME = Waves;
+			};
+			buildConfigurationList = 43AA8299194EEA6F00A67B56 /* Build configuration list for PBXProject "libardour" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 43AA8295194EEA6F00A67B56;
+			productRefGroup = 43AA829F194EEA6F00A67B56 /* Products */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = 432859EC1A10F436006C3E03 /* Products */;
+					ProjectRef = 432859EB1A10F436006C3E03 /* libardour.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				43AA82A8194EEAAF00A67B56 /* libardour */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		43AA82A5194EEAAF00A67B56 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				43AA8383194EEB2600A67B56 /* amp.cc in Sources */,
+				43AA8384194EEB2600A67B56 /* analyser.cc in Sources */,
+				43AA8385194EEB2600A67B56 /* async_midi_port.cc in Sources */,
+				43AA8386194EEB2600A67B56 /* audio_buffer.cc in Sources */,
+				43AA8387194EEB2600A67B56 /* audio_diskstream.cc in Sources */,
+				43AA8388194EEB2600A67B56 /* audio_library.cc in Sources */,
+				43AA8389194EEB2600A67B56 /* audio_playlist_importer.cc in Sources */,
+				43AA838A194EEB2600A67B56 /* audio_playlist_source.cc in Sources */,
+				43AA838B194EEB2600A67B56 /* audio_playlist.cc in Sources */,
+				43AA838C194EEB2600A67B56 /* audio_port.cc in Sources */,
+				43AA838D194EEB2600A67B56 /* audio_region_importer.cc in Sources */,
+				43AA838E194EEB2600A67B56 /* audio_track_importer.cc in Sources */,
+				43AA838F194EEB2600A67B56 /* audio_track.cc in Sources */,
+				43AA8390194EEB2600A67B56 /* audio_unit.cc in Sources */,
+				43AA8391194EEB2600A67B56 /* audioanalyser.cc in Sources */,
+				43AA8392194EEB2600A67B56 /* audioengine.cc in Sources */,
+				43AA8393194EEB2600A67B56 /* audiofile_tagger.cc in Sources */,
+				43AA8394194EEB2600A67B56 /* audiofilesource.cc in Sources */,
+				43AA8395194EEB2600A67B56 /* audioregion.cc in Sources */,
+				43AA8396194EEB2600A67B56 /* audiosource.cc in Sources */,
+				43AA8397194EEB2600A67B56 /* auditioner.cc in Sources */,
+				43AA8398194EEB2600A67B56 /* auto_bundle.cc in Sources */,
+				43AA8399194EEB2600A67B56 /* automatable.cc in Sources */,
+				43AA839A194EEB2600A67B56 /* automation_control.cc in Sources */,
+				43AA839B194EEB2600A67B56 /* automation_list.cc in Sources */,
+				43AA839C194EEB2600A67B56 /* automation_watch.cc in Sources */,
+				43AA839D194EEB2600A67B56 /* automation.cc in Sources */,
+				43AA839E194EEB2600A67B56 /* beats_frames_converter.cc in Sources */,
+				43AA839F194EEB2600A67B56 /* broadcast_info.cc in Sources */,
+				43AA83A0194EEB2600A67B56 /* buffer_manager.cc in Sources */,
+				43AA83A1194EEB2600A67B56 /* buffer_set.cc in Sources */,
+				43AA83A2194EEB2600A67B56 /* buffer.cc in Sources */,
+				43AA83A3194EEB2600A67B56 /* bundle.cc in Sources */,
+				43AA83A4194EEB2600A67B56 /* butler.cc in Sources */,
+				43AA83A5194EEB2600A67B56 /* caimportable.cc in Sources */,
+				43AA83A6194EEB2600A67B56 /* capturing_processor.cc in Sources */,
+				43AA83A7194EEB2600A67B56 /* chan_count.cc in Sources */,
+				43AA83A8194EEB2600A67B56 /* chan_mapping.cc in Sources */,
+				43AA83A9194EEB2600A67B56 /* config_text.cc in Sources */,
+				43AA83AA194EEB2600A67B56 /* configuration.cc in Sources */,
+				43AA83AB194EEB2600A67B56 /* control_protocol_manager.cc in Sources */,
+				43AA83AC194EEB2600A67B56 /* coreaudiosource.cc in Sources */,
+				43AA83AD194EEB2600A67B56 /* cycle_timer.cc in Sources */,
+				43AA83AE194EEB2600A67B56 /* data_type.cc in Sources */,
+				43AA83AF194EEB2600A67B56 /* debug.cc in Sources */,
+				43AA83B0194EEB2600A67B56 /* default_click.cc in Sources */,
+				43AA83B1194EEB2600A67B56 /* delivery.cc in Sources */,
+				43AA83B2194EEB2600A67B56 /* directory_names.cc in Sources */,
+				43AA83B3194EEB2600A67B56 /* diskstream.cc in Sources */,
+				43AA83B4194EEB2600A67B56 /* element_import_handler.cc in Sources */,
+				43AA83B5194EEB2600A67B56 /* element_importer.cc in Sources */,
+				43AA83B6194EEB2600A67B56 /* engine_slave.cc in Sources */,
+				43AA83B7194EEB2600A67B56 /* engine_state_controller.cc in Sources */,
+				43AA83B8194EEB2600A67B56 /* enums.cc in Sources */,
+				43AA83B9194EEB2600A67B56 /* event_type_map.cc in Sources */,
+				43AA83BA194EEB2600A67B56 /* export_channel_configuration.cc in Sources */,
+				43AA83BB194EEB2600A67B56 /* export_channel.cc in Sources */,
+				43AA83BC194EEB2600A67B56 /* export_failed.cc in Sources */,
+				43AA83BD194EEB2600A67B56 /* export_filename.cc in Sources */,
+				43AA83BE194EEB2600A67B56 /* export_format_base.cc in Sources */,
+				43AA83BF194EEB2600A67B56 /* export_format_manager.cc in Sources */,
+				43AA83C0194EEB2600A67B56 /* export_format_specification.cc in Sources */,
+				43AA83C1194EEB2600A67B56 /* export_formats.cc in Sources */,
+				43AA83C2194EEB2600A67B56 /* export_graph_builder.cc in Sources */,
+				43AA83C3194EEB2600A67B56 /* export_handler.cc in Sources */,
+				43AA83C4194EEB2600A67B56 /* export_multiplication.cc in Sources */,
+				43AA83C5194EEB2600A67B56 /* export_preset.cc in Sources */,
+				43AA83C6194EEB2600A67B56 /* export_profile_manager.cc in Sources */,
+				432859F71A10F436006C3E03 /* soundcloud_upload.cc in Sources */,
+				43AA83C7194EEB2600A67B56 /* export_status.cc in Sources */,
+				43AA83C8194EEB2600A67B56 /* export_timespan.cc in Sources */,
+				43AA83C9194EEB2600A67B56 /* file_source.cc in Sources */,
+				432859F31A10F436006C3E03 /* midi_scene_change.cc in Sources */,
+				43AA83CA194EEB2600A67B56 /* filename_extensions.cc in Sources */,
+				43AA83CB194EEB2600A67B56 /* filesystem_paths.cc in Sources */,
+				43AA83CC194EEB2600A67B56 /* filter.cc in Sources */,
+				43AA83CD194EEB2600A67B56 /* find_session.cc in Sources */,
+				43AA83CE194EEB2600A67B56 /* globals.cc in Sources */,
+				43AA83CF194EEB2600A67B56 /* graph.cc in Sources */,
+				43AA83D0194EEB2600A67B56 /* graphnode.cc in Sources */,
+				43AA83D1194EEB2600A67B56 /* iec1ppmdsp.cc in Sources */,
+				43AA83D2194EEB2600A67B56 /* iec2ppmdsp.cc in Sources */,
+				43AA83D3194EEB2600A67B56 /* import.cc in Sources */,
+				43AA83D4194EEB2600A67B56 /* instrument_info.cc in Sources */,
+				43AA83D5194EEB2600A67B56 /* internal_return.cc in Sources */,
+				43AA83D6194EEB2600A67B56 /* internal_send.cc in Sources */,
+				43AA83D7194EEB2600A67B56 /* interpolation.cc in Sources */,
+				43AA83D8194EEB2600A67B56 /* io_processor.cc in Sources */,
+				43AA83D9194EEB2600A67B56 /* io.cc in Sources */,
+				43AA83DA194EEB2600A67B56 /* kmeterdsp.cc in Sources */,
+				43AA83DB194EEB2600A67B56 /* ladspa_plugin.cc in Sources */,
+				43AA83DC194EEB2600A67B56 /* linux_vst_support.cc in Sources */,
+				43AA83DD194EEB2600A67B56 /* location_importer.cc in Sources */,
+				43AA83DE194EEB2600A67B56 /* location.cc in Sources */,
+				43AA83DF194EEB2600A67B56 /* ltc_slave.cc in Sources */,
+				43AA83E0194EEB2600A67B56 /* lv2_evbuf.c in Sources */,
+				43AA83E1194EEB2600A67B56 /* lv2_plugin.cc in Sources */,
+				43AA83E2194EEB2600A67B56 /* lxvst_plugin.cc in Sources */,
+				43AA83E3194EEB2600A67B56 /* meter.cc in Sources */,
+				43AA83E4194EEB2600A67B56 /* midi_automation_list_binder.cc in Sources */,
+				43AA83E5194EEB2600A67B56 /* midi_buffer.cc in Sources */,
+				43AA83E6194EEB2600A67B56 /* midi_clock_slave.cc in Sources */,
+				43AA83E7194EEB2600A67B56 /* midi_diskstream.cc in Sources */,
+				43AA83E8194EEB2600A67B56 /* midi_model.cc in Sources */,
+				43AA83E9194EEB2600A67B56 /* midi_patch_manager.cc in Sources */,
+				43AA83EA194EEB2600A67B56 /* midi_playlist_source.cc in Sources */,
+				43AA83EB194EEB2600A67B56 /* midi_playlist.cc in Sources */,
+				43AA83EC194EEB2600A67B56 /* midi_port.cc in Sources */,
+				43AA83ED194EEB2600A67B56 /* midi_region.cc in Sources */,
+				43AA83EE194EEB2600A67B56 /* midi_ring_buffer.cc in Sources */,
+				43AA83EF194EEB2600A67B56 /* midi_source.cc in Sources */,
+				43AA83F0194EEB2600A67B56 /* midi_state_tracker.cc in Sources */,
+				43AA83F1194EEB2600A67B56 /* midi_stretch.cc in Sources */,
+				43AA83F2194EEB2600A67B56 /* midi_track.cc in Sources */,
+				43AA83F3194EEB2600A67B56 /* midi_ui.cc in Sources */,
+				43AA83F4194EEB2600A67B56 /* midiport_manager.cc in Sources */,
+				43AA83F5194EEB2600A67B56 /* mix.cc in Sources */,
+				43AA83F6194EEB2600A67B56 /* monitor_processor.cc in Sources */,
+				43AA83F7194EEB2600A67B56 /* mtc_slave.cc in Sources */,
+				43AA83F8194EEB2600A67B56 /* mtdm.cc in Sources */,
+				43AA83F9194EEB2600A67B56 /* mute_master.cc in Sources */,
+				43AA83FA194EEB2600A67B56 /* onset_detector.cc in Sources */,
+				43AA83FB194EEB2600A67B56 /* operations.cc in Sources */,
+				43AA83FC194EEB2600A67B56 /* pan_controllable.cc in Sources */,
+				43AA83FD194EEB2600A67B56 /* pannable.cc in Sources */,
+				43AA83FE194EEB2600A67B56 /* panner_manager.cc in Sources */,
+				43AA83FF194EEB2600A67B56 /* panner_shell.cc in Sources */,
+				43AA8400194EEB2600A67B56 /* panner.cc in Sources */,
+				43AA8401194EEB2600A67B56 /* pcm_utils.cc in Sources */,
+				43AA8402194EEB2600A67B56 /* pi_controller.cc in Sources */,
+				43AA8403194EEB2600A67B56 /* playlist_factory.cc in Sources */,
+				43AA8404194EEB2600A67B56 /* playlist_source.cc in Sources */,
+				43AA8405194EEB2600A67B56 /* playlist.cc in Sources */,
+				43AA8406194EEB2600A67B56 /* plugin_insert.cc in Sources */,
+				43AA8407194EEB2600A67B56 /* plugin_manager.cc in Sources */,
+				43AA8408194EEB2600A67B56 /* plugin.cc in Sources */,
+				43AA8409194EEB2600A67B56 /* port_insert.cc in Sources */,
+				43AA840A194EEB2600A67B56 /* port_manager.cc in Sources */,
+				43AA840B194EEB2600A67B56 /* port_set.cc in Sources */,
+				43AA840C194EEB2600A67B56 /* port.cc in Sources */,
+				43AA840D194EEB2600A67B56 /* process_thread.cc in Sources */,
+				43AA840E194EEB2600A67B56 /* processor.cc in Sources */,
+				43AA840F194EEB2600A67B56 /* progress.cc in Sources */,
+				43AA8410194EEB2600A67B56 /* quantize.cc in Sources */,
+				43AA8411194EEB2600A67B56 /* rb_effect.cc in Sources */,
+				43AA8412194EEB2600A67B56 /* rc_configuration.cc in Sources */,
+				43AA8413194EEB2600A67B56 /* rdff.c in Sources */,
+				43AA8414194EEB2600A67B56 /* recent_sessions.cc in Sources */,
+				43AA8415194EEB2600A67B56 /* region_factory.cc in Sources */,
+				43AA8416194EEB2600A67B56 /* region.cc in Sources */,
+				43AA8417194EEB2600A67B56 /* resampled_source.cc in Sources */,
+				43AA8418194EEB2600A67B56 /* return.cc in Sources */,
+				43AA8419194EEB2600A67B56 /* reverse.cc in Sources */,
+				43AA841A194EEB2600A67B56 /* revision.cc in Sources */,
+				43AA841B194EEB2600A67B56 /* route_graph.cc in Sources */,
+				43AA841C194EEB2600A67B56 /* route_group_member.cc in Sources */,
+				43AA841D194EEB2600A67B56 /* route_group.cc in Sources */,
+				43AA841E194EEB2600A67B56 /* route.cc in Sources */,
+				43AA841F194EEB2600A67B56 /* search_paths.cc in Sources */,
+				43AA8420194EEB2600A67B56 /* send.cc in Sources */,
+				43AA8421194EEB2600A67B56 /* session_butler.cc in Sources */,
+				43AA8422194EEB2600A67B56 /* session_click.cc in Sources */,
+				43AA8423194EEB2600A67B56 /* session_command.cc in Sources */,
+				43AA8424194EEB2600A67B56 /* session_configuration.cc in Sources */,
+				43AA8425194EEB2600A67B56 /* session_directory.cc in Sources */,
+				43AA8426194EEB2600A67B56 /* session_events.cc in Sources */,
+				43AA8427194EEB2600A67B56 /* session_export.cc in Sources */,
+				43AA8428194EEB2600A67B56 /* session_handle.cc in Sources */,
+				43AA8429194EEB2600A67B56 /* session_ltc.cc in Sources */,
+				43AA842A194EEB2600A67B56 /* session_metadata.cc in Sources */,
+				43AA842B194EEB2600A67B56 /* session_midi.cc in Sources */,
+				43AA842C194EEB2600A67B56 /* session_object.cc in Sources */,
+				43AA842D194EEB2600A67B56 /* session_playlists.cc in Sources */,
+				43AA842E194EEB2600A67B56 /* session_process.cc in Sources */,
+				43AA842F194EEB2600A67B56 /* session_rtevents.cc in Sources */,
+				43AA8430194EEB2600A67B56 /* session_state_utils.cc in Sources */,
+				43AA8431194EEB2600A67B56 /* session_state.cc in Sources */,
+				43AA8432194EEB2600A67B56 /* session_time.cc in Sources */,
+				43AA8433194EEB2600A67B56 /* session_transport.cc in Sources */,
+				43AA8434194EEB2600A67B56 /* session_vst.cc in Sources */,
+				43AA8435194EEB2600A67B56 /* session.cc in Sources */,
+				43AA8436194EEB2600A67B56 /* slave.cc in Sources */,
+				43AA8437194EEB2600A67B56 /* smf_source.cc in Sources */,
+				43AA8438194EEB2600A67B56 /* sndfile_helpers.cc in Sources */,
+				43AA8439194EEB2600A67B56 /* sndfileimportable.cc in Sources */,
+				43AA843A194EEB2600A67B56 /* sndfilesource.cc in Sources */,
+				43AA843B194EEB2600A67B56 /* source_factory.cc in Sources */,
+				43AA843C194EEB2600A67B56 /* source.cc in Sources */,
+				43AA843D194EEB2600A67B56 /* speakers.cc in Sources */,
+				432859F61A10F436006C3E03 /* scene_change.cc in Sources */,
+				43AA843E194EEB2600A67B56 /* srcfilesource.cc in Sources */,
+				43AA843F194EEB2600A67B56 /* sse_functions_64bit.s in Sources */,
+				43AA8440194EEB2600A67B56 /* sse_functions_xmm.cc in Sources */,
+				43AA8441194EEB2600A67B56 /* sse_functions.s in Sources */,
+				43AA8442194EEB2600A67B56 /* st_pitch.cc in Sources */,
+				43AA8443194EEB2600A67B56 /* st_stretch.cc in Sources */,
+				43AA8444194EEB2600A67B56 /* strip_silence.cc in Sources */,
+				43AA8445194EEB2600A67B56 /* system_exec.cc in Sources */,
+				43AA8446194EEB2600A67B56 /* tape_file_matcher.cc in Sources */,
+				43AA8447194EEB2600A67B56 /* template_utils.cc in Sources */,
+				43AA8448194EEB2600A67B56 /* tempo_map_importer.cc in Sources */,
+				43AA8449194EEB2600A67B56 /* tempo.cc in Sources */,
+				43AA844A194EEB2600A67B56 /* thread_buffers.cc in Sources */,
+				43AA844B194EEB2600A67B56 /* ticker.cc in Sources */,
+				43AA844C194EEB2600A67B56 /* track.cc in Sources */,
+				43AA844D194EEB2600A67B56 /* transient_detector.cc in Sources */,
+				43AA844E194EEB2600A67B56 /* unknown_processor.cc in Sources */,
+				43AA844F194EEB2600A67B56 /* uri_map.cc in Sources */,
+				43AA8450194EEB2600A67B56 /* user_bundle.cc in Sources */,
+				43AA8451194EEB2600A67B56 /* utils.cc in Sources */,
+				43AA8452194EEB2600A67B56 /* version.cc in Sources */,
+				43AA8453194EEB2600A67B56 /* vst_info_file.cc in Sources */,
+				43AA8454194EEB2600A67B56 /* vst_plugin.cc in Sources */,
+				43AA8455194EEB2600A67B56 /* vumeterdsp.cc in Sources */,
+				43AA8456194EEB2600A67B56 /* windows_vst_plugin.cc in Sources */,
+				43AA8457194EEB2600A67B56 /* worker.cc in Sources */,
+				43AA84B9194EEB5F00A67B56 /* audio_engine_test.cc in Sources */,
+				43AA84BB194EEB5F00A67B56 /* audio_region_read_test.cc in Sources */,
+				43AA84BD194EEB5F00A67B56 /* audio_region_test.cc in Sources */,
+				432859F51A10F436006C3E03 /* mididm.cc in Sources */,
+				43AA84BF194EEB5F00A67B56 /* automation_list_property_test.cc in Sources */,
+				43AA84C1194EEB5F00A67B56 /* bbt_test.cc in Sources */,
+				43AA84C3194EEB5F00A67B56 /* combine_regions_test.cc in Sources */,
+				43AA84C5194EEB5F00A67B56 /* control_surfaces_test.cc in Sources */,
+				43AA84C7194EEB5F00A67B56 /* dummy_lxvst.cc in Sources */,
+				43AA84C8194EEB5F00A67B56 /* framepos_minus_beats_test.cc in Sources */,
+				43AA84CA194EEB5F00A67B56 /* framepos_plus_beats_test.cc in Sources */,
+				43AA84CC194EEB5F00A67B56 /* framewalk_to_beats_test.cc in Sources */,
+				43AA84CE194EEB5F00A67B56 /* interpolation_test.cc in Sources */,
+				43AA84D0194EEB5F00A67B56 /* jack_utils_test.cc in Sources */,
+				43AA84D2194EEB5F00A67B56 /* load_session.cc in Sources */,
+				43AA84D3194EEB5F00A67B56 /* load_sessions_test.cc in Sources */,
+				43AA84D5194EEB5F00A67B56 /* midi_clock_slave_test.cc in Sources */,
+				43AA84D7194EEB5F00A67B56 /* mtdm_test.cc in Sources */,
+				43AA84D9194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc in Sources */,
+				43AA84DB194EEB5F00A67B56 /* playlist_layering_test.cc in Sources */,
+				43AA84DD194EEB5F00A67B56 /* playlist_read_test.cc in Sources */,
+				43AA84DF194EEB5F00A67B56 /* plugins_test.cc in Sources */,
+				43AA84E1194EEB5F00A67B56 /* load_session.cc in Sources */,
+				43AA84E2194EEB5F00A67B56 /* lots_of_regions.cc in Sources */,
+				432859F41A10F436006C3E03 /* midi_scene_changer.cc in Sources */,
+				43AA84E3194EEB5F00A67B56 /* runpc.cc in Sources */,
+				43AA84E4194EEB5F00A67B56 /* region_naming_test.cc in Sources */,
+				43AA84E6194EEB5F00A67B56 /* resampled_source_test.cc in Sources */,
+				43AA84E8194EEB5F00A67B56 /* session_test.cc in Sources */,
+				43AA84EA194EEB5F00A67B56 /* tempo_test.cc in Sources */,
+				43AA84EC194EEB5F00A67B56 /* test_common.cc in Sources */,
+				43AA84EE194EEB5F00A67B56 /* test_needing_session.cc in Sources */,
+				43AA84F0194EEB5F00A67B56 /* test_util.cc in Sources */,
+				43AA84F2194EEB5F00A67B56 /* testrunner.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		43AA82A0194EEA6F00A67B56 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		43AA82A1194EEA6F00A67B56 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		43AA82AB194EEAAF00A67B56 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				EXECUTABLE_PREFIX = lib;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		43AA82AC194EEAAF00A67B56 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				EXECUTABLE_PREFIX = lib;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		43AA8299194EEA6F00A67B56 /* Build configuration list for PBXProject "libardour" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				43AA82A0194EEA6F00A67B56 /* Debug */,
+				43AA82A1194EEA6F00A67B56 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		43AA82AA194EEAAF00A67B56 /* Build configuration list for PBXNativeTarget "libardour" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				43AA82AB194EEAAF00A67B56 /* Debug */,
+				43AA82AC194EEAAF00A67B56 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 43AA8296194EEA6F00A67B56 /* Project object */;
+}
diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc
index b1b09e4..50ff7b7 100644
--- a/libs/ardour/midi_buffer.cc
+++ b/libs/ardour/midi_buffer.cc
@@ -44,7 +44,7 @@ MidiBuffer::MidiBuffer(size_t capacity)
 
 MidiBuffer::~MidiBuffer()
 {
-	free(_data);
+	cache_aligned_free(_data);
 }
 
 void
@@ -60,7 +60,7 @@ MidiBuffer::resize(size_t size)
 		return;
 	}
 
-	free (_data);
+	cache_aligned_free (_data);
 
 	cache_aligned_malloc ((void**) &_data, size);
 
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index a2a80f7..229c0ad 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -784,7 +784,7 @@ MidiDiskstream::read (framepos_t& start, framecnt_t dur, bool reversed)
 }
 
 int
-MidiDiskstream::do_refill_with_alloc ()
+MidiDiskstream::_do_refill_with_alloc (bool /* partial_fill */)
 {
 	return do_refill();
 }
diff --git a/libs/ardour/midi_scene_change.cc b/libs/ardour/midi_scene_change.cc
index 5e9394d..c10ca74 100644
--- a/libs/ardour/midi_scene_change.cc
+++ b/libs/ardour/midi_scene_change.cc
@@ -156,3 +156,23 @@ MIDISceneChange::operator==(const MIDISceneChange& other) const
 		_bank == other._bank &&
 		_channel == other._channel;
 }
+
+void
+MIDISceneChange::set_channel (int channel)
+{
+        _channel = channel;
+}
+
+void
+MIDISceneChange::set_program (int program)
+{
+        _program = program;
+}
+
+void
+MIDISceneChange::set_bank (int bank)
+{
+        _bank = bank;
+}
+      
+
diff --git a/libs/ardour/midi_scene_changer.cc b/libs/ardour/midi_scene_changer.cc
index 8e2347a..75d5581 100644
--- a/libs/ardour/midi_scene_changer.cc
+++ b/libs/ardour/midi_scene_changer.cc
@@ -96,6 +96,10 @@ MIDISceneChanger::gather (const Locations::LocationList& locations)
 void
 MIDISceneChanger::rt_deliver (MidiBuffer& mbuf, framepos_t when, boost::shared_ptr<MIDISceneChange> msc)
 {
+        if (!msc->active()) {
+                return;
+        }
+
 	uint8_t buf[4];
 	size_t cnt;
 
@@ -121,6 +125,10 @@ MIDISceneChanger::rt_deliver (MidiBuffer& mbuf, framepos_t when, boost::shared_p
 void
 MIDISceneChanger::non_rt_deliver (boost::shared_ptr<MIDISceneChange> msc)
 {
+        if (!msc->active()) {
+                return;
+        }
+
 	uint8_t buf[4];
 	size_t cnt;
 	boost::shared_ptr<AsyncMIDIPort> aport = boost::dynamic_pointer_cast<AsyncMIDIPort>(output_port);
@@ -273,19 +281,25 @@ MIDISceneChanger::program_change_input (MIDI::Parser& parser, MIDI::byte program
 	last_program_message_time = time;
 
 	if (!recording()) {
+
 		MIDIInputActivity (); /* EMIT SIGNAL */
-		jump_to (input_port->channel (channel)->bank(), program);
+        
+		int bank = -1;
+		if (have_seen_bank_changes) {
+			bank = input_port->channel (channel)->bank();
+		}
+        
+		jump_to (bank, program);
 		return;
 	}
 
 	Locations* locations (_session.locations ());
 	Location* loc;
 	bool new_mark = false;
-	framecnt_t slop = (framecnt_t) floor ((Config->get_inter_scene_gap_msecs() / 1000.0) * _session.frame_rate());
 
 	/* check for marker at current location */
 
-	loc = locations->mark_at (time, slop);
+	loc = locations->mark_at (time, Config->get_inter_scene_gap_frames());
 
 	if (!loc) {
 		/* create a new marker at the desired position */
@@ -301,12 +315,9 @@ MIDISceneChanger::program_change_input (MIDI::Parser& parser, MIDI::byte program
 		new_mark = true;
 	}
 
-	unsigned short bank;
-
+	int bank = -1;
 	if (have_seen_bank_changes) {
 		bank = input_port->channel (channel)->bank();
-	} else {
-		bank = -1;
 	}
 
 	MIDISceneChange* msc =new MIDISceneChange (channel, bank, program & 0x7f);
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 487eb20..e48d516 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -47,6 +47,7 @@
 #include "ardour/parameter_types.h"
 #include "ardour/port.h"
 #include "ardour/processor.h"
+#include "ardour/profile.h"
 #include "ardour/session.h"
 #include "ardour/session_playlists.h"
 #include "ardour/utils.h"
@@ -135,7 +136,11 @@ MidiTrack::set_diskstream (boost::shared_ptr<Diskstream> ds)
 	mds->reset_tracker ();	
 
 	_diskstream->set_track (this);
-	_diskstream->set_destructive (_mode == Destructive);
+	if (Profile->get_trx()) {
+		_diskstream->set_destructive (false);
+	} else {
+		_diskstream->set_destructive (_mode == Destructive);
+	}
 	_diskstream->set_record_enabled (false);
 
 	_diskstream_data_recorded_connection.disconnect ();
@@ -351,7 +356,7 @@ MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame
 	if (!lm.locked()) {
 		boost::shared_ptr<MidiDiskstream> diskstream = midi_diskstream();
 		framecnt_t playback_distance = diskstream->calculate_playback_distance(nframes);
-		if (can_internal_playback_seek(llabs(playback_distance))) {
+		if (can_internal_playback_seek(::llabs(playback_distance))) {
 			/* TODO should declick, and/or note-off */
 			internal_playback_seek(playback_distance);
 		}
diff --git a/libs/ardour/mix.cc b/libs/ardour/mix.cc
index adae68a..96ae624 100644
--- a/libs/ardour/mix.cc
+++ b/libs/ardour/mix.cc
@@ -136,6 +136,12 @@ default_mix_buffers_no_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, p
 	}
 }
 
+void
+default_copy_vector (ARDOUR::Sample * dst, const ARDOUR::Sample * src, pframes_t nframes)
+{
+	memcpy(dst, src, nframes*sizeof(ARDOUR::Sample));
+}
+
 #if defined (__APPLE__) && defined (BUILD_VECLIB_OPTIMIZATIONS)
 #include <Accelerate/Accelerate.h>
 
diff --git a/libs/ardour/mtc_slave.cc b/libs/ardour/mtc_slave.cc
index 1a1c5f2..83d6116 100644
--- a/libs/ardour/mtc_slave.cc
+++ b/libs/ardour/mtc_slave.cc
@@ -213,6 +213,7 @@ MTC_Slave::reset (bool with_position)
 	window_end = 0;
 	transport_direction = 1;
 	current_delta = 0;
+	ActiveChanged(false);
 }
 
 void
@@ -468,6 +469,7 @@ MTC_Slave::update_mtc_time (const MIDI::byte *msg, bool was_full, framepos_t now
 				first_mtc_timestamp = now;
 				init_mtc_dll(mtc_frame, qtr);
 				mtc_frame_dll = mtc_frame;
+				ActiveChanged (true); // emit signal
 			}
 			current.guard1++;
 			current.position = mtc_frame;
@@ -626,6 +628,7 @@ MTC_Slave::speed_and_position (double& speed, framepos_t& pos)
 		session.request_transport_speed (0);
 		engine_dll_initstate = 0;
 		queue_reset (false);
+        ActiveChanged (false);
 		DEBUG_TRACE (DEBUG::MTC, "MTC not seen for 2 frames - reset pending\n");
 		return false;
 	}
diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc
index 67ea267..9a6f550 100644
--- a/libs/ardour/parameter_descriptor.cc
+++ b/libs/ardour/parameter_descriptor.cc
@@ -149,7 +149,7 @@ ParameterDescriptor::update_steps()
 			step      = step      / logf(30.0f);
 			largestep = largestep / logf(30.0f);
 		} else if (integer_step) {
-			smallstep = std::max(1.0, rint(smallstep));
+			smallstep = 1.0;
 			step      = std::max(1.0, rint(step));
 			largestep = std::max(1.0, rint(largestep));
 		}
diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc
index 20a2ef0..8862c63 100644
--- a/libs/ardour/playlist.cc
+++ b/libs/ardour/playlist.cc
@@ -1642,6 +1642,8 @@ Playlist::region_bounds_changed (const PropertyChange& what_changed, boost::shar
 		 save = true;
 	 }
 
+	 mark_session_dirty ();
+     
 	 return save;
  }
 
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 8da0abb..910b2cd 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -715,18 +715,14 @@ PluginInsert::configure_io (ChanCount in, ChanCount out)
 	ChanCount old_in = input_streams ();
 	ChanCount old_out = output_streams ();
 
+	_configured_in = in;
+	_configured_out = out;
+
 	/* set the matching method and number of plugins that we will use to meet this configuration */
 	_match = private_can_support_io_configuration (in, out);
 	if (set_count (_match.plugins) == false) {
-		return false;
-	}
-
-	if (  (old_match.method != _match.method && (old_match.method == Split || _match.method == Split))
-			|| old_in != in
-			|| old_out != out
-			)
-	{
 		PluginIoReConfigure (); /* EMIT SIGNAL */
+		return false;
 	}
 
 	/* configure plugins */
@@ -734,17 +730,27 @@ PluginInsert::configure_io (ChanCount in, ChanCount out)
 	case Split:
 	case Hide:
 		if (_plugins.front()->configure_io (_plugins.front()->get_info()->n_inputs, out)) {
+			PluginIoReConfigure (); /* EMIT SIGNAL */
 			return false;
 		}
 		break;
 
 	default:
 		if (_plugins.front()->configure_io (in, out) == false) {
+			PluginIoReConfigure (); /* EMIT SIGNAL */
 			return false;
 		}
 		break;
 	}
 
+	if (  (old_match.method != _match.method && (old_match.method == Split || _match.method == Split))
+			|| old_in != in
+			|| old_out != out
+			)
+	{
+		PluginIoReConfigure (); /* EMIT SIGNAL */
+	}
+
 	// we don't know the analysis window size, so we must work with the
 	// current buffer size here. each request for data fills in these
 	// buffers and the analyser makes sure it gets enough data for the
@@ -1146,6 +1152,15 @@ PluginInsert::set_state(const XMLNode& node, int version)
 }
 
 void
+PluginInsert::update_id (PBD::ID id)
+{
+	set_id (id.to_s());
+	for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
+		(*i)->set_insert_id (id);
+	}
+}
+
+void
 PluginInsert::set_parameter_state_2X (const XMLNode& node, int version)
 {
 	XMLNodeList nlist = node.children();
@@ -1378,6 +1393,7 @@ PluginInsert::get_impulse_analysis_plugin()
 	boost::shared_ptr<Plugin> ret;
 	if (_impulseAnalysisPlugin.expired()) {
 		ret = plugin_factory(_plugins[0]);
+		ret->configure_io (input_streams (), output_streams ());
 		_impulseAnalysisPlugin = ret;
 	} else {
 		ret = _impulseAnalysisPlugin.lock();
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index 37eb61e..4eb67db 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -225,6 +225,12 @@ PluginManager::~PluginManager()
 void
 PluginManager::refresh (bool cache_only)
 {
+	Glib::Threads::Mutex::Lock lm (_lock, Glib::Threads::TRY_LOCK);
+
+	if (!lm.locked()) {
+		return;
+	}
+
 	DEBUG_TRACE (DEBUG::PluginManager, "PluginManager::refresh\n");
 	_cancel_scan = false;
 
@@ -236,20 +242,44 @@ PluginManager::refresh (bool cache_only)
 #endif
 #ifdef WINDOWS_VST_SUPPORT
 	if (Config->get_use_windows_vst()) {
-		BootMessage (_("Scanning Windows VST Plugins"));
+		if (cache_only) {
+			BootMessage (_("Scanning Windows VST Plugins"));
+		} else {
+			BootMessage (_("Discovering Windows VST Plugins"));
+		}
 		windows_vst_refresh (cache_only);
 	}
 #endif // WINDOWS_VST_SUPPORT
 
 #ifdef LXVST_SUPPORT
 	if(Config->get_use_lxvst()) {
-		BootMessage (_("Scanning Linux VST Plugins"));
+		if (cache_only) {
+			BootMessage (_("Scanning Linux VST Plugins"));
+		} else {
+			BootMessage (_("Discovering Linux VST Plugins"));
+		}
 		lxvst_refresh(cache_only);
 	}
 #endif //Native linuxVST SUPPORT
 
+#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
+		if (!cache_only) {
+			string fn = Glib::build_filename (ARDOUR::user_cache_directory(), VST_BLACKLIST);
+			if (Glib::file_test (fn, Glib::FILE_TEST_EXISTS)) {
+				std::string bl;
+				std::ifstream ifs (fn.c_str ());
+				bl.assign ((std::istreambuf_iterator<char> (ifs)), (std::istreambuf_iterator<char> ()));
+				PBD::info << _("VST Blacklist:") << "\n" << bl << "-----" << endmsg;
+			}
+		}
+#endif
+
 #ifdef AUDIOUNIT_SUPPORT
-	BootMessage (_("Scanning AU Plugins"));
+	if (cache_only) {
+		BootMessage (_("Scanning AU Plugins"));
+	} else {
+		BootMessage (_("Discovering AU Plugins"));
+	}
 	au_refresh (cache_only);
 #endif
 
@@ -274,32 +304,69 @@ PluginManager::cancel_plugin_timeout ()
 void
 PluginManager::clear_vst_cache ()
 {
-	// see also libs/ardour/vst_info_file.cc - vstfx_infofile_path()
+#if 1 // clean old cache and error files. (remove this code after 4.3 or 5.0)
 #ifdef WINDOWS_VST_SUPPORT
 	{
 		vector<string> fsi_files;
+		find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\" VST_EXT_INFOFILE "$", true);
+		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
+			::g_unlink(i->c_str());
+		}
+	}
+	{
+		vector<string> fsi_files;
 		find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\.fsi$", true);
 		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
 			::g_unlink(i->c_str());
 		}
 	}
+	{
+		vector<string> fsi_files;
+		find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\.err$", true);
+		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
+			::g_unlink(i->c_str());
+		}
+	}
 #endif
 
 #ifdef LXVST_SUPPORT
 	{
 		vector<string> fsi_files;
+		find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\" VST_EXT_INFOFILE "$", true);
+		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
+			::g_unlink(i->c_str());
+		}
+	}
+	{
+		vector<string> fsi_files;
 		find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\.fsi$", true);
 		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
 			::g_unlink(i->c_str());
 		}
 	}
+	{
+		vector<string> fsi_files;
+		find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\.err$", true);
+		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
+			::g_unlink(i->c_str());
+		}
+	}
 #endif
+#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
+	{
+		string dir = Glib::build_filename (ARDOUR::user_cache_directory(), "fst_info");
+		if (Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
+			PBD::remove_directory (dir);
+		}
+	}
+#endif
+#endif // old cache cleanup
 
 #if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
 	{
-		string personal = get_personal_vst_info_cache_dir();
+		string dn = Glib::build_filename (ARDOUR::user_cache_directory(), "vst");
 		vector<string> fsi_files;
-		find_files_matching_regex (fsi_files, personal, "\\.fsi$", /* user cache is flat, no recursion */ false);
+		find_files_matching_regex (fsi_files, dn, "\\" VST_EXT_INFOFILE "$", /* user cache is flat, no recursion */ false);
 		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
 			::g_unlink(i->c_str());
 		}
@@ -310,10 +377,12 @@ PluginManager::clear_vst_cache ()
 void
 PluginManager::clear_vst_blacklist ()
 {
+#if 1 // remove old blacklist files. (remove this code after 4.3 or 5.0)
+
 #ifdef WINDOWS_VST_SUPPORT
 	{
 		vector<string> fsi_files;
-		find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\.fsb$", true);
+		find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\" VST_EXT_BLACKLIST "$", true);
 		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
 			::g_unlink(i->c_str());
 		}
@@ -323,24 +392,32 @@ PluginManager::clear_vst_blacklist ()
 #ifdef LXVST_SUPPORT
 	{
 		vector<string> fsi_files;
-		find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\.fsb$", true);
+		find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\" VST_EXT_BLACKLIST "$", true);
 		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
 			::g_unlink(i->c_str());
 		}
 	}
 #endif
-
 #if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
 	{
-		string personal = get_personal_vst_blacklist_dir();
+		string dir = Glib::build_filename (ARDOUR::user_cache_directory(), "fst_blacklist");
+		if (Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
+			PBD::remove_directory (dir);
+		}
+	}
+#endif
 
-		vector<string> fsi_files;
-		find_files_matching_regex (fsi_files, personal, "\\.fsb$", /* flat user cache */ false);
-		for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
-			::g_unlink(i->c_str());
+#endif // old blacklist cleanup
+
+#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
+	{
+		string fn = Glib::build_filename (ARDOUR::user_cache_directory(), VST_BLACKLIST);
+		if (Glib::file_test (fn, Glib::FILE_TEST_EXISTS)) {
+			::g_unlink (fn.c_str());
 		}
 	}
 #endif
+
 }
 
 void
@@ -639,31 +716,17 @@ void
 PluginManager::au_refresh (bool cache_only)
 {
 	DEBUG_TRACE (DEBUG::PluginManager, "AU: refresh\n");
-	if (cache_only && !Config->get_discover_audio_units ()) {
-		return;
-	}
-	delete _au_plugin_info;
-	_au_plugin_info = AUPluginInfo::discover();
 
-	// disable automatic scan in case we crash
+	// disable automatic discovery in case we crash
+	bool discover_at_start = Config->get_discover_audio_units ();
 	Config->set_discover_audio_units (false);
 	Config->save_state();
 
-	/* note: AU require a CAComponentDescription pointer provided by the OS.
-	 * Ardour only caches port and i/o config. It can't just 'scan' without
-	 * 'discovering' (like we do for VST).
-	 *
-	 * So in case discovery fails, we assume the worst: the Description
-	 * is broken (malicious plugins) and even a simple 'scan' would always
-	 * crash ardour on startup. Hence we disable Auto-Scan on start.
-	 *
-	 * If the crash happens at any later time (description is available),
-	 * Ardour will blacklist the plugin in question -- unless
-	 * the crash happens during realtime-run.
-	 */
+	delete _au_plugin_info;
+	_au_plugin_info = AUPluginInfo::discover(cache_only && !discover_at_start);
 
-	// successful scan re-enabled automatic discovery
-	Config->set_discover_audio_units (true);
+	// successful scan re-enabled automatic discovery if it was set
+	Config->set_discover_audio_units (discover_at_start);
 	Config->save_state();
 }
 
@@ -696,7 +759,11 @@ PluginManager::windows_vst_discover_from_path (string path, bool cache_only)
 	vector<string>::iterator x;
 	int ret = 0;
 
-	DEBUG_TRACE (DEBUG::PluginManager, string_compose ("detecting Windows VST plugins along %1\n", path));
+	DEBUG_TRACE (DEBUG::PluginManager, string_compose ("Discovering Windows VST plugins along %1\n", path));
+
+	if (Config->get_verbose_plugin_scan()) {
+		info << string_compose (_("--- Windows VST plugins Scan: %1"), path) << endmsg;
+	}
 
 	find_files_matching_filter (plugin_objects, Config->get_plugin_path_vst(), windows_vst_filter, 0, false, true, true);
 
@@ -705,6 +772,10 @@ PluginManager::windows_vst_discover_from_path (string path, bool cache_only)
 		windows_vst_discover (*x, cache_only || cancelled());
 	}
 
+	if (Config->get_verbose_plugin_scan()) {
+		info << _("--- Windows VST plugins Scan Done") << endmsg;
+	}
+
 	return ret;
 }
 
@@ -713,12 +784,22 @@ PluginManager::windows_vst_discover (string path, bool cache_only)
 {
 	DEBUG_TRACE (DEBUG::PluginManager, string_compose ("windows_vst_discover '%1'\n", path));
 
+	if (Config->get_verbose_plugin_scan()) {
+		info << string_compose (_(" *  %1 %2"), path, (cache_only ? _(" (cache only)") : "")) << endmsg;
+	}
+
 	_cancel_timeout = false;
 	vector<VSTInfo*> * finfos = vstfx_get_info_fst (const_cast<char *> (path.c_str()),
 			cache_only ? VST_SCAN_CACHE_ONLY : VST_SCAN_USE_APP);
 
+	// TODO  get extended error messae from vstfx_get_info_fst() e.g  blacklisted, 32/64bit compat,
+	// .err file scanner output etc.
+
 	if (finfos->empty()) {
 		DEBUG_TRACE (DEBUG::PluginManager, string_compose ("Cannot get Windows VST information from '%1'\n", path));
+		if (Config->get_verbose_plugin_scan()) {
+			info << _(" -> Cannot get Windows VST information, plugin ignored.") << endmsg;
+		}
 		return -1;
 	}
 
@@ -728,7 +809,7 @@ PluginManager::windows_vst_discover (string path, bool cache_only)
 		char buf[32];
 
 		if (!finfo->canProcessReplacing) {
-			warning << string_compose (_("VST plugin %1 does not support processReplacing, and so cannot be used in %2 at this time"),
+			warning << string_compose (_("VST plugin %1 does not support processReplacing, and cannot be used in %2 at this time"),
 							 finfo->name, PROGRAM_NAME)
 				<< endl;
 			continue;
@@ -762,8 +843,8 @@ PluginManager::windows_vst_discover (string path, bool cache_only)
 
 		if (!_windows_vst_plugin_info->empty()) {
 			for (PluginInfoList::iterator i =_windows_vst_plugin_info->begin(); i != _windows_vst_plugin_info->end(); ++i) {
-				if ((info->type == (*i)->type)&&(info->unique_id == (*i)->unique_id)) {
-					warning << "Ignoring duplicate Windows VST plugin " << info->name << "\n";
+				if ((info->type == (*i)->type) && (info->unique_id == (*i)->unique_id)) {
+					warning << string_compose (_("Ignoring duplicate Windows VST plugin \"%1\""), info->name) << endmsg;
 					duplicate = true;
 					break;
 				}
@@ -774,6 +855,9 @@ PluginManager::windows_vst_discover (string path, bool cache_only)
 			DEBUG_TRACE (DEBUG::PluginManager, string_compose ("Windows VST plugin ID '%1'\n", info->unique_id));
 			_windows_vst_plugin_info->push_back (info);
 			discovered++;
+			if (Config->get_verbose_plugin_scan()) {
+				PBD::info << string_compose (_(" -> OK (VST Plugin \"%1\" was added)."), info->name) << endmsg;
+			}
 		}
 	}
 
diff --git a/libs/ardour/po/de.po b/libs/ardour/po/de.po
index 26c21a3..06d8dcf 100644
--- a/libs/ardour/po/de.po
+++ b/libs/ardour/po/de.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-03-31 20:13-0400\n"
-"PO-Revision-Date: 2015-03-18 16:57+0100\n"
+"POT-Creation-Date: 2015-08-13 10:38+0200\n"
+"PO-Revision-Date: 2015-08-13 10:39+0200\n"
 "Last-Translator: Edgar Aichinger <edogawa at aon.at>\n"
 "Language-Team: German <ardour-dev at lists.ardour.org>\n"
 "Language: de\n"
@@ -17,86 +17,96 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Lokalize 1.5\n"
 
-#: amp.cc:57 automatable.cc:165
+#: amp.cc:62 automatable.cc:165
 msgid "Fader"
 msgstr "Fader"
 
-#: analyser.cc:117 audioregion.cc:1729
+#: amp.cc:445
+#, c-format
+msgid "%3.1f dB"
+msgstr "%3.1f dB"
+
+#: amp.cc:486
+#, c-format
+msgid "%.2fdB"
+msgstr "%.2fdB"
+
+#: analyser.cc:117 audioregion.cc:1764
 msgid "Transient Analysis failed for %1."
-msgstr ""
+msgstr "Transientenanalyse für %1 fehlgeschlagen."
 
 #: analyser.cc:117
 msgid "Audio File Source"
-msgstr ""
+msgstr "Audiodateiquelle"
 
-#: audio_diskstream.cc:249
+#: audio_diskstream.cc:257
 msgid "AudioDiskstream: Playlist \"%1\" isn't an audio playlist"
 msgstr ""
 "AudioDiskstream: Wiedergabeliste \"%1\" ist keine Audio-Wiedergabeliste"
 
-#: audio_diskstream.cc:301
+#: audio_diskstream.cc:309
 msgid "AudioDiskstream %1: there is no existing playlist to make a copy of!"
 msgstr ""
 "AudioDiskstream %1: es gibt keine Wiedergabeliste, die kopiert werden kann!"
 
-#: audio_diskstream.cc:861 audio_diskstream.cc:871
+#: audio_diskstream.cc:879 audio_diskstream.cc:889
 msgid ""
 "AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"
 msgstr ""
 "AudioDiskstream %1: Kann während des Befüllens %2 nicht aus Wiedergabeliste "
 "bei Frame %3 lesen"
 
-#: audio_diskstream.cc:1028
+#: audio_diskstream.cc:1052
 msgid "AudioDiskstream %1: cannot read %2 from playlist at frame %3"
 msgstr ""
 "AudioDiskstream %1: Kann %2 nicht aus Wiedergabeliste bei Frame %3 lesen"
 
-#: audio_diskstream.cc:1397 audio_diskstream.cc:1416
+#: audio_diskstream.cc:1468 audio_diskstream.cc:1487
 msgid "AudioDiskstream %1: cannot write to disk"
 msgstr "AudioDiskstream %1: Kann nicht auf Disk schreiben"
 
-#: audio_diskstream.cc:1459
+#: audio_diskstream.cc:1530
 msgid "AudioDiskstream \"%1\": cannot flush captured data to disk!"
 msgstr "AudioDiskstream %1: Kann aufgenommene Daten nicht auf Disk schreiben!"
 
-#: audio_diskstream.cc:1553
+#: audio_diskstream.cc:1624
 msgid "%1: could not create region for complete audio file"
 msgstr "%1: konnte keine Region für die komplette Audiodatei erzeugen"
 
-#: audio_diskstream.cc:1585
+#: audio_diskstream.cc:1656
 msgid "AudioDiskstream: could not create region for captured audio!"
 msgstr ""
 "AudioDiskstream: konnte keine Region für das aufgenommene Audiomaterial "
 "erzeugen!"
 
-#: audio_diskstream.cc:1693
+#: audio_diskstream.cc:1764
 msgid "programmer error: %1"
 msgstr "Programmierfehler: %1"
 
-#: audio_diskstream.cc:1921
+#: audio_diskstream.cc:2021
 msgid "AudioDiskstream: channel %1 out of range"
 msgstr "AudioDiskstream: Kanal %1 Bereichsüberschreitung"
 
-#: audio_diskstream.cc:1935 midi_diskstream.cc:1274
+#: audio_diskstream.cc:2035 midi_diskstream.cc:1296
 msgid "%1:%2 new capture file not initialized correctly"
 msgstr "%1:%2 neue Aufnahmedatei nicht korrekt initialisiert"
 
-#: audio_diskstream.cc:2214
+#: audio_diskstream.cc:2314
 msgid "%1: cannot restore pending capture source file %2"
 msgstr "%1: kann vorläufige Aufnahme-Quelldatei %2 nicht wiederherstellen"
 
-#: audio_diskstream.cc:2236
+#: audio_diskstream.cc:2336
 msgid "%1: incorrect number of pending sources listed - ignoring them all"
 msgstr ""
 "%1: Liste enthält falsche Anzahl vorläufiger Quellen - alle werden ignoriert"
 
-#: audio_diskstream.cc:2270
+#: audio_diskstream.cc:2370
 msgid "%1: cannot create whole-file region from pending capture sources"
 msgstr ""
 "%1: kann aus vorläufigen Aufnahmequellen keine Region für die komplette "
 "Datei erzeugen"
 
-#: audio_library.cc:81
+#: audio_library.cc:82
 msgid "Could not open %1.  Audio Library not saved"
 msgstr "Konnte %1 nicht öffnen. Die Audio-Bibliothek wurde nicht gesichert"
 
@@ -142,10 +152,11 @@ msgstr "schlecht geformtes XML in importierter Wiedergabeliste"
 msgid "Audio Playlists (unused)"
 msgstr "Audio-Wiedergabelisten (unbenutzt)"
 
-#: audio_playlist_source.cc:171 audiosource.cc:963 midi_playlist_source.cc:147
-#: midi_playlist_source.cc:155 midi_playlist_source.cc:162 midi_source.cc:356
-#: plugin_insert.cc:641 rb_effect.cc:327 session.cc:2845 session.cc:2878
-#: session.cc:4124 session_handle.cc:87 sndfilesource.cc:154
+#: audio_playlist_source.cc:171 audiosource.cc:1002
+#: midi_playlist_source.cc:147 midi_playlist_source.cc:155
+#: midi_playlist_source.cc:162 midi_source.cc:356 plugin_insert.cc:704
+#: rb_effect.cc:327 session.cc:3475 session.cc:3508 session.cc:4905
+#: session_handle.cc:87 sndfilesource.cc:156
 msgid "programming error: %1"
 msgstr "Programmierfehler: %1"
 
@@ -173,26 +184,32 @@ msgstr ""
 "\n"
 "Kanäle: "
 
-#: audio_track.cc:161
+#: audio_track.cc:173
 msgid "Unknown bundle \"%1\" listed for input of %2"
 msgstr "Unbekanntes Bündel \"%1\" für Eingang von %2 genannt"
 
-#: audio_track.cc:163
+#: audio_track.cc:175
 msgid "in 1"
 msgstr "in 1"
 
-#: audio_track.cc:164
+#: audio_track.cc:176
 msgid "No input bundles available as a replacement"
 msgstr "Es gibt keine als Ersatz geeigneten Eingangs-Bündel"
 
-#: audio_track.cc:168
+#: audio_track.cc:180
 msgid "Bundle %1 was not available - \"in 1\" used instead"
 msgstr "Bündel %1 war nicht verfügbar - verwende statt dessen \"in 1\""
 
-#: audio_track.cc:177
+#: audio_track.cc:189
 msgid "improper input channel list in XML node (%1)"
 msgstr "XML-Knoten (%1) enthält ungeeignete Liste der Eingangskanäle"
 
+#: audio_track.cc:212 diskstream.cc:503 source.cc:149
+msgid "%1: this session uses destructive tracks, which are not supported"
+msgstr ""
+"%1: dieses Projekt benutzt destruktive Spuren, was aber nicht unterstützt "
+"wird"
+
 #: audio_track_importer.cc:68
 msgid "Audio Tracks"
 msgstr "Audiospuren"
@@ -213,19 +230,23 @@ msgstr "kann VAMP-Plugin \"%1\" nicht laden"
 msgid "VAMP Plugin \"%1\" could not be loaded"
 msgstr "VAMP-Plugin \"%1\" konnte nicht geladen werden"
 
-#: audioengine.cc:696
+#: audioengine.cc:731
 msgid "AudioEngine: cannot load module \"%1\" (%2)"
 msgstr "AudioEngine: kann Modul \"%1\" nicht laden (%2)"
 
-#: audioengine.cc:702
+#: audioengine.cc:737
 msgid "AudioEngine: backend at \"%1\" has no descriptor function."
 msgstr "AudioEngine: Backend an \"%1\" hat keine Beschreibungsfunktion."
 
-#: audioengine.cc:779
+#: audioengine.cc:814
 msgid "Could not create backend for %1: %2"
 msgstr "Konnte Backend für %1 nicht erzeugen: %2"
 
-#: audioregion.cc:1685
+#: audiofilesource.cc:176
+msgid "Odd audio file path: %1"
+msgstr "Seltsamer Audiodateipfad: %1"
+
+#: audioregion.cc:1720
 msgid ""
 "You have requested an operation that requires audio analysis.\n"
 "\n"
@@ -250,91 +271,104 @@ msgstr ""
 "und zukünftigen Operation(en) zur Transienten-Erkennung eine leichte "
 "Verzögerung bemerken.\n"
 
-#: audioregion.cc:1729
+#: audioregion.cc:1764
 msgid "Audio Region"
-msgstr ""
+msgstr "Audioregion"
 
-#: audiosource.cc:228
+#: audiosource.cc:227
 msgid "cannot rename peakfile for %1 from %2 to %3 (%4)"
 msgstr "kann Peakfile für %1 nicht von %2 auf %3 umbenennen (%4)"
 
-#: audiosource.cc:257
+#: audiosource.cc:256
 msgid "AudioSource: cannot stat peakfile \"%1\""
 msgstr "AudioSource: Peakfile \"%1\" nicht auffindbar"
 
-#: audiosource.cc:361
+#: audiosource.cc:362
+msgid "Cannot open peakfile @ %1 for size check (%2)"
+msgstr "Kann Peakdatei @ %1 nicht zur Größenermittung öffnen (%2)"
+
+#: audiosource.cc:383
+msgid "peak file %1 is truncated from %2 to %3"
+msgstr "Peakdateei %1 ist von %2 zu %3 "
+
+#: audiosource.cc:386
+msgid "Cannot open peakfile @ %1 for size check (%2) after rebuild"
+msgstr ""
+"Kann Peakdatei @ %1 nach Neuerstellung nicht zur Größenermittung öffnen (%2)"
+
+#: audiosource.cc:398
 msgid "Cannot open peakfile @ %1 for reading (%2)"
-msgstr "Kannot Peakdatei @ %1 for reading (%2)"
+msgstr "Kann Peakdatei @ %1 nicht zum Lesen öffnen (%2)"
 
-#: audiosource.cc:394
+#: audiosource.cc:432
 msgid "cannot read sample data for unscaled peak computation"
 msgstr "kann Sampledaten für unskalierte Peaks-Berechnung nicht lesen"
 
-#: audiosource.cc:430 audiosource.cc:525
+#: audiosource.cc:467 audiosource.cc:562
 msgid "map failed - could not create file mapping for peakfile %1."
 msgstr ""
 "map ist gescheitert - konnte Dateimapping für Peakfile %1 nicht erzeugen."
 
-#: audiosource.cc:436 audiosource.cc:531
+#: audiosource.cc:473 audiosource.cc:568
 msgid "map failed - could not map peakfile %1."
 msgstr "map ist gescheitert - konnte Peakfile %1 nicht mappen."
 
-#: audiosource.cc:447 audiosource.cc:542
+#: audiosource.cc:484 audiosource.cc:579
 msgid "unmap failed - could not unmap peakfile %1."
 msgstr "unmap ist gescheitert - konnte Peakfile %1 nicht unmappen."
 
-#: audiosource.cc:453 audiosource.cc:548
+#: audiosource.cc:490 audiosource.cc:585
 msgid "map failed - could not mmap peakfile %1."
 msgstr "map ist gescheitert - konnte Peakfile %1 nicht mmap()pen."
 
-#: audiosource.cc:638
+#: audiosource.cc:675
 msgid ""
 "AudioSource[%1]: peak read - cannot read %2 samples at offset %3 of %4 (%5)"
 msgstr ""
 "AudioSource[%1]: peak read - kann %2 Samples bei Offset %3 von %4 nicht "
 "lesen(%5)"
 
-#: audiosource.cc:705
+#: audiosource.cc:742
 msgid "%1: could not write read raw data for peak computation (%2)"
 msgstr "%1: konnte Rohdaten für Peakberechnung nicht lesen/schreiben  (%2)"
 
-#: audiosource.cc:742
+#: audiosource.cc:779
 msgid "AudioSource: cannot open peakpath (c) \"%1\" (%2)"
 msgstr "AudioSource: kann Pfad für Peaks (c) \"%1\" nicht öffnen (%2)"
 
-#: audiosource.cc:811 audiosource.cc:933
+#: audiosource.cc:850 audiosource.cc:972
 msgid "%1: could not seek in peak file data (%2)"
 msgstr "%1: konnte in den Daten der Peakdatei nicht suchen (%2)"
 
-#: audiosource.cc:816 audiosource.cc:942
+#: audiosource.cc:855 audiosource.cc:981
 msgid "%1: could not write peak file data (%2)"
 msgstr "%1: konnte Peak-Daten nicht in Datei schreiben (%2)"
 
-#: audiosource.cc:975
+#: audiosource.cc:1014
 msgid "could not truncate peakfile %1 to %2 (error: %3)"
 msgstr "konnte Peakdatei %1 nicht auf %2 kürzen (Fehler: %3)"
 
-#: auditioner.cc:100
+#: auditioner.cc:101
 msgid "Falling back to Reasonable Synth for Midi Audition"
 msgstr "Greife fürs MIDI-Vorhören auf Reasonable Synth zurück"
 
-#: auditioner.cc:102
+#: auditioner.cc:103
 msgid "No synth for midi-audition found."
 msgstr "Keinen Synth zum MIDI-Vorhören gefunden."
 
-#: auditioner.cc:158
+#: auditioner.cc:159
 msgid "no outputs available for auditioner - manual connection required"
 msgstr "Keine Ausgänge für Abhöre verfügbar - manuelle Verbindung erforderlich"
 
-#: auditioner.cc:399 auditioner.cc:446
+#: auditioner.cc:404 auditioner.cc:451
 msgid "Cannot setup auditioner processing flow for %1 channels"
 msgstr "Kann den Abhör-Signalfluss für %1 Kanäle nicht einrichten"
 
-#: auditioner.cc:434
+#: auditioner.cc:439
 msgid "Failed to load synth for MIDI-Audition."
 msgstr "Konnte Synth zum MIDI-Vorhören nicht laden."
 
-#: auditioner.cc:453
+#: auditioner.cc:458
 msgid "Auditioning of regions other than Audio or Midi is not supported."
 msgstr "Vorhören anderer Regionen als Audio oder MIDI wird nicht unterstützt."
 
@@ -351,44 +385,56 @@ msgid "cannot load automation data from %2"
 msgstr "kann Automationsdaten von %2 nicht laden"
 
 #: automatable.cc:167
+msgid "Trim"
+msgstr "Anpassen"
+
+#: automatable.cc:169
 msgid "Mute"
 msgstr "Stumm"
 
-#: automation_list.cc:356
+#: automation_control.cc:148
+msgid "write %1 automation"
+msgstr "schreibe %1 Automation"
+
+#: automation_control.cc:159
+msgid "touch %1 automation"
+msgstr "ändere %1 Automation"
+
+#: automation_list.cc:361
 msgid "automation list: cannot load coordinates from XML, all points ignored"
 msgstr ""
 "Automationsliste: kann Koordinaten aus XML nicht laden, alle Punkte ignoriert"
 
-#: automation_list.cc:402
+#: automation_list.cc:407
 msgid ""
 "automation list: no x-coordinate stored for control point (point ignored)"
 msgstr ""
 "Automationsliste: Keine X-Koordinate für Kontrollpunkt gespeichert (Punkt "
 "ignoriert)"
 
-#: automation_list.cc:408
+#: automation_list.cc:413
 msgid ""
 "automation list: no y-coordinate stored for control point (point ignored)"
 msgstr ""
 "Automationsliste: Keine Y-Koordinate für Kontrollpunkt gespeichert (Punkt "
 "ignoriert)"
 
-#: automation_list.cc:422
+#: automation_list.cc:427
 msgid ""
 "AutomationList: passed XML node called %1, not \"AutomationList\" - ignored"
 msgstr ""
 "AutomationList: XML-Knoten mit Namen %1, nicht \"AutomationList\" übergeben "
 "- ignoriert"
 
-#: butler.cc:100
+#: butler.cc:126
 msgid "Session: could not create butler thread"
 msgstr "Projekt: konnte Butler-Thread nicht erzeugen"
 
-#: butler.cc:222 butler.cc:223
+#: butler.cc:253 butler.cc:254
 msgid "Butler read ahead failure on dstream %1"
 msgstr "Butler-Lesefehler bei dstream %1"
 
-#: butler.cc:270 butler.cc:271
+#: butler.cc:301 butler.cc:302
 msgid "Butler write-behind failure on dstream %1"
 msgstr "Butler-Schreibfehler bei dstream %1"
 
@@ -441,7 +487,7 @@ msgstr "kann CPU-Takt in /proc/cpuinfo nicht finden"
 msgid "audio"
 msgstr "Audio"
 
-#: data_type.cc:28 session.cc:1995 session.cc:1998
+#: data_type.cc:28 session.cc:2271
 msgid "MIDI"
 msgstr "MIDI"
 
@@ -457,7 +503,7 @@ msgstr "Hauptausgänge"
 msgid "listen"
 msgstr "hören"
 
-#: diskstream.cc:309
+#: diskstream.cc:312
 msgid "Location \"%1\" not valid for track loop (start >= end)"
 msgstr "Zeitpunkt \"%1\" für Spurschleife ungültig (Start >= Ende)"
 
@@ -524,23 +570,23 @@ msgstr "Verlustbehaftete Kompression"
 msgid "Lossless compression"
 msgstr "Verlustfreie  Kompression"
 
-#: export_format_manager.cc:218 export_format_specification.cc:591
+#: export_format_manager.cc:218 export_format_specification.cc:601
 msgid "Session rate"
 msgstr "Projektrate"
 
-#: export_format_specification.cc:549
+#: export_format_specification.cc:556
 msgid "normalize"
 msgstr "normalisiere"
 
-#: export_format_specification.cc:553
+#: export_format_specification.cc:560
 msgid "trim"
 msgstr "anpassen"
 
-#: export_format_specification.cc:555
+#: export_format_specification.cc:562
 msgid "trim start"
 msgstr "Anfang anpassen"
 
-#: export_format_specification.cc:557
+#: export_format_specification.cc:564
 msgid "trim end"
 msgstr "Ende anpassen"
 
@@ -556,7 +602,7 @@ msgstr "Dreieck"
 msgid "Rectangular"
 msgstr "Rechteck"
 
-#: export_formats.cc:52 session.cc:5421 session.cc:5437
+#: export_formats.cc:52 session.cc:6245 session.cc:6265
 msgid "None"
 msgstr "Kein"
 
@@ -596,92 +642,92 @@ msgstr "Vorbis-Sampleformat"
 msgid "No sample format"
 msgstr "Kein Sampleformat"
 
-#: export_handler.cc:360
+#: export_handler.cc:371
 msgid "File %1 uploaded to %2"
 msgstr "Datei %1 nach %2 hochgeladen"
 
-#: export_handler.cc:366
+#: export_handler.cc:377
 msgid ""
 "upload to Soundcloud failed. Perhaps your email or password are incorrect?\n"
 msgstr ""
 "das Hochladen nach Soundcloud ist gescheitert. Vielleicht sind E-mail-"
 "Adresse oder Passwort falsch?"
 
-#: export_handler.cc:413
+#: export_handler.cc:429
 msgid "Editor: cannot open \"%1\" as export file for CD marker file"
 msgstr "Editor: kann \"%1\" als Export-Datei für CD-Marker nicht öffnen"
 
-#: export_handler.cc:492 export_handler.cc:495
+#: export_handler.cc:508 export_handler.cc:511
 msgid "an error occured while writing a TOC/CUE file: %1"
 msgstr "beim Schreiben einer TOC/CUE Datei trat ein Fehler auf:%1"
 
-#: export_handler.cc:744 export_handler.cc:802
+#: export_handler.cc:801 export_handler.cc:859
 msgid "Cannot convert %1 to Latin-1 text"
 msgstr "Kann %1 nicht zu Latin-1 Kodierung konvertieren"
 
-#: export_profile_manager.cc:93
+#: export_profile_manager.cc:94
 msgid "Searching for export formats in %1"
 msgstr "Suche in %1 nach Exportformaten"
 
-#: export_profile_manager.cc:99
+#: export_profile_manager.cc:100
 msgid "Unable to create export format directory %1: %2"
 msgstr "Kann Verzeichnis %1 für Exportformate nicht erzeugen: %2"
 
-#: export_profile_manager.cc:262
+#: export_profile_manager.cc:263
 msgid "Unable to remove export preset %1: %2"
 msgstr "Kann Export-Preset %1 nicht entfernen: %2"
 
-#: export_profile_manager.cc:351
+#: export_profile_manager.cc:352
 msgid "Selection"
 msgstr "Auswahl"
 
-#: export_profile_manager.cc:604
+#: export_profile_manager.cc:613
 msgid "Unable to rename export format %1 to %2: %3"
 msgstr "Kann Export-Format %1 nicht nach %2 umbenennen: %3"
 
-#: export_profile_manager.cc:636
+#: export_profile_manager.cc:645
 msgid "Unable to remove export profile %1: %2"
 msgstr "Kann Export-Profil %1 nicht entfernen: %2"
 
-#: export_profile_manager.cc:654
+#: export_profile_manager.cc:663
 msgid "empty format"
 msgstr "leeres Format"
 
-#: export_profile_manager.cc:735
+#: export_profile_manager.cc:744
 msgid "Cannot load export format from %1"
 msgstr "Kann Exportformat aus %1 nicht laden"
 
-#: export_profile_manager.cc:741
+#: export_profile_manager.cc:750
 msgid "Cannot export format read from %1"
 msgstr "Kann Exportformat aus %1 nicht lesen"
 
-#: export_profile_manager.cc:835
+#: export_profile_manager.cc:844
 msgid "No timespan has been selected!"
 msgstr "Keine Zeitspanne ausgewählt!"
 
-#: export_profile_manager.cc:839
+#: export_profile_manager.cc:848
 msgid "No channels have been selected!"
 msgstr "Keine Kanäle ausgewählt!"
 
-#: export_profile_manager.cc:843
+#: export_profile_manager.cc:852
 msgid "Some channels are empty"
 msgstr "Einige Kanäle sind leer"
 
-#: export_profile_manager.cc:876
+#: export_profile_manager.cc:885
 msgid "No format selected!"
 msgstr "Kein Format ausgewählt!"
 
-#: export_profile_manager.cc:878
+#: export_profile_manager.cc:887
 msgid "All channels are empty!"
 msgstr "Alle Kanäle sind leer!"
 
-#: export_profile_manager.cc:880
+#: export_profile_manager.cc:889
 msgid "One or more of the selected formats is not compatible with this system!"
 msgstr ""
 "Eines oder mehrere der gewählten Formate sind mit diesem Sytem nicht "
 "kompatibel!"
 
-#: export_profile_manager.cc:883
+#: export_profile_manager.cc:892
 msgid ""
 "%1 supports only %2 channels, but you have %3 channels in your channel "
 "configuration"
@@ -689,7 +735,7 @@ msgstr ""
 "% unterstützt nur %2 Kanäle, in Ihrer Kanalkonfiguration befinden sich "
 "jedoch %3 Kanäle"
 
-#: file_source.cc:201 session_state.cc:2857
+#: file_source.cc:201 session_state.cc:2987
 msgid ""
 "there are already 1000 files with names like %1; versioning discontinued"
 msgstr ""
@@ -699,11 +745,11 @@ msgstr ""
 msgid "cannot rename file source from %1 to %2 (%3)"
 msgstr "Kann Quelldatei nicht von %1 nach %2 umbenennen (%3)"
 
-#: file_source.cc:251 file_source.cc:375
+#: file_source.cc:251 file_source.cc:374
 msgid "FileSource: search path not set"
 msgstr "Dateiquelle: Suchpfad nicht gesetzt"
 
-#: file_source.cc:435
+#: file_source.cc:434
 msgid ""
 "FileSource: \"%1\" is ambigous when searching\n"
 "\t"
@@ -711,15 +757,15 @@ msgstr ""
 "FileSource: \"%1\" ist während der Suche doppeldeutig\n"
 "\t"
 
-#: file_source.cc:442
+#: file_source.cc:441
 msgid "Filesource: cannot find required file (%1)"
 msgstr "Filesource: kann benötigte Datei (%1) nicht finden"
 
-#: file_source.cc:487
+#: file_source.cc:486
 msgid "Filesource: cannot find required file (%1): %2"
 msgstr "Dateiquelle: kann benötigte Datei (%1) nicht finden: %2"
 
-#: file_source.cc:495
+#: file_source.cc:494
 msgid "Filesource: cannot check for existing file (%1): %2"
 msgstr "Dateiquelle: kann Datei (%1) nicht auf Existenz überprüfen: %2"
 
@@ -736,11 +782,11 @@ msgstr ""
 msgid "cannot rename file %1 to %2 (%3)"
 msgstr "kann Datei %1 nicht nach %2 umbenennen (%3)"
 
-#: filesystem_paths.cc:105
+#: filesystem_paths.cc:120
 msgid "Cannot create Configuration directory %1 - cannot run"
 msgstr "Kann Konfigurationsverzeichnis %1 nicht erzeugen - kann nicht starten"
 
-#: filesystem_paths.cc:110
+#: filesystem_paths.cc:125
 msgid ""
 "Configuration directory %1 already exists and is not a directory/folder - "
 "cannot run"
@@ -748,26 +794,26 @@ msgstr ""
 "Konfigurationsverzeichnis %1 existiert bereits, ist aber kein Verzeichnis/"
 "Ordner - kann nicht starten"
 
-#: filesystem_paths.cc:171
+#: filesystem_paths.cc:186
 msgid "Cannot create cache directory %1 - cannot run"
 msgstr "Kann Cacheverzeichnis %1 nicht erzeugen - kann nicht starten"
 
-#: filesystem_paths.cc:176
+#: filesystem_paths.cc:191
 msgid ""
 "Cache directory %1 already exists and is not a directory/folder - cannot run"
 msgstr ""
 "Cacheverzeichnis %1 existiert bereits, ist aber kein Verzeichnis/Ordner - "
 "kann nicht starten"
 
-#: filesystem_paths.cc:194
+#: filesystem_paths.cc:209
 msgid "ARDOUR_DLL_PATH not set in environment - exiting\n"
 msgstr "Umgebungsvariable ARDOUR_DLL_PATH ist nicht gesetzt - beende\n"
 
-#: filesystem_paths.cc:245
+#: filesystem_paths.cc:260
 msgid "ARDOUR_CONFIG_PATH not set in environment\n"
 msgstr "Umgebungsvariable ARDOUR_CONFIG_PATH ist nicht gesetzt\n"
 
-#: filesystem_paths.cc:266
+#: filesystem_paths.cc:281
 msgid "ARDOUR_DATA_PATH not set in environment\n"
 msgstr "Umgebungsvariable ARDOUR_DATA_PATH ist nicht gesetzt\n"
 
@@ -775,7 +821,7 @@ msgstr "Umgebungsvariable ARDOUR_DATA_PATH ist nicht gesetzt\n"
 msgid "filter: error creating name for new file based on %1"
 msgstr "Filter: Fehler beim Erzeugen des neuen Dateinamens aus %1"
 
-#: filter.cc:79
+#: filter.cc:92
 msgid "filter: error creating new file %1 (%2)"
 msgstr "Filter: Fehler beim Erzeugen der neuen Datei %1 (%2)"
 
@@ -787,36 +833,36 @@ msgstr "Kann Projektpfad %1 nicht überprüfen (%2)"
 msgid "cannot check statefile %1 (%2)"
 msgstr "Kann die Projektdatei %1 nicht überprüfen (%2)"
 
-#: find_session.cc:121
+#: find_session.cc:124
 msgid "%1 is not a snapshot file"
 msgstr "%1 ist keine Schnappschussdatei"
 
-#: find_session.cc:138
+#: find_session.cc:141
 msgid "cannot determine current working directory (%1)"
 msgstr "kann momentanes Arbeitsverzeichnis nicht bestimmen (%1)"
 
-#: find_session.cc:155
+#: find_session.cc:158
 msgid "unknown file type for session %1"
 msgstr "Unbekannter Dateityp für Projekt %1"
 
-#: globals.cc:234
+#: globals.cc:262
 msgid "Could not set system open files limit to \"unlimited\""
 msgstr ""
 "Konnte die Systemgrenze für offene Dateien nicht auf \"unbeschränkt\" setzen"
 
-#: globals.cc:236
+#: globals.cc:264
 msgid "Could not set system open files limit to %1"
 msgstr "Konnte die Systemgrenze für offene Dateien nicht auf %1 setzen"
 
-#: globals.cc:240
+#: globals.cc:268
 msgid "Your system is configured to limit %1 to only %2 open files"
 msgstr "Ihre Systemkonfiguration beschränkt %1 auf nur %2 offene Dateien"
 
-#: globals.cc:244
+#: globals.cc:272
 msgid "Could not get system open files limit (%1)"
 msgstr "Konnte die Grenze für offene Dateien nicht erhalten (%1)"
 
-#: globals.cc:415
+#: globals.cc:454
 msgid "Loading configuration"
 msgstr "Lade Konfiguration"
 
@@ -845,8 +891,8 @@ msgid "Track %1 of %2 contained no usable MIDI data"
 msgstr "Spur %1 von %2 beinhaltet keine brauchbaren MIDI-Daten"
 
 #: import.cc:427
-msgid "MIDI file %1 was not readable (no reason available)"
-msgstr "MIDI-Datei %1 war unlesbar (keine Ursache ermittelbar)"
+msgid "MIDI file could not be written (best guess: %1)"
+msgstr "MIDI-Datei konnte nicht geschrieben werden (vermutlich: %1)"
 
 #: import.cc:475
 msgid "Import: cannot open input sound file \"%1\""
@@ -878,102 +924,102 @@ msgstr "Unbekannt"
 msgid "preset %1 (bank %2)"
 msgstr "Preset %1 (Bank %2)"
 
-#: internal_send.cc:316 internal_send.cc:317
+#: internal_send.cc:315 internal_send.cc:316
 msgid "%1 - cannot find any track/bus with the ID %2 to connect to"
 msgstr "%1 - kann Spur/Bus mit der ID %2 zum Verbinden finden"
 
-#: io.cc:209
+#: io.cc:210
 msgid "IO: cannot disconnect port %1 from %2"
 msgstr "IO: kann Port %1 nicht von %2 trennen"
 
-#: io.cc:344 io.cc:431
+#: io.cc:345 io.cc:432
 msgid "IO: cannot register input port %1"
 msgstr "IO: kann Eingangsport %1 nicht registrieren"
 
-#: io.cc:349 io.cc:436
+#: io.cc:350 io.cc:437
 msgid "IO: cannot register output port %1"
 msgstr "IO: kann Ausgangsport %1 nicht registrieren"
 
-#: io.cc:598 io.cc:654
+#: io.cc:599 io.cc:655
 msgid "incorrect XML node \"%1\" passed to IO object"
 msgstr "unkorrekter XML-Knoten \"%1\" an IO Objekt weitergereicht"
 
-#: io.cc:713
+#: io.cc:717
 msgid "in"
 msgstr "in"
 
-#: io.cc:713
+#: io.cc:717
 msgid "out"
 msgstr "out"
 
-#: io.cc:714
+#: io.cc:718
 msgid "input"
 msgstr "Eingang"
 
-#: io.cc:714
+#: io.cc:718
 msgid "output"
 msgstr "Ausgang"
 
-#: io.cc:724
+#: io.cc:728
 msgid "Unknown bundle \"%1\" listed for %2 of %3"
 msgstr "Unbekanntes Bündel \"%1\" für %2 von %3 genannt"
 
-#: io.cc:790
+#: io.cc:794
 msgid "Bundle %1 was not available - \"%2\" used instead"
 msgstr "Bündel %1 war nicht verfügbar - verwende stattdessen \"%2\" "
 
-#: io.cc:793
+#: io.cc:797
 msgid "No %1 bundles available as a replacement"
 msgstr "%1 Bündel nicht als Ersatz verfügbar"
 
-#: io.cc:897
+#: io.cc:901
 msgid "%1: cannot create I/O ports"
 msgstr "%1: kann keine E/A-Ports erzeugen"
 
-#: io.cc:1025 io.cc:1126
+#: io.cc:1029 io.cc:1130
 msgid "IO: badly formed string in XML node for inputs \"%1\""
 msgstr "IO: schlecht geformte Zeichenkette in XML-Knoten für Eingänge \"%1\""
 
-#: io.cc:1030 io.cc:1131
+#: io.cc:1034 io.cc:1135
 msgid "bad input string in XML node \"%1\""
 msgstr "IO: schlechte Zeichenkette für Eingang in XML-Knoten \"%1\""
 
-#: io.cc:1069
+#: io.cc:1073
 msgid "IO: badly formed string in XML node for outputs \"%1\""
 msgstr "IO: schlecht geformte Zeichenkette in XML-Knoten für Ausgänge \"%1\""
 
-#: io.cc:1074
+#: io.cc:1078
 msgid "IO: bad output string in XML node \"%1\""
 msgstr "IO: schlechte Zeichenkette für Ausgang in XML-Knoten \"%1\""
 
-#: io.cc:1413
+#: io.cc:1416
 #, c-format
 msgid "%s %u"
 msgstr "%s %u"
 
-#: io.cc:1460
+#: io.cc:1463
 #, c-format
 msgid "%s in"
 msgstr "%s in"
 
-#: io.cc:1462
+#: io.cc:1465
 #, c-format
 msgid "%s out"
 msgstr "%s out"
 
-#: io.cc:1537 session.cc:733 session.cc:767
+#: io.cc:1540 session.cc:823 session.cc:857
 msgid "mono"
 msgstr "Mono"
 
-#: io.cc:1539 session.cc:746 session.cc:781
+#: io.cc:1542 session.cc:836 session.cc:871
 msgid "L"
 msgstr "L"
 
-#: io.cc:1539 session.cc:748 session.cc:783
+#: io.cc:1542 session.cc:838 session.cc:873
 msgid "R"
 msgstr "R"
 
-#: io.cc:1541 io.cc:1547
+#: io.cc:1544 io.cc:1550
 #, c-format
 msgid "%d"
 msgstr "%d"
@@ -1032,49 +1078,49 @@ msgstr "Fehler beim Sichern der Preset-Datei %1."
 msgid "Could not locate HOME.  Preset not saved."
 msgstr "Konnte HOME nicht eruieren. Preset nicht gesichert."
 
-#: location.cc:456
+#: location.cc:458
 msgid "You cannot put a CD marker at this position"
 msgstr "An dieser Stelle können Sie keinen CD-Marker ablegen"
 
-#: location.cc:608
+#: location.cc:610
 msgid "incorrect XML node passed to Location::set_state"
 msgstr "Unkorrekter XML-Knoten an Location::set_state weitergereicht"
 
-#: location.cc:613
+#: location.cc:615
 msgid "XML node for Location has no ID information"
 msgstr "XML-Knoten für Position hat keine ID-Information"
 
-#: location.cc:617
+#: location.cc:619
 msgid "XML node for Location has no name information"
 msgstr "XML-Knoten für Position hat keine Namensinformation"
 
-#: location.cc:624
+#: location.cc:626
 msgid "XML node for Location has no start information"
 msgstr "XML-Knoten für Position hat keine Start-Information"
 
-#: location.cc:635
+#: location.cc:637
 msgid "XML node for Location has no end information"
 msgstr "XML-Knoten für Position hat keine End-Information"
 
-#: location.cc:642
+#: location.cc:644
 msgid "XML node for Location has no flags information"
 msgstr "XML-Knoten für Position hat keine Flags-Information"
 
-#: location.cc:856
+#: location.cc:871
 msgid "Locations: attempt to use unknown location as selected location"
 msgstr ""
 "Locations: Versuch, eine unbekannte Position als ausgewählte Position zu "
 "verwenden"
 
-#: location.cc:1034
+#: location.cc:1049
 msgid "incorrect XML mode passed to Locations::set_state"
 msgstr "unkorrekter XML-Modus an Locations::set_state weitergereicht"
 
-#: location.cc:1047 session.cc:1293 session.cc:4919 session_state.cc:1053
+#: location.cc:1062 session.cc:1520 session.cc:5729 session_state.cc:1128
 msgid "session"
 msgstr "Projekt"
 
-#: location.cc:1112
+#: location.cc:1129
 msgid "could not load location from session file - ignored"
 msgstr "konnte Position nicht aus Projektdatei laden - ignoriert"
 
@@ -1128,16 +1174,16 @@ msgstr ""
 "Es gibt bereits eine Position mit diesem Namen.\n"
 "Sie können die importierte Position umbenennen:"
 
-#: ltc_slave.cc:272
+#: ltc_slave.cc:275
 msgid "Session framerate adjusted from %1 to LTC's %2."
 msgstr "Projekt-Framerate von %1 auf %2 (von LTC) geändert."
 
-#: ltc_slave.cc:286
+#: ltc_slave.cc:289
 msgid "Session and LTC framerate mismatch: LTC:%1 Session:%2."
 msgstr ""
 "Die Frameraten von Projekt und LTC unterscheiden sich: LTC: %1 Projekt: %2."
 
-#: ltc_slave.cc:603
+#: ltc_slave.cc:609
 msgid "flywheel"
 msgstr "Schwungrad"
 
@@ -1196,7 +1242,7 @@ msgstr ""
 "Keine SysExID für die Änderung der Eigenschaft \"sys-ex\" gefunden - "
 "ignoriert"
 
-#: midi_model.cc:1994
+#: midi_model.cc:1999
 msgid "transpose"
 msgstr "transponieren"
 
@@ -1204,7 +1250,7 @@ msgstr "transponieren"
 msgid "Duplicate MIDI device `%1' in `%2' ignored"
 msgstr "Doppeltes MIDI-Gerät '%1' in '%2' ignoriert"
 
-#: midi_scene_changer.cc:295
+#: midi_scene_changer.cc:309
 msgid "Scene "
 msgstr "Szene"
 
@@ -1248,27 +1294,27 @@ msgstr "Lautstärke für Monitor dämpfen"
 msgid "monitor solo boost level"
 msgstr "Lautstärke für Monitor Solo Boost"
 
-#: monitor_processor.cc:512
+#: monitor_processor.cc:511
 msgid "cut control %1"
 msgstr "Cut-Regler %1"
 
-#: monitor_processor.cc:513
+#: monitor_processor.cc:512
 msgid "dim control"
 msgstr "Dämpfungsschalter"
 
-#: monitor_processor.cc:514
+#: monitor_processor.cc:513
 msgid "polarity control"
 msgstr "Polaritätsschalter"
 
-#: monitor_processor.cc:515
+#: monitor_processor.cc:514
 msgid "solo control"
 msgstr "Solo-Schalter"
 
-#: mtc_slave.cc:240
+#: mtc_slave.cc:241
 msgid "MTC Slave: atomic read of current time failed, sleeping!"
 msgstr "MTC Slave: Fehler beim atomisches Lesen der momentanen Zeit, schlafe!"
 
-#: mtc_slave.cc:362
+#: mtc_slave.cc:363
 msgid ""
 "Unknown rate/drop value %1 in incoming MTC stream, session values used "
 "instead"
@@ -1276,11 +1322,11 @@ msgstr ""
 "Unbekannter Wert %1 für Rate/Abfall in eingehendem MTC-Datenstrom, verwende "
 "Projektwerte"
 
-#: mtc_slave.cc:382
+#: mtc_slave.cc:383
 msgid "Session framerate adjusted from %1 TO: MTC's %2."
 msgstr "Projekt-Framerate von %1 auf die von MTC: %2 geändert"
 
-#: mtc_slave.cc:396
+#: mtc_slave.cc:397
 msgid "Session and MTC framerate mismatch: MTC:%1 %2:%3."
 msgstr "Framerate von Projekt und MTC stimmen nicht überein: MTC: %1 %2: %3"
 
@@ -1380,11 +1426,11 @@ msgstr "Unbekanntes Panner-Plugin \"%1\" in Pan-Status gefunden - ignoriert"
 msgid "panner plugin node has no type information!"
 msgstr "Panner Plugin-Knoten hat keine Typinformation!"
 
-#: playlist.cc:2138
+#: playlist.cc:2140
 msgid "region state node has no ID, ignored"
 msgstr "Status-Knoten der Region hat keine ID, ignoriert"
 
-#: playlist.cc:2156
+#: playlist.cc:2158
 msgid "Playlist: cannot create region from XML"
 msgstr "Wiedergabeliste: kann Region aus XML nicht erzeugen"
 
@@ -1418,19 +1464,19 @@ msgstr ""
 msgid "programming error: "
 msgstr "Programmierfehler:"
 
-#: plugin_insert.cc:933
+#: plugin_insert.cc:1002
 msgid "XML node describing plugin is missing the `type' field"
 msgstr "Dem XML-Knoten zur Beschreibung des Plugins fehlt das \"type\"-Feld"
 
-#: plugin_insert.cc:948
+#: plugin_insert.cc:1017
 msgid "unknown plugin type %1 in plugin insert state"
 msgstr "Unbekannter Plugintyp %1 im Einfüge-Status des Plugins"
 
-#: plugin_insert.cc:976
+#: plugin_insert.cc:1045
 msgid "Plugin has no unique ID field"
 msgstr "Das Plugin hat kein Feld für die eindeutige ID"
 
-#: plugin_insert.cc:1001
+#: plugin_insert.cc:1070
 msgid ""
 "Found a reference to a plugin (\"%1\") that is unknown.\n"
 "Perhaps it was removed or moved since it was last used."
@@ -1438,15 +1484,15 @@ msgstr ""
 "Referenz auf ein unbekanntes Plugin (\"%1\") gefunden.\n"
 "Vielleicht wurde es seit der letzten Verwendung entfernt oder verschoben."
 
-#: plugin_insert.cc:1115
+#: plugin_insert.cc:1193
 msgid "PluginInsert: Auto: no ladspa port number"
 msgstr "PluginInsert: Auto: keine LADSPA Portnummer"
 
-#: plugin_insert.cc:1122
+#: plugin_insert.cc:1200
 msgid "PluginInsert: Auto: port id out of range"
 msgstr "PluginInsert: Auto: Port-ID Bereichsüberschreitung"
 
-#: plugin_insert.cc:1158
+#: plugin_insert.cc:1236
 msgid "PluginInsert: automatable control %1 not found - ignored"
 msgstr ""
 "PluginInsert: automatisierbares Kontrollelement %1 nicht gefunden - ignoriert"
@@ -1455,63 +1501,108 @@ msgstr ""
 msgid "Discovering Plugins"
 msgstr "Finde Plugins"
 
-#: plugin_manager.cc:231
+#: plugin_manager.cc:237
 msgid "Scanning LADSPA Plugins"
 msgstr "Scanne LADSPA Plugins"
 
-#: plugin_manager.cc:234
+#: plugin_manager.cc:240
 msgid "Scanning LV2 Plugins"
 msgstr "Scanne LV2 Plugins"
 
-#: plugin_manager.cc:239
+#: plugin_manager.cc:246
 msgid "Scanning Windows VST Plugins"
 msgstr "Scanne Windows VST Plugins"
 
-#: plugin_manager.cc:246
+#: plugin_manager.cc:248
+msgid "Discovering Windows VST Plugins"
+msgstr "Halte Ausschau nach Windows VST Plugins"
+
+#: plugin_manager.cc:257
 msgid "Scanning Linux VST Plugins"
 msgstr "Scanne Linux VST Plugins"
 
-#: plugin_manager.cc:252
+#: plugin_manager.cc:259
+msgid "Discovering Linux VST Plugins"
+msgstr "Halte Ausschau nach Linux VST Plugins"
+
+#: plugin_manager.cc:272
+msgid "VST Blacklist:"
+msgstr "VST Schwarzliste:"
+
+#: plugin_manager.cc:279
 msgid "Scanning AU Plugins"
 msgstr "Scanne AU Plugins"
 
-#: plugin_manager.cc:256
+#: plugin_manager.cc:281
+msgid "Discovering AU Plugins"
+msgstr "Halte Ausschau nach AU Plugins"
+
+#: plugin_manager.cc:286
 msgid "Plugin Scan Complete..."
 msgstr "Plugin-Scan abgeschlossen"
 
-#: plugin_manager.cc:393
+#: plugin_manager.cc:470
 msgid "LADSPA"
 msgstr "LADSPA"
 
-#: plugin_manager.cc:445
+#: plugin_manager.cc:522
 msgid "Could not parse rdf file: %1"
 msgstr "Konnte RDF-Datei: %1 nicht parsen"
 
-#: plugin_manager.cc:482
+#: plugin_manager.cc:559
 msgid "LADSPA: cannot load module \"%1\" (%2)"
 msgstr "LADSPA: kann Modul \"%1\" nicht laden (%2)"
 
-#: plugin_manager.cc:489
+#: plugin_manager.cc:566
 msgid "LADSPA: module \"%1\" has no descriptor function."
 msgstr "LADSPA: Modul \"%1\" hat keine Beschreibungsfunktion."
 
-#: plugin_manager.cc:705
+#: plugin_manager.cc:765
+msgid "--- Windows VST plugins Scan: %1"
+msgstr "--- Windows VST plugins Scan: %1"
+
+#: plugin_manager.cc:771
 msgid "VST"
 msgstr "VST"
 
-#: plugin_manager.cc:732
+#: plugin_manager.cc:776
+msgid "--- Windows VST plugins Scan Done"
+msgstr "--- Windows VST plugins Scan Fertig"
+
+#: plugin_manager.cc:788
+msgid " *  %1 %2"
+msgstr " *  %1 %2"
+
+#: plugin_manager.cc:788
+msgid " (cache only)"
+msgstr " (nur Cache)"
+
+#: plugin_manager.cc:801
+msgid " -> Cannot get Windows VST information, plugin ignored."
+msgstr ""
+"Kann Windows VST Informationen nicht erhalten, Plugin \"%1\" wird ignoriert."
+
+#: plugin_manager.cc:812
 msgid ""
-"VST plugin %1 does not support processReplacing, and so cannot be used in %2 "
-"at this time"
+"VST plugin %1 does not support processReplacing, and cannot be used in %2 at "
+"this time"
 msgstr ""
-"VST-Plugin %1 unterstützt kein processReplacing und kann daher zur Zeit "
-"nicht mit %2 benützt werden"
+"VST-Plugin %1 unterstützt kein processReplacing und kann zur Zeit nicht mit "
+"%2 benützt werden"
+
+#: plugin_manager.cc:847
+msgid "Ignoring duplicate Windows VST plugin \"%1\""
+msgstr "Ignoriere Duplikat des Windows VST Plugins \"%1\""
+
+#: plugin_manager.cc:859
+msgid " -> OK (VST Plugin \"%1\" was added)."
+msgstr " -> OK (VST Plugin \"%1\" hinzugefügt)."
 
-#: plugin_manager.cc:824
+#: plugin_manager.cc:907
 msgid "LXVST"
 msgstr "LXVST"
 
-#: plugin_manager.cc:851
+#: plugin_manager.cc:934
 msgid ""
 "linuxVST plugin %1 does not support processReplacing, and so cannot be used "
 "in %2 at this time"
@@ -1519,15 +1610,15 @@ msgstr ""
 "linuxVST-Plugin %1 unterstützt kein processReplacing und kann daher zur Zeit "
 "nicht mit %2 benützt werden"
 
-#: plugin_manager.cc:1020
+#: plugin_manager.cc:1103
 msgid "unknown plugin status type \"%1\" - all entries ignored"
 msgstr "unbekannter Plugin-Statustyp \"%1\" - alle Einträge ignoriert"
 
-#: plugin_manager.cc:1037
+#: plugin_manager.cc:1120
 msgid "unknown plugin type \"%1\" - ignored"
 msgstr "unbekannter Plugintyp \"%1\" - ignoriert"
 
-#: port.cc:450
+#: port.cc:455
 msgid "could not reregister %1"
 msgstr "konnte %1 nicht erneut registrieren"
 
@@ -1535,16 +1626,16 @@ msgstr "konnte %1 nicht erneut registrieren"
 msgid "insert %1"
 msgstr "%1 einfügen"
 
-#: port_insert.cc:197
+#: port_insert.cc:204
 msgid "XML node describing port insert is missing the `type' field"
 msgstr ""
 "Dem XML-Knoten zur Beschreibung des Port-Insert fehlt das Feld \"type\""
 
-#: port_insert.cc:202
+#: port_insert.cc:209
 msgid "non-port insert XML used for port plugin insert"
 msgstr "Nicht-Port-Insert XML zum Einfügen eines Port-Plugin benutzt"
 
-#: port_manager.cc:287
+#: port_manager.cc:290
 msgid ""
 "a port with the name \"%1\" already exists: check for duplicated track/bus "
 "names"
@@ -1552,7 +1643,7 @@ msgstr ""
 "Ein Port mit Namen \"%1\" existiert bereits: Prüfen Sie auf doppelte Spur/"
 "Busnamen"
 
-#: port_manager.cc:289
+#: port_manager.cc:292
 msgid ""
 "No more ports are available. You will need to stop %1 and restart with more "
 "ports if you need this many tracks."
@@ -1560,19 +1651,19 @@ msgstr ""
 "Keine Ports mehr verfügbar. Wenn Sie so viele Spuren brauchen, müssen Sie %1 "
 "stoppen und mit mehr Ports neu starten."
 
-#: port_manager.cc:292
+#: port_manager.cc:295
 msgid "AudioEngine: cannot register port \"%1\": %2"
 msgstr "AudioEngine: kann Port \"%1\": %2 nicht registrieren"
 
-#: port_manager.cc:331
+#: port_manager.cc:334
 msgid "unable to create port: %1"
 msgstr "kann Port: %1 nicht erzeugen"
 
-#: port_manager.cc:418
+#: port_manager.cc:421
 msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)"
 msgstr "AudioEngine: kann %1 (%2) nicht mit %3 (%4) verbinden"
 
-#: port_manager.cc:470 port_manager.cc:471
+#: port_manager.cc:473 port_manager.cc:474
 msgid "Re-establising port %1 failed"
 msgstr "Portwiederherstellung fehlgeschlagen"
 
@@ -1584,19 +1675,19 @@ msgstr "Kein Flag für Eigenschaft \"%1\" in Element %2"
 msgid "No child node with active property"
 msgstr "Kein Kindknoten mit der Eigenschaft \"aktiv\""
 
-#: rc_configuration.cc:91
+#: rc_configuration.cc:92
 msgid "Loading system configuration file %1"
 msgstr "Lade Systemkonfigurationsdatei %1"
 
-#: rc_configuration.cc:95
+#: rc_configuration.cc:96
 msgid "%1: cannot read system configuration file \"%2\""
 msgstr "%1: kann Systemkonfigurationsdatei \"%2\" nicht lesen"
 
-#: rc_configuration.cc:100
+#: rc_configuration.cc:101
 msgid "%1: system configuration file \"%2\" not loaded successfully."
 msgstr "%1: Systemkonfigurationsdatei \"%2\" konnte nicht geladen werden."
 
-#: rc_configuration.cc:104
+#: rc_configuration.cc:105
 msgid ""
 "Your system %1 configuration file is empty. This probably means that there "
 "was an error installing %1"
@@ -1604,30 +1695,34 @@ msgstr ""
 "Ihre %1-Systemkonfigurationsdatei ist leer. Das deutet möglicherweise darauf "
 "hin, daß bei der Installation von %1 Fehler auftraten."
 
-#: rc_configuration.cc:119
+#: rc_configuration.cc:120
 msgid "Loading user configuration file %1"
 msgstr "Lade Benutzerkonfiguration %1"
 
-#: rc_configuration.cc:123
+#: rc_configuration.cc:124
 msgid "%1: cannot read configuration file \"%2\""
 msgstr "%1: kann Konfigurationsdatei \"%2\" nicht lesen"
 
-#: rc_configuration.cc:128
+#: rc_configuration.cc:129
 msgid "%1: user configuration file \"%2\" not loaded successfully."
 msgstr "%1: Benutzerkonfiguration \"%2\" konnte nicht geladen werden."
 
-#: rc_configuration.cc:132
+#: rc_configuration.cc:133
 msgid "your %1 configuration file is empty. This is not normal."
 msgstr "Ihre %1-Konfigurationsdatei ist leer. Das ist nicht normal."
 
-#: rc_configuration.cc:149
+#: rc_configuration.cc:150
 msgid "Config file %1 not saved"
 msgstr "Konfigurationsdatei %1 nicht gesichert"
 
-#: recent_sessions.cc:54
+#: recent_sessions.cc:55
 msgid "cannot open recent session file %1 (%2)"
 msgstr "Kann kürzlich geöffnete Datei %1 nicht öffnen (%2)"
 
+#: recent_sessions.cc:97
+msgid "cannot open recent template file %1 (%2)"
+msgstr "Kann  kürzlich verwendete Vorlagendatei %1 (%2) nicht öffnen"
+
 #: region_factory.cc:78 region_factory.cc:120 region_factory.cc:161
 #: region_factory.cc:203
 msgid ""
@@ -1648,11 +1743,11 @@ msgstr "%1 verbunden-%2.1 (%3)"
 msgid "cannot create new name for region \"%1\""
 msgstr "kann keinen neuen Namen für Region \"%1\" erzeugen"
 
-#: resampled_source.cc:102
+#: resampled_source.cc:106
 msgid "Import: %1"
 msgstr "Import: %1"
 
-#: resampled_source.cc:132 srcfilesource.cc:75
+#: resampled_source.cc:135 srcfilesource.cc:75
 msgid "Import: src_new() failed : %1"
 msgstr "Import: Fehler in src_new() : %1"
 
@@ -1660,29 +1755,29 @@ msgstr "Import: Fehler in src_new() : %1"
 msgid "return %1"
 msgstr "Rückgabewert: %1"
 
-#: route.cc:1218 route.cc:2701
+#: route.cc:1311 route.cc:2888
 msgid "unknown Processor type \"%1\"; ignored"
 msgstr "unbekannter Prozessortyp \"%1\"; ignoriert"
 
-#: route.cc:1240
+#: route.cc:1333
 msgid "processor could not be created. Ignored."
 msgstr "Prozessor konnte nicht erzeugt werden. Ignoriert."
 
-#: route.cc:2126 route.cc:2355
+#: route.cc:2314 route.cc:2539
 msgid "Bad node sent to Route::set_state() [%1]"
 msgstr "Schlechter Knoten an Route::set_state() gesendet [%1]"
 
-#: route.cc:2186
+#: route.cc:2374
 msgid "Pannable state found for route (%1) without a panner!"
 msgstr "Pannerziel-Status für Route (%1) ohne Panner gefunden!"
 
-#: route.cc:2260 route.cc:2264 route.cc:2469 route.cc:2473
+#: route.cc:2448 route.cc:2452 route.cc:2653 route.cc:2657
 msgid "badly formed order key string in state file! [%1] ... ignored."
 msgstr ""
 "schlecht geformte Zeichenkette für den Schlüssel der Sortierreihenfolge in "
 "der Projektdatei! [%1] ... ignoriert"
 
-#: route.cc:2479
+#: route.cc:2663
 msgid "Converting deprecated order key for %1 using Editor order %2"
 msgstr ""
 "Konvertiere veralteten Sortierschlüssel für %1 unter Nutzung der "
@@ -1714,97 +1809,97 @@ msgstr "Send %1"
 msgid "programming error: send created using role %1"
 msgstr "Programmierfehler: Send erzeugt mittels Rolle %1"
 
-#: session.cc:357
+#: session.cc:391
 msgid "Connect to engine"
 msgstr "Verbinde zur Engine"
 
-#: session.cc:362
+#: session.cc:442
 msgid "Session loading complete"
 msgstr "Laden des Projektes abgeschlossen"
 
-#: session.cc:434
+#: session.cc:513
 msgid "Set up LTC"
 msgstr "LTC einrichten"
 
-#: session.cc:436
+#: session.cc:515
 msgid "Set up Click"
 msgstr "Klick einrichten"
 
-#: session.cc:438
+#: session.cc:517
 msgid "Set up standard connections"
 msgstr "Richte Standard-Verbindungen ein"
 
-#: session.cc:664
+#: session.cc:754
 msgid "could not setup Click I/O"
 msgstr "konnte Metronom-E/A nicht einrichten"
 
-#: session.cc:727
+#: session.cc:817
 #, c-format
 msgid "out %s"
 msgstr "aus %s"
 
-#: session.cc:729
+#: session.cc:819
 #, c-format
 msgid "out %<PRIu32>"
 msgstr "out %<PRIu32>"
 
-#: session.cc:744
+#: session.cc:834
 #, c-format
 msgid "out %<PRIu32>+%<PRIu32>"
 msgstr "out %<PRIu32>+%<PRIu32>"
 
-#: session.cc:761
+#: session.cc:851
 #, c-format
 msgid "in %s"
 msgstr "in %s"
 
-#: session.cc:763
+#: session.cc:853
 #, c-format
 msgid "in %<PRIu32>"
 msgstr "in %<PRIu32>"
 
-#: session.cc:778
+#: session.cc:868
 #, c-format
 msgid "in %<PRIu32>+%<PRIu32>"
 msgstr "in %<PRIu32>+%<PRIu32>"
 
-#: session.cc:852
+#: session.cc:948
 msgid "cannot connect master output %1 to %2"
 msgstr "kann Master-Ausgang %1 nicht mit %2 verbinden"
 
-#: session.cc:921
+#: session.cc:1017
 msgid "Monitor"
 msgstr "Monitor"
 
-#: session.cc:966
+#: session.cc:1062 session.cc:1188
 msgid "cannot connect control input %1 to %2"
 msgstr "kann Kontrolleingang %1 nicht mit %2 verbinden"
 
-#: session.cc:986
+#: session.cc:1082 session.cc:1207
 msgid "The preferred I/O for the monitor bus (%1) cannot be found"
 msgstr "Bevorzugte E/A für den Monitorbus (%1) kann nicht gefunden werden"
 
-#: session.cc:1017
+#: session.cc:1113 session.cc:1238
 msgid "cannot connect control output %1 to %2"
 msgstr "kann Kontrollausgang %1 nicht mit %2 verbinden"
 
-#: session.cc:1085
+#: session.cc:1296
 msgid "cannot create Auditioner: no auditioning of regions possible"
 msgstr ""
 "Kann das Vorhör-System nicht einrichten: kein Vorhören von Regionen möglich"
 
-#: session.cc:1270
+#: session.cc:1497
 msgid "Session: you can't use that location for auto punch (start <= end)"
 msgstr ""
 "Session: Sie können diese Position nicht für Auto-Punch verwenden (Start <= "
 "Ende) "
 
-#: session.cc:1297
+#: session.cc:1524
 msgid "Session: you can't use that location for session start/end)"
 msgstr ""
 "Projekt: Sie können diesen Zeitpunkt nicht als Projektanfang/ende benutzen"
 
-#: session.cc:1329
+#: session.cc:1556
 msgid ""
 "You cannot use this location for auto-loop because it has zero or negative "
 "length"
@@ -1812,19 +1907,31 @@ msgstr ""
 "Sie können diese Position nicht für \"automatische Schleife\" verwenden, da "
 "sie keine oder eine negative Länge hat"
 
-#: session.cc:1497
+#: session.cc:1739
 msgid "programming error: session range removed!"
 msgstr "Programmierfehler: Projektbereich entfernt!"
 
-#: session.cc:1751
+#: session.cc:2004
 msgid "feedback loop setup between %1 and %2"
 msgstr "Feedbackschleife zwischen %1 und %2 erkannt"
 
-#: session.cc:2047
+#: session.cc:2240
+msgid "Track "
+msgstr "Spur "
+
+#: session.cc:2242
+msgid "Audio "
+msgstr "Audio "
+
+#: session.cc:2247
+msgid "MIDI "
+msgstr "MIDI"
+
+#: session.cc:2322
 msgid "Session: could not create new midi track."
 msgstr "Session: konnte keine neue MIDI-Spur erzeugen."
 
-#: session.cc:2053
+#: session.cc:2328
 msgid ""
 "No more JACK ports are available. You will need to stop %1 and restart JACK "
 "with more ports if you need this many tracks."
@@ -1832,77 +1939,73 @@ msgstr ""
 "Keine JACK-Ports mehr verfügbar. Wenn Sie so viele Spuren benötigen, müssen "
 "Sie %1 stoppen und JACK mit mehr Ports neu starten."
 
-#: session.cc:2239 session.cc:2242
-msgid "Audio"
-msgstr "Audio"
-
-#: session.cc:2266 session.cc:2274 session.cc:2352 session.cc:2360
+#: session.cc:2848 session.cc:2856 session.cc:2940 session.cc:2948
 msgid "cannot configure %1 in/%2 out configuration for new audio track"
 msgstr "kann %1 ein/%2 aus für neue Audiospur nicht konfigurieren"
 
-#: session.cc:2297
+#: session.cc:2881
 msgid "Session: could not create new audio track."
 msgstr "Session: konnte keine neue Audiospur erzeugen"
 
-#: session.cc:2330 session.cc:2333
+#: session.cc:2918 session.cc:2921
 msgid "Bus"
 msgstr "Bus"
 
-#: session.cc:2383
+#: session.cc:2973
 msgid "Session: could not create new audio route."
 msgstr "Session: konnte keine neueAudio-Route  erzeugen"
 
-#: session.cc:2443 session.cc:2453
+#: session.cc:3037 session.cc:3047
 msgid "Session: UINT_MAX routes? impossible!"
 msgstr "Session: UINT_MAX Routen? unmöglich!"
 
-#: session.cc:2475
+#: session.cc:3069
 msgid "Session: cannot create track/bus from template description"
 msgstr "Session: Kann die Route aus der Vorlagenbeschreibung nicht erzeugen"
 
-#: session.cc:2501
+#: session.cc:3097
 msgid "Session: could not create new route from template"
 msgstr "Session: konnte keine neue Route aus der Vorlage erzeugen."
 
-#: session.cc:2531
+#: session.cc:3131
 msgid "Adding new tracks/busses failed"
 msgstr "Fehler beim Hinzufügen neuer Spuren/Busse"
 
-#: session.cc:3671
+#: session.cc:4452
 msgid "Merging embedded file %1: name collision AND md5 hash collision!"
 msgstr ""
 "Zusammenführen der eingebetteten Datei %1: Namenskollision UND md5 hash "
 "Kollision!"
 
-#: session.cc:3801 session.cc:3874
+#: session.cc:4582 session.cc:4655
 msgid "There are already %1 recordings for %2, which I consider too many."
 msgstr "Es gibt bereits %1 Aufnahmen für %2, was ich als zu viele erachte."
 
-#: session.cc:4316
+#: session.cc:5097
 msgid "send ID %1 appears to be in use already"
 msgstr "Send ID %1 ist offenbar schon in Gebrauch"
 
-#: session.cc:4328
+#: session.cc:5109
 msgid "aux send ID %1 appears to be in use already"
 msgstr "Aux-Send ID %1 ist offenbar schon in Gebrauch"
 
-#: session.cc:4340
+#: session.cc:5121
 msgid "return ID %1 appears to be in use already"
 msgstr "Return ID %1 ist offenbar schon in Gebrauch"
 
-#: session.cc:4352
+#: session.cc:5133
 msgid "insert ID %1 appears to be in use already"
 msgstr "Insert ID %1 ist offenbar schon in Gebrauch"
 
-#: session.cc:4477
+#: session.cc:5258
 msgid "Cannot write a range where end <= start (e.g. %1 <= %2)"
 msgstr "Kann einen Bereich mit Ende <= Start nicht schreiben (z.B. %1 <= %2)"
 
-#: session.cc:4486
+#: session.cc:5267
 msgid "Cannot write a range with no data."
 msgstr "Kann einen Bereich ohne Daten nicht schreiben."
 
-#: session.cc:4528
+#: session.cc:5309
 msgid "cannot create new file \"%1\" for %2"
 msgstr "Kann neue Datei \"%1\" für %2 nicht erzeugen"
 
@@ -1963,7 +2066,7 @@ msgstr "Kann Projektverzeichnis im Pfad %1 nicht erzeugen. Fehler: %2"
 msgid "Session subdirectory does not exist at path %1"
 msgstr "Projektunterverzeichnis im Pfad %1 existiert nicht"
 
-#: session_events.cc:234
+#: session_events.cc:229
 msgid "Session: cannot have two events of type %1 at the same frame (%2)."
 msgstr ""
 "Session: zwei Ereignisse des Typs %1 können nicht im selben Frame existieren "
@@ -1985,7 +2088,7 @@ msgstr ""
 "LTC-Kodierer: ungültige Framerate - das Kodieren von LTC wird für den "
 "restlichen Teil dieses Projekts ausgesetzt."
 
-#: session_midi.cc:520
+#: session_midi.cc:534
 msgid "Session: cannot send quarter-frame MTC message (%1)"
 msgstr "Session: kann quarter-frame MTC-Nachricht nicht senden (%1)"
 
@@ -1993,97 +2096,105 @@ msgstr "Session: kann quarter-frame MTC-Nachricht nicht senden (%1)"
 msgid "Session: cannot create Playlist from XML description."
 msgstr "Session: kann Wiedergabeliste nicht aus der XML-Beschreibung erzeugen"
 
-#: session_process.cc:136
+#: session_process.cc:159
 msgid "Session: error in no roll for %1"
 msgstr "Session: Fehler in no_roll für %1"
 
-#: session_process.cc:1174
+#: session_process.cc:1199
 msgid "Programming error: illegal event type in process_event (%1)"
 msgstr "Programmierfehler: illegaler Ereignistyp in process_event (%1)"
 
-#: session_state.cc:179
+#: session_state.cc:185
 msgid "solo cut control (dB)"
 msgstr "Solo Cut Einstellung (dB)"
 
-#: session_state.cc:203
+#: session_state.cc:209
 msgid "Set block size and sample rate"
 msgstr "Setze Blockgröße und Samplerate"
 
-#: session_state.cc:208
+#: session_state.cc:214
 msgid "Using configuration"
 msgstr "Benutze Konfiguration"
 
-#: session_state.cc:331
+#: session_state.cc:339
 msgid "Reset Remote Controls"
 msgstr "Fernbedienungen zurücksetzen"
 
-#: session_state.cc:423
+#: session_state.cc:368 session_state.cc:400
+msgid "Filling playback buffers"
+msgstr "Fülle Wiedergabepuffer"
+
+#: session_state.cc:466
 msgid "Session: cannot create session peakfile folder \"%1\" (%2)"
 msgstr "Session: kann den Peakfile Ordner \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:430
+#: session_state.cc:473
 msgid "Session: cannot create session sounds dir \"%1\" (%2)"
 msgstr ""
 "Session: kann das Projektverzeichnis für Sounddateien \"%1\" nicht erzeugen "
 "(%2)"
 
-#: session_state.cc:437
+#: session_state.cc:480
 msgid "Session: cannot create session midi dir \"%1\" (%2)"
 msgstr ""
 "Session: kann das Projektverzeichnis für MIDI \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:444
+#: session_state.cc:487
 msgid "Session: cannot create session dead sounds folder \"%1\" (%2)"
 msgstr "Session: kann den Mülleimer des Projektes \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:451
+#: session_state.cc:494
 msgid "Session: cannot create session export folder \"%1\" (%2)"
 msgstr ""
 "Session: kann den Projektordner für Exportdateien \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:458
+#: session_state.cc:501
 msgid "Session: cannot create session analysis folder \"%1\" (%2)"
 msgstr ""
 "Session: kann den Projektordner für Analysedaten \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:465
+#: session_state.cc:508
 msgid "Session: cannot create session plugins folder \"%1\" (%2)"
 msgstr "Session: kann den Projektordner für Plugins \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:472
+#: session_state.cc:515
 msgid "Session: cannot create session externals folder \"%1\" (%2)"
 msgstr ""
 "Session: kann den Projektordner für Externals \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:486
+#: session_state.cc:529
 msgid "Session: cannot create session folder \"%1\" (%2)"
 msgstr "Session: kann den Projektordner \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:520
+#: session_state.cc:565
 msgid "Could not open %1 for writing session template"
 msgstr "Konnte %1 nicht zum Schreiben der Projektvorlage öffnen"
 
-#: session_state.cc:526
+#: session_state.cc:571
 msgid "Could not open session template %1 for reading"
 msgstr "Konnte Projektvorlage %1 nicht zum Lesen öffnen"
 
-#: session_state.cc:545
+#: session_state.cc:589
+msgid "Loop"
+msgstr "Schleife"
+
+#: session_state.cc:605
 msgid "Master"
 msgstr "Master"
 
-#: session_state.cc:606
+#: session_state.cc:670
 msgid "Could not remove pending capture state at path \"%1\" (%2)"
 msgstr "Konnte vorläufigen Aufnahmestatus im Pfad \"%1\" nicht entfernen (%2)"
 
-#: session_state.cc:630
+#: session_state.cc:694
 msgid "could not rename snapshot %1 to %2 (%3)"
 msgstr "Konnte  Schnappschuss %1 nicht auf %2 umbenennen (%3)"
 
-#: session_state.cc:658
+#: session_state.cc:722
 msgid "Could not remove session file at path \"%1\" (%2)"
 msgstr "Konnte Projektdatei im Pfad \"%1\" nicht entfernen (%2)"
 
-#: session_state.cc:685
+#: session_state.cc:749
 msgid ""
 "the %1 audio engine is not connected and state saving would lose all I/O "
 "connections. Session not saved"
@@ -2091,148 +2202,148 @@ msgstr ""
 "die %1 Audio-Engine ist nicht verbunden, beim Sichern würden Sie daher alle "
 "E/A-Verbindungen verlieren. Projekt nicht gesichert"
 
-#: session_state.cc:736
+#: session_state.cc:804
 msgid "state could not be saved to %1"
 msgstr "Status konnte nicht nach %1 gesichert werden"
 
-#: session_state.cc:738 session_state.cc:749
+#: session_state.cc:806 session_state.cc:819
 msgid "Could not remove temporary session file at path \"%1\" (%2)"
 msgstr "Konnte temporäre Projektdatei im Pfad \"%1\" nicht entfernen (%2)"
 
-#: session_state.cc:746
+#: session_state.cc:816
 msgid "could not rename temporary session file %1 to %2 (%3)"
 msgstr "konnte temporäre Projektdatei %1 nicht nach %2 umbenennen(%3)"
 
-#: session_state.cc:814
+#: session_state.cc:884
 msgid "%1: session file \"%2\" doesn't exist!"
 msgstr "%1: Projektdatei \"%2\" existiert nicht!"
 
-#: session_state.cc:826
+#: session_state.cc:896
 msgid "Could not understand session file %1"
 msgstr "Konnte Projektdatei \"%1\" nicht verstehen"
 
-#: session_state.cc:835
+#: session_state.cc:905
 msgid "Session file %1 is not a session"
 msgstr "Projektdatei %1 ist kein Projekt"
 
-#: session_state.cc:1147
+#: session_state.cc:1232
 msgid "programming error: Session: incorrect XML node sent to set_state()"
 msgstr ""
 "Programmierfehler: Session: Inkorrekter XML-Knoten an send_state() gesendet"
 
-#: session_state.cc:1201
+#: session_state.cc:1286
 msgid "Session: XML state has no options section"
 msgstr "Session: XML hat keinen Abschnitt \"options\""
 
-#: session_state.cc:1206
+#: session_state.cc:1291
 msgid "Session: XML state has no metadata section"
 msgstr "Session: XML hat keinen Abschnitt \"metadata\""
 
-#: session_state.cc:1217
+#: session_state.cc:1302
 msgid "Session: XML state has no sources section"
 msgstr "Session: XML hat keinen Abschnitt \"sources\""
 
-#: session_state.cc:1224
+#: session_state.cc:1309
 msgid "Session: XML state has no Tempo Map section"
 msgstr "Session: XML hat keinen Abschnitt \"Tempo Map\""
 
-#: session_state.cc:1231
+#: session_state.cc:1316
 msgid "Session: XML state has no locations section"
 msgstr "Session: XML hat keinen Abschnitt \"locations\""
 
-#: session_state.cc:1244
+#: session_state.cc:1329
 msgid "Session: XML state has no Regions section"
 msgstr "Session: XML hat keinen Abschnitt \"Regions\""
 
-#: session_state.cc:1251
+#: session_state.cc:1336
 msgid "Session: XML state has no playlists section"
 msgstr "Session: XML hat keinen Abschnitt \"playlists\""
 
-#: session_state.cc:1271
+#: session_state.cc:1356
 msgid "Session: XML state has no bundles section"
 msgstr "Session: XML hat keinen Abschnitt \"bundles\""
 
-#: session_state.cc:1283
+#: session_state.cc:1368
 msgid "Session: XML state has no diskstreams section"
 msgstr "Session: XML hat keinen Abschnitt \"diskstreams\""
 
-#: session_state.cc:1291
+#: session_state.cc:1376
 msgid "Session: XML state has no routes section"
 msgstr "Session: XML hat keinen Abschnitt \"routes\""
 
-#: session_state.cc:1303
+#: session_state.cc:1388
 msgid "Session: XML state has no route groups section"
 msgstr "Session: XML hat keinen Abschnitt \"route groups\""
 
-#: session_state.cc:1312
+#: session_state.cc:1397
 msgid "Session: XML state has no edit groups section"
 msgstr "Session: XML hat keinen Abschnitt \"edit groups\""
 
-#: session_state.cc:1319
+#: session_state.cc:1404
 msgid "Session: XML state has no mix groups section"
 msgstr "Session: XML hat keinen Abschnitt \"mix groups\""
 
-#: session_state.cc:1327
+#: session_state.cc:1412
 msgid "Session: XML state has no click section"
 msgstr "Session: XML hat keinen Abschnitt \"click\""
 
-#: session_state.cc:1373
+#: session_state.cc:1458
 msgid "Session: cannot create Route from XML description."
 msgstr "Session: Kann die Route aus der XML-Beschreibung nicht erzeugen"
 
-#: session_state.cc:1377
+#: session_state.cc:1462
 msgid "Loaded track/bus %1"
 msgstr "Spur/Bus %1 wurde geladen"
 
-#: session_state.cc:1382
+#: session_state.cc:1467
 msgid "Tracks/busses loaded;  Adding to Session"
 msgstr "Spuren/Busse geladen; Füge sie dem Projekt hinzu"
 
-#: session_state.cc:1386
+#: session_state.cc:1471
 msgid "Finished adding tracks/busses"
 msgstr "Hinzufügen der Spuren/Busse abgeschlossen"
 
-#: session_state.cc:1485
+#: session_state.cc:1570
 msgid "Could not find diskstream for route"
 msgstr "Konnte Diskstream für Route nicht finden"
 
-#: session_state.cc:1545
+#: session_state.cc:1630
 msgid "Session: cannot create Region from XML description."
 msgstr "Session: kann Region nicht aus XML-Beschreibung erzeugen"
 
-#: session_state.cc:1549
+#: session_state.cc:1634
 msgid "Can not load state for region '%1'"
 msgstr "Kann Status für Region '%1' nicht laden"
 
-#: session_state.cc:1585
+#: session_state.cc:1670
 msgid "Regions in compound description not found (ID's %1 and %2): ignored"
 msgstr ""
 "Regionen der Verbindungsbeschreibung nicht gefunden (IDs %1 and %2): "
 "ignoriert"
 
-#: session_state.cc:1613
+#: session_state.cc:1698
 msgid "Nested source has no ID info in session file! (ignored)"
 msgstr ""
 "Verschachtelte Quelle hat keine ID-Information in Projektdatei! (ignoriert)"
 
-#: session_state.cc:1625
+#: session_state.cc:1710
 msgid "Cannot reconstruct nested source for region %1"
 msgstr "Kann verschachtelte Quelle für Region %1 nicht wiederherstellen"
 
-#: session_state.cc:1687
+#: session_state.cc:1772
 msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)"
 msgstr ""
 "Session: XML-Knoten zur Beschreibung einer Audioregion ist unvollständig "
 "(Quelle fehlt)"
 
-#: session_state.cc:1695 session_state.cc:1716 session_state.cc:1736
+#: session_state.cc:1780 session_state.cc:1801 session_state.cc:1821
 msgid ""
 "Session: XMLNode describing a AudioRegion references an unknown source id =%1"
 msgstr ""
 "Session: XML-Knoten zur Beschreibung einer Audioregion referenziert eine "
 "unbekannte Quell-ID =%1"
 
-#: session_state.cc:1701 session_state.cc:1722 session_state.cc:1742
+#: session_state.cc:1786 session_state.cc:1807 session_state.cc:1827
 msgid ""
 "Session: XMLNode describing a AudioRegion references a non-audio source id ="
 "%1"
@@ -2240,7 +2351,7 @@ msgstr ""
 "Session: XML-Knoten zur Beschreibung einer Audioregion referenziert eine "
 "Nicht-Audio Quell-ID =%1"
 
-#: session_state.cc:1765
+#: session_state.cc:1850
 msgid ""
 "Session: XMLNode describing an AudioRegion is missing some master sources; "
 "ignored"
@@ -2248,31 +2359,31 @@ msgstr ""
 "Session: dem XML-Knoten zur Beschreibung einer Audioregion fehlen einige "
 "Hauptquellen; ignoriert"
 
-#: session_state.cc:1799
+#: session_state.cc:1884
 msgid "Session: XMLNode describing a MidiRegion is incomplete (no source)"
 msgstr ""
 "Session: XML-Knoten zur Beschreibung einer MIDI-Region ist unvollständig "
 "(Quelle fehlt)"
 
-#: session_state.cc:1807
+#: session_state.cc:1892
 msgid ""
 "Session: XMLNode describing a MidiRegion references an unknown source id =%1"
 msgstr ""
 "Session: XML-Knoten zur Beschreibung einer MIDI-Region referenziert eine "
 "unbekannte Quell-ID =%1"
 
-#: session_state.cc:1813
+#: session_state.cc:1898
 msgid ""
 "Session: XMLNode describing a MidiRegion references a non-midi source id =%1"
 msgstr ""
 "Session: XML-Knoten zur Beschreibung einer MIDI-Region referenziert eine "
 "Nicht-MIDI Quell-ID =%1"
 
-#: session_state.cc:1872
+#: session_state.cc:1971
 msgid "Session: cannot create Source from XML description."
 msgstr "Session: Kann Quelle aus der XML-Beschreibung nicht erzeugen"
 
-#: session_state.cc:1880
+#: session_state.cc:1979
 msgid ""
 "A external MIDI file is missing. %1 cannot currently recover from missing "
 "external MIDI files"
@@ -2280,105 +2391,134 @@ msgstr ""
 "Eine externe MIDI-Datei fehlt, %1 kann zur Zeit mit fehlenden externen MIDI-"
 "Dateien nicht umgehen"
 
-#: session_state.cc:1962
+#: session_state.cc:2061
 msgid "Found a sound file that cannot be used by %1. Talk to the programmers."
 msgstr ""
 "Eine nicht mit %1 benutzbare Audiodatei wurde gefunden. Sprechen Sie mit den "
 "Programmierern."
 
-#: session_state.cc:1979
+#: session_state.cc:2082
 msgid "Could not create templates directory \"%1\" (%2)"
 msgstr "Konnte Vorlagenverzeichnis \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:1992
+#: session_state.cc:2094
 msgid "Template \"%1\" already exists - new version not created"
 msgstr "Vorlage \"%1\" existiert bereits - neue Version wurde nicht erzeugt"
 
-#: session_state.cc:1998
+#: session_state.cc:2100
 msgid "Could not create directory for Session template\"%1\" (%2)"
 msgstr "Konnte kein Verzeichnis für Projektvorlage \"%1\" erzeugen (%2)"
 
-#: session_state.cc:2008
+#: session_state.cc:2125
 msgid "template not saved"
 msgstr "Vorlage nicht gesichert"
 
-#: session_state.cc:2018
+#: session_state.cc:2135
 msgid "Could not create directory for Session template plugin state\"%1\" (%2)"
 msgstr ""
 "Konnte Verzeichnis für Projektvorlagen-Pluginstatus \"%1\" nicht erzeugen "
 "(%2)"
 
-#: session_state.cc:2261
+#: session_state.cc:2380
 msgid "Unknown node \"%1\" found in Bundles list from session file"
 msgstr "Unbekannter Knoten \"%1\" in Bündelliste der Projektdatei gefunden"
 
-#: session_state.cc:2834
+#: session_state.cc:2964
 msgid "Session: cannot create dead file folder \"%1\" (%2)"
 msgstr "Session: kann den Mülleimer \"%1\" nicht erzeugen (%2)"
 
-#: session_state.cc:2873
+#: session_state.cc:3003
 msgid "cannot rename unused file source from %1 to %2 (%3)"
 msgstr "kann unbenutzte Dateiquelle nicht von %1 nach %2 umbenennen (%3)"
 
-#: session_state.cc:2891
+#: session_state.cc:3021
 msgid "cannot remove peakfile %1 for %2 (%3)"
 msgstr "kann Peakdatei %1 für %2 nicht entfernen (%3)"
 
-#: session_state.cc:3204
+#: session_state.cc:3338
 msgid "could not backup old history file, current history not saved"
 msgstr ""
 "konnte kein Backup der alten Aktionsliste erstellen, momentane Aktionsliste "
 "ungesichert"
 
-#: session_state.cc:3213
+#: session_state.cc:3347
 msgid "history could not be saved to %1"
 msgstr "Aktionsliste konnte nicht nach %1 gesichert werden"
 
-#: session_state.cc:3216
+#: session_state.cc:3350
 msgid "Could not remove history file at path \"%1\" (%2)"
 msgstr "Konnte Aktionslistendatei im Pfad \"%1\" nicht entfernen (%2)"
 
-#: session_state.cc:3220
+#: session_state.cc:3354
 msgid "could not restore history file from backup %1 (%2)"
 msgstr "konnte Aktionslistendatei nicht aus dem Backup %1 restaurieren (%2)"
 
-#: session_state.cc:3245
+#: session_state.cc:3379
 msgid "%1: no history file \"%2\" for this session."
 msgstr "%1: keine Aktionslistendatei \"%2\" für dieses Projekt."
 
-#: session_state.cc:3251
+#: session_state.cc:3385
 msgid "Could not understand session history file \"%1\""
 msgstr "Konnte Projekt-Aktionslistendatei \"%1\" nicht verstehen"
 
-#: session_state.cc:3293
+#: session_state.cc:3427
 msgid "Failed to downcast MidiSource for NoteDiffCommand"
 msgstr "MidiSource für NoteDiffCommand nicht auffindbar"
 
-#: session_state.cc:3304
+#: session_state.cc:3438
 msgid "Failed to downcast MidiSource for SysExDiffCommand"
 msgstr "MidiSource für SysExDiffCommand nicht auffindbar"
 
-#: session_state.cc:3315
+#: session_state.cc:3449
 msgid "Failed to downcast MidiSource for PatchChangeDiffCommand"
 msgstr "MidiSource für PatchChangeDiffCommand nicht auffindbar"
 
-#: session_state.cc:3323
+#: session_state.cc:3457
 msgid "Couldn't figure out how to make a Command out of a %1 XMLNode."
 msgstr "Konnte im XML-Knoten \"%1\" keinen Befehl erkennen."
 
-#: session_state.cc:3559
+#: session_state.cc:3695
 msgid "Session: unknown diskstream type in XML"
 msgstr "Session: Unbekannter Diskstream  im XML"
 
-#: session_state.cc:3564
+#: session_state.cc:3700
 msgid "Session: could not load diskstream via XML state"
 msgstr "Session: konnte Diskstream nicht via XML-Status laden"
 
-#: session_state.cc:3688 session_state.cc:3716 session_state.cc:3729
-#: session_state.cc:3744
+#: session_state.cc:3763
+msgid "Cannot rename read-only session."
+msgstr "Kan Nur-Lese Projekt nicht umbenennen"
+
+#: session_state.cc:3767
+msgid "Cannot rename session while recording"
+msgstr "Kann Projekt während Aufnahme nicht umbenennen"
+
+#: session_state.cc:3852 session_state.cc:3853 session_state.cc:3895
+#: session_state.cc:3899
 msgid "renaming %s as %2 failed (%3)"
 msgstr "umbenennen von %s in %2 gescheitert (%3)"
 
+#: session_state.cc:3915 session_state.cc:3916 session_state.cc:3930
+#: session_state.cc:3931
+msgid "renaming %1 as %2 failed (%3)"
+msgstr "umbenennen von %1 in %2 gescheitert (%3)"
+
+#: session_state.cc:4217
+msgid "Cannot create new session folder %1"
+msgstr "Kann den neuen Projektordner \"%1\" nicht erzeugen"
+
+#: session_state.cc:4279 session_state.cc:4354
+msgid ""
+"\n"
+"copying \"%1\" failed !"
+msgstr ""
+"\n"
+"kopieren von \"%1\" fehlgeschlagen !"
+
+#: session_state.cc:4552
+msgid "unknown reason"
+msgstr "unbekannter Grund"
+
 #: session_time.cc:214
 msgid "Unknown transport state %1 in sync callback"
 msgstr "Unbekannter Transportstatus %1 im Sync-Callback"
@@ -2387,7 +2527,7 @@ msgstr "Unbekannter Transportstatus %1 im Sync-Callback"
 msgid "Cannot loop - no loop range defined"
 msgstr "Kann nicht loopen - kein Schleifenbereich definieert"
 
-#: session_transport.cc:833
+#: session_transport.cc:906
 msgid ""
 "Seamless looping cannot be supported while %1 is using JACK transport.\n"
 "Recommend changing the configured options"
@@ -2396,11 +2536,11 @@ msgstr ""
 "benutzt.\n"
 "Ändern Sie die Konfigurationsoption"
 
-#: session_transport.cc:915
+#: session_transport.cc:988
 msgid "Locate called for negative sample position - ignored"
 msgstr "Locate für negative Sample-Position aufgerufen - ignoriert"
 
-#: session_transport.cc:1272
+#: session_transport.cc:1346
 msgid ""
 "Global varispeed cannot be supported while %1 is connected to JACK transport "
 "control"
@@ -2408,30 +2548,30 @@ msgstr ""
 "Globales Varispeed ist nicht möglich, solange %1 mit JACK Transport "
 "verbunden ist."
 
-#: smf_source.cc:344
+#: smf_source.cc:350
 msgid "Unable to read event prefix, corrupt MIDI ring"
 msgstr "Kann Ereignisprefix nicht lesen, korrupter MIDI-Ringbuffer"
 
-#: smf_source.cc:357
+#: smf_source.cc:363
 msgid "Event has time and size but no body, corrupt MIDI ring"
 msgstr "time/size gelesen, aber nicht buffer, korrupter MIDI-Ringbuffer"
 
-#: smf_source.cc:363
+#: smf_source.cc:369
 msgid "Event time is before MIDI source position"
 msgstr "Event-Zeitpunkt befindet sich vor MIDI Quellposition"
 
-#: smf_source.cc:409
+#: smf_source.cc:415
 msgid ""
 "Skipping event with unordered beat time %1 < %2 (off by %3 beats, %4 ticks)"
 msgstr ""
 "Überspringe Event mit unsortiertem Schlag-Zeitpunkt %1 < %2(Abweichung %3 "
 "Schläge, %4 Ticks)"
 
-#: smf_source.cc:453
+#: smf_source.cc:459
 msgid "Skipping event with unordered frame time %1 < %2"
 msgstr "Überspringe Event mit unsortiertem Frame-Zeitpunkt %1 < %2"
 
-#: smf_source.cc:518
+#: smf_source.cc:524
 msgid "cannot open MIDI file %1 for write"
 msgstr "kann MIDI-Datei %1 nicht zum Schreiben öffnen"
 
@@ -2519,18 +2659,22 @@ msgstr "Little-endian (Intel)"
 msgid "Big-endian (PowerPC)"
 msgstr "Big-endian (PowerPC)"
 
-#: sndfilesource.cc:260
+#: sndfilesource.cc:264
+msgid "SndFileSource: cannot open file \"%1\" for %2"
+msgstr "SndFileSource: kann Datei \"%1\" nicht für %2  öffnen"
+
+#: sndfilesource.cc:282
 msgid "SndFileSource: cannot open file \"%1\" for %2 (%3)"
 msgstr "SndFileSource: kann Datei \"%1\" nicht für %2  öffnen (%3)"
 
-#: sndfilesource.cc:268
+#: sndfilesource.cc:290
 msgid ""
 "SndFileSource: file only contains %1 channels; %2 is invalid as a channel "
 "number"
 msgstr ""
 "SndFileSource: Datei enthält nur %1 Kanäle, %2 ist eine ungültige Kanalzahl"
 
-#: sndfilesource.cc:322 sndfilesource.cc:655
+#: sndfilesource.cc:344 sndfilesource.cc:674
 msgid ""
 "cannot set broadcast info for audio file %1 (%2); dropping broadcast info "
 "for this file"
@@ -2538,67 +2682,67 @@ msgstr ""
 "kann Broadcast-Informationen für die Audiodatei %1 nicht setzen (%2); "
 "verwerfe Broadcast-Informationen für diese Datei"
 
-#: sndfilesource.cc:368
-msgid "could not allocate file %1 for reading."
-msgstr "konnte Datei %1 nicht zum Lesen allozieren"
+#: sndfilesource.cc:387
+msgid "could not open file %1 for reading."
+msgstr "konnte Datei %1 nicht zum Lesen öffnen"
 
-#: sndfilesource.cc:403
+#: sndfilesource.cc:422
 msgid "SndFileSource: could not seek to frame %1 within %2 (%3)"
 msgstr "SndFileSource: Konnte in %2 Frame %1 nicht aufsuchen (%3)"
 
-#: sndfilesource.cc:412
+#: sndfilesource.cc:431
 msgid ""
 "SndFileSource: @ %1 could not read %2 within %3 (%4) (len = %5, ret was %6)"
 msgstr ""
 "SndFileSource: @ %1 konnte %2 innerhalb %3 nicht lesen (%4) (len = %5, ret "
 "war %6)"
 
-#: sndfilesource.cc:454 sndfilesource.cc:483
+#: sndfilesource.cc:473 sndfilesource.cc:502
 msgid "attempt to write a non-writable audio file source (%1)"
 msgstr "Versuch, in eine schreibgeschützte Audio-Dateiquelle zu schreiben (%1)"
 
-#: sndfilesource.cc:459 utils.cc:579 utils.cc:603 utils.cc:617 utils.cc:636
+#: sndfilesource.cc:478 utils.cc:563 utils.cc:587 utils.cc:601 utils.cc:620
 msgid "programming error: %1 %2"
 msgstr "Programmierfehler: %1 %2"
 
-#: sndfilesource.cc:586 sndfilesource.cc:604
+#: sndfilesource.cc:605 sndfilesource.cc:623
 msgid "attempt to flush a non-writable audio file source (%1)"
 msgstr "Versuch, eine schreibgeschützte Audio-Dateiquelle zu leeren (%1)"
 
-#: sndfilesource.cc:591
+#: sndfilesource.cc:610
 msgid "could not allocate file %1 to write header"
 msgstr "konnte Datei %1 nicht allozieren, um den Dateikopf zu schreiben"
 
-#: sndfilesource.cc:609
+#: sndfilesource.cc:628
 msgid "could not allocate file %1 to flush contents"
 msgstr "konnte Datei %1 nicht allozieren, um Inhalte zu löschen"
 
-#: sndfilesource.cc:621
+#: sndfilesource.cc:640
 msgid ""
 "attempt to store broadcast info in a non-writable audio file source (%1)"
 msgstr ""
 "Versuch, Broadcast-Informationen in eine schreibgeschützte Audio-Dateiquelle "
 "zu schreiben (%1)"
 
-#: sndfilesource.cc:626
+#: sndfilesource.cc:645
 msgid "attempt to set BWF info for an un-opened audio file source (%1)"
 msgstr ""
 "Versuch, BWF-Informationen in einer nicht geöffnete Audio-Dateiquelle zu "
 "setzen (%1)"
 
-#: sndfilesource.cc:670
+#: sndfilesource.cc:689
 msgid "%1: cannot seek to %2 (libsndfile error: %3)"
 msgstr "%1: kann %2 nicht aufsuchen (libsndfile Fehler: %3)"
 
-#: sndfilesource.cc:780
+#: sndfilesource.cc:799
 msgid "SndFileSource: \"%1\" bad read retval: %2 of %5 (%3: %4)"
 msgstr "SndFileSource: \"%1\" schlechter Lese-Rückgabewert: %2 von %5 (%3: %4)"
 
-#: sndfilesource.cc:793 sndfilesource.cc:843 sndfilesource.cc:850
+#: sndfilesource.cc:812 sndfilesource.cc:862 sndfilesource.cc:869
 msgid "SndFileSource: \"%1\" bad write (%2)"
 msgstr "SndFileSource: \"%1\" schlechter Schreibvorgang (%2)"
 
-#: sndfilesource.cc:873
+#: sndfilesource.cc:892
 msgid ""
 "Filesource: start time is already set for existing file (%1): Cannot change "
 "start time."
@@ -2606,6 +2750,10 @@ msgstr ""
 "Filesource: Startzeit für existierende Datei (%1) ist bereits gesetzt: Kann "
 "Startzeit nicht ändern."
 
+#: sndfilesource.cc:947
+msgid "SndFileSource: cannot open file \"%1\" for reading"
+msgstr "SndFileSource: kann Datei \"%1\" nicht zum Lesen öffnen"
+
 #: soundcloud_upload.cc:129
 msgid ""
 "Upload to Soundcloud failed.  Perhaps your email or password are incorrect?\n"
@@ -2630,7 +2778,7 @@ msgstr "Lautsprecher-Information ohne Elevation - Lautsprecher ignoriert"
 msgid "Speaker information is missing distance - speaker ignored"
 msgstr "Lautsprecher-Information ohne Distanz - Lautsprecher ignoriert"
 
-#: srcfilesource.cc:134
+#: srcfilesource.cc:142
 msgid "SrcFileSource: %1"
 msgstr "video_server_dialog.cc:140"
 
@@ -2703,7 +2851,7 @@ msgstr "MeterSection: XML-Knoten hat unzulässigen Wert für \"note-type\""
 msgid "MeterSection XML node has no \"movable\" property"
 msgstr "MeterSection: XML-Knoten hat keine Eigenschaft \"movable\""
 
-#: tempo.cc:388
+#: tempo.cc:402
 msgid ""
 "Meter changes can only be positioned on the first beat of a bar. Moving from "
 "%1 to %2"
@@ -2711,38 +2859,38 @@ msgstr ""
 "Metrumswechsel können nur am ersten Schlag eines Taktes platziert werden. "
 "Verschiebe von%1 nach %2"
 
-#: tempo.cc:650
+#: tempo.cc:682
 msgid "no tempo sections defined in tempo map - cannot change tempo @ %1"
 msgstr ""
 "in der Tempo Map sind keine Tempo-Abschnitte definiert - kann Tempo @ %1 "
 "nicht ändern"
 
-#: tempo.cc:680 tempo.cc:696 tempo.cc:712 tempo.cc:728
+#: tempo.cc:712 tempo.cc:730 tempo.cc:748 tempo.cc:764
 msgid "programming error: no tempo section in tempo map!"
 msgstr "Programmierfehler: kein Tempo-Abschnitt in der Tempo Map"
 
-#: tempo.cc:846 tempo.cc:1827
+#: tempo.cc:882 tempo.cc:1892
 msgid "programming error: unhandled MetricSection type"
 msgstr "Programmierfehler: unbehandelter MetricSection Typ"
 
-#: tempo.cc:1142
+#: tempo.cc:1178
 msgid "tempo map asked for BBT time at frame %1\n"
 msgstr "Tempo Map fragte nach BBT-Zeit an Frame %1\n"
 
-#: tempo.cc:1185
+#: tempo.cc:1221
 msgid "tempo map asked for frame time at bar < 1  (%1)\n"
 msgstr "Tempo Map fragte nach Frame-Zeit an Takt < 1 %1\n"
 
-#: tempo.cc:1642 tempo.cc:1656
+#: tempo.cc:1705 tempo.cc:1719
 msgid "Tempo map: could not set new state, restoring old one."
 msgstr ""
 "Tempo Map: konnte neuen Status nicht setzen, stelle den alten wieder her."
 
-#: tempo.cc:1677
+#: tempo.cc:1740 tempo.cc:1741
 msgid "Multiple meter definitions found at %1"
 msgstr "Mehrere Metrumdefinitionen an %1 gefunden"
 
-#: tempo.cc:1682
+#: tempo.cc:1746 tempo.cc:1747
 msgid "Multiple tempo definitions found at %1"
 msgstr "Mehrere Tempodefinitionen an %1 gefunden"
 
@@ -2795,203 +2943,58 @@ msgstr "Knoten für Kanal hat keine Eigenschaft \"type\""
 msgid "Node for Port has no \"name\" property"
 msgstr "Knoten für Port hat keine Eigenschaft \"name\""
 
-#: utils.cc:422 utils.cc:451
+#: utils.cc:411 utils.cc:440
 msgid "Splice"
 msgstr "Schneiden"
 
-#: utils.cc:424 utils.cc:441
+#: utils.cc:413 utils.cc:430
 msgid "Slide"
 msgstr "Gleiten"
 
-#: utils.cc:426 utils.cc:447
+#: utils.cc:415 utils.cc:436
 msgid "Ripple"
 msgstr "Schieben"
 
-#: utils.cc:428 utils.cc:444
+#: utils.cc:417 utils.cc:433
 msgid "Lock"
 msgstr "Sperren"
 
-#: utils.cc:431
+#: utils.cc:420
 msgid "programming error: unknown edit mode string \"%1\""
 msgstr "Programmierfehler: unbekannte Zeichenkette für Editiermodus \"%1\""
 
-#: utils.cc:458 utils.cc:490
+#: utils.cc:447 utils.cc:483
 msgid "MIDI Timecode"
 msgstr "MIDI Timecode"
 
-#: utils.cc:458 utils.cc:488
+#: utils.cc:447 utils.cc:481
 msgid "MTC"
 msgstr "MTC"
 
-#: utils.cc:462 utils.cc:497
+#: utils.cc:451 utils.cc:490
 msgid "MIDI Clock"
 msgstr "MIDI Clock"
 
-#: utils.cc:466 utils.cc:484 utils.cc:504
+#: utils.cc:455 utils.cc:477 utils.cc:497
 msgid "JACK"
 msgstr "JACK"
 
-#: utils.cc:470
+#: utils.cc:459 utils.cc:494
+msgid "LTC"
+msgstr "LTC"
+
+#: utils.cc:463
 msgid "programming error: unknown sync source string \"%1\""
 msgstr "Programmierfehler: unbekannte Zeichenkette für Sync-Quelle \"%1\""
 
-#: utils.cc:495
+#: utils.cc:488
 msgid "M-Clock"
 msgstr "M-Clock"
 
-#: utils.cc:501
-msgid "LTC"
-msgstr "LTC"
-
-#: utils.cc:671
+#: utils.cc:655
 msgid "programming error: unknown native header format: %1"
 msgstr "Programmierfehler: unbekanntes natives Dateikopfformat: %1"
 
-#: utils.cc:686
+#: utils.cc:670
 msgid "cannot open directory %1 (%2)"
 msgstr "kann Verzeichnis %1 nicht öffnen (%2)"
-
-#~ msgid ""
-#~ "AudioSource: could not seek to correct location in peak file \"%1\" (%2)"
-#~ msgstr ""
-#~ "AudioSource: konnte in der Peakdatei \"%1\" nicht an die korrekte Stelle "
-#~ "springen (%2)"
-
-#~ msgid "Cannot create transport request signal pipe (%1)"
-#~ msgstr ""
-#~ "Kann die Signalleitung für Transport-Anforderungen nicht erzeugen (%1)"
-
-#~ msgid "UI: cannot set O_NONBLOCK on butler request pipe (%1)"
-#~ msgstr ""
-#~ "UI: kann O_NONBLOCK für die Anforderungsleitung des Butlers nicht setzen "
-#~ "(%1)"
-
-#~ msgid "poll on butler request pipe failed (%1)"
-#~ msgstr "poll auf die Anforderungsleitung des Butler fehlgeschlagen (%1)"
-
-#~ msgid "Error on butler thread request pipe: fd=%1 err=%2"
-#~ msgstr "Fehler in der Anforderungsleitung des Butler-Threads: fd=%1 err=%2"
-
-#~ msgid "Error reading from butler request pipe"
-#~ msgstr "Fehler beim Lesen der Butler-Anforderungsleitung"
-
-#~ msgid "Finished loading tracks/busses."
-#~ msgstr "Spuren/Busse laden abgeschlossen."
-
-#~ msgid "AudioSource: cannot open peakpath (a) \"%1\" (%2)"
-#~ msgstr "AudioSource: kann Pfad für Peaks (a) \"%1\" nicht öffnen (%2)"
-
-#~ msgid "AudioSource: cannot open peakpath (b) \"%1\" (%2)"
-#~ msgstr "AudioSource: kann Pfad für Peaks (b) \"%1\" nicht öffnen (%2)"
-
-#~ msgid "cannot create new audio file \"%1\" for %2"
-#~ msgstr "kann keine neue Audiodatei \"%1\" für %2 erzeugen"
-
-#~ msgid "attempt to flush an un-opened audio file source (%1)"
-#~ msgstr "Versuch, eine nicht geöffnete Audio-Dateiquelle zu leeren (%1)"
-
-#~ msgid "Skipping event with unordered time %1"
-#~ msgstr "Überspringe Event mit Zeitpunkt %1 ausserhalb der Reihenfolge"
-
-#~ msgid ""
-#~ "You have requested an operation that requires audio analysis.\n"
-#~ "\n"
-#~ "You currently have \"auto-analyse-audio\" disabled, which means that "
-#~ "transient data must be generated every time it is required.\n"
-#~ "\n"
-#~ "If you are doing work that will require transient data on a regular "
-#~ "basis, you should probably enable \"auto-analyse-audio\" then quit ardour "
-#~ "and restart.\n"
-#~ "\n"
-#~ "This dialog will not display again.  But you may notice a slight delay in "
-#~ "this and future transient-detection operations.\n"
-#~ msgstr ""
-#~ "Sie haben eine Operation ausgelöst, die Audio-Analyse verlangt.\n"
-#~ "\n"
-#~ "Momentan haben Sie \"auto-analyse-audio\" deaktiviert, weshalbTransienten-"
-#~ "Daten bei Bedarf jedesmal neu erzeugt werden müssen.\n"
-#~ "\n"
-#~ "Wenn Sie öfters mit Transienten-Daten arbeiten, sollten Sie "
-#~ "möglicherweise \"auto-analyse-audio\" einschalten und Ardour neu "
-#~ "starten.\n"
-#~ "\n"
-#~ "Dieser Dialog wird nicht wieder erscheinen. Jedoch könnten Sie bei dieser "
-#~ "und zukünftigen Operation(en) zur Transienten-Bestimmung eine leichte "
-#~ "Verzögerung bemerken.\n"
-
-#~ msgid "A sound file is missing. It will be replaced by silence."
-#~ msgstr "Eine Audiodatei fehlt. Sie wird durch Stille ersetzt werden."
-
-#~ msgid ""
-#~ "Found a sound file that cannot be used by %1. Talk to the progammers."
-#~ msgstr ""
-#~ "Eine nicht mit %1 benutzbare Audiodatei wurde gefunden. Sprechen Sie mit "
-#~ "den Programmierern."
-
-#~ msgid "looking for backends in %1\n"
-#~ msgstr "Suche nach Backends in %1\n"
-
-#~ msgid "ARDOUR_CONFIG_PATH not set in environment - exiting\n"
-#~ msgstr "Umgebungsvariable ARDOUR_CONFIG_PATH ist nicht gesetzt - beende\n"
-
-#~ msgid "ARDOUR_DATA_PATH not set in environment - exiting\n"
-#~ msgstr "Umgebungsvariable ARDOUR_DATA_PATH ist nicht gesetzt - beende\n"
-
-#~ msgid "monitor"
-#~ msgstr "Monitor"
-
-#~ msgid "FATAL ERROR! Could not find a suitable version of %1 for a rename"
-#~ msgstr ""
-#~ "FATALER FEHLER! Konnte keine passende Version von %1 zum Umbenennen finden"
-
-#~ msgid "too many bounced versions of playlist \"%1\""
-#~ msgstr "zu viele gebouncete Versionen der Wiedergabeliste \"%1\""
-
-#~ msgid "master"
-#~ msgstr "Master"
-
-#~ msgid ""
-#~ "cannot create new file from region name \"%1\" with ident = \"%2\": too "
-#~ "many existing files with similar names"
-#~ msgstr ""
-#~ "kann keine neue Datei aus dem Regionennamen \"%1\" mit ident = \"%2\" "
-#~ "erzeugen: zu viele Dateien mit ähnlichen Namen existieren"
-
-#~ msgid "Filesource: cannot find required file (%1): while searching"
-#~ msgstr ""
-#~ "Filesource: kann benötigte Datei (%1) während dieser Suche nicht finden"
-
-#~ msgid "Auditioning of non-audio regions not yet supported"
-#~ msgstr "Abhören von Nicht-Audio Regionen wird noch nicht unterstützt"
-
-#~ msgid "Filesource: cannot find required file (%1): while searching %2"
-#~ msgstr ""
-#~ "Dateiquelle: kann benötigte Datei (%1) auf der Suche nach %2 nicht finden"
-
-#~ msgid ""
-#~ "FileSource: \"%1\" is ambigous when searching %2\n"
-#~ "\t"
-#~ msgstr ""
-#~ "Dateiquelle: \"%1\" ist bei der Suche nach %2 mehrdeutig \n"
-#~ "\t"
-
-#~ msgid "Could not resolve path: %1 (%2)"
-#~ msgstr "Konnte den Pfad: %1 nicht auflösen (%2)"
-
-#~ msgid "LADSPA: cannot load module from \"%1\""
-#~ msgstr "LADSPA: kann Modul nicht aus \"%1\" laden"
-
-#~ msgid "looking for panners in %1"
-#~ msgstr "Suche nach Pannern in %1"
-
-#~ msgid "Panner discovered: \"%1\" in %2"
-#~ msgstr "Panner gefunden: \"%1\" in %2"
-
-#~ msgid "Could not use path %1 (%2)"
-#~ msgstr "Konnte Pfad %1 nicht benutzen (%2)"
-
-#~ msgid "could not rename temporary session file %1 to %2"
-#~ msgstr "Konnte temporäre Projektdatei %1 nicht nach %2 umbenennen"
-
-#~ msgid "Cannot expand path %1 (%2)"
-#~ msgstr "Kann Pfad %1 nicht expandieren (%2)"
diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc
index 3252134..70c6a60 100644
--- a/libs/ardour/port.cc
+++ b/libs/ardour/port.cc
@@ -165,7 +165,12 @@ Port::get_connections (std::vector<std::string> & c) const
 		return c.size();
 	}
 
-	return port_engine.get_connections (_port_handle, c);
+	if (_port_handle) {
+		return port_engine.get_connections (_port_handle, c);
+		return c.size();
+	}
+
+	return 0;
 }
 
 int
diff --git a/libs/ardour/port_insert.cc b/libs/ardour/port_insert.cc
index fa09ea0..0479699 100644
--- a/libs/ardour/port_insert.cc
+++ b/libs/ardour/port_insert.cc
@@ -60,6 +60,13 @@ PortInsert::~PortInsert ()
 }
 
 void
+PortInsert::set_pre_fader (bool p)
+{
+	Processor::set_pre_fader (p);
+	_out->set_pre_fader (p);
+}
+
+void
 PortInsert::start_latency_detection ()
 {
 	delete _mtdm;
diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc
index f2f2334..a1a4397 100644
--- a/libs/ardour/port_manager.cc
+++ b/libs/ardour/port_manager.cc
@@ -26,6 +26,7 @@
 #include "ardour/midi_port.h"
 #include "ardour/midiport_manager.h"
 #include "ardour/port_manager.h"
+#include "ardour/profile.h"
 
 #include "i18n.h"
 
@@ -489,12 +490,14 @@ PortManager::reconnect_ports ()
 {
 	boost::shared_ptr<Ports> p = ports.reader ();
 
-	/* re-establish connections */
-
-	DEBUG_TRACE (DEBUG::Ports, string_compose ("reconnect %1 ports\n", p->size()));
-
-	for (Ports::iterator i = p->begin(); i != p->end(); ++i) {
-		i->second->reconnect ();
+	if (!Profile->get_trx()) {
+		/* re-establish connections */
+		
+		DEBUG_TRACE (DEBUG::Ports, string_compose ("reconnect %1 ports\n", p->size()));
+		
+		for (Ports::iterator i = p->begin(); i != p->end(); ++i) {
+			i->second->reconnect ();
+		}
 	}
 
 	return 0;
diff --git a/libs/ardour/quantize.cc b/libs/ardour/quantize.cc
index 6604469..bcce41c 100644
--- a/libs/ardour/quantize.cc
+++ b/libs/ardour/quantize.cc
@@ -52,6 +52,63 @@ Quantize::~Quantize ()
 {
 }
 
+static double
+swing_position (double pos, double grid, double swing, double offset)
+{
+	/* beats start out numbered at zero.
+	 *
+	 * every other position on the start-quantize-grid is
+	 * optionally swung, meaning that its position is moved
+	 * somewhere between its natural position and 2/3 of
+	 * the way to the next start-quantize-grid position.
+	 *
+	 * so, if the _start grid is 0.5, the beat at 0 isn't
+	 * swung, but something at 0.5 is, the beat at 1 isn't
+	 * swung, but something at 1.5 is.
+	 *
+	 * if the start grid is 1.0, the beat at 0 isn't swung,
+	 * but the beat at 1.0 is. the beat at 2.0 isn't swung,
+	 * but the beat at 3.0 is. and so on.
+	 * 
+	 * so the criterion for a position being swung is
+	 * whether or not ((possible_grid_position / grid) % 2) != 0
+	 */
+
+	const bool swing_quantize_grid_position = pos > 0.0 && fmod ((pos/grid), 2.0) != 0;
+	const bool swing_previous_grid_position = pos > grid && fmod ((pos-grid)/grid, 2.0) != 0;
+
+	/* one of these will not be subject to swing */
+
+	double swung_pos = pos;
+	double swung_previous_grid_position;
+
+	if (pos > grid) {
+		swung_previous_grid_position = pos - grid;
+	} else {
+		swung_previous_grid_position = 0.0;
+	}
+
+	if (swing_previous_grid_position) {
+		swung_previous_grid_position = swung_previous_grid_position + (2.0/3.0 * swing * grid);
+	}
+
+	if (swing_quantize_grid_position) {
+		swung_pos = swung_pos + (2.0/3.0 * swing * grid);
+	}
+
+	/* now correct for start-of-model offset */
+
+	pos += offset;
+				
+	if (fabs (pos - swung_pos) > fabs (pos - swung_previous_grid_position)) {
+		pos = swung_previous_grid_position;
+	} else {
+		pos = swung_pos;
+	}
+
+	return pos;
+}
+
 Command*
 Quantize::operator () (boost::shared_ptr<MidiModel> model,
                        Evoral::Beats position,
@@ -66,47 +123,38 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model,
 	const double round_pos = round(position.to_double() / _start_grid) * _start_grid;
 	const double offset    = round_pos - position.to_double();
 
-	bool even;
 	MidiModel::NoteDiffCommand* cmd = new MidiModel::NoteDiffCommand (model, "quantize");
 
 	for (std::vector<Evoral::Sequence<Evoral::Beats>::Notes>::iterator s = seqs.begin(); s != seqs.end(); ++s) {
 
-		even = false;
-
-		/* TODO 'swing' probably requires a 2nd iteration:
-		 * first quantize notes to the grid, then apply beat shift
-		 */
 		for (Evoral::Sequence<MidiModel::TimeType>::Notes::iterator i = (*s).begin(); i != (*s).end(); ++i) {
 
-			double new_start = round (((*i)->time().to_double() - offset) / _start_grid) * _start_grid + offset;
-			double new_end = round (((*i)->end_time().to_double() - offset) / _end_grid) * _end_grid + offset;
-
-			if (_swing > 0.0 && !even) {
-
-				double next_grid = new_start + _start_grid;
+			/* compute new start + end points WITHOUT the offset
+			 * caused by the start of the model (see above).
+			 * 
+			 * these versions of new_start and new_end are
+			 * guaranteed to precisely align with the quantize grid(s).
+			 */
+			
+			double new_start = round (((*i)->time().to_double() - offset) / _start_grid) * _start_grid;
+			double new_end = round (((*i)->end_time().to_double() - offset) / _end_grid) * _end_grid;
 
-				/* find a spot 2/3 (* swing factor) of the way between the grid point
-				   we would put this note at, and the nominal position of the next note.
-				*/
+			if (_swing) {
 
-				new_start = new_start + (2.0/3.0 * _swing * (next_grid - new_start));
-				new_end = new_end + (2.0/3.0 * _swing * (next_grid - new_start));
+				new_start = swing_position (new_start, _start_grid, _swing, offset);
+				new_end = swing_position (new_end, _end_grid, _swing, offset);
+				
+			} else {
 
-			} else if (_swing < 0.0 && !even) {
-
-				double prev_grid = new_start - _start_grid;
-
-				/* find a spot 2/3 (* swing factor) of the way between the grid point
-				   we would put this note at, and the nominal position of the previous note.
-				*/
-
-				new_start = new_start - (2.0/3.0 * _swing * (new_start - prev_grid));
-				new_end = new_end - (2.0/3.0 * _swing * (new_start - prev_grid));
+				/* now correct for start-of-model offset */
 
+				new_start += offset;
+				new_end += offset;
 			}
-
+			
 			double delta = new_start - (*i)->time().to_double();
 
+			
 			if (fabs (delta) >= _threshold) {
 				if (_snap_start) {
 					delta *= _strength;
@@ -128,8 +176,6 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model,
 					cmd->change ((*i), MidiModel::NoteDiffCommand::Length, new_dur);
 				}
 			}
-
-			even = !even;
 		}
 	}
 
diff --git a/libs/ardour/rc_configuration.cc b/libs/ardour/rc_configuration.cc
index 9fdd6aa..452d8eb 100644
--- a/libs/ardour/rc_configuration.cc
+++ b/libs/ardour/rc_configuration.cc
@@ -26,6 +26,7 @@
 
 #include "pbd/xml++.h"
 #include "pbd/file_utils.h"
+#include "pbd/replace_all.h"
 
 #include "ardour/audioengine.h"
 #include "ardour/control_protocol_manager.h"
diff --git a/libs/ardour/recent_sessions.cc b/libs/ardour/recent_sessions.cc
index 7c22974..7458c32 100644
--- a/libs/ardour/recent_sessions.cc
+++ b/libs/ardour/recent_sessions.cc
@@ -39,6 +39,7 @@ using namespace PBD;
 namespace {
 
 	const char * const recent_file_name = "recent";
+	const char * const recent_templates_file_name = "recent_templates";
 
 } // anonymous
 
@@ -85,6 +86,38 @@ ARDOUR::read_recent_sessions (RecentSessions& rs)
 }
 
 int
+ARDOUR::read_recent_templates (std::deque<std::string>& rt)
+{
+	std::string path = Glib::build_filename (user_config_directory(), recent_templates_file_name);
+
+	ifstream recent (path.c_str());
+
+	if (!recent) {
+		if (errno != ENOENT) {
+			error << string_compose (_("cannot open recent template file %1 (%2)"), path, strerror (errno)) << endmsg;
+			return -1;
+		} else {
+			return 1;
+		}
+	}
+
+	while (true) {
+
+		std::string session_template_full_name;
+
+		getline(recent, session_template_full_name);
+
+		if (!recent.good()) {
+			break;
+		}
+
+		rt.push_back (session_template_full_name);
+	}
+
+	return 0;
+}
+
+int
 ARDOUR::write_recent_sessions (RecentSessions& rs)
 {
 	std::string path = Glib::build_filename (user_config_directory(), recent_file_name);
@@ -103,6 +136,24 @@ ARDOUR::write_recent_sessions (RecentSessions& rs)
 }
 
 int
+ARDOUR::write_recent_templates (std::deque<std::string>& rt)
+{
+	std::string path = Glib::build_filename (user_config_directory(), recent_templates_file_name);
+
+	std::ofstream recent (path.c_str());
+
+	if (!recent) {
+		return -1;
+	}
+
+	for (std::deque<std::string>::const_iterator i = rt.begin(); i != rt.end(); ++i) {
+		recent << (*i) << std::endl;
+	}
+
+	return 0;
+}
+
+int
 ARDOUR::store_recent_sessions (string name, string path)
 {
 	RecentSessions rs;
@@ -130,6 +181,28 @@ ARDOUR::store_recent_sessions (string name, string path)
 }
 
 int
+ARDOUR::store_recent_templates (const std::string& session_template_full_name)
+{
+	std::deque<std::string> rt;
+
+	if (ARDOUR::read_recent_templates (rt) < 0) {
+		return -1;
+	}
+
+	rt.erase(remove (rt.begin(), rt.end(), session_template_full_name), rt.end());
+
+	rt.push_front (session_template_full_name);
+
+	uint32_t max_recent_templates = Config->get_max_recent_templates ();
+
+	if (rt.size() > max_recent_templates) {
+		rt.erase( rt.begin() + max_recent_templates, rt.end ());
+	}
+
+	return ARDOUR::write_recent_templates (rt);
+}
+
+int
 ARDOUR::remove_recent_sessions (const string& path)
 {
 	RecentSessions rs;
diff --git a/libs/ardour/resampled_source.cc b/libs/ardour/resampled_source.cc
index 0a81319..5c81170 100644
--- a/libs/ardour/resampled_source.cc
+++ b/libs/ardour/resampled_source.cc
@@ -34,7 +34,7 @@ const uint32_t ResampledImportableSource::blocksize = 16384U;
 
 ResampledImportableSource::ResampledImportableSource (boost::shared_ptr<ImportableSource> src, framecnt_t rate, SrcQuality srcq)
 	: source (src)
-	, src_state (0)
+	, _src_state (0)
 {
 	_src_type = SRC_SINC_BEST_QUALITY;
 
@@ -56,17 +56,17 @@ ResampledImportableSource::ResampledImportableSource (boost::shared_ptr<Importab
 		break;
 	}
 
-	input = new float[blocksize];
+	_input = new float[blocksize];
 
 	seek (0);
 
-	src_data.src_ratio = ((float) rate) / source->samplerate();
+	_src_data.src_ratio = ((float) rate) / source->samplerate();
 }
 
 ResampledImportableSource::~ResampledImportableSource ()
 {
-	src_state = src_delete (src_state) ;
-	delete [] input;
+	_src_state = src_delete (_src_state) ;
+	delete [] _input;
 }
 
 framecnt_t
@@ -75,44 +75,47 @@ ResampledImportableSource::read (Sample* output, framecnt_t nframes)
 	int err;
 
 	/* If the input buffer is empty, refill it. */
+	if (_src_data.input_frames == 0) {
 
-	if (src_data.input_frames == 0) {
-
-		src_data.input_frames = source->read (input, blocksize);
+		_src_data.input_frames = source->read (_input, blocksize);
 
 		/* The last read will not be a full buffer, so set end_of_input. */
-
-		if ((framecnt_t) src_data.input_frames < blocksize) {
-			src_data.end_of_input = true;
+		if ((framecnt_t) _src_data.input_frames < blocksize) {
+			_end_of_input = true;
 		}
 
-		src_data.input_frames /= source->channels();
-		src_data.data_in = input;
+		_src_data.input_frames /= source->channels();
+		_src_data.data_in = _input;
 	}
 
-	src_data.data_out = output;
-
-	if (!src_data.end_of_input) {
-		src_data.output_frames = nframes / source->channels();
-	} else {
-		src_data.output_frames = std::min ((framecnt_t) src_data.input_frames, nframes / source->channels());
+	_src_data.data_out = output;
+	_src_data.output_frames = nframes / source->channels();
+
+	if (_end_of_input && _src_data.input_frames * _src_data.src_ratio <= _src_data.output_frames) {
+		/* only set src_data.end_of_input for the last cycle.
+		 *
+		 * The flag only affects writing out remaining data in the
+		 * internal buffer of src_state.
+		 * SRC is not aware of data bufered here in _src_data.input
+		 * which needs to be processed first.
+		 */
+		_src_data.end_of_input = true;
 	}
 
-	if ((err = src_process (src_state, &src_data))) {
+	if ((err = src_process (_src_state, &_src_data))) {
 		error << string_compose(_("Import: %1"), src_strerror (err)) << endmsg ;
 		return 0 ;
 	}
 
 	/* Terminate if at end */
-
-	if (src_data.end_of_input && src_data.output_frames_gen == 0) {
+	if (_src_data.end_of_input && _src_data.output_frames_gen == 0) {
 		return 0;
 	}
 
-	src_data.data_in += src_data.input_frames_used * source->channels();
-	src_data.input_frames -= src_data.input_frames_used ;
+	_src_data.data_in += _src_data.input_frames_used * source->channels();
+	_src_data.input_frames -= _src_data.input_frames_used ;
 
-	return src_data.output_frames_gen * source->channels();
+	return _src_data.output_frames_gen * source->channels();
 }
 
 void
@@ -122,20 +125,21 @@ ResampledImportableSource::seek (framepos_t pos)
 
 	/* and reset things so that we start from scratch with the conversion */
 
-	if (src_state) {
-		src_delete (src_state);
+	if (_src_state) {
+		src_delete (_src_state);
 	}
 
 	int err;
 
-	if ((src_state = src_new (_src_type, source->channels(), &err)) == 0) {
+	if ((_src_state = src_new (_src_type, source->channels(), &err)) == 0) {
 		error << string_compose(_("Import: src_new() failed : %1"), src_strerror (err)) << endmsg ;
 		throw failed_constructor ();
 	}
 
-	src_data.input_frames = 0;
-	src_data.data_in = input;
-	src_data.end_of_input = 0;
+	_src_data.input_frames = 0;
+	_src_data.data_in = _input;
+	_src_data.end_of_input = 0;
+	_end_of_input = false;
 }
 
 framepos_t
diff --git a/libs/ardour/reverse.cc b/libs/ardour/reverse.cc
index 06fafb0..b2189cf 100644
--- a/libs/ardour/reverse.cc
+++ b/libs/ardour/reverse.cc
@@ -56,7 +56,7 @@ Reverse::run (boost::shared_ptr<Region> r, Progress*)
 
 	/* create new sources */
 
-	if (make_new_sources (region, nsrcs)) {
+	if (make_new_sources (region, nsrcs, "", false)) {
 		goto out;
 	}
 
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index be7174f..f27bed6 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -60,6 +60,7 @@
 #include "ardour/port.h"
 #include "ardour/port_insert.h"
 #include "ardour/processor.h"
+#include "ardour/profile.h"
 #include "ardour/route.h"
 #include "ardour/route_group.h"
 #include "ardour/send.h"
@@ -95,7 +96,8 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
 	, _self_solo (false)
 	, _soloed_by_others_upstream (0)
 	, _soloed_by_others_downstream (0)
-	, _solo_isolated (0)
+	, _solo_isolated (false)
+	, _solo_isolated_by_upstream (0)
 	, _denormal_protection (false)
 	, _recordable (true)
 	, _silent (false)
@@ -112,15 +114,22 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
 	, _initial_io_setup (false)
 	, _custom_meter_position_noted (false)
 {
-	if (is_master()) {
-		_meter_type = MeterK20;
-	}
 	processor_max_streams.reset();
 }
 
 int
 Route::init ()
 {
+	/* set default meter type */
+	if (is_master()) {
+		_meter_type = Config->get_meter_type_master ();
+	}
+	else if (dynamic_cast<Track*>(this)) {
+		_meter_type = Config->get_meter_type_track ();
+	} else {
+		_meter_type = Config->get_meter_type_bus ();
+	}
+
 	/* add standard controls */
 
 	_solo_control.reset (new SoloControllable (X_("solo"), shared_from_this ()));
@@ -833,6 +842,14 @@ Route::set_solo (bool yn, void *src)
 		solo_changed (true, src); /* EMIT SIGNAL */
 		_solo_control->Changed (); /* EMIT SIGNAL */
 	}
+
+	/* XXX TRACKS DEVELOPERS: THIS LOGIC SUGGESTS THAT YOU ARE NOT AWARE OF
+	   Config->get_solo_mute_overrride().
+	*/
+
+	if (yn && Profile->get_trx()) {
+		set_mute (false, src);
+	}
 }
 
 void
@@ -936,6 +953,28 @@ Route::set_mute_master_solo ()
 }
 
 void
+Route::mod_solo_isolated_by_upstream (bool yn, void* src)
+{
+	bool old = solo_isolated ();
+
+	if (!yn) {
+		if (_solo_isolated_by_upstream >= 1) {
+			_solo_isolated_by_upstream--;
+		} else {
+			_solo_isolated_by_upstream = 0;
+		}
+	} else {
+		_solo_isolated_by_upstream++;
+	}
+
+	if (solo_isolated() != old) {
+		/* solo isolated status changed */
+		_mute_master->set_solo_ignore (yn);
+		solo_isolated_changed (src);
+	}
+}
+
+void
 Route::set_solo_isolated (bool yn, void *src)
 {
 	if (is_master() || is_monitor() || is_auditioner()) {
@@ -947,52 +986,53 @@ Route::set_solo_isolated (bool yn, void *src)
 		return;
 	}
 
+	bool changed = false;
+
+	if (yn) {
+		if (_solo_isolated == false) {
+			_mute_master->set_solo_ignore (true);
+			changed = true;
+		}
+		_solo_isolated = true;
+	} else {
+		if (_solo_isolated == true) {
+			_solo_isolated = false;
+            _mute_master->set_solo_ignore (false);
+			changed = true;
+		}
+	}
+
+	
+	if (!changed) {
+		return;
+	}
+	
 	/* forward propagate solo-isolate status to everything fed by this route, but not those via sends only */
 
 	boost::shared_ptr<RouteList> routes = _session.get_routes ();
 	for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
-
+		
 		if ((*i).get() == this || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_auditioner()) {
 			continue;
 		}
-
+		
 		bool sends_only;
-		bool does_feed = direct_feeds_according_to_graph (*i, &sends_only); // we will recurse anyway, so don't use ::feeds()
-
+		bool does_feed = feeds (*i, &sends_only);
+		
 		if (does_feed && !sends_only) {
-			(*i)->set_solo_isolated (yn, (*i)->route_group());
+			(*i)->mod_solo_isolated_by_upstream (yn, src);
 		}
 	}
-
+	
 	/* XXX should we back-propagate as well? (April 2010: myself and chris goddard think not) */
 
-	bool changed = false;
-
-	if (yn) {
-		if (_solo_isolated == 0) {
-			_mute_master->set_solo_ignore (true);
-			changed = true;
-		}
-		_solo_isolated++;
-	} else {
-		if (_solo_isolated > 0) {
-			_solo_isolated--;
-			if (_solo_isolated == 0) {
-				_mute_master->set_solo_ignore (false);
-				changed = true;
-			}
-		}
-	}
-
-	if (changed) {
-		solo_isolated_changed (src);
-	}
+	solo_isolated_changed (src);
 }
 
 bool
 Route::solo_isolated () const
 {
-	return _solo_isolated > 0;
+	return (_solo_isolated == true) || (_solo_isolated_by_upstream > 0);
 }
 
 void
@@ -1199,7 +1239,7 @@ Route::add_processor (boost::shared_ptr<Processor> processor, boost::shared_ptr<
 
 		}
 
-		if (activation_allowed && !_session.get_disable_all_loaded_plugins()) {
+		if (activation_allowed && (!_session.get_disable_all_loaded_plugins () || !processor->display_to_user ())) {
 			processor->activate ();
 		}
 
@@ -1279,7 +1319,7 @@ Route::add_processor_from_xml_2X (const XMLNode& node, int version)
 		//A2 uses the "active" flag in the toplevel redirect node, not in the child plugin/IO
 		if (i != children.end()) {
 			if ((prop = (*i)->property (X_("active"))) != 0) {
-				if ( string_is_affirmative (prop->value()) && !_session.get_disable_all_loaded_plugins() )
+				if ( string_is_affirmative (prop->value()) && (!_session.get_disable_all_loaded_plugins () || !processor->display_to_user () ) )
 					processor->activate();
 				else
 					processor->deactivate();
@@ -4159,7 +4199,7 @@ Route::set_processor_positions ()
 	bool had_amp = false;
 	for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) {
 		(*i)->set_pre_fader (!had_amp);
-		if (boost::dynamic_pointer_cast<Amp> (*i)) {
+		if (*i == _amp) {
 			had_amp = true;
 		}
 	}
@@ -4354,7 +4394,7 @@ Route::setup_invisible_processors ()
 	/* find the amp */
 
 	ProcessorList::iterator amp = new_processors.begin ();
-	while (amp != new_processors.end() && boost::dynamic_pointer_cast<Amp> (*amp) == 0) {
+	while (amp != new_processors.end() && *amp != _amp) {
 		++amp;
 	}
 
@@ -4487,6 +4527,12 @@ Route::setup_invisible_processors ()
 
 	_processors = new_processors;
 
+	for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
+		if (!(*i)->display_to_user () && !(*i)->active ()) {
+			(*i)->activate ();
+		}
+	}
+
 	DEBUG_TRACE (DEBUG::Processors, string_compose ("%1: setup_invisible_processors\n", _name));
 	for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
 		DEBUG_TRACE (DEBUG::Processors, string_compose ("\t%1\n", (*i)->name ()));
diff --git a/libs/ardour/scene_change.cc b/libs/ardour/scene_change.cc
index 6560a7c..322b37a 100644
--- a/libs/ardour/scene_change.cc
+++ b/libs/ardour/scene_change.cc
@@ -41,6 +41,7 @@ SceneChange::factory (const XMLNode& node, int version)
 
 SceneChange::SceneChange ()
         : _color (out_of_bound_color)
+        , _active (true)
 {
 }
 
@@ -56,3 +57,12 @@ SceneChange::color() const
 {
         return _color;
 }
+
+void
+SceneChange::set_active (bool yn)
+{
+        if (_active != yn) {
+                _active = yn;
+                ActiveChanged (); /* EMIT SIGNAL */
+        }
+}
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 71ad0bd..6a8a549 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -46,6 +46,7 @@
 #include "pbd/search_path.h"
 #include "pbd/stacktrace.h"
 #include "pbd/stl_delete.h"
+#include "pbd/replace_all.h"
 #include "pbd/unwind.h"
 
 #include "ardour/amp.h"
@@ -67,6 +68,9 @@
 #include "ardour/data_type.h"
 #include "ardour/debug.h"
 #include "ardour/directory_names.h"
+#ifdef USE_TRACKS_CODE_FEATURES
+#include "ardour/engine_state_controller.h"
+#endif
 #include "ardour/filename_extensions.h"
 #include "ardour/graph.h"
 #include "ardour/midiport_manager.h"
@@ -78,6 +82,7 @@
 #include "ardour/plugin.h"
 #include "ardour/plugin_insert.h"
 #include "ardour/process_thread.h"
+#include "ardour/profile.h"
 #include "ardour/rc_configuration.h"
 #include "ardour/recent_sessions.h"
 #include "ardour/region.h"
@@ -130,10 +135,17 @@ PBD::Signal0<void> Session::FeedbackDetected;
 PBD::Signal0<void> Session::SuccessfulGraphSort;
 PBD::Signal2<void,std::string,std::string> Session::VersionMismatch;
 
-const framecnt_t Session::bounce_chunk_size = 65536;
+const framecnt_t Session::bounce_chunk_size = 8192;
 static void clean_up_session_event (SessionEvent* ev) { delete ev; }
 const SessionEvent::RTeventCallback Session::rt_cleanup (clean_up_session_event);
 
+// seconds should be added after the region exceeds end marker
+#ifdef USE_TRACKS_CODE_FEATURES
+const uint32_t Session::session_end_shift = 5;
+#else
+const uint32_t Session::session_end_shift = 0;
+#endif
+
 /** @param snapshot_name Snapshot name, without .ardour suffix */
 Session::Session (AudioEngine &eng,
                   const string& fullpath,
@@ -179,6 +191,8 @@ Session::Session (AudioEngine &eng,
 	, average_dir (0)
 	, have_first_delta_accumulator (false)
 	, _slave_state (Stopped)
+	, _mtc_active (false)
+	, _ltc_active (false)
 	, post_export_sync (false)
 	, post_export_position (0)
 	, _exporting (false)
@@ -243,6 +257,8 @@ Session::Session (AudioEngine &eng,
 	, _all_route_group (new RouteGroup (*this, "all"))
 	, routes (new RouteList)
 	, _adding_routes_in_progress (false)
+	, _reconnecting_routes_in_progress (false)
+	, _route_deletion_in_progress (false)
 	, destructive_index (0)
 	, _track_number_decimals(1)
 	, solo_update_disabled (false)
@@ -263,11 +279,14 @@ Session::Session (AudioEngine &eng,
 	, click_emphasis_length (0)
 	, _clicks_cleared (0)
 	, _play_range (false)
+	, _range_selection (-1,-1)
+	, _object_selection (-1,-1)
 	, main_outs (0)
 	, first_file_data_format_reset (true)
 	, first_file_header_format_reset (true)
 	, have_looped (false)
 	, _have_rec_enabled_track (false)
+    , _have_rec_disabled_track (true)
 	, _step_editors (0)
 	, _suspend_timecode_transmission (0)
 	,  _speakers (new Speakers)
@@ -285,6 +304,10 @@ Session::Session (AudioEngine &eng,
 	pre_engine_init (fullpath);
 	
 	if (_is_new) {
+
+#ifdef USE_TRACKS_CODE_FEATURES		
+		sr = EngineStateController::instance()->get_current_sample_rate();
+#endif
 		if (ensure_engine (sr)) {
 			destroy ();
 			throw failed_constructor ();
@@ -306,8 +329,11 @@ Session::Session (AudioEngine &eng,
 		 * of a template.
 		 */
 
-		if (!mix_template.empty() && load_state (_current_snapshot_name)) {
-			throw failed_constructor ();
+		if (!mix_template.empty()) { 
+			if (load_state (_current_snapshot_name)) {
+				throw failed_constructor ();
+			}
+			store_recent_templates (mix_template);
 		}
 
 		/* load default session properties - if any */
@@ -358,8 +384,6 @@ Session::Session (AudioEngine &eng,
 	StartTimeChanged.connect_same_thread (*this, boost::bind (&Session::start_time_changed, this, _1));
 	EndTimeChanged.connect_same_thread (*this, boost::bind (&Session::end_time_changed, this, _1));
 
-	_is_new = false;
-
 	emit_thread_start ();
 
 	/* hook us up to the engine since we are now completely constructed */
@@ -369,8 +393,53 @@ Session::Session (AudioEngine &eng,
 	_engine.set_session (this);
 	_engine.reset_timebase ();
 
-	BootMessage (_("Session loading complete"));
+#ifdef USE_TRACKS_CODE_FEATURES
+	
+	EngineStateController::instance()->set_session(this);
+	
+	if (_is_new ) {
+		if ( ARDOUR::Profile->get_trx () ) {
 
+			/* Waves Tracks: fill session with tracks basing on the amount of inputs.
+			 * each available input must have corresponding track when session starts.
+			 */
+			
+			uint32_t how_many (0);
+			
+			std::vector<std::string> inputs;
+			EngineStateController::instance()->get_physical_audio_inputs(inputs);
+			
+			how_many = inputs.size();
+			
+			list<boost::shared_ptr<AudioTrack> > tracks;
+			
+			// Track names after driver 
+			if (Config->get_tracks_auto_naming() == NameAfterDriver) {
+				string track_name = "";
+				for (std::vector<string>::size_type i = 0; i < inputs.size(); ++i) {
+					string track_name;
+					track_name = inputs[i];
+					replace_all (track_name, "system:capture", "");
+					
+					list<boost::shared_ptr<AudioTrack> > single_track = new_audio_track (1, 1, Normal, 0, 1, track_name);
+					tracks.insert(tracks.begin(), single_track.front());
+				}   
+			} else { // Default track names
+				tracks = new_audio_track (1, 1, Normal, 0, how_many, string());
+			}
+			
+			if (tracks.size() != how_many) {
+				destroy ();
+				throw failed_constructor ();
+			}
+		}
+	}
+#endif
+	
+	_is_new = false;
+	session_loaded ();
+
+	BootMessage (_("Session loading complete"));
 }
 
 Session::~Session ()
@@ -479,6 +548,10 @@ Session::destroy ()
 
 	_engine.remove_session ();
 
+#ifdef USE_TRACKS_CODE_FEATURES
+	EngineStateController::instance()->remove_session();
+#endif
+
 	/* deregister all ports - there will be no process or any other
 	 * callbacks from the engine any more.
 	 */
@@ -846,7 +919,13 @@ Session::auto_connect_master_bus ()
 	if (!_master_out || !Config->get_auto_connect_standard_busses() || _monitor_out) {
 		return;
 	}
-		
+	
+	// Waves Tracks: Do not connect master bas for Tracks if AutoConnectMaster option is not set
+	// In this case it means "Multi Out" output mode
+	if (ARDOUR::Profile->get_trx() && !(Config->get_output_auto_connect() & AutoConnectMaster) ) {
+		return;
+	}
+
 	/* if requested auto-connect the outputs to the first N physical ports.
 	 */
 	
@@ -877,7 +956,7 @@ Session::auto_connect_master_bus ()
 void
 Session::remove_monitor_section ()
 {
-	if (!_monitor_out) {
+	if (!_monitor_out || Profile->get_trx()) {
 		return;
 	}
 
@@ -931,7 +1010,7 @@ Session::add_monitor_section ()
 {
 	RouteList rl;
 
-	if (_monitor_out || !_master_out) {
+	if (_monitor_out || !_master_out || Profile->get_trx()) {
 		return;
 	}
 
@@ -1079,7 +1158,7 @@ Session::reset_monitor_section ()
 {
 	/* Process lock should be held by the caller.*/
 
-	if (!_monitor_out) {
+	if (!_monitor_out || Profile->get_trx()) {
 		return;
 	}
 
@@ -1378,6 +1457,19 @@ Session::auto_loop_changed (Location* location)
 		clear_events (SessionEvent::AutoLoop);
 	}
 
+	/* possibly move playhead if not rolling; if we are rolling we'll move
+	   to the loop start on stop if that is appropriate.
+	 */
+
+	framepos_t pos;
+
+	if (!transport_rolling() && select_playhead_priority_target (pos)) {
+		if (pos == location->start()) {
+			request_locate (pos);
+		}
+	}
+
+	
 	last_loopend = location->end();
 	set_dirty ();
 }
@@ -1472,9 +1564,21 @@ Session::set_auto_loop_location (Location* location)
 	location->StartChanged.connect_same_thread (loop_connections, boost::bind (&Session::auto_loop_changed, this, location));
 	location->EndChanged.connect_same_thread (loop_connections, boost::bind (&Session::auto_loop_changed, this, location));
 	location->Changed.connect_same_thread (loop_connections, boost::bind (&Session::auto_loop_changed, this, location));
+	location->FlagsChanged.connect_same_thread (loop_connections, boost::bind (&Session::auto_loop_changed, this, location));
 
 	location->set_auto_loop (true, this);
 
+	if (Config->get_loop_is_mode() && play_loop && Config->get_seamless_loop()) {
+		// set all tracks to use internal looping
+		boost::shared_ptr<RouteList> rl = routes.reader ();
+		for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+			boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+			if (tr && !tr->hidden()) {
+				tr->set_loop (location);
+			}
+		}
+	}
+    
 	/* take care of our stuff first */
 
 	auto_loop_changed (location);
@@ -1485,12 +1589,6 @@ Session::set_auto_loop_location (Location* location)
 }
 
 void
-Session::update_loop (Location*)
-{
-	set_dirty ();
-}
-
-void
 Session::update_marks (Location*)
 {
 	set_dirty ();
@@ -1499,10 +1597,10 @@ Session::update_marks (Location*)
 void
 Session::update_skips (Location* loc, bool consolidate)
 {
-    if (_ignore_skips_updates) {
-        return;
-    }
-    
+	if (_ignore_skips_updates) {
+		return;
+	}
+	
 	Locations::LocationList skips;
 
         if (consolidate) {
@@ -1601,6 +1699,15 @@ Session::location_added (Location *location)
                 _session_range_location = location;
         }
 
+        if (location->is_mark()) {
+                /* listen for per-location signals that require us to do any * global updates for marks */
+
+                location->StartChanged.connect_same_thread (skip_update_connections, boost::bind (&Session::update_marks, this, location));
+                location->EndChanged.connect_same_thread (skip_update_connections, boost::bind (&Session::update_marks, this, location));
+                location->Changed.connect_same_thread (skip_update_connections, boost::bind (&Session::update_marks, this, location));
+                location->FlagsChanged.connect_same_thread (skip_update_connections, boost::bind (&Session::update_marks, this, location));
+        }
+
         if (location->is_skip()) {
                 /* listen for per-location signals that require us to update skip-locate events */
 
@@ -1611,7 +1718,7 @@ Session::location_added (Location *location)
 
                 update_skips (location, true);
         }
-
+        
 	set_dirty ();
 }
 
@@ -1654,10 +1761,15 @@ Session::_locations_changed (const Locations::LocationList& locations)
            We might be re-adding a location here but it doesn't actually matter
            for all the locations that the Session takes an interest in.
         */
-
-	for (Locations::LocationList::const_iterator i = locations.begin(); i != locations.end(); ++i) {
-                location_added (*i);
-        }
+	
+	{
+		PBD::Unwinder<bool> protect_ignore_skip_updates (_ignore_skips_updates, true);
+		for (Locations::LocationList::const_iterator i = locations.begin(); i != locations.end(); ++i) {
+			location_added (*i);
+		}
+	}
+	
+	update_skips (NULL, false);
 }
 
 void
@@ -1748,6 +1860,11 @@ Session::maybe_enable_record ()
 
 	save_state ("", true);
 
+        if (Config->get_loop_is_mode()) {
+                /* makes no sense to use loop play as mode when recording */
+                request_play_loop (false);
+        }
+        
 	if (_transport_speed) {
 		if (!config.get_punch_in()) {
 			enable_record ();
@@ -1835,7 +1952,8 @@ Session::set_frame_rate (framecnt_t frames_per_second)
 	sync_time_vars();
 
 	clear_clicks ();
-
+	reset_write_sources (false);
+	
 	// XXX we need some equivalent to this, somehow
 	// SndFileSource::setup_standard_crossfades (frames_per_second);
 
@@ -2073,16 +2191,16 @@ Session::resort_routes_using (boost::shared_ptr<RouteList> r)
  *  and \a id do not reflect a free route name.
  */
 bool
-Session::find_route_name (string const & base, uint32_t& id, char* name, size_t name_len, bool definitely_add_number)
+Session::find_route_name (string const & base, uint32_t& id, string& name, bool definitely_add_number)
 {
 	if (!definitely_add_number && route_by_name (base) == 0) {
 		/* juse use the base */
-		snprintf (name, name_len, "%s", base.c_str());
+		name = base;
 		return true;
 	}
 
 	do {
-		snprintf (name, name_len, "%s %" PRIu32, base.c_str(), id);
+		name = string_compose ("%1 %2", base, id);
 
 		if (route_by_name (name) == 0) {
 			return true;
@@ -2113,6 +2231,25 @@ Session::count_existing_track_channels (ChanCount& in, ChanCount& out)
 	}
 }
 
+string
+Session::default_track_name_pattern (DataType t)
+{
+	switch (t) {
+	case DataType::AUDIO:
+		if (Profile->get_trx()) {
+			return _("Track ");
+		} else {
+			return _("Audio ");
+		}
+		break;
+
+	case DataType::MIDI:
+		return _("MIDI ");
+	}
+
+	return "";
+}
+
 /** Caller must not hold process lock
  *  @param name_template string to use for the start of the name, or "" to use "MIDI".
  *  @param instrument plugin info for the instrument to insert pre-fader, if any
@@ -2121,16 +2258,17 @@ list<boost::shared_ptr<MidiTrack> >
 Session::new_midi_track (const ChanCount& input, const ChanCount& output, boost::shared_ptr<PluginInfo> instrument, 
 			 TrackMode mode, RouteGroup* route_group, uint32_t how_many, string name_template)
 {
-	char track_name[32];
+	string track_name;
 	uint32_t track_id = 0;
 	string port;
 	RouteList new_routes;
 	list<boost::shared_ptr<MidiTrack> > ret;
 
-	bool const use_number = (how_many != 1) || name_template.empty () || name_template == _("MIDI");
+	const string name_pattern = default_track_name_pattern (DataType::MIDI);
+	bool const use_number = (how_many != 1) || name_template.empty () || (name_template == name_pattern);
 
 	while (how_many) {
-		if (!find_route_name (name_template.empty() ? _("MIDI") : name_template, ++track_id, track_name, sizeof(track_name), use_number)) {
+		if (!find_route_name (name_template.empty() ? _("MIDI") : name_template, ++track_id, track_name, use_number)) {
 			error << "cannot find name for new midi track" << endmsg;
 			goto failed;
 		}
@@ -2176,6 +2314,8 @@ Session::new_midi_track (const ChanCount& input, const ChanCount& output, boost:
 
 			new_routes.push_back (track);
 			ret.push_back (track);
+
+			RouteAddedOrRemoved (true); /* EMIT SIGNAL */
 		}
 
 		catch (failed_constructor &err) {
@@ -2195,7 +2335,11 @@ Session::new_midi_track (const ChanCount& input, const ChanCount& output, boost:
   failed:
 	if (!new_routes.empty()) {
 		StateProtector sp (this);
-		add_routes (new_routes, true, true, true);
+		if (Profile->get_trx()) {
+			add_routes (new_routes, false, false, false);
+		} else {
+			add_routes (new_routes, true, true, false);
+		}
 
 		if (instrument) {
 			for (RouteList::iterator r = new_routes.begin(); r != new_routes.end(); ++r) {
@@ -2325,6 +2469,17 @@ Session::auto_connect_route (boost::shared_ptr<Route> route, ChanCount& existing
 			for (uint32_t i = output_start.get(*t); i < route->n_outputs().get(*t); ++i) {
 				string port;
 
+				/* Waves Tracks:
+				 * do not create new connections if we reached the limit of physical outputs
+				 * in Multi Out mode
+				 */
+
+				if (!(Config->get_output_auto_connect() & AutoConnectMaster) &&
+				    ARDOUR::Profile->get_trx () &&
+				    existing_outputs.get(*t) == nphysical_out ) {
+					break;
+				}
+
 				if ((*t) == DataType::MIDI && (Config->get_output_auto_connect() & AutoConnectPhysical)) {
 					port = physoutputs[(out_offset.get(*t) + i) % nphysical_out];
 				} else if ((*t) == DataType::AUDIO && (Config->get_output_auto_connect() & AutoConnectMaster)) {
@@ -2350,13 +2505,289 @@ Session::auto_connect_route (boost::shared_ptr<Route> route, ChanCount& existing
 	}
 }
 
+#ifdef USE_TRACKS_CODE_FEATURES 
+
+static bool
+compare_routes_by_remote_id (const boost::shared_ptr<Route>& route1, const boost::shared_ptr<Route>& route2)
+{
+	return route1->remote_control_id() < route2->remote_control_id();
+}
+
 void
 Session::reconnect_existing_routes (bool withLock, bool reconnect_master, bool reconnect_inputs, bool reconnect_outputs)
 {
-        /* TRX does stuff here, ardour does not (but probably should). This is called after an engine reset (in particular).
-         */
+	// it is not allowed to perform connection
+	if (!IO::connecting_legal) {
+		return;
+	}
+    
+	// if we are deleting routes we will call this once at the end
+	if (_route_deletion_in_progress) {
+		return;
+	}
+    
+	Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock (), Glib::Threads::NOT_LOCK);
+    
+	if (withLock) {
+		lm.acquire ();
+	}
+    
+	// We need to disconnect the route's inputs and outputs first
+	// basing on autoconnect configuration
+	bool reconnectIputs = !(Config->get_input_auto_connect() & ManualConnect) && reconnect_inputs;
+	bool reconnectOutputs = !(Config->get_output_auto_connect() & ManualConnect) && reconnect_outputs;
+    
+	ChanCount existing_inputs;
+	ChanCount existing_outputs;
+	count_existing_track_channels (existing_inputs, existing_outputs);
+    
+	//ChanCount inputs = ChanCount::ZERO;
+	//ChanCount outputs = ChanCount::ZERO;
+    
+	RouteList existing_routes = *routes.reader ();
+	existing_routes.sort (compare_routes_by_remote_id);
+    
+	{
+		PBD::Unwinder<bool> protect_ignore_changes (_reconnecting_routes_in_progress, true);
+
+		vector<string> physinputs;
+		vector<string> physoutputs;
+        
+		EngineStateController::instance()->get_physical_audio_outputs(physoutputs);
+		EngineStateController::instance()->get_physical_audio_inputs(physinputs);
+                
+		uint32_t input_n = 0;
+		uint32_t output_n = 0;
+		RouteList::iterator rIter = existing_routes.begin();
+		const AutoConnectOption current_input_auto_connection (Config->get_input_auto_connect());
+		const AutoConnectOption current_output_auto_connection (Config->get_output_auto_connect());
+		for (; rIter != existing_routes.end(); ++rIter) {
+			if (*rIter == _master_out || *rIter == _monitor_out ) {
+				continue;
+			}
+
+			if (current_output_auto_connection == AutoConnectPhysical) {
+				(*rIter)->amp()->deactivate();
+			} else if (current_output_auto_connection == AutoConnectMaster) {
+				(*rIter)->amp()->activate();
+			}
+            
+			if (reconnectIputs) {
+				(*rIter)->input()->disconnect (this); //GZ: check this; could be heavy
+                
+				for (uint32_t route_input_n = 0; route_input_n < (*rIter)->n_inputs().get(DataType::AUDIO); ++route_input_n) {
+                    
+					if (current_input_auto_connection & AutoConnectPhysical) {
+                        
+						if ( input_n == physinputs.size() ) {
+							break;
+						}
+                        
+						string port = physinputs[input_n];
+                    
+						if (port.empty() ) {
+							error << "Physical Input number "<< input_n << " is unavailable and cannot be connected" << endmsg;
+						}
+                        
+						//GZ: check this; could be heavy
+						(*rIter)->input()->connect ((*rIter)->input()->ports().port(DataType::AUDIO, route_input_n), port, this);
+						++input_n;
+					}
+				}
+			}
+            
+			if (reconnectOutputs) {
+                
+				//normalize route ouptuts: reduce the amount outputs to be equal to the amount of inputs
+				if (current_output_auto_connection & AutoConnectPhysical) {
+                
+					//GZ: check this; could be heavy
+					(*rIter)->output()->disconnect (this);
+					size_t route_inputs_count = (*rIter)->n_inputs().get(DataType::AUDIO);
+                    
+					//GZ: check this; could be heavy
+					(*rIter)->output()->ensure_io(ChanCount(DataType::AUDIO, route_inputs_count), false, this );
+               
+				} else if (current_output_auto_connection & AutoConnectMaster){
+                    
+					if (!reconnect_master) {
+						continue;
+					}
+                    
+					//GZ: check this; could be heavy
+					(*rIter)->output()->disconnect (this);
+                    
+					if (_master_out) {
+						uint32_t master_inputs_count = _master_out->n_inputs().get(DataType::AUDIO);
+						(*rIter)->output()->ensure_io(ChanCount(DataType::AUDIO, master_inputs_count), false, this );
+					} else {
+						error << error << "Master bus is not available" << endmsg;
+						break;
+					}
+				}
+                
+				for (uint32_t route_output_n = 0; route_output_n < (*rIter)->n_outputs().get(DataType::AUDIO); ++route_output_n) {
+					if (current_output_auto_connection & AutoConnectPhysical) {
+                        
+						if ( output_n == physoutputs.size() ) {
+							break;
+						}
+                        
+						string port = physoutputs[output_n];
+                        
+						if (port.empty() ) {
+							error << "Physical Output number "<< output_n << " is unavailable and cannot be connected" << endmsg;
+						}
+                    
+						//GZ: check this; could be heavy
+						(*rIter)->output()->connect ((*rIter)->output()->ports().port(DataType::AUDIO, route_output_n), port, this);
+						++output_n;
+                        
+					} else if (current_output_auto_connection & AutoConnectMaster) {
+                  
+						if ( route_output_n == _master_out->n_inputs().get(DataType::AUDIO) ) {
+							break;
+						}
+                        
+						// connect to master bus
+						string port = _master_out->input()->ports().port(DataType::AUDIO, route_output_n)->name();
+                    
+						if (port.empty() ) {
+							error << "MasterBus Input number "<< route_output_n << " is unavailable and cannot be connected" << endmsg;
+						}
+                        
+                            
+						//GZ: check this; could be heavy
+						(*rIter)->output()->connect ((*rIter)->output()->ports().port(DataType::AUDIO, route_output_n), port, this);
+                            
+					}
+				}
+			}
+            
+			//auto_connect_route (*rIter, inputs, outputs, false, reconnectIputs);
+		}
+        
+		_master_out->output()->disconnect (this);
+		auto_connect_master_bus ();
+	}
+    
+	graph_reordered ();
+    
+	session_routes_reconnected (); /* EMIT SIGNAL */
+}
+
+void
+Session::reconnect_midi_scene_ports(bool inputs)
+{
+    if (inputs ) {
+        
+        boost::shared_ptr<MidiPort> scene_in_ptr = scene_in();
+        if (scene_in_ptr) {
+            scene_in_ptr->disconnect_all ();
+            
+            std::vector<EngineStateController::MidiPortState> midi_port_states;
+            EngineStateController::instance()->get_physical_midi_input_states (midi_port_states);
+            
+            std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin();
+            
+            for (; state_iter != midi_port_states.end(); ++state_iter) {
+                if (state_iter->active && state_iter->available && state_iter->scene_connected) {
+                    scene_in_ptr->connect (state_iter->name);
+                }
+            }
+        }
+
+    } else {
+        
+        boost::shared_ptr<MidiPort> scene_out_ptr = scene_out();
+        
+        if (scene_out_ptr ) {
+            scene_out_ptr->disconnect_all ();
+
+            std::vector<EngineStateController::MidiPortState> midi_port_states;
+            EngineStateController::instance()->get_physical_midi_output_states (midi_port_states);
+            
+            std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin();
+            
+            for (; state_iter != midi_port_states.end(); ++state_iter) {
+                if (state_iter->active && state_iter->available && state_iter->scene_connected) {
+                    scene_out_ptr->connect (state_iter->name);
+                }
+            }
+        }
+    }
+}
+
+void
+Session::reconnect_mtc_ports ()
+{
+	boost::shared_ptr<MidiPort> mtc_in_ptr = _midi_ports->mtc_input_port();
+
+	if (!mtc_in_ptr) {
+		return;
+	}
+
+	mtc_in_ptr->disconnect_all ();
+	
+	std::vector<EngineStateController::MidiPortState> midi_port_states;
+	EngineStateController::instance()->get_physical_midi_input_states (midi_port_states);
+	
+	std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin();
+	
+	for (; state_iter != midi_port_states.end(); ++state_iter) {
+		if (state_iter->available && state_iter->mtc_in) {
+			mtc_in_ptr->connect (state_iter->name);
+		}
+	}
+	
+	if (!_midi_ports->mtc_input_port ()->connected () &&
+	    config.get_external_sync () &&
+	    (Config->get_sync_source () == MTC) ) {
+		config.set_external_sync (false);
+	}
+	
+	if ( ARDOUR::Profile->get_trx () ) {
+		// Tracks need this signal to update timecode_source_dropdown
+		MtcOrLtcInputPortChanged (); //emit signal
+	}
 }
 
+void
+Session::reconnect_mmc_ports(bool inputs)
+{
+	if (inputs ) { // get all enabled midi input ports
+        
+		boost::shared_ptr<MidiPort> mmc_in_ptr = _midi_ports->mmc_in();
+		if (mmc_in_ptr) {
+			mmc_in_ptr->disconnect_all ();
+			std::vector<std::string> enabled_midi_inputs;
+			EngineStateController::instance()->get_physical_midi_inputs (enabled_midi_inputs);
+            
+			std::vector<std::string>::iterator port_iter = enabled_midi_inputs.begin();
+            
+			for (; port_iter != enabled_midi_inputs.end(); ++port_iter) {
+				mmc_in_ptr->connect (*port_iter);
+			}
+
+		}
+	} else { // get all enabled midi output ports
+        
+		boost::shared_ptr<MidiPort> mmc_out_ptr = _midi_ports->mmc_out();
+		if (mmc_out_ptr ) {
+			mmc_out_ptr->disconnect_all ();
+			std::vector<std::string> enabled_midi_outputs;
+			EngineStateController::instance()->get_physical_midi_outputs (enabled_midi_outputs);
+            
+			std::vector<std::string>::iterator port_iter = enabled_midi_outputs.begin();
+            
+			for (; port_iter != enabled_midi_outputs.end(); ++port_iter) {
+				mmc_out_ptr->connect (*port_iter);
+			}
+		}
+	}
+}
+
+#endif
 
 /** Caller must not hold process lock
  *  @param name_template string to use for the start of the name, or "" to use "Audio".
@@ -2365,16 +2796,18 @@ list< boost::shared_ptr<AudioTrack> >
 Session::new_audio_track (int input_channels, int output_channels, TrackMode mode, RouteGroup* route_group, 
 			  uint32_t how_many, string name_template)
 {
-	char track_name[32];
+	string track_name;
 	uint32_t track_id = 0;
 	string port;
 	RouteList new_routes;
 	list<boost::shared_ptr<AudioTrack> > ret;
 
-	bool const use_number = (how_many != 1) || name_template.empty () || name_template == _("Audio");
-
+	const string name_pattern = default_track_name_pattern (DataType::AUDIO);
+	bool const use_number = (how_many != 1) || name_template.empty () || (name_template == name_pattern);
+	
 	while (how_many) {
-		if (!find_route_name (name_template.empty() ? _("Audio") : name_template, ++track_id, track_name, sizeof(track_name), use_number)) {
+
+		if (!find_route_name (name_template.empty() ? _(name_pattern.c_str()) : name_template, ++track_id, track_name, use_number)) {
 			error << "cannot find name for new audio track" << endmsg;
 			goto failed;
 		}
@@ -2388,6 +2821,20 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
 				goto failed;
 			}
 
+			if (ARDOUR::Profile->get_trx ()) {
+				// TRACKS considers it's not a USE CASE, it's
+				// a piece of behavior of the session model:
+				//
+				// Gain for a newly created route depends on
+				// the current output_auto_connect mode:
+				//
+				//  0 for Stereo Out mode
+				//  0 Multi Out mode
+				if (Config->get_output_auto_connect() & AutoConnectMaster) {
+					track->set_gain (dB_to_coefficient (0), 0);
+				}
+			}
+
 			track->use_new_diskstream();
 
 #ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
@@ -2426,6 +2873,8 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
 
 			new_routes.push_back (track);
 			ret.push_back (track);
+
+			RouteAddedOrRemoved (true); /* EMIT SIGNAL */
 		}
 
 		catch (failed_constructor &err) {
@@ -2445,7 +2894,11 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
   failed:
 	if (!new_routes.empty()) {
 		StateProtector sp (this);
-		add_routes (new_routes, true, true, true);
+		if (Profile->get_trx()) {
+			add_routes (new_routes, false, false, false);
+		} else {
+			add_routes (new_routes, true, true, false);
+		}
 	}
 
 	return ret;
@@ -2457,7 +2910,7 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
 RouteList
 Session::new_audio_route (int input_channels, int output_channels, RouteGroup* route_group, uint32_t how_many, string name_template)
 {
-	char bus_name[32];
+	string bus_name;
 	uint32_t bus_id = 0;
 	string port;
 	RouteList ret;
@@ -2465,7 +2918,7 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r
 	bool const use_number = (how_many != 1) || name_template.empty () || name_template == _("Bus");
 	
 	while (how_many) {
-		if (!find_route_name (name_template.empty () ? _("Bus") : name_template, ++bus_id, bus_name, sizeof(bus_name), use_number)) {
+		if (!find_route_name (name_template.empty () ? _("Bus") : name_template, ++bus_id, bus_name, use_number)) {
 			error << "cannot find name for new audio bus" << endmsg;
 			goto failure;
 		}
@@ -2510,6 +2963,8 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r
 
 			ret.push_back (bus);
 			
+			RouteAddedOrRemoved (true); /* EMIT SIGNAL */
+
 			ARDOUR::GUIIdle ();
 		}
 
@@ -2531,7 +2986,11 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r
   failure:
 	if (!ret.empty()) {
 		StateProtector sp (this);
-		add_routes (ret, false, true, true); // autoconnect outputs only
+		if (Profile->get_trx()) {
+			add_routes (ret, false, false, false);
+		} else {
+			add_routes (ret, false, true, true); // autoconnect // outputs only
+		}
 	}
 
 	return ret;
@@ -2565,7 +3024,7 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template
 		node_copy.remove_property_recursively (X_("id"));
 
 		try {
-			char name[32];
+			string name;
 
 			if (!name_base.empty()) {
 
@@ -2574,7 +3033,7 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template
 				 * numbered, via the final parameter.
 				 */
 
-				if (!find_route_name (name_base.c_str(), ++number, name, sizeof(name), (being_added > 1))) {
+				if (!find_route_name (name_base.c_str(), ++number, name, (being_added > 1))) {
 					fatal << _("Session: UINT_MAX routes? impossible!") << endmsg;
 					/*NOTREACHDE*/
 				}
@@ -2584,7 +3043,7 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template
 				string const route_name  = node_copy.property(X_("name"))->value ();
 			
 				/* generate a new name by adding a number to the end of the template name */
-				if (!find_route_name (route_name.c_str(), ++number, name, sizeof(name), true)) {
+				if (!find_route_name (route_name.c_str(), ++number, name, true)) {
 					fatal << _("Session: UINT_MAX routes? impossible!") << endmsg;
 					abort(); /*NOTREACHED*/
 				}
@@ -2630,6 +3089,8 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template
 			++control_id;
 
 			ret.push_back (route);
+
+			RouteAddedOrRemoved (true); /* EMIT SIGNAL */
 		}
 
 		catch (failed_constructor &err) {
@@ -2648,7 +3109,11 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template
   out:
 	if (!ret.empty()) {
 		StateProtector sp (this);
-		add_routes (ret, true, true, true);
+		if (Profile->get_trx()) {
+			add_routes (ret, false, false, false);
+		} else {
+			add_routes (ret, true, true, false);
+		}
 		IO::enable_connecting ();
 	}
 
@@ -2679,6 +3144,8 @@ Session::add_routes (RouteList& new_routes, bool input_auto_connect, bool output
 	
 	reassign_track_numbers();
 
+	update_route_record_state ();
+    
 	RouteAdded (new_routes); /* EMIT SIGNAL */
 }
 
@@ -2736,7 +3203,7 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool
 		if (tr) {
 			tr->PlaylistChanged.connect_same_thread (*this, boost::bind (&Session::track_playlist_changed, this, boost::weak_ptr<Track> (tr)));
 			track_playlist_changed (boost::weak_ptr<Track> (tr));
-			tr->RecordEnableChanged.connect_same_thread (*this, boost::bind (&Session::update_have_rec_enabled_track, this));
+			tr->RecordEnableChanged.connect_same_thread (*this, boost::bind (&Session::update_route_record_state, this));
 
 			boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (tr);
 			if (mt) {
@@ -2870,100 +3337,128 @@ Session::add_internal_send (boost::shared_ptr<Route> dest, boost::shared_ptr<Pro
 	graph_reordered ();
 }
 
+
 void
-Session::remove_route (boost::shared_ptr<Route> route)
+Session::remove_routes (boost::shared_ptr<RouteList> routes_to_remove)
 {
-	if (route == _master_out) {
-		return;
-	}
-
-	route->set_solo (false, this);
-
-	{
+	{ // RCU Writer scope
 		RCUWriter<RouteList> writer (routes);
 		boost::shared_ptr<RouteList> rs = writer.get_copy ();
-
-		rs->remove (route);
-
-		/* deleting the master out seems like a dumb
-		   idea, but its more of a UI policy issue
-		   than our concern.
-		*/
-
-		if (route == _master_out) {
-			_master_out = boost::shared_ptr<Route> ();
-		}
-
-		if (route == _monitor_out) {
-			_monitor_out.reset ();
-		}
-
-		/* writer goes out of scope, forces route list update */
-	}
-
-	update_route_solo_state ();
-
-	// We need to disconnect the route's inputs and outputs
-
-	route->input()->disconnect (0);
-	route->output()->disconnect (0);
-
-	/* if the route had internal sends sending to it, remove them */
-	if (route->internal_return()) {
-
-		boost::shared_ptr<RouteList> r = routes.reader ();
-		for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
-			boost::shared_ptr<Send> s = (*i)->internal_send_for (route);
-			if (s) {
-				(*i)->remove_processor (s);
+        
+        
+		for (RouteList::iterator iter = routes_to_remove->begin(); iter != routes_to_remove->end(); ++iter) {
+            
+			if (*iter == _master_out) {
+				continue;
+			}
+            
+			(*iter)->set_solo (false, this);
+            
+			rs->remove (*iter);
+            
+			/* deleting the master out seems like a dumb
+			   idea, but its more of a UI policy issue
+			   than our concern.
+			*/
+            
+			if (*iter == _master_out) {
+				_master_out = boost::shared_ptr<Route> ();
+			}
+            
+			if (*iter == _monitor_out) {
+				_monitor_out.reset ();
 			}
-		}
-	}
 
-	/* if the monitoring section had a pointer to this route, remove it */
-	if (_monitor_out && !route->is_master() && !route->is_monitor()) {
-		Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock ());
-		PBD::Unwinder<bool> uw (ignore_route_processor_changes, true);
-		route->remove_aux_or_listen (_monitor_out);
-	}
+			update_route_solo_state ();
+            
+			// We need to disconnect the route's inputs and outputs
+            
+			(*iter)->input()->disconnect (0);
+			(*iter)->output()->disconnect (0);
+            
+			/* if the route had internal sends sending to it, remove them */
+			if ((*iter)->internal_return()) {
+                
+				boost::shared_ptr<RouteList> r = routes.reader ();
+				for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+					boost::shared_ptr<Send> s = (*i)->internal_send_for (*iter);
+					if (s) {
+						(*i)->remove_processor (s);
+					}
+				}
+			}
+            
+			/* if the monitoring section had a pointer to this route, remove it */
+			if (_monitor_out && !(*iter)->is_master() && !(*iter)->is_monitor()) {
+				Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock ());
+				PBD::Unwinder<bool> uw (ignore_route_processor_changes, true);
+				(*iter)->remove_aux_or_listen (_monitor_out);
+			}
+            
+			boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (*iter);
+			if (mt && mt->step_editing()) {
+				if (_step_editors > 0) {
+					_step_editors--;
+				}
+			}
 
-	boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (route);
-	if (mt && mt->step_editing()) {
-		if (_step_editors > 0) {
-			_step_editors--;
+			RouteAddedOrRemoved (false); /* EMIT SIGNAL */
 		}
-	}
+    
+		/* writer goes out of scope, forces route list update */
 
+	} // end of RCU Writer scope
+    
 	update_latency_compensation ();
 	set_dirty();
-
+    
 	/* Re-sort routes to remove the graph's current references to the one that is
 	 * going away, then flush old references out of the graph.
+	 * Wave Tracks: reconnect routes
 	 */
 
-	resort_routes ();
+#ifdef USE_TRACKS_CODE_FEATURES
+		reconnect_existing_routes(true, false);
+#else
+		resort_routes ();
+#endif
+    
 	if (_process_graph) {
 		_process_graph->clear_other_chain ();
 	}
-
+    
 	/* get rid of it from the dead wood collection in the route list manager */
-
 	/* XXX i think this is unsafe as it currently stands, but i am not sure. (pd, october 2nd, 2006) */
-
+    
 	routes.flush ();
+    
+	/* try to cause everyone to drop their references
+	 * and unregister ports from the backend
+	 */
+	PBD::Unwinder<bool> uw_flag (_route_deletion_in_progress, true);
 
-	/* try to cause everyone to drop their references */
-
-	route->drop_references ();
-
+	for (RouteList::iterator iter = routes_to_remove->begin(); iter != routes_to_remove->end(); ++iter) {
+		(*iter)->drop_references ();
+	}
+    
 	Route::RemoteControlIDChange(); /* EMIT SIGNAL */
-
+    
 	/* save the new state of the world */
-
+    
 	if (save_state (_current_snapshot_name)) {
 		save_history (_current_snapshot_name);
 	}
+
 	reassign_track_numbers();
+	update_route_record_state ();
+}
+
+void
+Session::remove_route (boost::shared_ptr<Route> route)
+{
+	boost::shared_ptr<RouteList> rl (new RouteList);
+	rl->push_back (route);
+	remove_routes (rl);
 }
 
 void
@@ -3034,6 +3529,120 @@ Session::route_solo_isolated_changed (void* /*src*/, boost::weak_ptr<Route> wpr)
 }
 
 void
+Session::routes_solo_changed (boost::shared_ptr<RouteList> solo_change_routes)
+{
+	if (solo_update_disabled) {
+		// We know already
+		DEBUG_TRACE (DEBUG::Solo, "solo update disabled - changed ignored\n");
+		return;
+	}
+
+	if (solo_change_routes->empty() ) {
+		return;
+	}
+
+	boost::shared_ptr<RouteList> non_solo_change_routes (new RouteList);
+	boost::shared_ptr<RouteList> r = routes.reader ();
+	int32_t delta;
+
+	std::set_difference (r->begin(), r->end(),
+	                     solo_change_routes->begin(), solo_change_routes->end(),
+	                     std::back_inserter(*non_solo_change_routes) );
+
+	DEBUG_TRACE (DEBUG::Solo, string_compose ("propagate solo change, delta = %1\n", delta));
+
+	solo_update_disabled = true;
+	RouteList uninvolved;
+
+	for (RouteList::iterator route = solo_change_routes->begin(); route != solo_change_routes->end(); ++route) {
+
+		if ((*route)->self_soloed() ) {
+			delta = 1;
+		} else {
+			delta = -1;
+		}
+
+		DEBUG_TRACE (DEBUG::Solo, string_compose ("%1\n", (*route)->name()));
+
+		for (RouteList::iterator i = non_solo_change_routes->begin(); i != non_solo_change_routes->end(); ++i) {
+			bool via_sends_only;
+			bool in_signal_flow;
+
+			if ((*i) == *route || (*i)->solo_isolated() || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_auditioner() ) {
+				continue;
+			}
+
+			in_signal_flow = false;
+
+			DEBUG_TRACE (DEBUG::Solo, string_compose ("check feed from %1\n", (*i)->name()));
+
+			if ((*i)->feeds (*route, &via_sends_only)) {
+				DEBUG_TRACE (DEBUG::Solo, string_compose ("\tthere is a feed from %1\n", (*i)->name()));
+				if (!via_sends_only) {
+					if (!(*route)->soloed_by_others_upstream()) {
+						(*i)->mod_solo_by_others_downstream (delta);
+					}
+				} else {
+					DEBUG_TRACE (DEBUG::Solo, string_compose ("\tthere is a send-only feed from %1\n", (*i)->name()));
+				}
+				in_signal_flow = true;
+			} else {
+				DEBUG_TRACE (DEBUG::Solo, string_compose ("\tno feed from %1\n", (*i)->name()));
+			}
+
+			DEBUG_TRACE (DEBUG::Solo, string_compose ("check feed to %1\n", (*i)->name()));
+
+			if ((*route)->feeds (*i, &via_sends_only)) {
+				/* propagate solo upstream only if routing other than
+				   sends is involved, but do consider the other route
+				   (*i) to be part of the signal flow even if only
+				   sends are involved.
+				*/
+				DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 feeds %2 via sends only %3 sboD %4 sboU %5\n",
+				                                          (*route)->name(),
+				                                          (*i)->name(),
+				                                          via_sends_only,
+				                                          (*route)->soloed_by_others_downstream(),
+				                                          (*route)->soloed_by_others_upstream()));
+				if (!via_sends_only) {
+					if (!(*route)->soloed_by_others_downstream()) {
+						DEBUG_TRACE (DEBUG::Solo, string_compose ("\tmod %1 by %2\n", (*i)->name(), delta));
+						(*i)->mod_solo_by_others_upstream (delta);
+					} else {
+						DEBUG_TRACE (DEBUG::Solo, "\talready soloed by others downstream\n");
+					}
+				} else {
+					DEBUG_TRACE (DEBUG::Solo, string_compose ("\tfeed to %1 ignored, sends-only\n", (*i)->name()));
+				}
+				in_signal_flow = true;
+			} else {
+				DEBUG_TRACE (DEBUG::Solo, "\tno feed to\n");
+			}
+
+			if (!in_signal_flow) {
+				uninvolved.push_back (*i);
+			}
+		}
+	}
+	solo_update_disabled = false;
+	DEBUG_TRACE (DEBUG::Solo, "propagation complete\n");
+
+	update_route_solo_state ();
+
+	/* now notify that the mute state of the routes not involved in the signal
+	   pathway of the just-solo-changed route may have altered.
+	*/
+
+	for (RouteList::iterator i = uninvolved.begin(); i != uninvolved.end(); ++i) {
+		DEBUG_TRACE (DEBUG::Solo, string_compose ("mute change for %1\n", (*i)->name() ));
+		(*i)->mute_changed (this);
+	}
+
+	SoloChanged (); /* EMIT SIGNAL */
+	set_dirty();
+}
+
+void
 Session::route_solo_changed (bool self_solo_change, void* /*src*/, boost::weak_ptr<Route> wpr)
 {
 	DEBUG_TRACE (DEBUG::Solo, string_compose ("route solo change, self = %1\n", self_solo_change));
@@ -3468,9 +4077,11 @@ Session::maybe_update_session_range (framepos_t a, framepos_t b)
 		return;
 	}
 
+	framepos_t session_end_marker_shift_samples = session_end_shift * _nominal_frame_rate;
+
 	if (_session_range_location == 0) {
 
-		add_session_range_location (a, b);
+		set_session_range_location (a, b + session_end_marker_shift_samples);
 
 	} else {
 
@@ -3907,7 +4518,7 @@ Session::format_audio_source_name (const string& legalized_base, uint32_t nchan,
 	ostringstream sstr;
 	const string ext = native_header_format_extension (config.get_native_file_header_format(), DataType::AUDIO);
 	
-	if (destructive) {
+	if (Profile->get_trx() && destructive) {
 		sstr << 'T';
 		sstr << setfill ('0') << setw (4) << cnt;
 		sstr << legalized_base;
@@ -4237,7 +4848,7 @@ Session::graph_reordered ()
 	   from a set_state() call or creating new tracks. Ditto for deletion.
 	*/
 
-	if ((_state_of_the_state & (InitialConnecting|Deletion)) || _adding_routes_in_progress) {
+	if ((_state_of_the_state & (InitialConnecting|Deletion)) || _adding_routes_in_progress || _reconnecting_routes_in_progress) {
 		return;
 	}
 
@@ -4560,12 +5171,12 @@ void
 Session::reset_native_file_format ()
 {
 	boost::shared_ptr<RouteList> rl = routes.reader ();
+
 	for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
 		boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
 		if (tr) {
 			/* don't save state as we do this, there's no point
 			 */
-
 			_state_of_the_state = StateOfTheState (_state_of_the_state|InCleanup);
 			tr->reset_write_sources (false);
 			_state_of_the_state = StateOfTheState (_state_of_the_state & ~InCleanup);
@@ -4948,9 +5559,15 @@ Session::have_rec_enabled_track () const
 	return g_atomic_int_get (const_cast<gint*>(&_have_rec_enabled_track)) == 1;
 }
 
+bool
+Session::have_rec_disabled_track () const
+{
+    return g_atomic_int_get (const_cast<gint*>(&_have_rec_disabled_track)) == 1;
+}
+
 /** Update the state of our rec-enabled tracks flag */
 void
-Session::update_have_rec_enabled_track ()
+Session::update_route_record_state ()
 {
 	boost::shared_ptr<RouteList> rl = routes.reader ();
 	RouteList::iterator i = rl->begin();
@@ -4971,6 +5588,22 @@ Session::update_have_rec_enabled_track ()
 	if (g_atomic_int_get (&_have_rec_enabled_track) != old) {
 		RecordStateChanged (); /* EMIT SIGNAL */
 	}
+
+	for (i = rl->begin(); i != rl->end (); ++i) {
+		boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+		if (tr && !tr->record_enabled ()) {
+			break;
+		}
+	}
+    
+	g_atomic_int_set (&_have_rec_disabled_track, i != rl->end () ? 1 : 0);
+
+	bool record_arm_state_changed = (old != g_atomic_int_get (&_have_rec_enabled_track) );
+    
+	if (record_status() == Recording && record_arm_state_changed ) {
+		RecordArmStateChanged ();
+	}
+	
 }
 
 void
@@ -5013,7 +5646,8 @@ Session::route_added_to_route_group (RouteGroup* rg, boost::weak_ptr<Route> r)
 void
 Session::route_removed_from_route_group (RouteGroup* rg, boost::weak_ptr<Route> r)
 {
-	RouteRemovedFromRouteGroup (rg, r);
+	update_route_record_state ();
+	RouteRemovedFromRouteGroup (rg, r); /* EMIT SIGNAL */
 }
 
 boost::shared_ptr<RouteList>
@@ -5090,7 +5724,7 @@ Session::current_end_frame () const
 }
 
 void
-Session::add_session_range_location (framepos_t start, framepos_t end)
+Session::set_session_range_location (framepos_t start, framepos_t end)
 {
 	_session_range_location = new Location (*this, start, end, _("session"), Location::IsSessionRange);
 	_locations->add (_session_range_location);
@@ -5526,6 +6160,12 @@ Session::next_control_id () const
 		subtract++;
 	}
 
+	/* the same about masterbus in Waves Tracks */
+
+	if (Profile->get_trx() && _master_out) {
+		subtract++;
+	}
+
 	return nroutes() - subtract;
 }
 
@@ -5543,6 +6183,14 @@ Session::notify_remote_id_change ()
 	default:
 		break;
 	}
+
+#ifdef USE_TRACKS_CODE_FEATURES
+		/* Waves Tracks: for Waves Tracks session it's required to reconnect their IOs
+		 * if track order has been changed by user
+		 */
+		reconnect_existing_routes(true, true);
+#endif
+		
 }
 
 void
@@ -5597,6 +6245,11 @@ Session::reconnect_ltc_input ()
 		if (src != _("None") && !src.empty())  {
 			_ltc_input->nth (0)->connect (src);
 		}
+
+		if ( ARDOUR::Profile->get_trx () ) {
+			// Tracks need this signal to update timecode_source_dropdown
+			MtcOrLtcInputPortChanged (); //emit signal
+		}
 	}
 }
 
@@ -5605,14 +6258,48 @@ Session::reconnect_ltc_output ()
 {
 	if (_ltc_output) {
 
-#if 0
-		string src = Config->get_ltc_sink_port();
+		string src = Config->get_ltc_output_port();
 
 		_ltc_output->disconnect (this);
 
 		if (src != _("None") && !src.empty())  {
 			_ltc_output->nth (0)->connect (src);
 		}
-#endif
 	}
 }
+
+void
+Session::set_range_selection (framepos_t start, framepos_t end)
+{
+	_range_selection = Evoral::Range<framepos_t> (start, end);
+#ifdef USE_TRACKS_CODE_FEATURES
+	follow_playhead_priority ();
+#endif
+}
+
+void
+Session::set_object_selection (framepos_t start, framepos_t end)
+{
+	_object_selection = Evoral::Range<framepos_t> (start, end);
+#ifdef USE_TRACKS_CODE_FEATURES
+	follow_playhead_priority ();
+#endif
+}
+
+void
+Session::clear_range_selection ()
+{
+	_range_selection = Evoral::Range<framepos_t> (-1,-1);
+#ifdef USE_TRACKS_CODE_FEATURES
+	follow_playhead_priority ();
+#endif
+}
+
+void
+Session::clear_object_selection ()
+{
+	_object_selection = Evoral::Range<framepos_t> (-1,-1);
+#ifdef USE_TRACKS_CODE_FEATURES
+	follow_playhead_priority ();
+#endif	
+}
diff --git a/libs/ardour/session_events.cc b/libs/ardour/session_events.cc
index 53a2636..7d8cbdc 100644
--- a/libs/ardour/session_events.cc
+++ b/libs/ardour/session_events.cc
@@ -42,6 +42,12 @@ SessionEvent::init_event_pool ()
 	pool = new PerThreadPool;
 }
 
+bool
+SessionEvent::has_per_thread_pool ()
+{
+	return pool->has_per_thread_pool ();
+}
+
 void
 SessionEvent::create_per_thread_pool (const std::string& name, uint32_t nitems)
 {
diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc
index 7becd9c..a97f405 100644
--- a/libs/ardour/session_midi.cc
+++ b/libs/ardour/session_midi.cc
@@ -43,6 +43,7 @@
 #include "ardour/midi_port.h"
 #include "ardour/midi_track.h"
 #include "ardour/midi_ui.h"
+#include "ardour/profile.h"
 #include "ardour/session.h"
 #include "ardour/slave.h"
 #include "ardour/ticker.h"
@@ -129,6 +130,19 @@ Session::mmc_record_pause (MIDI::MachineControl &/*mmc*/)
 void
 Session::mmc_record_strobe (MIDI::MachineControl &/*mmc*/)
 {
+	if (Profile->get_trx()) {
+
+		/* In Tracks Live, there is no concept of punch, so we just
+		   treat RecordStrobe like RecordPause. This violates the MMC
+		   specification.
+		*/
+		
+		if (Config->get_mmc_control()) {
+			maybe_enable_record();
+		}
+		return;
+	}
+
 	if (!Config->get_mmc_control() || (_step_editors > 0)) {
 		return;
 	}
@@ -523,11 +537,13 @@ Session::send_midi_time_code_for_cycle (framepos_t start_frame, framepos_t end_f
 		}
 
 #ifndef NDEBUG
-		DEBUG_STR_DECL(foo)
-		DEBUG_STR_APPEND(foo,"sending ");
-		DEBUG_STR_APPEND(foo, transmitting_timecode_time);
-		DEBUG_TRACE (DEBUG::MTC, string_compose ("%1 qfm = %2, stamp = %3\n", DEBUG_STR(foo).str(), next_quarter_frame_to_send,
-							 out_stamp));
+		if (DEBUG_ENABLED(DEBUG::MTC)) {
+			DEBUG_STR_DECL(foo)
+			DEBUG_STR_APPEND(foo,"sending ");
+			DEBUG_STR_APPEND(foo, transmitting_timecode_time);
+			DEBUG_TRACE (DEBUG::MTC, string_compose ("%1 qfm = %2, stamp = %3\n", DEBUG_STR(foo).str(), next_quarter_frame_to_send,
+								 out_stamp));
+		}
 #endif
 
 		// Increment quarter frame counter
diff --git a/libs/ardour/session_rtevents.cc b/libs/ardour/session_rtevents.cc
index 11d8319..b00c4c1 100644
--- a/libs/ardour/session_rtevents.cc
+++ b/libs/ardour/session_rtevents.cc
@@ -62,12 +62,17 @@ Session::set_solo (boost::shared_ptr<RouteList> rl, bool yn, SessionEvent::RTeve
 void
 Session::rt_set_solo (boost::shared_ptr<RouteList> rl, bool yn, bool /* group_override */)
 {
+	solo_update_disabled = true;
+	
 	for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
 		if (!(*i)->is_auditioner()) {
 			(*i)->set_solo (yn, this);
 		}
 	}
 
+	solo_update_disabled = false;
+	routes_solo_changed (rl);
+
 	set_dirty();
 }
 
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index f11ba77..0edff32 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -100,6 +100,7 @@
 #include "ardour/playlist_source.h"
 #include "ardour/port.h"
 #include "ardour/processor.h"
+#include "ardour/profile.h"
 #include "ardour/proxy_controllable.h"
 #include "ardour/recent_sessions.h"
 #include "ardour/region_factory.h"
@@ -141,8 +142,18 @@ Session::pre_engine_init (string fullpath)
 	_path = canonical_path(fullpath);
 
 	/* is it new ? */
+	if (Profile->get_trx() ) {
+		// Waves TracksLive has a usecase of session replacement with a new one.
+		// We should check session state file (<session_name>.ardour) existance
+		// to determine if the session is new or not
 
-	_is_new = !Glib::file_test (_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
+		string full_session_name = Glib::build_filename( fullpath, _name );
+		full_session_name += statefile_suffix;
+		
+		_is_new = !Glib::file_test (full_session_name, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
+	} else {
+		_is_new = !Glib::file_test (_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
+	}
 
 	/* finish initialization that can't be done in a normal C++ constructor
 	   definition.
@@ -270,6 +281,7 @@ Session::post_engine_init ()
 		
 		Config->map_parameters (ff);
 		config.map_parameters (ft);
+                _butler->map_parameters ();
 
 		/* Reset all panners */
 		
@@ -351,9 +363,44 @@ Session::post_engine_init ()
 		state_was_pending = false;
 	}
 
+	/* Now, finally, we can fill the playback buffers */
+    
+	BootMessage (_("Filling playback buffers"));
+    
+	boost::shared_ptr<RouteList> rl = routes.reader();
+	for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) {
+		boost::shared_ptr<Track> trk = boost::dynamic_pointer_cast<Track> (*r);
+		if (trk && !trk->hidden()) {
+			trk->seek (_transport_frame, true);
+		}
+	}
+
 	return 0;
 }
 
+void
+Session::session_loaded ()
+{
+	SessionLoaded();
+	
+	_state_of_the_state = Clean;
+	
+	DirtyChanged (); /* EMIT SIGNAL */
+	
+	if (_is_new) {
+		save_state ("");
+	} else if (state_was_pending) {
+		save_state ("");
+		remove_pending_capture_state ();
+		state_was_pending = false;
+	}
+	
+	/* Now, finally, we can fill the playback buffers */
+	
+	BootMessage (_("Filling playback buffers"));
+	force_locate (_transport_frame, false);
+}
+
 string
 Session::raid_path () const
 {
@@ -490,7 +537,7 @@ Session::create (const string& session_template, BusProfile* bus_profile)
 	_writable = exists_and_writable (_path);
 
 	if (!session_template.empty()) {
-		std::string in_path = session_template_dir_to_file (session_template);
+		std::string in_path = (ARDOUR::Profile->get_trx () ? session_template : session_template_dir_to_file (session_template));
 
 		ifstream in(in_path.c_str());
 
@@ -506,10 +553,12 @@ Session::create (const string& session_template, BusProfile* bus_profile)
 				out << in.rdbuf();
                                 _is_new = false;
 
-				/* Copy plugin state files from template to new session */
-				std::string template_plugins = Glib::build_filename (session_template, X_("plugins"));
-				copy_recurse (template_plugins, plugins_dir ());
-				
+                                if (!ARDOUR::Profile->get_trx()) {
+	                                /* Copy plugin state files from template to new session */
+	                                std::string template_plugins = Glib::build_filename (session_template, X_("plugins"));
+	                                copy_recurse (template_plugins, plugins_dir ());
+                                }
+                                
 				return 0;
 
 			} else {
@@ -526,7 +575,21 @@ Session::create (const string& session_template, BusProfile* bus_profile)
 
 	}
 
-	/* set initial start + end point */
+	if (Profile->get_trx()) {
+	
+		/* set initial start + end point : ARDOUR::Session::session_end_shift long.
+		   Remember that this is a brand new session. Sessions
+		   loaded from saved state will get this range from the saved state.
+		*/
+		
+		set_session_range_location (0, 0);
+		
+		/* Initial loop location, from absolute zero, length 10 seconds  */
+		
+		Location* loc = new Location (*this, 0, 10.0 * _engine.sample_rate(), _("Loop"),  Location::IsAutoLoop);
+		_locations->add (loc, true);
+		set_auto_loop_location (loc);
+	}
 
 	_state_of_the_state = Clean;
 
@@ -537,8 +600,9 @@ Session::create (const string& session_template, BusProfile* bus_profile)
 		RouteList rl;
                 ChanCount count(DataType::AUDIO, bus_profile->master_out_channels);
 
-		if (bus_profile->master_out_channels) {
-			boost::shared_ptr<Route> r (new Route (*this, _("Master"), Route::MasterOut, DataType::AUDIO));
+                // Waves Tracks: always create master bus for Tracks
+                if (ARDOUR::Profile->get_trx() || bus_profile->master_out_channels) {
+	                boost::shared_ptr<Route> r (new Route (*this, _("Master"), Route::MasterOut, DataType::AUDIO));
                         if (r->init ()) {
                                 return -1;
                         }
@@ -562,16 +626,20 @@ Session::create (const string& session_template, BusProfile* bus_profile)
 			add_routes (rl, false, false, false);
 		}
 
-                /* this allows the user to override settings with an environment variable.
-                 */
-
-                if (no_auto_connect()) {
-                        bus_profile->input_ac = AutoConnectOption (0);
-                        bus_profile->output_ac = AutoConnectOption (0);
-                }
-
-                Config->set_input_auto_connect (bus_profile->input_ac);
-                Config->set_output_auto_connect (bus_profile->output_ac);
+		// Waves Tracks: Skip this. Always use autoconnection for Tracks
+		if (!ARDOUR::Profile->get_trx()) {
+			
+			/* this allows the user to override settings with an environment variable.
+			 */
+			
+			if (no_auto_connect()) {
+				bus_profile->input_ac = AutoConnectOption (0);
+				bus_profile->output_ac = AutoConnectOption (0);
+			}
+			
+			Config->set_input_auto_connect (bus_profile->input_ac);
+			Config->set_output_auto_connect (bus_profile->output_ac);
+		}
         }
 
 	if (Config->get_use_monitor_bus() && bus_profile) {
@@ -1045,17 +1113,32 @@ Session::state (bool full_state)
 			}
 		}
 	}
+	
+	
 
 	if (full_state) {
-		node->add_child_nocopy (_locations->get_state());
+		
+		if (_locations) {
+			node->add_child_nocopy (_locations->get_state());	
+		}
 	} else {
+		Locations loc (*this);
 		// for a template, just create a new Locations, populate it
 		// with the default start and end, and get the state for that.
-		Locations loc (*this);
 		Location* range = new Location (*this, 0, 0, _("session"), Location::IsSessionRange);
 		range->set (max_framepos, 0);
 		loc.add (range);
-		node->add_child_nocopy (loc.get_state());
+		XMLNode& locations_state = loc.get_state();
+		
+		if (ARDOUR::Profile->get_trx() && _locations) {
+			// For tracks we need stored the Auto Loop Range and all MIDI markers.
+			for (Locations::LocationList::const_iterator i = _locations->list ().begin (); i != _locations->list ().end (); ++i) {
+				if ((*i)->is_mark () || (*i)->is_auto_loop ()) {
+					locations_state.add_child_nocopy ((*i)->get_state ());
+				}
+			}
+		}
+		node->add_child_nocopy (locations_state);
 	}
 
 	child = node->add_child ("Bundles");
@@ -1076,12 +1159,12 @@ Session::state (bool full_state)
 		RoutePublicOrderSorter cmp;
 		RouteList public_order (*r);
 		public_order.sort (cmp);
-
-                /* the sort should have put control outs first */
-
-                if (_monitor_out) {
-                        assert (_monitor_out == public_order.front());
-                }
+		
+		/* the sort should have put control outs first */
+		
+		if (_monitor_out) {
+			assert (_monitor_out == public_order.front());
+		}
 
 		for (RouteList::iterator i = public_order.begin(); i != public_order.end(); ++i) {
 			if (!(*i)->is_auditioner()) {
@@ -1335,7 +1418,7 @@ Session::set_state (const XMLNode& node, int version)
 		ControlProtocolManager::instance().set_state (*child, version);
 	}
 
-	update_have_rec_enabled_track ();
+	update_route_record_state ();
 
 	/* here beginneth the second phase ... */
 
@@ -1856,17 +1939,15 @@ Session::get_sources_as_xml ()
 void
 Session::reset_write_sources (bool mark_write_complete, bool force)
 {
-    boost::shared_ptr<RouteList> rl = routes.reader();
-    for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
-        boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
-        if (tr) {
-			
-			// block state saving
+	boost::shared_ptr<RouteList> rl = routes.reader();
+	for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+		boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+		if (tr) {
 			_state_of_the_state = StateOfTheState (_state_of_the_state|InCleanup);
 			tr->reset_write_sources(mark_write_complete, force);
 			_state_of_the_state = StateOfTheState (_state_of_the_state & ~InCleanup);
-        }
-    }
+		}
+	}
 }
 
 int
@@ -1985,60 +2066,80 @@ Session::XMLSourceFactory (const XMLNode& node)
 int
 Session::save_template (string template_name)
 {
-	XMLTree tree;
-
-	if (_state_of_the_state & CannotSave) {
+	if ((_state_of_the_state & CannotSave) || template_name.empty ()) {
 		return -1;
 	}
 
-	std::string user_template_dir(user_template_directory());
+	bool absolute_path = Glib::path_is_absolute (template_name);
 
-	if (g_mkdir_with_parents (user_template_dir.c_str(), 0755) != 0) {
-		error << string_compose(_("Could not create templates directory \"%1\" (%2)"),
-				user_template_dir, g_strerror (errno)) << endmsg;
-		return -1;
-	}
+	/* directory to put the template in */
+	std::string template_dir_path;
 
-	tree.set_root (&get_template());
+	if (!absolute_path) {
+		std::string user_template_dir(user_template_directory());
 
-	std::string template_dir_path(user_template_dir);
-	
-	/* directory to put the template in */
-	template_dir_path = Glib::build_filename (template_dir_path, template_name);
+		if (g_mkdir_with_parents (user_template_dir.c_str(), 0755) != 0) {
+			error << string_compose(_("Could not create templates directory \"%1\" (%2)"),
+					user_template_dir, g_strerror (errno)) << endmsg;
+			return -1;
+		}
 
-	if (Glib::file_test (template_dir_path, Glib::FILE_TEST_EXISTS)) {
-		warning << string_compose(_("Template \"%1\" already exists - new version not created"),
-				template_dir_path) << endmsg;
-		return -1;
+		template_dir_path = Glib::build_filename (user_template_dir, template_name);
+	} else {
+		template_dir_path = template_name;
 	}
-	
-	if (g_mkdir_with_parents (template_dir_path.c_str(), 0755) != 0) {
-		error << string_compose(_("Could not create directory for Session template\"%1\" (%2)"),
-				template_dir_path, g_strerror (errno)) << endmsg;
-		return -1;
+
+	if (!ARDOUR::Profile->get_trx()) {
+		if (Glib::file_test (template_dir_path, Glib::FILE_TEST_EXISTS)) {
+			warning << string_compose(_("Template \"%1\" already exists - new version not created"),
+									  template_dir_path) << endmsg;
+			return -1;
+		}
+		
+		if (g_mkdir_with_parents (template_dir_path.c_str(), 0755) != 0) {
+			error << string_compose(_("Could not create directory for Session template\"%1\" (%2)"),
+									template_dir_path, g_strerror (errno)) << endmsg;
+			return -1;
+		}
 	}
 
 	/* file to write */
-	std::string template_file_path(template_dir_path);
-	template_file_path = Glib::build_filename (template_file_path, template_name + template_suffix);
+	std::string template_file_path;
+	
+	if (ARDOUR::Profile->get_trx()) {
+		template_file_path = template_name;
+	} else {
+		if (absolute_path) {
+			template_file_path = Glib::build_filename (template_dir_path, Glib::path_get_basename (template_dir_path) + template_suffix);
+		} else {
+			template_file_path = Glib::build_filename (template_dir_path, template_name + template_suffix);
+		}
+	}
 
+	SessionSaveUnderway (); /* EMIT SIGNAL */
+	
+	XMLTree tree;
+
+	tree.set_root (&get_template());
 	if (!tree.write (template_file_path)) {
 		error << _("template not saved") << endmsg;
 		return -1;
 	}
 
-	/* copy plugin state directory */
+	if (!ARDOUR::Profile->get_trx()) {
+		/* copy plugin state directory */
 
-	std::string template_plugin_state_path(template_dir_path);
-	template_plugin_state_path = Glib::build_filename (template_plugin_state_path, X_("plugins"));
+		std::string template_plugin_state_path (Glib::build_filename (template_dir_path, X_("plugins")));
 
-	if (g_mkdir_with_parents (template_plugin_state_path.c_str(), 0755) != 0) {
-		error << string_compose(_("Could not create directory for Session template plugin state\"%1\" (%2)"),
-				template_plugin_state_path, g_strerror (errno)) << endmsg;
-		return -1;
+		if (g_mkdir_with_parents (template_plugin_state_path.c_str(), 0755) != 0) {
+			error << string_compose(_("Could not create directory for Session template plugin state\"%1\" (%2)"),
+									template_plugin_state_path, g_strerror (errno)) << endmsg;
+			return -1;
+		}
+		copy_files (plugins_dir(), template_plugin_state_path);
 	}
 
-	copy_recurse (plugins_dir(), template_plugin_state_path);
+	store_recent_templates (template_file_path);
 
 	return 0;
 }
@@ -2241,25 +2342,25 @@ Session::get_best_session_directory_for_new_audio ()
 string
 Session::automation_dir () const
 {
-	return Glib::build_filename (_path, "automation");
+	return Glib::build_filename (_path, automation_dir_name);
 }
 
 string
 Session::analysis_dir () const
 {
-	return Glib::build_filename (_path, "analysis");
+	return Glib::build_filename (_path, analysis_dir_name);
 }
 
 string
 Session::plugins_dir () const
 {
-	return Glib::build_filename (_path, "plugins");
+	return Glib::build_filename (_path, plugins_dir_name);
 }
 
 string
 Session::externals_dir () const
 {
-	return Glib::build_filename (_path, "externals");
+	return Glib::build_filename (_path, externals_dir_name);
 }
 
 int
@@ -2788,17 +2889,18 @@ Session::cleanup_sources (CleanupReport& rep)
 					*/
 					
 					RegionFactory::remove_regions_using_source (i->second);
-					sources.erase (i);
 					
 					// also remove source from all_sources
 					
 					for (set<string>::iterator j = all_sources.begin(); j != all_sources.end(); ++j) {
 						spath = Glib::path_get_basename (*j);
-						if ( spath == i->second->name () ) {
+						if (spath == i->second->name()) {
 							all_sources.erase (j);
 							break;
 						}
 					}
+
+					sources.erase (i);
 				}
 			}
 		}
@@ -3561,6 +3663,8 @@ Session::config_changed (std::string p, bool ours)
 		reconnect_ltc_output ();
 	} else if (p == "timecode-generator-offset") {
 		ltc_tx_parse_offset();
+	} else if (p == "auto-return-target-list") {
+		follow_playhead_priority ();
 	}
 
 	set_dirty ();
@@ -4152,7 +4256,15 @@ Session::save_as (SaveAs& saveas)
 
 				std::string from = *i;
 
-				if ((*i).find (audiofile_dir_string) != string::npos) {
+#ifdef __APPLE__
+				string filename = Glib::path_get_basename (from);
+				std::transform (filename.begin(), filename.end(), filename.begin(), ::toupper);
+				if (filename == ".DS_STORE") {
+					continue;
+				}
+#endif
+				
+				if (from.find (audiofile_dir_string) != string::npos) {
 					
 					/* audio file: only copy if asked */
 
@@ -4163,7 +4275,8 @@ Session::save_as (SaveAs& saveas)
 						info << "media file copying from " << from << " to " << to << endmsg;
 						
 						if (!copy_file (from, to)) {
-							throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed");
+							throw Glib::FileError (Glib::FileError::IO_ERROR,
+												   string_compose(_("\ncopying \"%1\" failed !"), from));
 						}
 					}
 					
@@ -4171,7 +4284,7 @@ Session::save_as (SaveAs& saveas)
 					
 					internal_file_cnt++;
 
-				} else if ((*i).find (midifile_dir_string) != string::npos) {
+				} else if (from.find (midifile_dir_string) != string::npos) {
 
 					/* midi file: always copy unless
 					 * creating an empty new session
@@ -4192,7 +4305,7 @@ Session::save_as (SaveAs& saveas)
 						
 					internal_file_cnt++;
 					
-				} else if ((*i).find (analysis_dir_string) != string::npos) {
+				} else if (from.find (analysis_dir_string) != string::npos) {
 
 					/*  make sure analysis dir exists in
 					 *  new session folder, but we're not
@@ -4211,14 +4324,14 @@ Session::save_as (SaveAs& saveas)
 					bool do_copy = true;
 					
 					for (vector<string>::iterator v = do_not_copy_extensions.begin(); v != do_not_copy_extensions.end(); ++v) {
-						if (((*i).length() > (*v).length()) && ((*i).find (*v) == (*i).length() - (*v).length())) {
+						if ((from.length() > (*v).length()) && (from.find (*v) == from.length() - (*v).length())) {
 							/* end of filename matches extension, do not copy file */
 							do_copy = false;
 							break;
 						} 
 					}
 
-					if (!saveas.copy_media && (*i).find (peakfile_suffix) != string::npos) {
+					if (!saveas.copy_media && from.find (peakfile_suffix) != string::npos) {
 						/* don't copy peakfiles if
 						 * we're not copying media
 						 */
@@ -4226,7 +4339,7 @@ Session::save_as (SaveAs& saveas)
 					}
 					
 					if (do_copy) {
-						string to = Glib::build_filename (to_dir, (*i).substr (prefix_len));
+						string to = Glib::build_filename (to_dir, from.substr (prefix_len));
 						
 						info << "attempting to make directory/folder " << to << endmsg;
 
@@ -4237,7 +4350,8 @@ Session::save_as (SaveAs& saveas)
 						info << "attempting to copy " << from << " to " << to << endmsg;
 						
 						if (!copy_file (from, to)) {
-							throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed");
+							throw Glib::FileError (Glib::FileError::IO_ERROR,
+												   string_compose(_("\ncopying \"%1\" failed !"), from));
 						}
 					}
 				}
@@ -4248,7 +4362,7 @@ Session::save_as (SaveAs& saveas)
 				*/
 				
 				GStatBuf gsb;
-				g_stat ((*i).c_str(), &gsb);
+				g_stat (from.c_str(), &gsb);
 				copied += gsb.st_size;
 				cnt++;
 				
@@ -4343,6 +4457,7 @@ Session::save_as (SaveAs& saveas)
 			if (internal_file_cnt) {
 				for (vector<string>::iterator s = old_search_path[DataType::AUDIO].begin(); s != old_search_path[DataType::AUDIO].end(); ++s) {
 					ensure_search_path_includes (*s, DataType::AUDIO);
+					cerr << "be sure to include " << *s << "  for audio" << endl;
 				}
 
 				/* we do not do this for MIDI because we copy
@@ -4364,6 +4479,8 @@ Session::save_as (SaveAs& saveas)
 		}
 
 		saveas.final_session_folder_name = _path;
+
+		store_recent_sessions (_name, _path);
 		
 		if (!saveas.switch_to) {
 
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index d5adbc5..51734a0 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -314,12 +314,13 @@ Session::butler_transport_work ()
 	bool finished;
 	PostTransportWork ptw;
 	boost::shared_ptr<RouteList> r = routes.reader ();
-
+	uint64_t before;
+	
 	int on_entry = g_atomic_int_get (&_butler->should_do_transport_work);
 	finished = true;
 	ptw = post_transport_work();
 
-	DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler transport work, todo = %1\n", enum_2_string (ptw)));
+	DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler transport work, todo = %1 at %2\n", enum_2_string (ptw), (before = g_get_monotonic_time())));
 
 	if (ptw & PostTransportAdjustPlaybackBuffering) {
 		for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
@@ -410,7 +411,7 @@ Session::butler_transport_work ()
 
 	g_atomic_int_dec_and_test (&_butler->should_do_transport_work);
 
-	DEBUG_TRACE (DEBUG::Transport, X_("Butler transport work all done\n"));
+	DEBUG_TRACE (DEBUG::Transport, string_compose (X_("Butler transport work all done after %1 usecs\n"), g_get_monotonic_time() - before));
 	DEBUG_TRACE (DEBUG::Transport, X_(string_compose ("Frame %1\n", _transport_frame)));
 }
 
@@ -493,6 +494,106 @@ Session::non_realtime_locate ()
 	clear_clicks ();
 }
 
+#ifdef USE_TRACKS_CODE_FEATURES
+bool
+Session::select_playhead_priority_target (framepos_t& jump_to)
+{
+	jump_to = -1;
+
+	AutoReturnTarget autoreturn = Config->get_auto_return_target_list ();
+
+	if (!autoreturn) {
+		return false;
+	}
+
+	if (Profile->get_trx() && transport_rolling() ) {
+		// We're playing, so do nothing.
+		// Next stop will put us where we need to be.
+		return false;
+	}
+	
+	/* Note that the order of checking each AutoReturnTarget flag defines
+	   the priority each flag.
+
+	   Ardour/Mixbus: Last Locate
+	                  Range Selection
+	                  Loop Range
+	                  Region Selection
+
+	   Tracks:        Range Selection
+                          Loop Range
+                          Region Selection
+                          Last Locate
+	*/
+	
+	if (autoreturn & RangeSelectionStart) {
+		if (!_range_selection.empty()) {
+			jump_to = _range_selection.from;
+		} else {
+			if (transport_rolling ()) {
+				/* Range selection no longer exists, but we're playing,
+				   so do nothing. Next stop will put us where
+				   we need to be.
+				*/
+				return false;
+			}
+		}
+	}
+	
+	if (jump_to < 0 && (autoreturn & Loop) && get_play_loop()) {
+		/* don't try to handle loop play when synced to JACK */
+		
+		if (!synced_to_engine()) {
+			Location *location = _locations->auto_loop_location();
+			
+			if (location) {
+				jump_to = location->start();
+
+				if (Config->get_seamless_loop()) {
+					/* need to get track buffers reloaded */
+					set_track_loop (true);
+				}
+			} 
+		}
+	}
+	
+	if (jump_to < 0 && (autoreturn & RegionSelectionStart)) {
+		if (!_object_selection.empty()) {
+			jump_to = _object_selection.from;
+		}
+	} 
+
+	if (jump_to < 0 && (autoreturn & LastLocate)) {
+		jump_to = _last_roll_location;
+	}
+	
+	return jump_to >= 0;
+}
+#else
+
+bool
+Session::select_playhead_priority_target (framepos_t& jump_to)
+{
+	if (!config.get_auto_return()) {
+		return false;
+	}
+
+	jump_to = _last_roll_location;
+	return jump_to >= 0;
+}
+
+#endif
+
+void
+Session::follow_playhead_priority ()
+{
+	framepos_t target;
+
+	if (select_playhead_priority_target (target)) {
+		request_locate (target);
+	}
+}
+
 void
 Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
 {
@@ -575,8 +676,7 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
 		update_latency_compensation ();
 	}
 
-	bool const auto_return_enabled =
-		(!config.get_external_sync() && (config.get_auto_return() || abort));
+	bool const auto_return_enabled = (!config.get_external_sync() && (Config->get_auto_return_target_list() || abort));
 
 	if (auto_return_enabled ||
 	    (ptw & PostTransportLocate) ||
@@ -602,40 +702,13 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
 				do_locate = true;
 
 			} else {
-				if (config.get_auto_return()) {
-
-					if (play_loop) {
-
-						/* don't try to handle loop play when synced to JACK */
+				framepos_t jump_to;
 
-						if (!synced_to_engine()) {
+				if (select_playhead_priority_target (jump_to)) {
 
-							Location *location = _locations->auto_loop_location();
-
-							if (location != 0) {
-								_transport_frame = location->start();
-							} else {
-								_transport_frame = _last_roll_location;
-							}
-							do_locate = true;
-						}
-
-					} else if (_play_range) {
-
-						/* return to start of range */
-
-						if (!current_audio_range.empty()) {
-							_transport_frame = current_audio_range.front().start;
-							do_locate = true;
-						}
-
-					} else {
-
-						/* regular auto-return */
+					_transport_frame = jump_to;
+					do_locate = true;
 
-						_transport_frame = _last_roll_location;
-						do_locate = true;
-					}
 				} else if (abort) {
 
 					_transport_frame = _last_roll_location;
@@ -1035,8 +1108,9 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
 	 */
 
 	bool transport_was_stopped = !transport_rolling();
-	
-	if (transport_was_stopped && (!auto_play_legal || !config.get_auto_play()) && !with_roll && !(synced_to_engine() && play_loop)) {
+
+	if (transport_was_stopped && (!auto_play_legal || !config.get_auto_play()) && !with_roll && !(synced_to_engine() && play_loop) &&
+	    (!Profile->get_trx() || !(config.get_external_sync() && !synced_to_engine()))) {
 		realtime_stop (false, true); // XXX paul - check if the 2nd arg is really correct
 		transport_was_stopped = true;
 	} else {
@@ -1216,7 +1290,7 @@ Session::set_transport_speed (double speed, framepos_t destination_frame, bool a
 			}
 			_engine.transport_stop ();
 		} else {
-			bool const auto_return_enabled = (!config.get_external_sync() && (config.get_auto_return() || abort));
+			bool const auto_return_enabled = (!config.get_external_sync() && (Config->get_auto_return_target_list() || abort));
 
 			if (!auto_return_enabled) {
 				_requested_return_frame = destination_frame;
@@ -1543,6 +1617,20 @@ Session::reset_rf_scale (framecnt_t motion)
 }
 
 void
+Session::mtc_status_changed (bool yn)
+{
+	g_atomic_int_set (&_mtc_active, yn);
+	MTCSyncStateChanged( yn );
+}
+
+void
+Session::ltc_status_changed (bool yn)
+{
+	g_atomic_int_set (&_ltc_active, yn);
+	LTCSyncStateChanged( yn );
+}
+
+void
 Session::use_sync_source (Slave* new_slave)
 {
 	/* Runs in process() context */
@@ -1554,6 +1642,30 @@ Session::use_sync_source (Slave* new_slave)
 	delete _slave;
 	_slave = new_slave;
 
+	MTC_Slave* mtc_slave = dynamic_cast<MTC_Slave*>(_slave);
+	if (mtc_slave) {
+		mtc_slave->ActiveChanged.connect_same_thread (mtc_status_connection, boost::bind (&Session::mtc_status_changed, this, _1));
+		MTCSyncStateChanged(mtc_slave->locked() );
+	} else {
+		if (g_atomic_int_get (&_mtc_active) ){
+			g_atomic_int_set (&_mtc_active, 0);
+			MTCSyncStateChanged( false );
+		}
+		mtc_status_connection.disconnect ();
+	}
+
+	LTC_Slave* ltc_slave = dynamic_cast<LTC_Slave*> (_slave);
+	if (ltc_slave) {
+		ltc_slave->ActiveChanged.connect_same_thread (ltc_status_connection, boost::bind (&Session::ltc_status_changed, this, _1));
+		LTCSyncStateChanged (ltc_slave->locked() );
+	} else {
+		if (g_atomic_int_get (&_ltc_active) ){
+			g_atomic_int_set (&_ltc_active, 0);
+			LTCSyncStateChanged( false );
+		}
+		ltc_status_connection.disconnect ();
+	}
+
 	DEBUG_TRACE (DEBUG::Slave, string_compose ("set new slave to %1\n", _slave));
 	
 	// need to queue this for next process() cycle
@@ -1789,8 +1901,6 @@ Session::engine_halted ()
 	*/
 
 	if (_butler) {
-		g_atomic_int_set (&_butler->should_do_transport_work, 0);
-		set_post_transport_work (PostTransportWork (0));
 		_butler->stop ();
 	}
 
diff --git a/libs/ardour/sha1.c b/libs/ardour/sha1.c
new file mode 100644
index 0000000..f9dbaac
--- /dev/null
+++ b/libs/ardour/sha1.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2012,2015 Robin Gareus <robin at gareus.org>
+ *
+ * This code is inspired by libcrypt, which was placed
+ * in the public domain by Wei Dai and other contributors.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef EXPORT_SHA
+#define EXPORT_SHA static
+#endif
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+
+#if defined(PLATFORM_WINDOWS) && !defined(__LITTLE_ENDIAN__)
+#define __LITTLE_ENDIAN__
+#endif
+
+#ifdef __BIG_ENDIAN__
+# define SHA_BIG_ENDIAN
+#elif defined _BIG_ENDIAN
+# define SHA_BIG_ENDIAN
+#elif defined __BYTE_ORDER__
+# if __BYTE_ORDER__ ==  __ORDER_BIG_ENDIAN__
+#  define SHA_BIG_ENDIAN
+# endif
+#elif !defined __LITTLE_ENDIAN__
+# include <endian.h> // machine/endian.h
+# if (defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__ && __BYTE_ORDER__ ==  __ORDER_BIG_ENDIAN__)
+#  define SHA_BIG_ENDIAN
+# endif
+#endif
+
+typedef struct {
+	uint32_t buffer[16];
+	uint32_t state[5];
+	uint32_t byteCount;
+	uint8_t bufferOffset;
+} Sha1Digest;
+
+
+static inline uint32_t sha1_rol32 (uint32_t number, uint8_t bits) {
+	return ((number << bits) | (number >> (32 - bits)));
+}
+
+static void sha1_hashBlock (Sha1Digest *s) {
+	uint8_t i;
+	uint32_t a, b, c, d, e, t;
+
+	a = s->state[0];
+	b = s->state[1];
+	c = s->state[2];
+	d = s->state[3];
+	e = s->state[4];
+
+	for (i = 0; i < 80; ++i) {
+		if (i >= 16) {
+			t = s->buffer[(i + 13) & 15] ^ s->buffer[(i + 8) & 15] ^ s->buffer[(i + 2) & 15] ^ s->buffer[i & 15];
+			s->buffer[i & 15] = sha1_rol32 (t, 1);
+		}
+		if (i < 20) {
+			t = (d ^ (b & (c ^ d))) + 0x5a827999;
+		} else if (i < 40) {
+			t = (b ^ c ^ d) + 0x6ed9eba1;
+		} else if (i < 60) {
+			t = ((b & c) | (d & (b | c))) + 0x8f1bbcdc;
+		} else {
+			t = (b ^ c ^ d) + 0xca62c1d6;
+		}
+		t += sha1_rol32 (a, 5) + e + s->buffer[i & 15];
+		e = d;
+		d = c;
+		c = sha1_rol32 (b, 30);
+		b = a;
+		a = t;
+	}
+
+	s->state[0] += a;
+	s->state[1] += b;
+	s->state[2] += c;
+	s->state[3] += d;
+	s->state[4] += e;
+}
+
+static void sha1_addUncounted (Sha1Digest *s, const uint8_t data) {
+	uint8_t * const b = (uint8_t*) s->buffer;
+#ifdef SHA_BIG_ENDIAN
+	b[s->bufferOffset] = data;
+#else
+	b[s->bufferOffset ^ 3] = data;
+#endif
+	s->bufferOffset++;
+	if (s->bufferOffset == 64) {
+		sha1_hashBlock (s);
+		s->bufferOffset = 0;
+	}
+}
+
+static void sha1_pad (Sha1Digest *s) {
+	// Implement SHA-1 padding (fips180-2 5.1.1)
+	// Pad with 0x80 followed by 0x00 until the end of the block
+	sha1_addUncounted (s, 0x80);
+	while (s->bufferOffset != 56) sha1_addUncounted (s, 0x00);
+
+	// Append length in the last 8 bytes
+	sha1_addUncounted (s, 0); // We're only using 32 bit lengths
+	sha1_addUncounted (s, 0); // But SHA-1 supports 64 bit lengths
+	sha1_addUncounted (s, 0); // So zero pad the top bits
+	sha1_addUncounted (s, s->byteCount >> 29); // Shifting to multiply by 8
+	sha1_addUncounted (s, s->byteCount >> 21); // as SHA-1 supports bitstreams as well as
+	sha1_addUncounted (s, s->byteCount >> 13); // byte.
+	sha1_addUncounted (s, s->byteCount >> 5);
+	sha1_addUncounted (s, s->byteCount << 3);
+}
+
+
+/*** public functions ***/
+
+EXPORT_SHA void sha1_init (Sha1Digest *s) {
+	s->state[0] = 0x67452301;
+	s->state[1] = 0xefcdab89;
+	s->state[2] = 0x98badcfe;
+	s->state[3] = 0x10325476;
+	s->state[4] = 0xc3d2e1f0;
+	s->byteCount = 0;
+	s->bufferOffset = 0;
+}
+
+EXPORT_SHA void sha1_writebyte (Sha1Digest *s, const uint8_t data) {
+	++s->byteCount;
+	sha1_addUncounted (s, data);
+}
+
+EXPORT_SHA void sha1_write (Sha1Digest *s, const uint8_t *data, size_t len) {
+	for (;len--;) sha1_writebyte (s, (uint8_t) *data++);
+}
+
+EXPORT_SHA uint8_t* sha1_result (Sha1Digest *s) {
+	// Pad to complete the last block
+	sha1_pad (s);
+
+#ifndef SHA_BIG_ENDIAN
+	// Swap byte order back
+	int i;
+	for (i = 0; i < 5; ++i) {
+		s->state[i] =
+			  (((s->state[i])<<24)& 0xff000000)
+			| (((s->state[i])<<8) & 0x00ff0000)
+			| (((s->state[i])>>8) & 0x0000ff00)
+			| (((s->state[i])>>24)& 0x000000ff);
+	}
+#endif
+	// Return pointer to hash (20 characters)
+	return (uint8_t*) s->state;
+}
+
+EXPORT_SHA void sha1_result_hash (Sha1Digest *s, char *rv) {
+	int i;
+	uint8_t* hash = sha1_result (s);
+	for (i = 0; i < 20; ++i) {
+		sprintf (&rv[2*i], "%02x", hash[i]);
+	}
+}
diff --git a/libs/ardour/sndfileimportable.cc b/libs/ardour/sndfileimportable.cc
index 5ccab2c..7f10845 100644
--- a/libs/ardour/sndfileimportable.cc
+++ b/libs/ardour/sndfileimportable.cc
@@ -20,10 +20,17 @@
 #include <sndfile.h>
 #include <iostream>
 #include <cstring>
+#include <fcntl.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
 
 #include "pbd/error.h"
 #include "ardour/sndfileimportable.h"
 
+#include <glibmm/convert.h>
+
 using namespace ARDOUR;
 using namespace std;
 
@@ -67,8 +74,12 @@ SndFileImportableSource::get_timecode_info (SNDFILE* sf, SF_BROADCAST_INFO* binf
 
 SndFileImportableSource::SndFileImportableSource (const string& path)
 {
+	int fd = g_open (path.c_str (), O_RDONLY, 0444);
+	if (fd == -1) {
+		throw failed_constructor ();
+	}
 	memset(&sf_info, 0 , sizeof(sf_info));
-	in.reset( sf_open(path.c_str(), SFM_READ, &sf_info), sf_close);
+	in.reset (sf_open_fd (fd, SFM_READ, &sf_info, true), sf_close);
 	if (!in) throw failed_constructor();
 
 	SF_BROADCAST_INFO binfo;
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc
index 5acfe7b..7dc2803 100644
--- a/libs/ardour/sndfilesource.cc
+++ b/libs/ardour/sndfilesource.cc
@@ -25,12 +25,14 @@
 #include <cerrno>
 #include <climits>
 #include <cstdarg>
+#include <fcntl.h>
 
 #include <sys/stat.h>
 
-#ifdef PLATFORM_WINDOWS
+#include <glib.h>
+#include <glib/gstdio.h>
+
 #include <glibmm/convert.h>
-#endif
 #include <glibmm/fileutils.h>
 #include <glibmm/miscutils.h>
 
@@ -242,19 +244,30 @@ SndFileSource::close ()
 int
 SndFileSource::open ()
 {
-	string path_to_open;
-
 	if (_sndfile) {
 		return 0;
 	}
-	
+
+// We really only want to use g_open for all platforms but because of this
+// method(SndfileSource::open), the compiler(or at least GCC) is confused
+// because g_open will expand to "open" on non-POSIX systems and needs the
+// global namespace qualifer. The problem is since since C99 ::g_open will
+// apparently expand to ":: open"
 #ifdef PLATFORM_WINDOWS
-	path_to_open = Glib::locale_from_utf8(_path);
+	int fd = g_open (_path.c_str(), writable() ? O_CREAT | O_RDWR : O_RDONLY, writable() ? 0644 : 0444);
 #else
-	path_to_open = _path;
+	int fd = ::open (_path.c_str(), writable() ? O_CREAT | O_RDWR : O_RDONLY, writable() ? 0644 : 0444);
 #endif
 
-	_sndfile = sf_open (path_to_open.c_str(), writable() ? SFM_RDWR : SFM_READ, &_info);
+	if (fd == -1) {
+		error << string_compose (
+		             _ ("SndFileSource: cannot open file \"%1\" for %2"),
+		             _path,
+		             (writable () ? "read+write" : "reading")) << endmsg;
+		return false;
+	}
+
+	_sndfile = sf_open_fd (fd, writable() ? SFM_RDWR : SFM_READ, &_info, true);
 
 	if (_sndfile == 0) {
 		char errbuf[1024];
@@ -264,10 +277,10 @@ SndFileSource::open ()
 		   so we don't want to see this message.
 		*/
 
-                cerr << "failed to open " << path_to_open << " with name " << _name << endl;
+                cerr << "failed to open " << _path << " with name " << _name << endl;
 
 		error << string_compose(_("SndFileSource: cannot open file \"%1\" for %2 (%3)"),
-					path_to_open, (writable() ? "read+write" : "reading"), errbuf) << endmsg;
+					_path, (writable() ? "read+write" : "reading"), errbuf) << endmsg;
 #endif
 		return -1;
 	}
@@ -329,7 +342,7 @@ SndFileSource::open ()
 
                         if (!_broadcast_info->write_to_file (_sndfile)) {
                                 error << string_compose (_("cannot set broadcast info for audio file %1 (%2); dropping broadcast info for this file"),
-                                                         path_to_open, _broadcast_info->get_error())
+                                                         _path, _broadcast_info->get_error())
                                       << endmsg;
                                 _flags = Flag (_flags & ~Broadcast);
                                 delete _broadcast_info;
@@ -924,8 +937,19 @@ SndFileSource::get_soundfile_info (const string& path, SoundFileInfo& info, stri
 
 	sf_info.format = 0; // libsndfile says to clear this before sf_open().
 
-	if ((sf = sf_open (const_cast<char*>(path.c_str()), SFM_READ, &sf_info)) == 0) {
-		char errbuf[256];
+#ifdef PLATFORM_WINDOWS
+	int fd = g_open (path.c_str(), O_RDONLY, 0444);
+#else
+	int fd = ::open (path.c_str(), O_RDONLY, 0444);
+#endif
+
+	if (fd == -1) {
+		error << string_compose ( _("SndFileSource: cannot open file \"%1\" for reading"), path)
+		      << endmsg;
+		return false;
+	}
+	if ((sf = sf_open_fd (fd, SFM_READ, &sf_info, true)) == 0) {
+		char errbuf[1024];
 		error_msg = sf_error_str (0, errbuf, sizeof (errbuf) - 1);
 		return false;
 	}
diff --git a/libs/ardour/source.cc b/libs/ardour/source.cc
index 03039fe..ef0538b 100644
--- a/libs/ardour/source.cc
+++ b/libs/ardour/source.cc
@@ -35,6 +35,7 @@
 #include "pbd/enumwriter.h"
 
 #include "ardour/debug.h"
+#include "ardour/profile.h"
 #include "ardour/session.h"
 #include "ardour/source.h"
 #include "ardour/transient_detector.h"
@@ -144,6 +145,11 @@ Source::set_state (const XMLNode& node, int version)
 		_flags = Flag (_flags | Destructive);
 	}
 
+	if (Profile->get_trx() && (_flags & Destructive)) {
+		error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg;
+		return -1;
+	}
+	
 	if (version < 3000) {
 		/* a source with an XML node must necessarily already exist,
 		   and therefore cannot be removable/writable etc. etc.; 2.X
diff --git a/libs/ardour/srcfilesource.cc b/libs/ardour/srcfilesource.cc
index 276a31e..b9421d2 100644
--- a/libs/ardour/srcfilesource.cc
+++ b/libs/ardour/srcfilesource.cc
@@ -30,7 +30,7 @@
 using namespace ARDOUR;
 using namespace PBD;
 
-const uint32_t SrcFileSource::blocksize = 65536U; /* somewhat arbitrary */
+const uint32_t SrcFileSource::max_blocksize = 2097152U; /* see AudioDiskstream::_do_refill_with_alloc, max */
 
 SrcFileSource::SrcFileSource (Session& s, boost::shared_ptr<AudioFileSource> src, SrcQuality srcq)
 	: Source(s, DataType::AUDIO, src->name(), Flag (src->flags() & ~(Writable|Removable|RemovableIfEmpty|RemoveAtDestroy)))
@@ -67,7 +67,7 @@ SrcFileSource::SrcFileSource (Session& s, boost::shared_ptr<AudioFileSource> src
 	_ratio = s.nominal_frame_rate() / _source->sample_rate();
 	_src_data.src_ratio = _ratio;
 
-	src_buffer_size = ceil((double)blocksize / _ratio) + 2;
+	src_buffer_size = ceil((double)max_blocksize / _ratio) + 2;
 	_src_buffer = new float[src_buffer_size];
 
 	int err;
@@ -120,13 +120,17 @@ SrcFileSource::read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) con
 
 	_src_data.input_frames = _source->read (_src_buffer, _source_position, scnt);
 
-	if ((framecnt_t) _src_data.input_frames < scnt
-			|| _source_position + scnt >= _source->length(0)) {
+	if ((framecnt_t) _src_data.input_frames * _ratio <= cnt
+			&& _source_position + scnt >= _source->length(0)) {
 		_src_data.end_of_input = true;
-		_target_position += _src_data.input_frames * _ratio;
 		DEBUG_TRACE (DEBUG::AudioPlayback, "SRC: END OF INPUT\n");
 	} else {
 		_src_data.end_of_input = false;
+	}
+
+	if ((framecnt_t) _src_data.input_frames < scnt) {
+		_target_position += _src_data.input_frames * _ratio;
+	} else {
 		_target_position += cnt;
 	}
 
@@ -134,11 +138,6 @@ SrcFileSource::read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) con
 	_src_data.data_in = _src_buffer;
 	_src_data.data_out = dst;
 
-	if (_src_data.end_of_input) {
-		_src_data.output_frames = std::min ((long)floor(_src_data.input_frames * _ratio), _src_data.output_frames);
-	}
-
-
 	if ((err = src_process (_src_state, &_src_data))) {
 		error << string_compose(_("SrcFileSource: %1"), src_strerror (err)) << endmsg ;
 		return 0;
diff --git a/libs/ardour/sse_avx_functions_64bit_win.s b/libs/ardour/sse_avx_functions_64bit_win.s
new file mode 100644
index 0000000..2e82ab8
--- /dev/null
+++ b/libs/ardour/sse_avx_functions_64bit_win.s
@@ -0,0 +1,600 @@
+/*
+    Copyright (C) 2005-2006 Paul Davis, John Rigg
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+	Author: Sampo Savolainen
+	64-bit conversion: John Rigg
+
+    $Id$
+*/
+
+#; Microsoft version of AVX sample processing functions
+
+#; void x86_sse_avx_mix_buffers_with_gain (float *dst, float *src, unsigned int nframes, float gain);
+
+.globl x86_sse_avx_mix_buffers_with_gain
+	.def    x86_sse_avx_mix_buffers_with_gain; .scl    2;      .type   32;     
+.endef
+
+x86_sse_avx_mix_buffers_with_gain:
+
+#; due to Microsoft calling convention
+#; %rcx float *dst
+#; %rdx float *src
+#; %r8 unsigned int nframes
+#; %xmm3 float	gain
+
+	pushq %rbp
+	movq %rsp, %rbp
+
+	#; save the registers
+	pushq %rbx #; must be preserved
+	
+	#; move current max to %xmm0 for convenience
+	movss %xmm3, %xmm0
+
+	#; if nframes == 0, go to end
+	cmp	$0, %r8
+	je	.MBWG_END
+
+	#; Check for alignment
+
+	movq %rcx, %rax
+	andq $28, %rax #; mask alignment offset
+
+	movq %rdx, %rbx
+	andq $28, %rbx #; mask alignment offset
+
+	cmp %rax, %rbx
+	jne .MBWG_NONALIGN #; if buffer are not aligned between each other, calculate manually
+
+	#; if we are aligned
+	cmp $0, %rbx
+	jz .MBWG_AVX
+	
+	#; Pre-loop, we need to run 1-7 frames "manually" without
+	#; SSE instructions
+
+.MBWG_PRELOOP:
+	
+	#; gain is already in %xmm0
+	movss (%rdx), %xmm1
+	mulss %xmm0, %xmm1
+	addss (%rcx), %xmm1
+	movss %xmm1, (%rcx)
+
+	addq $4, %rcx #; dst++
+	addq $4, %rdx #; src++
+	decq %r8 	  #; nframes--
+	jz .MBWG_END
+
+	addq $4, %rbx
+	
+	cmp $32, %rbx #; test if we've reached 32 byte alignment
+	jne .MBWG_PRELOOP
+
+.MBWG_AVX:
+
+	cmp $8, %r8 #; we know it's not zero, but if it's not >=4, then
+	jl .MBWG_NONALIGN #; we jump straight to the "normal" code
+
+	#; set up the gain buffer (gain is already in %xmm0)
+	vshufps $0x00, %ymm0, %ymm0, %ymm0 #; spread single float value to the first 128 bits of ymm0 register
+	vperm2f128 $0x00, %ymm0, %ymm0, %ymm0 #; extend the first 128 bits of ymm0 register to higher 128 bits
+
+.MBWG_AVXLOOP:
+
+	vmovaps	(%rdx), %ymm1        #; source => xmm0
+	vmulps	%ymm0,  %ymm1, %ymm2 #; apply gain to source
+	vaddps	(%rcx), %ymm2, %ymm1 #; mix with destination
+	vmovaps  %ymm1, (%rcx)        #; copy result to destination
+	
+	addq $32, %rcx #; dst+=8
+	addq $32, %rdx #; src+=8
+
+	subq $8, %r8 #; nframes-=8
+	cmp $8, %r8
+	jge .MBWG_AVXLOOP
+
+	#; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties
+	vzeroupper
+
+	cmp $0, %r8
+	je .MBWG_END
+
+	#; if there are remaining frames, the nonalign code will do nicely
+	#; for the rest 1-7 frames.
+	
+.MBWG_NONALIGN:
+	#; not aligned!
+
+	#; gain is already in %xmm0
+
+.MBWG_NONALIGNLOOP:
+
+	movss (%rdx), %xmm1
+	mulss %xmm0, %xmm1
+	addss (%rcx), %xmm1
+	movss %xmm1, (%rcx)
+	
+	addq $4, %rcx
+	addq $4, %rdx
+	
+	decq %r8
+	jnz .MBWG_NONALIGNLOOP
+
+.MBWG_END:
+
+	popq %rbx
+
+	#; return
+	leave
+	ret
+
+
+#; void x86_sse_avx_mix_buffers_no_gain (float *dst, float *src, unsigned int nframes);
+
+.globl x86_sse_avx_mix_buffers_no_gain
+	.def	x86_sse_avx_mix_buffers_no_gain; .scl    2;   .type   32;
+.endef
+
+x86_sse_avx_mix_buffers_no_gain:
+
+#; due to Microsoft calling convention
+#; %rcx float *dst
+#; %rdx float *src
+#; %r8 unsigned int nframes
+
+	pushq %rbp
+	movq %rsp, %rbp
+
+	#; save the registers
+	pushq %rbx #; must be preserved
+
+	#; the real function
+
+	#; if nframes == 0, go to end
+	cmp	$0, %r8
+	je	.MBNG_END
+
+	#; Check for alignment
+
+	movq %rcx, %rax
+	andq $28, %rax #; mask alignment offset
+
+	movq %rdx, %rbx
+	andq $28, %rbx #; mask alignment offset
+
+	cmp %rax, %rbx
+	jne .MBNG_NONALIGN #; if not buffers are not aligned btween each other, calculate manually
+
+	cmp $0, %rbx
+	je .MBNG_AVX #; aligned at 32, rpoceed to AVX
+
+	#; Pre-loop, we need to run 1-7 frames "manually" without
+	#; AVX instructions
+
+.MBNG_PRELOOP:
+
+	movss (%rdx), %xmm0
+	addss (%rcx), %xmm0
+	movss %xmm0, (%rcx)
+
+	addq $4, %rcx #; dst++
+	addq $4, %rdx #; src++
+
+	decq %r8 	  #; nframes--
+	jz	.MBNG_END
+	
+	addq $4, %rbx #; one non-aligned byte less
+	
+	cmp $32, %rbx #; test if we've reached 32 byte alignment
+	jne .MBNG_PRELOOP
+
+.MBNG_AVX:
+
+	cmp $8, %r8 #; if there are frames left, but less than 8
+	jl .MBNG_NONALIGN #; we can't run AVX
+
+.MBNG_AVXLOOP:
+
+	vmovaps	(%rdx), %ymm0        #; source => xmm0
+	vaddps	(%rcx), %ymm0, %ymm1 #; mix with destination
+	vmovaps  %ymm1, (%rcx)       #; copy result to destination
+	
+	addq $32, %rcx #; dst+=8
+	addq $32, %rdx #; src+=8
+
+	subq $8, %r8 #; nframes-=8
+	cmp $8, %r8
+	jge .MBNG_AVXLOOP
+
+	#; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties
+	vzeroupper
+
+	cmp $0, %r8
+	je .MBNG_END
+
+	#; if there are remaining frames, the nonalign code will do nicely
+	#; for the rest 1-7 frames.
+	
+.MBNG_NONALIGN:
+	#; not aligned!
+	#; 
+
+	movss (%rdx), %xmm0 #; src => xmm0
+	addss (%rcx), %xmm0 #; xmm0 += dst
+	movss %xmm0, (%rcx) #; xmm0 => dst
+	
+	addq $4, %rcx
+	addq $4, %rdx
+	
+	decq %r8
+	jnz .MBNG_NONALIGN
+
+.MBNG_END:
+
+	popq %rbx
+
+	#; return
+	leave
+	ret
+
+
+#; void x86_sse_avx_copy_vector (float *dst, float *src, unsigned int nframes);
+
+.globl x86_sse_avx_copy_vector
+	.def	x86_sse_avx_copy_vector; .scl    2;   .type   32;
+.endef
+
+x86_sse_avx_copy_vector:
+
+#; due to Microsoft calling convention
+#; %rcx float *dst
+#; %rdx float *src
+#; %r8 unsigned int nframes
+
+	pushq %rbp
+	movq %rsp, %rbp
+
+	#; save the registers
+	pushq %rbx #; must be preserved
+
+	#; the real function
+
+	#; if nframes == 0, go to end
+	cmp	$0, %r8
+	je	.CB_END
+
+	#; Check for alignment
+
+	movq %rcx, %rax
+	andq $28, %rax #; mask alignment offset
+
+	movq %rdx, %rbx
+	andq $28, %rbx #; mask alignment offset
+
+	cmp %rax, %rbx
+	jne .CB_NONALIGN #; if not buffers are not aligned btween each other, calculate manually
+
+	cmp $0, %rbx
+	je .CB_AVX #; aligned at 32, rpoceed to AVX
+
+	#; Pre-loop, we need to run 1-7 frames "manually" without
+	#; AVX instructions
+
+.CB_PRELOOP:
+
+	movss (%rdx), %xmm0
+	movss %xmm0, (%rcx)
+
+	addq $4, %rcx #; dst++
+	addq $4, %rdx #; src++
+
+	decq %r8 	  #; nframes--
+	jz	.CB_END
+	
+	addq $4, %rbx #; one non-aligned byte less
+	
+	cmp $32, %rbx #; test if we've reached 32 byte alignment
+	jne .CB_PRELOOP
+
+.CB_AVX:
+
+	cmp $8, %r8 #; if there are frames left, but less than 8
+	jl .CB_NONALIGN #; we can't run AVX
+
+.CB_AVXLOOP:
+
+	vmovaps	(%rdx), %ymm0        #; source => xmm0
+	vmovaps  %ymm0, (%rcx)       #; copy result to destination
+	
+	addq $32, %rcx #; dst+=8
+	addq $32, %rdx #; src+=8
+
+	subq $8, %r8 #; nframes-=8
+	cmp $8, %r8
+	jge .CB_AVXLOOP
+
+	#; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties
+	vzeroupper
+
+	cmp $0, %r8
+	je .CB_END
+
+	#; if there are remaining frames, the nonalign code will do nicely
+	#; for the rest 1-7 frames.
+	
+.CB_NONALIGN:
+	#; not aligned!
+	#; 
+
+	movss (%rdx), %xmm0 #; src => xmm0
+	movss %xmm0, (%rcx) #; xmm0 => dst
+	
+	addq $4, %rcx
+	addq $4, %rdx
+	
+	decq %r8
+	jnz .CB_NONALIGN
+
+.CB_END:
+
+	popq %rbx
+
+	#; return
+	leave
+	ret
+
+
+#; void x86_sse_avx_apply_gain_to_buffer (float *buf, unsigned int nframes, float gain);
+
+.globl x86_sse_avx_apply_gain_to_buffer
+	.def	x86_sse_avx_apply_gain_to_buffer; .scl    2;   .type   32;
+.endef
+
+x86_sse_avx_apply_gain_to_buffer:
+
+#; due to Microsoft calling convention
+#; %rcx float 			*buf	32(%rbp)
+#; %rdx unsigned int 	nframes
+#; %xmm2 float			gain			avx specific register
+
+	pushq %rbp
+	movq %rsp, %rbp
+	
+	#; move current max to %xmm0 for convenience
+	movss %xmm2, %xmm0
+
+	#; the real function	
+
+	#; if nframes == 0, go to end
+	cmp	$0, %rdx
+	je	.AG_END
+	
+	#; Check for alignment
+
+	movq %rcx, %r8 #; buf => %rdx
+	andq $28, %r8 #; check alignment with mask 11100
+	jz	.AG_AVX #; if buffer IS aligned
+
+	#; PRE-LOOP
+	#; we iterate 1-7 times, doing normal x87 float comparison
+	#; so we reach a 32 byte aligned "buf" (=%rdi) value
+
+.AGLP_START:
+
+	#; Load next value from the buffer into %xmm1
+	movss (%rcx), %xmm1
+	mulss %xmm0, %xmm1
+	movss %xmm1, (%rcx)
+
+	#; increment buffer, decrement counter
+	addq $4, %rcx #; buf++;
+	
+	decq %rdx   #; nframes--
+	jz	.AG_END #; if we run out of frames, we go to the end
+
+	addq $4, %r8 #; one non-aligned byte less
+	cmp $16, %r8
+	jne .AGLP_START #; if more non-aligned frames exist, we do a do-over
+
+.AG_AVX:
+
+	#; We have reached the 32 byte aligned "buf" ("rcx") value
+	#; use AVX instructions
+
+	#; Figure out how many loops we should do
+	movq %rdx, %rax #; copy remaining nframes to %rax for division
+
+	shr $3, %rax #; unsigned divide by 8
+
+	#; %rax = AVX iterations
+	cmp $0, %rax
+	je .AGPOST_START
+
+	#; set up the gain buffer (gain is already in %xmm0)
+	vshufps $0x00, %ymm0, %ymm0, %ymm0 #; spread single float value to the first 128 bits of ymm0 register
+	vperm2f128 $0x00, %ymm0, %ymm0, %ymm0 #; extend the first 128 bits of ymm0 register to higher 128 bits
+
+.AGLP_AVX:
+
+	vmovaps (%rcx), %ymm1
+	vmulps %ymm0, %ymm1, %ymm2
+	vmovaps %ymm2, (%rcx)
+
+	addq $32, %rcx  #; buf + 8
+	subq $8, %rdx   #; nframes-=8
+
+	decq %rax
+	jnz .AGLP_AVX
+
+	#; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties
+	vzeroupper
+
+	#; Next we need to post-process all remaining frames
+	#; the remaining frame count is in %rcx
+	cmpq $0, %rdx #;
+	jz .AG_END
+
+.AGPOST_START:
+
+	movss (%rcx), %xmm1
+	mulss %xmm0, %xmm1
+	movss %xmm1, (%rcx)
+
+	#; increment buffer, decrement counter
+	addq $4, %rcx #; buf++;
+	
+	decq %rdx   #; nframes--
+	jnz	.AGPOST_START #; if we run out of frames, we go to the end
+	
+.AG_END:
+
+	#; return
+	leave
+	ret
+
+#; end proc
+
+
+#; float x86_sse_avx_compute_peak(float *buf, long nframes, float current);
+
+.globl x86_sse_avx_compute_peak
+	.def	x86_sse_avx_compute_peak; .scl    2;   .type   32;
+.endef
+
+x86_sse_avx_compute_peak:
+
+#; due to Microsoft calling convention
+#; %rcx float*          buf	32(%rbp)
+#; %rdx unsigned int 	nframes
+#; %xmm2 float			current
+
+	pushq %rbp
+	movq %rsp, %rbp
+
+	#; move current max to %xmm0 for convenience
+	movss %xmm2, %xmm0
+
+	#; if nframes == 0, go to end
+	cmp	$0, %rdx
+	je	.CP_END
+
+	#; create the "abs" mask in %xmm3
+	#; if will be used to discard sign bit
+	pushq   $2147483647
+	movss	(%rsp), %xmm3
+	addq    $8, %rsp
+
+	#; Check for alignment 
+	movq %rcx, %r8 #; buf => %rdx
+	andq $28, %r8 #; mask bits 1 & 2
+	jz	.CP_AVX #; if buffer IS aligned
+
+	#; PRE-LOOP
+	#; we iterate 1-7 times, doing normal x87 float comparison
+	#; so we reach a 32 byte aligned "buf" (=%rcx) value
+
+.LP_START:
+
+	#; Load next value from the buffer
+	movss (%rcx), %xmm1
+	andps %xmm3, %xmm1	#; mask out sign bit
+	maxss %xmm1, %xmm0
+
+	#; increment buffer, decrement counter
+	addq $4, %rcx #; buf++;
+
+	decq %rdx   #; nframes--
+	jz	.CP_END #; if we run out of frames, we go to the end
+
+	addq $4, %r8 #; one non-aligned byte less
+	cmp $32, %r8
+	jne .LP_START #; if more non-aligned frames exist, we do a do-over
+
+.CP_AVX:
+
+	#; We have reached the 32 byte aligned "buf" ("rdi") value
+
+	#; Figure out how many loops we should do
+	movq %rdx, %rax #; copy remaining nframes to %rax for division
+
+	shr $3, %rax #; unsigned divide by 8
+	jz .POST_START
+
+	#; %rax = AVX iterations
+
+	#; current maximum is at %xmm0, but we need to broadcast it to the whole ymm0 register..
+	vshufps $0x00, %ymm0, %ymm0, %ymm0 #; spread single float value to the all 128 bits of xmm0 register
+	vperm2f128 $0x00, %ymm0, %ymm0, %ymm0 #; extend the first 128 bits of ymm0 register to higher 128 bits
+
+	#; broadcast sign mask to the whole ymm3 register
+	vshufps $0x00, %ymm3, %ymm3, %ymm3 #; spread single float value to the all 128 bits of xmm3 register
+	vperm2f128 $0x00, %ymm3, %ymm3, %ymm3 #; extend the first 128 bits of ymm3 register to higher 128 bits
+
+.LP_AVX:
+
+	vmovaps (%rcx), %ymm1
+	vandps %ymm3, %ymm1, %ymm1	#; mask out sign bit
+	vmaxps %ymm1, %ymm0, %ymm0
+
+	addq $32, %rcx #; buf+=8
+	subq $8, %rdx #; nframes-=8
+
+	decq %rax
+	jnz .LP_AVX
+
+	#; Calculate the maximum value contained in the 4 FP's in %ymm0
+	vshufps $0x4e, %ymm0, %ymm0, %ymm1     #; shuffle left & right pairs (1234 => 3412) in each 128 bit half
+	vmaxps  %ymm1, %ymm0, %ymm0            #; maximums of the four pairs, if each of 8 elements was unique, 4 unique elements left now
+	vshufps $0xb1, %ymm0, %ymm0, %ymm1     #; shuffle the floats inside pairs (1234 => 2143) in each 128 bit half
+	vmaxps  %ymm1, %ymm0, %ymm0			   #; maximums of the four pairs, we had up to 4 unique elements was unique, 2 unique elements left now
+	vperm2f128 $0x01, %ymm0, %ymm0, %ymm1  #; swap 128 bit halfs
+	vmaxps  %ymm1, %ymm0, %ymm0			   #; the result will be - all 8 elemens are maximums
+
+	#; now every float in %ymm0 is the same value, current maximum value
+
+	#; Next we need to post-process all remaining frames
+	#; the remaining frame count is in %rcx
+	
+	#; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties
+	vzeroupper
+
+	#; if no remaining frames, jump to the end
+	cmp $0, %rdx
+	je .CP_END
+
+.POST_START:
+
+	movss (%rcx), %xmm1
+	andps %xmm3, %xmm1	#; mask out sign bit
+	maxss %xmm1, %xmm0
+	
+	addq $4, %rcx 	#; buf++;
+	
+	decq %rdx		#; nframes--;
+	jnz .POST_START
+
+.CP_END:
+
+	#; return value is in xmm0
+
+	#; return
+	leave
+	ret
+
+#; end proc
\ No newline at end of file
diff --git a/libs/ardour/sse_functions_avx.cc b/libs/ardour/sse_functions_avx.cc
new file mode 100644
index 0000000..89cb91f
--- /dev/null
+++ b/libs/ardour/sse_functions_avx.cc
@@ -0,0 +1,119 @@
+/*
+    Copyright (C) 2007 Paul sDavis
+    Written by Sampo Savolainen
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <xmmintrin.h>
+#include <immintrin.h>
+#include <stdint.h>
+
+
+void
+x86_sse_avx_find_peaks(const float* buf, uint32_t nframes, float *min, float *max)
+{
+	__m256 current_max, current_min, work;
+
+	// Load max and min values into all eight slots of the YMM registers
+	current_min = _mm256_set1_ps(*min);
+	current_max = _mm256_set1_ps(*max);
+
+	// Work input until "buf" reaches 16 byte alignment
+	while ( ((intptr_t)buf) % 32 != 0 && nframes > 0) {
+		
+		// Load the next float into the work buffer
+		work = _mm256_set1_ps(*buf);
+
+		current_min = _mm256_min_ps(current_min, work);
+		current_max = _mm256_max_ps(current_max, work);
+
+		buf++;
+		nframes--;
+	}
+
+        // use 64 byte prefetch for quadruple quads:
+		// load each 64 bytes into cash before processing
+        while (nframes >= 16) {
+#if defined(COMPILER_MSVC) || defined(COMPILER_MINGW)                                   
+				_mm_prefetch(((char*)buf+64), _mm_hint(0) );
+#else    
+                __builtin_prefetch(buf+64,0,0);
+#endif
+                work = _mm256_load_ps(buf);
+                current_min = _mm256_min_ps(current_min, work);
+                current_max = _mm256_max_ps(current_max, work);
+                buf+=8;
+                work = _mm256_load_ps(buf);
+                current_min = _mm256_min_ps(current_min, work);
+                current_max = _mm256_max_ps(current_max, work);
+                buf+=8;
+
+                nframes-=16;
+        }
+
+	// work through 32 bytes aligned buffers
+	while (nframes >= 8) {
+
+		work = _mm256_load_ps(buf);
+
+		current_min = _mm256_min_ps(current_min, work);
+		current_max = _mm256_max_ps(current_max, work);
+
+		buf+=8;
+		nframes-=8;
+	}
+
+	// work through the rest < 4 samples
+	while ( nframes > 0) {
+
+		// Load the next float into the work buffer
+		work = _mm256_set1_ps(*buf);
+
+		current_min = _mm256_min_ps(current_min, work);
+		current_max = _mm256_max_ps(current_max, work);
+
+		buf++;
+		nframes--;
+	}
+
+	// Find min & max value in current_max through shuffle tricks
+
+	work = current_min;
+	work =        _mm256_shuffle_ps (current_min, current_min, _MM_SHUFFLE(2, 3, 0, 1));
+	current_min = _mm256_min_ps (work, current_min);
+	work =        _mm256_shuffle_ps (current_min, current_min, _MM_SHUFFLE(1, 0, 3, 2));
+	current_min = _mm256_min_ps (work, current_min);
+	work =        _mm256_permute2f128_ps( current_min, current_min, 1);
+	current_min = _mm256_min_ps (work, current_min);
+
+	*min = current_min[0];
+
+	work = current_max;
+	work =        _mm256_shuffle_ps(current_max, current_max, _MM_SHUFFLE(2, 3, 0, 1));
+	current_max = _mm256_max_ps (work, current_max);
+	work =        _mm256_shuffle_ps(current_max, current_max, _MM_SHUFFLE(1, 0, 3, 2));
+	current_max = _mm256_max_ps (work, current_max);
+	work =        _mm256_permute2f128_ps( current_max, current_max, 1);
+	current_max = _mm256_max_ps (work, current_max);
+
+	*max = current_max[0];
+
+	// zero upper 128 bit of 256 bit ymm register to avoid penalties using non-AVX instructions
+	_mm256_zeroupper ();
+}
+
+
diff --git a/libs/ardour/sse_functions_avx_linux.cc b/libs/ardour/sse_functions_avx_linux.cc
new file mode 100644
index 0000000..9f56595
--- /dev/null
+++ b/libs/ardour/sse_functions_avx_linux.cc
@@ -0,0 +1,56 @@
+/*
+    Copyright (C) 2015 Paul Davis
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "ardour/mix.h"
+
+float
+x86_sse_avx_compute_peak (const float * buf, uint32_t nsamples, float current)
+{
+	return default_compute_peak (buf, nsamples, current);
+}
+
+void
+x86_sse_avx_apply_gain_to_buffer (float * buf, uint32_t nframes, float gain)
+{
+	default_apply_gain_to_buffer (buf, nframes, gain);
+}
+
+void
+x86_sse_avx_mix_buffers_with_gain (float * dst, const float * src, uint32_t nframes, float gain)
+{
+	default_mix_buffers_with_gain (dst, src, nframes, gain);
+}
+
+void
+x86_sse_avx_mix_buffers_no_gain (float * dst, const float * src, uint32_t nframes)
+{
+	default_mix_buffers_no_gain (dst, src, nframes);
+}
+
+void
+x86_sse_avx_copy_vector (float * dst, const float * src, uint32_t nframes)
+{
+	default_copy_vector (dst, src, nframes);
+}
+
+void
+x86_sse_avx_find_peaks (const float * buf, uint32_t nsamples, float *min, float *max)
+{
+	default_find_peaks (buf, nsamples, min, max);
+}
diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc
index 244c050..82520c1 100644
--- a/libs/ardour/tempo.cc
+++ b/libs/ardour/tempo.cc
@@ -1903,7 +1903,7 @@ TempoMap::insert_time (framepos_t where, framecnt_t amount)
 	PropertyChanged (PropertyChange ());
 }
 bool
-TempoMap::cut_time (framepos_t where, framecnt_t amount)
+TempoMap::remove_time (framepos_t where, framecnt_t amount)
 {
 	bool moved = false;
 
@@ -1911,6 +1911,8 @@ TempoMap::cut_time (framepos_t where, framecnt_t amount)
 	
 	TempoSection* last_tempo = NULL;
 	MeterSection* last_meter = NULL;
+	bool tempo_after = false; // is there a tempo marker at the first sample after the removed range?
+	bool meter_after = false; // is there a meter marker likewise?
 	{
 		Glib::Threads::RWLock::WriterLock lm (lock);
 		for (Metrics::iterator i = metrics.begin(); i != metrics.end(); ++i) {
@@ -1924,18 +1926,24 @@ TempoMap::cut_time (framepos_t where, framecnt_t amount)
 					last_meter = lm;
 			}
 			else if ((*i)->frame() >= where) {
+				// TODO: make sure that moved tempo/meter markers are rounded to beat/bar boundaries
 				(*i)->set_frame ((*i)->frame() - amount);
+				if ((*i)->frame() == where) {
+					// marker was immediately after end of range
+					tempo_after = dynamic_cast<TempoSection*> (*i);
+					meter_after = dynamic_cast<MeterSection*> (*i);
+				}
 				moved = true;
 			}
 		}
 
 		//find the last TEMPO and METER metric (if any) and move it to the cut point so future stuff is correct
-		if (last_tempo) {
+		if (last_tempo && !tempo_after) {
 			metric_kill_list.remove(last_tempo);
 			last_tempo->set_frame(where);
 			moved = true;
 		}
-		if (last_meter) {
+		if (last_meter && !meter_after) {
 			metric_kill_list.remove(last_meter);
 			last_meter->set_frame(where);
 			moved = true;
diff --git a/libs/ardour/test/audio_engine_test.cc b/libs/ardour/test/audio_engine_test.cc
index 7fbb62c..d5d2eae 100644
--- a/libs/ardour/test/audio_engine_test.cc
+++ b/libs/ardour/test/audio_engine_test.cc
@@ -47,7 +47,7 @@ AudioEngineTest::test_start ()
 
 	CPPUNIT_ASSERT (AudioEngine::instance ());
 
-	boost::shared_ptr<AudioBackend> backend = engine->set_backend ("Dummy", "", "");
+	boost::shared_ptr<AudioBackend> backend = engine->set_backend ("None (Dummy)", "", "");
 
 	CPPUNIT_ASSERT (backend);
 
diff --git a/libs/ardour/test/sha1_test.cc b/libs/ardour/test/sha1_test.cc
new file mode 100644
index 0000000..0fbb009
--- /dev/null
+++ b/libs/ardour/test/sha1_test.cc
@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include <string.h>
+#include "sha1.c"
+#include "sha1_test.h"
+
+CPPUNIT_TEST_SUITE_REGISTRATION (Sha1Test);
+
+void
+Sha1Test::basicTest ()
+{
+	uint32_t a;
+	char hash[41];
+	Sha1Digest s;
+
+	sha1_init (&s);
+	sha1_write (&s, (const uint8_t *) "abc", 3);
+	sha1_result_hash (&s, hash);
+	printf ("\nSha1: FIPS 180-2 C.1 and RFC3174 7.3 TEST1\n");
+	printf ("Expect: a9993e364706816aba3e25717850c26c9cd0d89d\n");
+	printf ("Result: %s\n", hash);
+	CPPUNIT_ASSERT_MESSAGE ("Sha1: FIPS 180-2 C.1 and RFC3174 7.3 TEST1",
+			!strcmp ("a9993e364706816aba3e25717850c26c9cd0d89d", hash));
+
+
+	sha1_init (&s);
+	sha1_write (&s, (const uint8_t *) "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56);
+	sha1_result_hash (&s, hash);
+	printf ("\nSha1: FIPS 180-2 C.2 and RFC3174 7.3 TEST2\n");
+	printf ("Expect: 84983e441c3bd26ebaae4aa1f95129e5e54670f1\n");
+	printf ("Result: %s\n", hash);
+	CPPUNIT_ASSERT_MESSAGE ("Sha1: FIPS 180-2 C.2 and RFC3174 7.3 TEST2",
+			!strcmp ("84983e441c3bd26ebaae4aa1f95129e5e54670f1", hash));
+
+
+	sha1_init (&s);
+	for (a = 0; a < 80; ++a) sha1_write (&s, (const uint8_t *) "01234567", 8);
+	sha1_result_hash (&s, hash);
+	printf ("\nSha1: RFC3174 7.3 TEST4\n");
+	printf ("Expect: dea356a2cddd90c7a7ecedc5ebb563934f460452\n");
+	printf ("Result: %s\n", hash);
+	CPPUNIT_ASSERT_MESSAGE ("Sha1: RFC3174 7.3 TEST4",
+			!strcmp ("dea356a2cddd90c7a7ecedc5ebb563934f460452", hash));
+
+
+	sha1_init (&s);
+	for (a = 0; a < 1000000; ++a) sha1_writebyte (&s, 'a');
+	sha1_result_hash (&s, hash);
+	printf ("\nSha1: Sha1: FIPS 180-2 C.3 and RFC3174 7.3 TEST3\n");
+	printf ("Expect:34aa973cd4c4daa4f61eeb2bdbad27316534016f\n");
+	printf ("Result:%s\n", hash);
+	CPPUNIT_ASSERT_MESSAGE ("Sha1: FIPS 180-2 C.3 and RFC3174 7.3 TEST3",
+			!strcmp ("34aa973cd4c4daa4f61eeb2bdbad27316534016f", hash));
+}
diff --git a/libs/ardour/test/mtdm_test.h b/libs/ardour/test/sha1_test.h
similarity index 75%
copy from libs/ardour/test/mtdm_test.h
copy to libs/ardour/test/sha1_test.h
index c02a4f2..d2fe6d5 100644
--- a/libs/ardour/test/mtdm_test.h
+++ b/libs/ardour/test/sha1_test.h
@@ -2,9 +2,9 @@
 #include <cppunit/TestFixture.h>
 #include <cppunit/extensions/HelperMacros.h>
 
-class MTDMTest : public CppUnit::TestFixture
+class Sha1Test : public CppUnit::TestFixture
 {
-	CPPUNIT_TEST_SUITE (MTDMTest);
+	CPPUNIT_TEST_SUITE (Sha1Test);
 	CPPUNIT_TEST (basicTest);
 	CPPUNIT_TEST_SUITE_END ();
 
@@ -14,4 +14,3 @@ public:
 
 	void basicTest ();
 };
-
diff --git a/libs/ardour/test/test_util.cc b/libs/ardour/test/test_util.cc
index 9543bf5..3e9566c 100644
--- a/libs/ardour/test/test_util.cc
+++ b/libs/ardour/test/test_util.cc
@@ -103,7 +103,7 @@ create_and_start_dummy_backend ()
 
 	CPPUNIT_ASSERT (AudioEngine::instance ());
 	CPPUNIT_ASSERT (engine);
-	CPPUNIT_ASSERT (engine->set_backend ("Dummy", "", ""));
+	CPPUNIT_ASSERT (engine->set_backend ("None (Dummy)", "", ""));
 
 	init_post_engine ();
 
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 92ea993..2d46c60 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -930,6 +930,65 @@ Track::adjust_capture_buffering ()
         }
 }
 
+#ifdef USE_TRACKS_CODE_FEATURES
+
+/* This is the Tracks version of Track::monitoring_state(). 
+ *
+ * Ardour developers: try to flag or fix issues if parts of the libardour API 
+ * change in ways that invalidate this
+ */
+
+MonitorState
+Track::monitoring_state () const
+{
+	/* Explicit requests */
+	
+	if (_monitoring & MonitorInput) {
+		return MonitoringInput;
+	}
+		
+	if (_monitoring & MonitorDisk) {
+		return MonitoringDisk;
+	}
+
+	/* This is an implementation of the truth table in doc/monitor_modes.pdf;
+	   I don't think it's ever going to be too pretty too look at.
+	*/
+	
+	// GZ: NOT USED IN TRACKS
+	//bool const auto_input = _session.config.get_auto_input ();
+	//bool const software_monitor = Config->get_monitoring_model() == SoftwareMonitoring;
+	//bool const tape_machine_mode = Config->get_tape_machine_mode ();
+	
+	bool const roll = _session.transport_rolling ();
+	bool const track_rec = _diskstream->record_enabled ();
+	bool session_rec = _session.actively_recording ();
+	
+	if (track_rec) {
+
+		if (!session_rec && roll) {
+			return MonitoringDisk;
+		} else {
+			return MonitoringInput;
+		}
+
+	} else {
+
+		if (roll) {
+			return MonitoringDisk;
+		}
+	}
+
+	return MonitoringSilence;
+}
+
+#else
+
+/* This is the Ardour/Mixbus version of Track::monitoring_state(). 
+ *
+ * Tracks developers: do NOT modify this method under any circumstances.
+ */
+
 MonitorState
 Track::monitoring_state () const
 {
@@ -995,6 +1054,8 @@ Track::monitoring_state () const
 	return MonitoringSilence;
 }
 
+#endif
+
 void
 Track::maybe_declick (BufferSet& bufs, framecnt_t nframes, int declick)
 {
diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc
index 6d6511b..bda7197 100644
--- a/libs/ardour/utils.cc
+++ b/libs/ardour/utils.cc
@@ -296,17 +296,6 @@ ARDOUR::cmp_nocase_utf8 (const string& s1, const string& s2)
 	return retval;
 }
 
-int
-ARDOUR::touch_file (string path)
-{
-	int fd = open (path.c_str(), O_RDWR|O_CREAT, 0660);
-	if (fd >= 0) {
-		close (fd);
-		return 0;
-	}
-	return 1;
-}
-
 string
 ARDOUR::region_name_from_path (string path, bool strip_channels, bool add_channel_suffix, uint32_t total, uint32_t this_one)
 {
@@ -467,6 +456,10 @@ ARDOUR::string_to_sync_source (string str)
 		return Engine;
 	}
 
+	if (str == _("LTC")) {
+		return LTC;
+	}
+
 	fatal << string_compose (_("programming error: unknown sync source string \"%1\""), str) << endmsg;
 	abort(); /*NOTREACHED*/
 	return Engine;
@@ -521,11 +514,8 @@ ARDOUR::meter_falloff_to_float (MeterFalloff falloff)
 	case MeterFalloffModerate:
 		return METER_FALLOFF_MODERATE;
 	case MeterFalloffFast:
-		return METER_FALLOFF_FAST;
-	case MeterFalloffFaster:
-		return METER_FALLOFF_FASTER;
+	case MeterFalloffFaster:  // backwards compat enum MeterFalloff
 	case MeterFalloffFastest:
-		return METER_FALLOFF_FASTEST;
 	default:
 		return METER_FALLOFF_FAST;
 	}
@@ -552,14 +542,8 @@ ARDOUR::meter_falloff_from_float (float val)
 	else if (val <= METER_FALLOFF_MEDIUM) {
 		return MeterFalloffMedium;
 	}
-	else if (val <= METER_FALLOFF_FAST) {
-		return MeterFalloffFast;
-	}
-	else if (val <= METER_FALLOFF_FASTER) {
-		return MeterFalloffFaster;
-	}
 	else {
-		return MeterFalloffFastest;
+		return MeterFalloffFast;
 	}
 }
 
diff --git a/libs/ardour/vst_info_file.cc b/libs/ardour/vst_info_file.cc
index 3b56876..b273124 100644
--- a/libs/ardour/vst_info_file.cc
+++ b/libs/ardour/vst_info_file.cc
@@ -23,10 +23,12 @@
  */
 
 #include <iostream>
+#include <fstream>
 #include <cassert>
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <fcntl.h>
 #include <unistd.h>
 #include <errno.h>
 
@@ -40,6 +42,7 @@
 #include <glibmm.h>
 
 #include "pbd/error.h"
+#include "pbd/compose.h"
 
 #ifndef VST_SCANNER_APP
 #include "ardour/plugin_manager.h" // scanner_bin_path
@@ -52,22 +55,12 @@
 #include "ardour/plugin_types.h"
 #include "ardour/vst_info_file.h"
 
+#include "i18n.h"
+#include "sha1.c"
+
 #define MAX_STRING_LEN 256
 #define PLUGIN_SCAN_TIMEOUT (Config->get_vst_scan_timeout()) // in deciseconds
 
-
-/* CACHE FILE PATHS */
-#define EXT_BLACKLIST ".fsb"
-#define EXT_ERRORFILE ".err"
-#define EXT_INFOFILE  ".fsi"
-
-#ifdef PLATFORM_WINDOWS
-#define PFX_DOTFILE   ""
-#else
-#define PFX_DOTFILE   "."
-#endif
-
-
 using namespace std;
 #ifndef VST_SCANNER_APP
 namespace ARDOUR {
@@ -87,54 +80,110 @@ static bool vstfx_instantiate_and_get_info_lx (const char* dllpath, vector<VSTIn
 /* ID for shell plugins */
 static int vstfx_current_loading_id = 0;
 
-
-
 /* *** CACHE FILE PATHS *** */
 
 static string
-vstfx_cache_file (const char* dllpath, int personal, const char *ext)
-{
-	string dir;
-	if (personal) {
-		dir = get_personal_vst_info_cache_dir();
-		// TODO prefix path relative to scan-root to avoid duplicates
-	} else {
-		dir = Glib::path_get_dirname (std::string(dllpath));
+get_vst_info_cache_dir () {
+	string dir = Glib::build_filename (ARDOUR::user_cache_directory (), "vst");
+	/* if the directory doesn't exist, try to create it */
+	if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
+		if (g_mkdir (dir.c_str (), 0700)) {
+			PBD::fatal << "Cannot create VST info folder '" << dir << "'" << endmsg;
+		}
 	}
-
-	stringstream s;
-	s << PFX_DOTFILE << Glib::path_get_basename (dllpath) << ext;
-	return Glib::build_filename (dir, s.str ());
+	return dir;
 }
 
 static string
-vstfx_blacklist_path (const char* dllpath, int personal)
+vstfx_infofile_path (const char* dllpath)
 {
-	string dir;
-	if (personal) {
-		dir = get_personal_vst_blacklist_dir();
-	} else {
-		dir = Glib::path_get_dirname (std::string(dllpath));
-	}
+	char hash[41];
+	Sha1Digest s;
+	sha1_init (&s);
+	sha1_write (&s, (const uint8_t *) dllpath, strlen (dllpath));
+	sha1_result_hash (&s, hash);
+	return Glib::build_filename (get_vst_info_cache_dir (), std::string (hash) + std::string (VST_EXT_INFOFILE));
+}
 
-	stringstream s;
-	s << PFX_DOTFILE << Glib::path_get_basename (dllpath) << EXT_BLACKLIST;
-	return Glib::build_filename (dir, s.str ());
+
+/* *** VST Blacklist *** */
+
+/** mark plugin as blacklisted */
+static void vstfx_blacklist (const char *id)
+{
+	string fn = Glib::build_filename (ARDOUR::user_cache_directory (), VST_BLACKLIST);
+	FILE * blacklist_fd = NULL;
+	if (! (blacklist_fd = g_fopen (fn.c_str (), "a"))) {
+		PBD::error << string_compose (_("Cannot append to VST blacklist for '%1'"), id) << endmsg;
+		return;
+	}
+	assert (NULL == strchr (id, '\n'));
+	fprintf (blacklist_fd, "%s\n", id);
+	::fclose (blacklist_fd);
 }
 
-static string
-vstfx_infofile_path (const char* dllpath, int personal)
+/** mark plugin as not blacklisted */
+static void vstfx_un_blacklist (const char *idcs)
 {
-	return vstfx_cache_file(dllpath, personal, EXT_INFOFILE);
+	string id (idcs);
+	string fn = Glib::build_filename (ARDOUR::user_cache_directory (), VST_BLACKLIST);
+	if (!Glib::file_test (fn, Glib::FILE_TEST_EXISTS)) {
+		PBD::warning << _("Expected VST Blacklist file does not exist.") << endmsg;
+		return;
+	}
+
+	std::string bl;
+	{
+		std::ifstream ifs (fn.c_str ());
+		bl.assign ((std::istreambuf_iterator<char> (ifs)), (std::istreambuf_iterator<char> ()));
+	}
+
+	::g_unlink (fn.c_str ());
+
+	assert (!Glib::file_test (fn, Glib::FILE_TEST_EXISTS));
+	assert (id.find ("\n") == string::npos);
+
+	id += "\n"; // add separator
+	const size_t rpl = bl.find (id);
+	if (rpl != string::npos) {
+		bl.replace (rpl, id.size (), "");
+	}
+	if (bl.empty ()) {
+		return;
+	}
+
+	FILE * blacklist_fd = NULL;
+	if (! (blacklist_fd = g_fopen (fn.c_str (), "w"))) {
+		PBD::error << _("Cannot open VST blacklist.") << endmsg;;
+		return;
+	}
+	fprintf (blacklist_fd, "%s", bl.c_str ());
+	::fclose (blacklist_fd);
 }
 
-#ifndef VST_SCANNER_APP
-static string
-vstfx_errorfile_path (const char* dllpath, int personal)
+/* return true if plugin is blacklisted */
+static bool vst_is_blacklisted (const char *idcs)
 {
-	return vstfx_cache_file(dllpath, personal, EXT_ERRORFILE);
+	// TODO ideally we'd also check if the VST has been updated since blacklisting
+	string id (idcs);
+	string fn = Glib::build_filename (ARDOUR::user_cache_directory (), VST_BLACKLIST);
+	if (!Glib::file_test (fn, Glib::FILE_TEST_EXISTS)) {
+		return false;
+	}
+	std::string bl;
+	std::ifstream ifs (fn.c_str ());
+	bl.assign ((std::istreambuf_iterator<char> (ifs)), (std::istreambuf_iterator<char> ()));
+
+	assert (id.find ("\n") == string::npos);
+
+	id += "\n"; // add separator
+	const size_t rpl = bl.find (id);
+	if (rpl != string::npos) {
+		return true;
+	}
+	return false;
 }
-#endif
+
 
 
 /* *** MEMORY MANAGEMENT *** */
@@ -160,14 +209,13 @@ vstfx_free_info (VSTInfo *info)
 static void
 vstfx_clear_info_list (vector<VSTInfo *> *infos)
 {
-	for (vector<VSTInfo *>::iterator i = infos->begin(); i != infos->end(); ++i) {
-		vstfx_free_info(*i);
+	for (vector<VSTInfo *>::iterator i = infos->begin (); i != infos->end (); ++i) {
+		vstfx_free_info (*i);
 	}
-	infos->clear();
+	infos->clear ();
 }
 
 
-
 /* *** CACHE FILE I/O *** */
 
 /** Helper function to read a line from the cache file
@@ -182,9 +230,9 @@ read_string (FILE *fp)
 		return 0;
 	}
 
-	if (strlen(buf) < MAX_STRING_LEN) {
+	if (strlen (buf) < MAX_STRING_LEN) {
 		if (strlen (buf)) {
-			buf[strlen(buf)-1] = 0;
+			buf[strlen (buf)-1] = 0;
 		}
 		return strdup (buf);
 	} else {
@@ -210,12 +258,12 @@ read_int (FILE* fp, int* n)
 
 /** parse a plugin-block from the cache info file */
 static bool
-vstfx_load_info_block(FILE* fp, VSTInfo *info)
+vstfx_load_info_block (FILE* fp, VSTInfo *info)
 {
-	if ((info->name = read_string(fp)) == 0) return false;
-	if ((info->creator = read_string(fp)) == 0) return false;
+	if ((info->name = read_string (fp)) == 0) return false;
+	if ((info->creator = read_string (fp)) == 0) return false;
 	if (read_int (fp, &info->UniqueID)) return false;
-	if ((info->Category = read_string(fp)) == 0) return false;
+	if ((info->Category = read_string (fp)) == 0) return false;
 	if (read_int (fp, &info->numInputs)) return false;
 	if (read_int (fp, &info->numOutputs)) return false;
 	if (read_int (fp, &info->numParams)) return false;
@@ -234,20 +282,20 @@ vstfx_load_info_block(FILE* fp, VSTInfo *info)
 		return true;
 	}
 
-	if ((info->ParamNames = (char **) malloc(sizeof(char*)*info->numParams)) == 0) {
+	if ((info->ParamNames = (char **) malloc (sizeof (char*) * info->numParams)) == 0) {
 		return false;
 	}
 
 	for (int i = 0; i < info->numParams; ++i) {
-		if ((info->ParamNames[i] = read_string(fp)) == 0) return false;
+		if ((info->ParamNames[i] = read_string (fp)) == 0) return false;
 	}
 
-	if ((info->ParamLabels = (char **) malloc(sizeof(char*)*info->numParams)) == 0) {
+	if ((info->ParamLabels = (char **) malloc (sizeof (char*) * info->numParams)) == 0) {
 		return false;
 	}
 
 	for (int i = 0; i < info->numParams; ++i) {
-		if ((info->ParamLabels[i] = read_string(fp)) == 0) {
+		if ((info->ParamLabels[i] = read_string (fp)) == 0) {
 			return false;
 		}
 	}
@@ -262,23 +310,23 @@ vstfx_load_info_file (FILE* fp, vector<VSTInfo*> *infos)
 	if ((info = (VSTInfo*) calloc (1, sizeof (VSTInfo))) == 0) {
 		return false;
 	}
-	if (vstfx_load_info_block(fp, info)) {
+	if (vstfx_load_info_block (fp, info)) {
 		if (strncmp (info->Category, "Shell", 5)) {
-			infos->push_back(info);
+			infos->push_back (info);
 		} else {
 			int plugin_cnt = 0;
-			vstfx_free_info(info);
+			vstfx_free_info (info);
 			if (!read_int (fp, &plugin_cnt)) {
 				for (int i = 0; i < plugin_cnt; i++) {
 					if ((info = (VSTInfo*) calloc (1, sizeof (VSTInfo))) == 0) {
-						vstfx_clear_info_list(infos);
+						vstfx_clear_info_list (infos);
 						return false;
 					}
-					if (vstfx_load_info_block(fp, info)) {
-						infos->push_back(info);
+					if (vstfx_load_info_block (fp, info)) {
+						infos->push_back (info);
 					} else {
-						vstfx_free_info(info);
-						vstfx_clear_info_list(infos);
+						vstfx_free_info (info);
+						vstfx_clear_info_list (infos);
 						return false;
 					}
 				}
@@ -288,8 +336,8 @@ vstfx_load_info_file (FILE* fp, vector<VSTInfo*> *infos)
 		}
 		return true;
 	}
-	vstfx_free_info(info);
-	vstfx_clear_info_list(infos);
+	vstfx_free_info (info);
+	vstfx_clear_info_list (infos);
 	return false;
 }
 
@@ -322,124 +370,42 @@ vstfx_write_info_block (FILE* fp, VSTInfo *info)
 static void
 vstfx_write_info_file (FILE* fp, vector<VSTInfo *> *infos)
 {
-	assert(infos);
-	assert(fp);
+	assert (infos);
+	assert (fp);
 
-	if (infos->size() > 1) {
-		vector<VSTInfo *>::iterator x = infos->begin();
+	if (infos->size () > 1) {
+		vector<VSTInfo *>::iterator x = infos->begin ();
 		/* write out the shell info first along with count of the number of
 		 * plugins contained in this shell
 		 */
-		vstfx_write_info_block(fp, *x);
-		fprintf( fp, "%d\n", (int)infos->size() - 1 );
+		vstfx_write_info_block (fp, *x);
+		fprintf (fp, "%d\n", (int)infos->size () - 1 );
 		++x;
 		/* Now write out the info for each plugin */
-		for (; x != infos->end(); ++x) {
-			vstfx_write_info_block(fp, *x);
+		for (; x != infos->end (); ++x) {
+			vstfx_write_info_block (fp, *x);
 		}
-	} else if (infos->size() == 1) {
-		vstfx_write_info_block(fp, infos->front());
+	} else if (infos->size () == 1) {
+		vstfx_write_info_block (fp, infos->front ());
 	} else {
-		PBD::error << "Zero plugins in VST." << endmsg; // XXX here? rather make this impossible before if it ain't already.
+		PBD::warning << _("VST object file contains no plugins.") << endmsg;
 	}
 }
 
 
-/* *** CACHE AND BLACKLIST MANAGEMENT *** */
-
-/* return true if plugin is blacklisted or has an invalid file extension */
-static bool
-vstfx_blacklist_stat (const char *dllpath, int personal)
-{
-	const size_t slen = strlen (dllpath);
-	if (
-			(slen <= 3 || g_ascii_strcasecmp (&dllpath[slen-3], ".so"))
-			&&
-			(slen <= 4 || g_ascii_strcasecmp (&dllpath[slen-4], ".dll"))
-	   ) {
-		return true;
-	}
-
-	string const path = vstfx_blacklist_path (dllpath, personal);
-
-	if (Glib::file_test (path, Glib::FileTest (Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR))) {
-		struct stat dllstat;
-		struct stat fsbstat;
-
-		if (stat (dllpath, &dllstat) == 0 && stat (path.c_str(), &fsbstat) == 0) {
-			if (dllstat.st_mtime > fsbstat.st_mtime) {
-				/* plugin is newer than blacklist file */
-				return true;
-			}
-		}
-		/* stat failed or plugin is older than blacklist file */
-		return true;
-	}
-	/* blacklist file does not exist */
-	return false;
-}
-
-/* return true if plugin is blacklisted, checks both personal
- * and global folder */
-static bool
-vstfx_check_blacklist (const char *dllpath)
-{
-	if (vstfx_blacklist_stat(dllpath, 0)) return true;
-	if (vstfx_blacklist_stat(dllpath, 1)) return true;
-	return false;
-}
-
-/* create blacklist file, preferably in same folder as the
- * plugin, fall back to personal folder in $HOME
- */
-static FILE *
-vstfx_blacklist_file (const char *dllpath)
-{
-	FILE *f;
-	if ((f = fopen (vstfx_blacklist_path (dllpath, 0).c_str(), "wb"))) {
-#ifndef NDEBUG
-	PBD::info << "Blacklisted VST: '" << vstfx_blacklist_path (dllpath, 0) << "'" << endmsg;
-#endif
-		return f;
-	}
-#ifndef NDEBUG
-	PBD::info << "Blacklisted VST: '" << vstfx_blacklist_path (dllpath, 1) << "'" << endmsg;
-#endif
-	return fopen (vstfx_blacklist_path (dllpath, 1).c_str(), "wb");
-}
-
-/** mark plugin as blacklisted */
-static bool
-vstfx_blacklist (const char *dllpath)
-{
-	FILE *f = vstfx_blacklist_file(dllpath);
-	if (f) {
-		fclose(f);
-		return true;
-	}
-	return false;
-}
-
-/** mark plugin as not blacklisted */
-static void
-vstfx_un_blacklist (const char *dllpath)
-{
-	::g_unlink(vstfx_blacklist_path (dllpath, 0).c_str());
-	::g_unlink(vstfx_blacklist_path (dllpath, 1).c_str());
-}
+/* *** CACHE MANAGEMENT *** */
 
 /** remove info file from cache */
 static void
 vstfx_remove_infofile (const char *dllpath)
 {
-	::g_unlink(vstfx_infofile_path (dllpath, 0).c_str());
-	::g_unlink(vstfx_infofile_path (dllpath, 1).c_str());
+	::g_unlink (vstfx_infofile_path (dllpath).c_str ());
 }
 
-/** helper function, check if cache is newer than plugin
- * @return path to cache file */
-static char *
-vstfx_infofile_stat (const char *dllpath, struct stat* statbuf, int personal)
+/** cache file for given plugin
+ * @return FILE of the .fsi cache if found and up-to-date*/
+static FILE *
+vstfx_infofile_for_read (const char* dllpath)
 {
 	const size_t slen = strlen (dllpath);
 	if (
@@ -450,60 +416,31 @@ vstfx_infofile_stat (const char *dllpath, struct stat* statbuf, int personal)
 		return 0;
 	}
 
-	string const path = vstfx_infofile_path (dllpath, personal);
+	string const path = vstfx_infofile_path (dllpath);
 
 	if (Glib::file_test (path, Glib::FileTest (Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR))) {
-
 		struct stat dllstat;
+		struct stat fsistat;
 
 		if (stat (dllpath, &dllstat) == 0) {
-			if (stat (path.c_str(), statbuf) == 0) {
-				if (dllstat.st_mtime <= statbuf->st_mtime) {
+			if (stat (path.c_str (), &fsistat) == 0) {
+				if (dllstat.st_mtime <= fsistat.st_mtime) {
 					/* plugin is older than info file */
-					return strdup (path.c_str ());
+					return g_fopen (path.c_str (), "rb");
 				}
 			}
 		}
+		PBD::warning << string_compose (_("Ignored VST plugin which is newer than cache: '%1' (cache: '%2')"), dllpath, path) << endmsg;
+		PBD::info << _("Re-Scan Plugins (Preferences > Plugins) to update the cache, also make sure your system-time is set correctly.") << endmsg;
 	}
-
-	return 0;
+	return NULL;
 }
 
-/** cache file for given plugin
- * @return FILE of the .fsi cache if found and up-to-date*/
-static FILE *
-vstfx_infofile_for_read (const char* dllpath)
-{
-	struct stat own_statbuf;
-	struct stat sys_statbuf;
-	FILE *rv = NULL;
-
-	char* own_info = vstfx_infofile_stat (dllpath, &own_statbuf, 1);
-	char* sys_info = vstfx_infofile_stat (dllpath, &sys_statbuf, 0);
-
-	if (own_info) {
-		if (sys_info) {
-			if (own_statbuf.st_mtime <= sys_statbuf.st_mtime) {
-				/* system info file is newer, use it */
-				rv = g_fopen (sys_info, "rb");
-			}
-		} else {
-			rv = g_fopen (own_info, "rb");
-		}
-	} else if (sys_info) {
-		rv = g_fopen (sys_info, "rb");
-	}
-	free(own_info);
-	free(sys_info);
-
-	return rv;
-}
-
-/** helper function for \ref vstfx_infofile_for_write
- * abstract global and personal cache folders
+/** newly created cache file for given plugin
+ * @return FILE for the .fsi cache or NULL on error
  */
 static FILE *
-vstfx_infofile_create (const char* dllpath, int personal)
+vstfx_infofile_for_write (const char* dllpath)
 {
 	const size_t slen = strlen (dllpath);
 	if (
@@ -514,26 +451,8 @@ vstfx_infofile_create (const char* dllpath, int personal)
 		return NULL;
 	}
 
-	string const path = vstfx_infofile_path (dllpath, personal);
-#ifndef NDEBUG
-	PBD::info << "Creating VST cache file " << path << endmsg;
-#endif
-	return fopen (path.c_str(), "wb");
-}
-
-/** newly created cache file for given plugin
- * @return FILE for the .fsi cache, NULL if neither personal,
- * nor global cache folder is writable */
-static FILE *
-vstfx_infofile_for_write (const char* dllpath)
-{
-	FILE* f;
-
-	if ((f = vstfx_infofile_create (dllpath, 0)) == 0) {
-		f = vstfx_infofile_create (dllpath, 1);
-	}
-
-	return f;
+	string const path = vstfx_infofile_path (dllpath);
+	return g_fopen (path.c_str (), "wb");
 }
 
 /** check if cache-file exists, is up-to-date and parse cache file
@@ -541,15 +460,15 @@ vstfx_infofile_for_write (const char* dllpath)
  * @return true if .fsi cache was read successfully, false otherwise
  */
 static bool
-vstfx_get_info_from_file(const char* dllpath, vector<VSTInfo*> *infos)
+vstfx_get_info_from_file (const char* dllpath, vector<VSTInfo*> *infos)
 {
 	FILE* infofile;
 	bool rv = false;
 	if ((infofile = vstfx_infofile_for_read (dllpath)) != 0) {
-		rv = vstfx_load_info_file(infofile, infos);
+		rv = vstfx_load_info_file (infofile, infos);
 		fclose (infofile);
 		if (!rv) {
-			PBD::warning << "Cannot get VST information form " << dllpath << ": info file load failed." << endmsg;
+			PBD::warning << string_compose (_("Cannot get VST information for '%1': failed to load cache file."), dllpath) << endmsg;
 		}
 	}
 	return rv;
@@ -588,8 +507,8 @@ bool vstfx_midi_output (VSTState* vstfx)
 		/* should we send it VST events (i.e. MIDI) */
 
 		if (   (plugin->dispatcher (plugin, effCanDo, 0, 0, const_cast<char*> ("sendVstEvents"), 0.0f) > 0)
-		       || (plugin->dispatcher (plugin, effCanDo, 0, 0, const_cast<char*> ("sendVstMidiEvent"), 0.0f) > 0)
-			 ) {
+		    || (plugin->dispatcher (plugin, effCanDo, 0, 0, const_cast<char*> ("sendVstMidiEvent"), 0.0f) > 0)
+		   ) {
 			return true;
 		}
 	}
@@ -621,7 +540,7 @@ simple_master_callback (AEffect *, int32_t opcode, int32_t, intptr_t, void *ptr,
 	}
 	else if (opcode == audioMasterCanDo) {
 		for (int i = 0; i < vstfx_can_do_string_count; i++) {
-			if (! strcmp(vstfx_can_do_strings[i], (const char*)ptr)) {
+			if (! strcmp (vstfx_can_do_strings[i], (const char*)ptr)) {
 				return 1;
 			}
 		}
@@ -647,9 +566,9 @@ vstfx_parse_vst_state (VSTState* vstfx)
 		return 0;
 	}
 
-	/*We need to init the creator because some plugins
-	  fail to implement getVendorString, and so won't stuff the
-	  string with any name*/
+	/* We need to init the creator because some plugins
+	 * fail to implement getVendorString, and so won't stuff the
+	 * string with any name */
 
 	char creator[65] = "Unknown";
 	char name[65] = "";
@@ -659,25 +578,25 @@ vstfx_parse_vst_state (VSTState* vstfx)
 
 	plugin->dispatcher (plugin, effGetEffectName, 0, 0, name, 0);
 
-	if (strlen(name) == 0) {
+	if (strlen (name) == 0) {
 		plugin->dispatcher (plugin, effGetProductString, 0, 0, name, 0);
 	}
 
-	if (strlen(name) == 0) {
+	if (strlen (name) == 0) {
 		info->name = strdup (vstfx->handle->name);
 	} else {
 		info->name = strdup (name);
 	}
 
 	/*If the plugin doesn't bother to implement GetVendorString we will
-	  have pre-stuffed the string with 'Unknown' */
+	 * have pre-stuffed the string with 'Unknown' */
 
 	plugin->dispatcher (plugin, effGetVendorString, 0, 0, creator, 0);
 
-	/*Some plugins DO implement GetVendorString, but DON'T put a name in it
-	  so if its just a zero length string we replace it with 'Unknown' */
+	/* Some plugins DO implement GetVendorString, but DON'T put a name in it
+	 * so if its just a zero length string we replace it with 'Unknown' */
 
-	if (strlen(creator) == 0) {
+	if (strlen (creator) == 0) {
 		info->creator = strdup ("Unknown");
 	} else {
 		info->creator = strdup (creator);
@@ -705,11 +624,11 @@ vstfx_parse_vst_state (VSTState* vstfx)
 	info->numInputs = plugin->numInputs;
 	info->numOutputs = plugin->numOutputs;
 	info->numParams = plugin->numParams;
-	info->wantMidi = (vstfx_midi_input(vstfx) ? 1 : 0) | (vstfx_midi_output(vstfx) ? 2 : 0);
+	info->wantMidi = (vstfx_midi_input (vstfx) ? 1 : 0) | (vstfx_midi_output (vstfx) ? 2 : 0);
 	info->hasEditor = plugin->flags & effFlagsHasEditor ? true : false;
 	info->canProcessReplacing = plugin->flags & effFlagsCanReplacing ? true : false;
-	info->ParamNames = (char **) malloc(sizeof(char*)*info->numParams);
-	info->ParamLabels = (char **) malloc(sizeof(char*)*info->numParams);
+	info->ParamNames = (char **) malloc (sizeof (char*)*info->numParams);
+	info->ParamLabels = (char **) malloc (sizeof (char*)*info->numParams);
 
 	for (int i = 0; i < info->numParams; ++i) {
 		char name[64];
@@ -721,11 +640,11 @@ vstfx_parse_vst_state (VSTState* vstfx)
 		strcpy (label, "No Label");
 
 		plugin->dispatcher (plugin, effGetParamName, i, 0, name, 0);
-		info->ParamNames[i] = strdup(name);
+		info->ParamNames[i] = strdup (name);
 
 		//NOTE: 'effGetParamLabel' is no longer defined in vestige headers
 		//plugin->dispatcher (plugin, effGetParamLabel, i, 0, label, 0);
-		info->ParamLabels[i] = strdup(label);
+		info->ParamLabels[i] = strdup (label);
 	}
 	return info;
 }
@@ -736,14 +655,14 @@ vstfx_parse_vst_state (VSTState* vstfx)
 static void
 vstfx_info_from_plugin (const char *dllpath, VSTState* vstfx, vector<VSTInfo *> *infos, enum ARDOUR::PluginType type)
 {
-	assert(vstfx);
+	assert (vstfx);
 	VSTInfo *info;
 
-	if (!(info = vstfx_parse_vst_state(vstfx))) {
+	if (!(info = vstfx_parse_vst_state (vstfx))) {
 		return;
 	}
 
-	infos->push_back(info);
+	infos->push_back (info);
 #if 1 // shell-plugin support
 	/* If this plugin is a Shell and we are not already inside a shell plugin
 	 * read the info for all of the plugins contained in this shell.
@@ -757,20 +676,26 @@ vstfx_info_from_plugin (const char *dllpath, VSTState* vstfx, vector<VSTInfo *>
 		do {
 			char name[65] = "Unknown";
 			id = plugin->dispatcher (plugin, effShellGetNextPlugin, 0, 0, name, 0);
-			ids.push_back(std::make_pair(id, name));
+			ids.push_back (std::make_pair (id, name));
 		} while ( id != 0 );
 
-		switch(type) {
+		switch (type) {
 #ifdef WINDOWS_VST_SUPPORT
-			case ARDOUR::Windows_VST: fst_close(vstfx); break;
+			case ARDOUR::Windows_VST:
+				fst_close (vstfx);
+				break;
 #endif
 #ifdef LXVST_SUPPORT
-			case ARDOUR::LXVST: vstfx_close (vstfx); break;
+			case ARDOUR::LXVST:
+				vstfx_close (vstfx);
+				break;
 #endif
-			default: assert(0); break;
+			default:
+				assert (0);
+				break;
 		}
 
-		for (vector< pair<int, string> >::iterator x = ids.begin(); x != ids.end(); ++x) {
+		for (vector< pair<int, string> >::iterator x = ids.begin (); x != ids.end (); ++x) {
 			id = (*x).first;
 			if (id == 0) continue;
 			/* recurse vstfx_get_info() */
@@ -778,37 +703,49 @@ vstfx_info_from_plugin (const char *dllpath, VSTState* vstfx, vector<VSTInfo *>
 			bool ok;
 			switch (type) {
 #ifdef WINDOWS_VST_SUPPORT
-				case ARDOUR::Windows_VST:  ok = vstfx_instantiate_and_get_info_fst(dllpath, infos, id); break;
+				case ARDOUR::Windows_VST:
+					ok = vstfx_instantiate_and_get_info_fst (dllpath, infos, id);
+					break;
 #endif
 #ifdef LXVST_SUPPORT
-				case ARDOUR::LXVST:  ok = vstfx_instantiate_and_get_info_lx(dllpath, infos, id); break;
+				case ARDOUR::LXVST:
+					ok = vstfx_instantiate_and_get_info_lx (dllpath, infos, id);
+					break;
 #endif
-				default: ok = false;
+				default:
+					ok = false;
+					break;
 			}
 			if (ok) {
 				// One shell (some?, all?) does not report the actual plugin name
 				// even after the shelled plugin has been instantiated.
 				// Replace the name of the shell with the real name.
-				info = infos->back();
+				info = infos->back ();
 				free (info->name);
 
-				if ((*x).second.length() == 0) {
-					info->name = strdup("Unknown");
+				if ((*x).second.length () == 0) {
+					info->name = strdup ("Unknown");
 				}
 				else {
-					info->name = strdup ((*x).second.c_str());
+					info->name = strdup ((*x).second.c_str ());
 				}
 			}
 		}
 	} else {
-		switch(type) {
+		switch (type) {
 #ifdef WINDOWS_VST_SUPPORT
-			case ARDOUR::Windows_VST: fst_close(vstfx); break;
+			case ARDOUR::Windows_VST:
+				fst_close (vstfx);
+				break;
 #endif
 #ifdef LXVST_SUPPORT
-			case ARDOUR::LXVST: vstfx_close (vstfx); break;
+			case ARDOUR::LXVST:
+				vstfx_close (vstfx);
+				break;
 #endif
-			default: assert(0); break;
+			default:
+				assert (0);
+				break;
 		}
 	}
 #endif
@@ -825,22 +762,22 @@ vstfx_instantiate_and_get_info_lx (
 {
 	VSTHandle* h;
 	VSTState* vstfx;
-	if (!(h = vstfx_load(dllpath))) {
-		PBD::warning << "Cannot get LinuxVST information from " << dllpath << ": load failed." << endmsg;
+	if (!(h = vstfx_load (dllpath))) {
+		PBD::warning << string_compose (_("Cannot get LinuxVST information from '%1': load failed."), dllpath) << endmsg;
 		return false;
 	}
 
 	vstfx_current_loading_id = uniqueID;
 
-	if (!(vstfx = vstfx_instantiate(h, simple_master_callback, 0))) {
-		vstfx_unload(h);
-		PBD::warning << "Cannot get LinuxVST information from " << dllpath << ": instantiation failed." << endmsg;
+	if (!(vstfx = vstfx_instantiate (h, simple_master_callback, 0))) {
+		vstfx_unload (h);
+		PBD::warning << string_compose (_("Cannot get LinuxVST information from '%1': instantiation failed."), dllpath) << endmsg;
 		return false;
 	}
 
 	vstfx_current_loading_id = 0;
 
-	vstfx_info_from_plugin(dllpath, vstfx, infos, ARDOUR::LXVST);
+	vstfx_info_from_plugin (dllpath, vstfx, infos, ARDOUR::LXVST);
 
 	vstfx_unload (h);
 	return true;
@@ -854,22 +791,22 @@ vstfx_instantiate_and_get_info_fst (
 {
 	VSTHandle* h;
 	VSTState* vstfx;
-	if(!(h = fst_load(dllpath))) {
-		PBD::warning << "Cannot get Windows VST information from " << dllpath << ": load failed." << endmsg;
+	if (!(h = fst_load (dllpath))) {
+		PBD::warning << string_compose (_("Cannot get Windows VST information from '%1': load failed."), dllpath) << endmsg;
 		return false;
 	}
 
 	vstfx_current_loading_id = uniqueID;
 
-	if(!(vstfx = fst_instantiate(h, simple_master_callback, 0))) {
-		fst_unload(&h);
+	if (!(vstfx = fst_instantiate (h, simple_master_callback, 0))) {
+		fst_unload (&h);
 		vstfx_current_loading_id = 0;
-		PBD::warning << "Cannot get Windows VST information from " << dllpath << ": instantiation failed." << endmsg;
+		PBD::warning << string_compose (_("Cannot get Windows VST information from '%1': instantiation failed."), dllpath) << endmsg;
 		return false;
 	}
 	vstfx_current_loading_id = 0;
 
-	vstfx_info_from_plugin(dllpath, vstfx, infos, ARDOUR::Windows_VST);
+	vstfx_info_from_plugin (dllpath, vstfx, infos, ARDOUR::Windows_VST);
 
 	return true;
 }
@@ -890,18 +827,20 @@ static void parse_scanner_output (std::string msg, size_t /*len*/)
 		return;
 	}
 
+#if 0 // TODO
 	if (!_errorlog_fd) {
-		if (!(_errorlog_fd = fopen(vstfx_errorfile_path(_errorlog_dll, 0).c_str(), "w"))) {
-			if (!(_errorlog_fd = fopen(vstfx_errorfile_path(_errorlog_dll, 1).c_str(), "w"))) {
-				PBD::error << "Cannot create plugin error-log for plugin " << _errorlog_dll;
-				free(_errorlog_dll);
-				_errorlog_dll = NULL;
-			}
+		if (!(_errorlog_fd = g_fopen (vstfx_errorfile_path (_errorlog_dll).c_str (), "w"))) {
+			PBD::error << "Cannot create plugin error-log for plugin " << _errorlog_dll;
+			free (_errorlog_dll);
+			_errorlog_dll = NULL;
 		}
 	}
+#endif
 
 	if (_errorlog_fd) {
-		fprintf (_errorlog_fd, "%s\n", msg.c_str());
+		fprintf (_errorlog_fd, "%s\n", msg.c_str ());
+	} else if (_errorlog_dll) {
+		PBD::error << "VST '" << _errorlog_dll << "': " << msg;
 	} else {
 		PBD::error << "VST scanner: " << msg;
 	}
@@ -909,25 +848,25 @@ static void parse_scanner_output (std::string msg, size_t /*len*/)
 
 static void
 set_error_log (const char* dllpath) {
-	assert(!_errorlog_fd);
-	assert(!_errorlog_dll);
-	_errorlog_dll = strdup(dllpath);
+	assert (!_errorlog_fd);
+	assert (!_errorlog_dll);
+	_errorlog_dll = strdup (dllpath);
 }
 
 static void
 close_error_log () {
 	if (_errorlog_fd) {
-		fclose(_errorlog_fd);
+		fclose (_errorlog_fd);
 		_errorlog_fd = 0;
 	}
-	free(_errorlog_dll);
+	free (_errorlog_dll);
 	_errorlog_dll = 0;
 }
 
 #endif
 
 
-/* *** THE MAIN FUNCTION THAT USES ALL OF THE ABOVE :) *** */
+/* *** the main function that uses all of the above *** */
 
 static vector<VSTInfo *> *
 vstfx_get_info (const char* dllpath, enum ARDOUR::PluginType type, enum VSTScanMode mode)
@@ -935,11 +874,11 @@ vstfx_get_info (const char* dllpath, enum ARDOUR::PluginType type, enum VSTScanM
 	FILE* infofile;
 	vector<VSTInfo*> *infos = new vector<VSTInfo*>;
 
-	if (vstfx_check_blacklist(dllpath)) {
+	if (vst_is_blacklisted (dllpath)) {
 		return infos;
 	}
 
-	if (vstfx_get_info_from_file(dllpath, infos)) {
+	if (vstfx_get_info_from_file (dllpath, infos)) {
 		return infos;
 	}
 
@@ -953,50 +892,50 @@ vstfx_get_info (const char* dllpath, enum ARDOUR::PluginType type, enum VSTScanM
 	else if (mode == VST_SCAN_USE_APP && scanner_bin_path != "") {
 		/* use external scanner app */
 
-		char **argp= (char**) calloc(3,sizeof(char*));
-		argp[0] = strdup(scanner_bin_path.c_str());
-		argp[1] = strdup(dllpath);
+		char **argp= (char**) calloc (3,sizeof (char*));
+		argp[0] = strdup (scanner_bin_path.c_str ());
+		argp[1] = strdup (dllpath);
 		argp[2] = 0;
 
-		set_error_log(dllpath);
+		set_error_log (dllpath);
 		ARDOUR::SystemExec scanner (scanner_bin_path, argp);
 		PBD::ScopedConnectionList cons;
 		scanner.ReadStdout.connect_same_thread (cons, boost::bind (&parse_scanner_output, _1 ,_2));
 		if (scanner.start (2 /* send stderr&stdout via signal */)) {
-			PBD::error << "Cannot launch VST scanner app '" << scanner_bin_path << "': "<< strerror(errno) << endmsg;
-			close_error_log();
+			PBD::error << string_compose (_("Cannot launch VST scanner app '%1': %2"), scanner_bin_path, strerror (errno)) << endmsg;
+			close_error_log ();
 			return infos;
 		} else {
 			int timeout = PLUGIN_SCAN_TIMEOUT;
 			bool no_timeout = (timeout <= 0);
-			ARDOUR::PluginScanTimeout(timeout);
-			while (scanner.is_running() && (no_timeout || timeout > 0)) {
-				if (!no_timeout && !ARDOUR::PluginManager::instance().no_timeout()) {
+			ARDOUR::PluginScanTimeout (timeout);
+			while (scanner.is_running () && (no_timeout || timeout > 0)) {
+				if (!no_timeout && !ARDOUR::PluginManager::instance ().no_timeout ()) {
 					if (timeout%5 == 0) {
-						ARDOUR::PluginScanTimeout(timeout);
+						ARDOUR::PluginScanTimeout (timeout);
 					}
 					--timeout;
 				}
-				ARDOUR::GUIIdle();
+				ARDOUR::GUIIdle ();
 				Glib::usleep (100000);
 
-				if (ARDOUR::PluginManager::instance().cancelled()) {
+				if (ARDOUR::PluginManager::instance ().cancelled ()) {
 					// remove info file (might be incomplete)
-					vstfx_remove_infofile(dllpath);
+					vstfx_remove_infofile (dllpath);
 					// remove temporary blacklist file (scan incomplete)
-					vstfx_un_blacklist(dllpath);
-					scanner.terminate();
-					close_error_log();
+					vstfx_un_blacklist (dllpath);
+					scanner.terminate ();
+					close_error_log ();
 					return infos;
 				}
 			}
-			scanner.terminate();
+			scanner.terminate ();
 		}
-		close_error_log();
+		close_error_log ();
 		/* re-read index (generated by external scanner) */
-		vstfx_clear_info_list(infos);
-		if (!vstfx_check_blacklist(dllpath)) {
-			vstfx_get_info_from_file(dllpath, infos);
+		vstfx_clear_info_list (infos);
+		if (!vst_is_blacklisted (dllpath)) {
+			vstfx_get_info_from_file (dllpath, infos);
 		}
 		return infos;
 	}
@@ -1007,16 +946,22 @@ vstfx_get_info (const char* dllpath, enum ARDOUR::PluginType type, enum VSTScanM
 
 	bool ok;
 	/* blacklist in case instantiation fails */
-	vstfx_blacklist(dllpath);
+	vstfx_blacklist (dllpath);
 
 	switch (type) {
 #ifdef WINDOWS_VST_SUPPORT
-		case ARDOUR::Windows_VST:  ok = vstfx_instantiate_and_get_info_fst(dllpath, infos, 0); break;
+		case ARDOUR::Windows_VST:
+			ok = vstfx_instantiate_and_get_info_fst (dllpath, infos, 0);
+			break;
 #endif
 #ifdef LXVST_SUPPORT
-		case ARDOUR::LXVST:  ok = vstfx_instantiate_and_get_info_lx(dllpath, infos, 0); break;
+		case ARDOUR::LXVST:
+			ok = vstfx_instantiate_and_get_info_lx (dllpath, infos, 0);
+			break;
 #endif
-		default: ok = false;
+		default:
+			ok = false;
+			break;
 	}
 
 	if (!ok) {
@@ -1024,12 +969,12 @@ vstfx_get_info (const char* dllpath, enum ARDOUR::PluginType type, enum VSTScanM
 	}
 
 	/* remove from blacklist */
-	vstfx_un_blacklist(dllpath);
+	vstfx_un_blacklist (dllpath);
 
 	/* crate cache/whitelist */
 	infofile = vstfx_infofile_for_write (dllpath);
 	if (!infofile) {
-		PBD::warning << "Cannot cache VST information for " << dllpath << ": cannot create new FST info file." << endmsg;
+		PBD::warning << string_compose (_("Cannot cache VST information for '%1': cannot create cache file."), dllpath) << endmsg;
 		return infos;
 	} else {
 		vstfx_write_info_file (infofile, infos);
@@ -1039,49 +984,22 @@ vstfx_get_info (const char* dllpath, enum ARDOUR::PluginType type, enum VSTScanM
 }
 
 
-
 /* *** public API *** */
 
 void
 vstfx_free_info_list (vector<VSTInfo *> *infos)
 {
-	for (vector<VSTInfo *>::iterator i = infos->begin(); i != infos->end(); ++i) {
-		vstfx_free_info(*i);
+	for (vector<VSTInfo *>::iterator i = infos->begin (); i != infos->end (); ++i) {
+		vstfx_free_info (*i);
 	}
 	delete infos;
 }
 
-string
-get_personal_vst_blacklist_dir() {
-	string dir = Glib::build_filename (ARDOUR::user_cache_directory(), "fst_blacklist");
-	/* if the directory doesn't exist, try to create it */
-	if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
-		if (g_mkdir (dir.c_str (), 0700)) {
-			PBD::error << "Cannot create VST blacklist folder '" << dir << "'" << endmsg;
-			//exit(1);
-		}
-	}
-	return dir;
-}
-
-string
-get_personal_vst_info_cache_dir() {
-	string dir = Glib::build_filename (ARDOUR::user_cache_directory(), "fst_info");
-	/* if the directory doesn't exist, try to create it */
-	if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
-		if (g_mkdir (dir.c_str (), 0700)) {
-			PBD::error << "Cannot create VST info folder '" << dir << "'" << endmsg;
-			//exit(1);
-		}
-	}
-	return dir;
-}
-
 #ifdef LXVST_SUPPORT
 vector<VSTInfo *> *
 vstfx_get_info_lx (char* dllpath, enum VSTScanMode mode)
 {
-	return vstfx_get_info(dllpath, ARDOUR::LXVST, mode);
+	return vstfx_get_info (dllpath, ARDOUR::LXVST, mode);
 }
 #endif
 
@@ -1089,7 +1007,7 @@ vstfx_get_info_lx (char* dllpath, enum VSTScanMode mode)
 vector<VSTInfo *> *
 vstfx_get_info_fst (char* dllpath, enum VSTScanMode mode)
 {
-	return vstfx_get_info(dllpath, ARDOUR::Windows_VST, mode);
+	return vstfx_get_info (dllpath, ARDOUR::Windows_VST, mode);
 }
 #endif
 
diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc
index 189dd93..ad5ecb4 100644
--- a/libs/ardour/vst_plugin.cc
+++ b/libs/ardour/vst_plugin.cc
@@ -565,12 +565,7 @@ VSTPlugin::connect_and_run (BufferSet& bufs,
 
 	uint32_t out_index = 0;
 	for (i = 0; i < (int32_t) _plugin->numOutputs; ++i) {
-		uint32_t  index;
-		bool      valid = false;
-		index = out_map.get(DataType::AUDIO, out_index++, &valid);
-		outs[i] = (valid)
-					? bufs.get_audio(index).data(offset)
-					: scratch_bufs.get_audio(0).data(offset);
+		outs[i] = scratch_bufs.get_audio(i).data(offset);
 	}
 
 	if (bufs.count().n_midi() > 0) {
@@ -597,6 +592,16 @@ VSTPlugin::connect_and_run (BufferSet& bufs,
 	_plugin->processReplacing (_plugin, &ins[0], &outs[0], nframes);
 	_midi_out_buf = 0;
 
+	out_index = 0;
+	for (i = 0; i < (int32_t) _plugin->numOutputs; ++i) {
+		uint32_t  index;
+		bool      valid = false;
+		index = out_map.get(DataType::AUDIO, out_index++, &valid);
+		if (!valid) {
+			continue;
+		}
+		copy_vector (bufs.get_audio(index).data(offset), outs[i], nframes);
+	}
 	return 0;
 }
 
@@ -614,6 +619,9 @@ VSTPlugin::unique_id () const
 const char *
 VSTPlugin::name () const
 {
+	if (!_info->name.empty ()) {
+		return _info->name.c_str();
+	}
 	return _handle->name;
 }
 
diff --git a/libs/ardour/wscript b/libs/ardour/wscript
index 918408c..c732161 100644
--- a/libs/ardour/wscript
+++ b/libs/ardour/wscript
@@ -331,15 +331,19 @@ def build(bld):
     # micro increment <=> no interface changes
     LIBARDOUR_LIB_VERSION = "3.0.0"
 
+    sources = libardour_sources
+    if bld.is_tracks_build():
+        sources += [ 'engine_state_controller.cc' ]
+    
     # Library
     if bld.is_defined ('INTERNAL_SHARED_LIBS'):
-        obj              = bld.shlib(features = 'c cxx cshlib cxxshlib', source=libardour_sources)
+        obj              = bld.shlib(features = 'c cxx cshlib cxxshlib', source=sources)
         # macros for this shared library
         obj.defines      = [ 'LIBARDOUR_DLL_EXPORTS=1' ]
     else:
-        obj              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=libardour_sources)
-        obj.cxxflags     = [ '-fPIC' ]
-        obj.cflags       = [ '-fPIC' ]
+        obj              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=sources)
+        obj.cxxflags     = [  bld.env['compiler_flags_dict']['pic'] ]
+        obj.cflags       = [ bld.env['compiler_flags_dict']['pic'] ]
         obj.defines      = []
 
     obj.export_includes = ['.']
@@ -403,18 +407,39 @@ def build(bld):
     if bld.is_defined('AUDIOUNIT_SUPPORT'):
         obj.source += [ 'audio_unit.cc' ]
 
+    avx_sources = []
+
     if Options.options.fpu_optimization:
         if (bld.env['build_target'] == 'i386' or bld.env['build_target'] == 'i686'):
-            obj.source += [ 'sse_functions_xmm.cc', 'sse_functions.s' ]
+            obj.source += [ 'sse_functions_xmm.cc', 'sse_functions.s', ]
+            avx_sources = [ 'sse_functions_avx_linux.cc' ]
         elif bld.env['build_target'] == 'x86_64':
-            obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit.s' ]
+            obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit.s', ]
+            avx_sources = [ 'sse_functions_avx_linux.cc' ]
         elif bld.env['build_target'] == 'mingw':
-	        # usability of the 64 bit windows assembler depends on the compiler target,
-	        # not the build host, which in turn can only be inferred from the name
-	        # of the compiler. 
-	        if re.search ('/^x86_64/', str(bld.env['CC'])):
-		        obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit_win.s' ]
-
+                # usability of the 64 bit windows assembler depends on the compiler target,
+                # not the build host, which in turn can only be inferred from the name
+                # of the compiler. 
+                if re.search ('x86_64-w64', str(bld.env['CC'])):
+                        obj.source += [ 'sse_functions_xmm.cc' ]
+                        obj.source += [ 'sse_functions_64bit_win.s',  'sse_avx_functions_64bit_win.s' ]
+                        avx_sources = [ 'sse_functions_avx.cc' ]
+        
+        if avx_sources:
+            # as long as we want to use AVX intrinsics in this file,
+            # compile it with -mavx flag - append avx flag to the existing
+            avx_cxxflags = list(bld.env['CXXFLAGS'])
+            avx_cxxflags.append (bld.env['compiler_flags_dict']['avx'])
+            avx_cxxflags.append (bld.env['compiler_flags_dict']['pic'])
+            bld(features = 'cxx',
+                source   = avx_sources,
+                cxxflags = avx_cxxflags,
+                includes = [ '.' ],
+                use = [ 'libtimecode', 'libpbd', 'libevoral', ],
+                target   = 'sse_avx_functions')
+            
+            obj.use += ['sse_avx_functions' ]
+        
     # i18n
     if bld.is_defined('ENABLE_NLS'):
         mo_files = bld.path.ant_glob('po/*.mo')
@@ -446,14 +471,6 @@ def build(bld):
             ]
         testcommon.name         = 'testcommon'
 
-        if bld.env['FPU_OPTIMIZATION']:
-            testcommon.source += [ 'sse_functions_xmm.cc' ]
-            if (bld.env['build_target'] == 'i386'
-                or bld.env['build_target'] == 'i686'):
-                testcommon.source += [ 'sse_functions.s' ]
-            elif bld.env['build_target'] == 'x86_64':
-                testcommon.source += [ 'sse_functions_64bit.s' ]
-
         if bld.env['SINGLE_TESTS']:
             create_ardour_test_program(bld, obj.includes, 'audio_engine_test', 'test_audio_engine', ['test/audio_engine_test.cc'])
             create_ardour_test_program(bld, obj.includes, 'automation_list_property_test', 'test_automation_list_property', ['test/automation_list_property_test.cc'])
@@ -471,6 +488,7 @@ def build(bld):
             create_ardour_test_program(bld, obj.includes, 'region_naming', 'test_region_naming', ['test/region_naming_test.cc'])
             create_ardour_test_program(bld, obj.includes, 'control_surface', 'test_control_surfaces', ['test/control_surfaces_test.cc'])
             create_ardour_test_program(bld, obj.includes, 'mtdm_test', 'test_mtdm', ['test/mtdm_test.cc'])
+            create_ardour_test_program(bld, obj.includes, 'sha1_test', 'test_sha1', ['test/sha1_test.cc'])
             create_ardour_test_program(bld, obj.includes, 'session_test', 'test_session', ['test/session_test.cc'])
 
         test_sources  = '''
@@ -490,6 +508,7 @@ def build(bld):
             test/region_naming_test.cc
             test/control_surfaces_test.cc
             test/mtdm_test.cc
+            test/sha1_test.cc
             test/session_test.cc
         '''.split()
 
@@ -523,13 +542,6 @@ def build(bld):
             'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
             'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
             ]
-        if bld.env['FPU_OPTIMIZATION']:
-            session_load_tester.source += [ 'sse_functions_xmm.cc' ]
-            if (bld.env['build_target'] == 'i386'
-                or bld.env['build_target'] == 'i686'):
-                session_load_tester.source += [ 'sse_functions.s' ]
-            elif bld.env['build_target'] == 'x86_64':
-                session_load_tester.source += [ 'sse_functions_64bit.s' ]
 
         # Profiling
         for p in ['runpc', 'lots_of_regions', 'load_session']:
@@ -555,13 +567,6 @@ def build(bld):
                 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
                 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
                 ]
-            if bld.env['FPU_OPTIMIZATION']:
-                profilingobj.source += [ 'sse_functions_xmm.cc' ]
-                if (bld.env['build_target'] == 'i386'
-                    or bld.env['build_target'] == 'i686'):
-                    profilingobj.source += [ 'sse_functions.s' ]
-                elif bld.env['build_target'] == 'x86_64':
-                    profilingobj.source += [ 'sse_functions_64bit.s' ]
 
 def create_ardour_test_program(bld, includes, name, target, sources):
     testobj              = bld(features = 'cxx cxxprogram')
diff --git a/libs/backends/alsa/select_sleep.h b/libs/ardouralsautil/ardouralsautil/deviceinfo.h
similarity index 58%
copy from libs/backends/alsa/select_sleep.h
copy to libs/ardouralsautil/ardouralsautil/deviceinfo.h
index ec6a93d..ab77831 100644
--- a/libs/backends/alsa/select_sleep.h
+++ b/libs/ardouralsautil/ardouralsautil/deviceinfo.h
@@ -1,5 +1,6 @@
 /*
- * Copyright (C) 2004,2014 Robin Gareus <robin at gareus.org>
+ * Copyright (C) 2015 Robin Gareus <robin at gareus.org>
+ * Copyright (C) 2013 Paul Davis
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,20 +17,18 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include <stdint.h>
-#include <sys/select.h>
+#ifndef __libardouralsautil_deviceinfo_h__
+#define __libardouralsautil_deviceinfo_h__
 
-/* select() sleeps _at most_ a given time.
- * (compared to usleep() or nanosleep() which sleep at least a given time)
- */
-static void select_sleep (uint64_t usec) {
-	if (usec <= 10) return;
-	fd_set fd;
-	int max_fd=0;
-	struct timeval tv;
-	tv.tv_sec = usec / 1000000;
-	tv.tv_usec = usec % 1000000;
-	FD_ZERO (&fd);
-	select (max_fd, &fd, NULL, NULL, &tv);
-	// on Linux, tv reflects the actual time slept.
+namespace ARDOUR {
+
+	struct ALSADeviceInfo {
+		unsigned int max_channels;
+		unsigned int min_rate, max_rate;
+		unsigned long min_size, max_size;
+		bool valid;
+	};
+
+	int get_alsa_device_parameters (const char* device_name, const bool play, ALSADeviceInfo *nfo);
 }
+#endif
diff --git a/libs/ardouralsautil/deviceparams.cc b/libs/ardouralsautil/deviceparams.cc
new file mode 100644
index 0000000..2e9f121
--- /dev/null
+++ b/libs/ardouralsautil/deviceparams.cc
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2015 Robin Gareus <robin at gareus.org>
+ * Copyright (C) 2013 Paul Davis
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <alsa/asoundlib.h>
+#include "pbd/convert.h"
+#include "ardouralsautil/deviceinfo.h"
+
+using namespace std;
+
+int
+ARDOUR::get_alsa_device_parameters (const char* device_name, const bool play, ALSADeviceInfo *nfo)
+{
+	snd_pcm_t *pcm;
+	snd_pcm_hw_params_t *hw_params;
+	std::string errmsg;
+	int err;
+
+	nfo->valid = false;
+
+	err = snd_pcm_open (&pcm, device_name,
+			play ? SND_PCM_STREAM_PLAYBACK : SND_PCM_STREAM_CAPTURE,
+			SND_PCM_NONBLOCK);
+
+	if (err < 0) {
+		fprintf (stderr, "ALSA: Cannot open device '%s': %s\n", device_name, snd_strerror (err));
+		return 1;
+	}
+
+	snd_pcm_hw_params_alloca (&hw_params);
+	err = snd_pcm_hw_params_any (pcm, hw_params);
+	if (err < 0) {
+		errmsg = "Cannot get hardware parameters";
+		goto error_out;
+	}
+
+	err = snd_pcm_hw_params_get_channels_max (hw_params, &nfo->max_channels);
+	if (err < 0) {
+		errmsg = "Cannot get maximum channels count";
+		goto error_out;
+	}
+
+	err = snd_pcm_hw_params_get_rate_min (hw_params, &nfo->min_rate, NULL);
+	if (err < 0) {
+		errmsg = "Cannot get minimum rate";
+		goto error_out;
+	}
+	err = snd_pcm_hw_params_get_rate_max (hw_params, &nfo->max_rate, NULL);
+	if (err < 0) {
+		errmsg = "Cannot get maximum rate";
+		goto error_out;
+	}
+
+	err = snd_pcm_hw_params_get_buffer_size_min (hw_params, &nfo->min_size);
+	if (err < 0) {
+		errmsg = "Cannot get minimum buffer size";
+		goto error_out;
+	}
+	err = snd_pcm_hw_params_get_buffer_size_max (hw_params, &nfo->max_size);
+	if (err < 0) {
+		errmsg = "Cannot get maximum buffer size";
+		goto error_out;
+	}
+	snd_pcm_close (pcm);
+	nfo->valid = true;
+	return 0;
+
+error_out:
+	fprintf (stderr, "ALSA: %s: %s\n", errmsg.c_str(), snd_strerror (err));
+	snd_pcm_close (pcm);
+	return 1;
+
+}
diff --git a/libs/ardouralsautil/wscript b/libs/ardouralsautil/wscript
index 7f70e2e..60be052 100644
--- a/libs/ardouralsautil/wscript
+++ b/libs/ardouralsautil/wscript
@@ -26,7 +26,8 @@ def build(bld):
         if bld.is_defined('HAVE_ALSA'):
             obj = bld(features = 'cxx cxxshlib')
             obj.source = [
-                'devicelist.cc'
+                'devicelist.cc',
+                'deviceparams.cc'
             ]
             obj.export_includes = ['.']
             obj.includes = ['.']
diff --git a/libs/audiographer/macos/audiographer/audiographer.xcodeproj/project.pbxproj b/libs/audiographer/macos/audiographer/audiographer.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..650b7e1
--- /dev/null
+++ b/libs/audiographer/macos/audiographer/audiographer.xcodeproj/project.pbxproj
@@ -0,0 +1,166 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXFileReference section */
+		435E66801A4AB63D00472D50 /* broadcast_info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = broadcast_info.h; path = ../../audiographer/broadcast_info.h; sourceTree = "<group>"; };
+		435E66811A4AB63D00472D50 /* debug_utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = debug_utils.h; path = ../../audiographer/debug_utils.h; sourceTree = "<group>"; };
+		435E66821A4AB63D00472D50 /* debuggable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = debuggable.h; path = ../../audiographer/debuggable.h; sourceTree = "<group>"; };
+		435E66831A4AB63D00472D50 /* exception.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = exception.h; path = ../../audiographer/exception.h; sourceTree = "<group>"; };
+		435E66841A4AB63D00472D50 /* flag_debuggable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flag_debuggable.h; path = ../../audiographer/flag_debuggable.h; sourceTree = "<group>"; };
+		435E66851A4AB63D00472D50 /* flag_field.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flag_field.h; path = ../../audiographer/flag_field.h; sourceTree = "<group>"; };
+		435E66861A4AB63D00472D50 /* process_context.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = process_context.h; path = ../../audiographer/process_context.h; sourceTree = "<group>"; };
+		435E66871A4AB63D00472D50 /* routines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = routines.h; path = ../../audiographer/routines.h; sourceTree = "<group>"; };
+		435E66881A4AB63D00472D50 /* sink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sink.h; path = ../../audiographer/sink.h; sourceTree = "<group>"; };
+		435E66891A4AB63D00472D50 /* source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = source.h; path = ../../audiographer/source.h; sourceTree = "<group>"; };
+		435E668A1A4AB63D00472D50 /* throwing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = throwing.h; path = ../../audiographer/throwing.h; sourceTree = "<group>"; };
+		435E668B1A4AB63D00472D50 /* type_utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = type_utils.h; path = ../../audiographer/type_utils.h; sourceTree = "<group>"; };
+		435E668C1A4AB63D00472D50 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../../audiographer/types.h; sourceTree = "<group>"; };
+		435E668D1A4AB63D00472D50 /* visibility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../audiographer/visibility.h; sourceTree = "<group>"; };
+		435E668E1A4AB64B00472D50 /* chunker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = chunker.h; path = ../../audiographer/general/chunker.h; sourceTree = "<group>"; };
+		435E668F1A4AB64B00472D50 /* deinterleaver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = deinterleaver.h; path = ../../audiographer/general/deinterleaver.h; sourceTree = "<group>"; };
+		435E66901A4AB64B00472D50 /* interleaver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = interleaver.h; path = ../../audiographer/general/interleaver.h; sourceTree = "<group>"; };
+		435E66911A4AB64B00472D50 /* normalizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = normalizer.h; path = ../../audiographer/general/normalizer.h; sourceTree = "<group>"; };
+		435E66921A4AB64B00472D50 /* peak_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = peak_reader.h; path = ../../audiographer/general/peak_reader.h; sourceTree = "<group>"; };
+		435E66931A4AB64B00472D50 /* sample_format_converter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sample_format_converter.h; path = ../../audiographer/general/sample_format_converter.h; sourceTree = "<group>"; };
+		435E66941A4AB64B00472D50 /* silence_trimmer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = silence_trimmer.h; path = ../../audiographer/general/silence_trimmer.h; sourceTree = "<group>"; };
+		435E66951A4AB64B00472D50 /* sr_converter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sr_converter.h; path = ../../audiographer/general/sr_converter.h; sourceTree = "<group>"; };
+		435E66961A4AB64B00472D50 /* threader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = threader.h; path = ../../audiographer/general/threader.h; sourceTree = "<group>"; };
+		435E66981A4AB66B00472D50 /* sndfile_base.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sndfile_base.h; path = ../../audiographer/sndfile/sndfile_base.h; sourceTree = "<group>"; };
+		435E66991A4AB66B00472D50 /* sndfile_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sndfile_reader.h; path = ../../audiographer/sndfile/sndfile_reader.h; sourceTree = "<group>"; };
+		435E669A1A4AB66B00472D50 /* sndfile_writer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sndfile_writer.h; path = ../../audiographer/sndfile/sndfile_writer.h; sourceTree = "<group>"; };
+		435E669B1A4AB66B00472D50 /* sndfile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sndfile.h; path = ../../audiographer/sndfile/sndfile.h; sourceTree = "<group>"; };
+		435E669C1A4AB66B00472D50 /* tmp_file.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tmp_file.h; path = ../../audiographer/sndfile/tmp_file.h; sourceTree = "<group>"; };
+		435E669D1A4AB67A00472D50 /* identity_vertex.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = identity_vertex.h; path = ../../audiographer/utils/identity_vertex.h; sourceTree = "<group>"; };
+		435E669E1A4AB67A00472D50 /* listed_source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = listed_source.h; path = ../../audiographer/utils/listed_source.h; sourceTree = "<group>"; };
+		435E669F1A4AB69E00472D50 /* debug_utils.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = debug_utils.cc; path = ../../src/debug_utils.cc; sourceTree = "<group>"; };
+		435E66A01A4AB69E00472D50 /* routines.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = routines.cc; path = ../../src/routines.cc; sourceTree = "<group>"; };
+		435E66A11A4AB6A800472D50 /* broadcast_info.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = broadcast_info.cc; path = ../../src/general/broadcast_info.cc; sourceTree = "<group>"; };
+		435E66A21A4AB6A800472D50 /* normalizer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = normalizer.cc; path = ../../src/general/normalizer.cc; sourceTree = "<group>"; };
+		435E66A31A4AB6A800472D50 /* sample_format_converter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sample_format_converter.cc; path = ../../src/general/sample_format_converter.cc; sourceTree = "<group>"; };
+		435E66A41A4AB6A800472D50 /* sr_converter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sr_converter.cc; path = ../../src/general/sr_converter.cc; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+		435E66711A4AB60C00472D50 = {
+			isa = PBXGroup;
+			children = (
+				435E667F1A4AB61C00472D50 /* headers */,
+				435E667E1A4AB61400472D50 /* src */,
+			);
+			sourceTree = "<group>";
+		};
+		435E667E1A4AB61400472D50 /* src */ = {
+			isa = PBXGroup;
+			children = (
+				435E66A11A4AB6A800472D50 /* broadcast_info.cc */,
+				435E66A21A4AB6A800472D50 /* normalizer.cc */,
+				435E66A31A4AB6A800472D50 /* sample_format_converter.cc */,
+				435E66A41A4AB6A800472D50 /* sr_converter.cc */,
+				435E669F1A4AB69E00472D50 /* debug_utils.cc */,
+				435E66A01A4AB69E00472D50 /* routines.cc */,
+			);
+			name = src;
+			sourceTree = "<group>";
+		};
+		435E667F1A4AB61C00472D50 /* headers */ = {
+			isa = PBXGroup;
+			children = (
+				435E66971A4AB65700472D50 /* SND */,
+				435E668E1A4AB64B00472D50 /* chunker.h */,
+				435E668F1A4AB64B00472D50 /* deinterleaver.h */,
+				435E66901A4AB64B00472D50 /* interleaver.h */,
+				435E669D1A4AB67A00472D50 /* identity_vertex.h */,
+				435E669E1A4AB67A00472D50 /* listed_source.h */,
+				435E66911A4AB64B00472D50 /* normalizer.h */,
+				435E66921A4AB64B00472D50 /* peak_reader.h */,
+				435E66931A4AB64B00472D50 /* sample_format_converter.h */,
+				435E66941A4AB64B00472D50 /* silence_trimmer.h */,
+				435E66951A4AB64B00472D50 /* sr_converter.h */,
+				435E66961A4AB64B00472D50 /* threader.h */,
+				435E66801A4AB63D00472D50 /* broadcast_info.h */,
+				435E66811A4AB63D00472D50 /* debug_utils.h */,
+				435E66821A4AB63D00472D50 /* debuggable.h */,
+				435E66831A4AB63D00472D50 /* exception.h */,
+				435E66841A4AB63D00472D50 /* flag_debuggable.h */,
+				435E66851A4AB63D00472D50 /* flag_field.h */,
+				435E66861A4AB63D00472D50 /* process_context.h */,
+				435E66871A4AB63D00472D50 /* routines.h */,
+				435E66881A4AB63D00472D50 /* sink.h */,
+				435E66891A4AB63D00472D50 /* source.h */,
+				435E668A1A4AB63D00472D50 /* throwing.h */,
+				435E668B1A4AB63D00472D50 /* type_utils.h */,
+				435E668C1A4AB63D00472D50 /* types.h */,
+				435E668D1A4AB63D00472D50 /* visibility.h */,
+			);
+			name = headers;
+			sourceTree = "<group>";
+		};
+		435E66971A4AB65700472D50 /* SND */ = {
+			isa = PBXGroup;
+			children = (
+				435E66981A4AB66B00472D50 /* sndfile_base.h */,
+				435E66991A4AB66B00472D50 /* sndfile_reader.h */,
+				435E669A1A4AB66B00472D50 /* sndfile_writer.h */,
+				435E669B1A4AB66B00472D50 /* sndfile.h */,
+				435E669C1A4AB66B00472D50 /* tmp_file.h */,
+			);
+			name = SND;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+		435E66721A4AB60C00472D50 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0610;
+			};
+			buildConfigurationList = 435E66751A4AB60C00472D50 /* Build configuration list for PBXProject "audiographer" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 435E66711A4AB60C00472D50;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+			);
+		};
+/* End PBXProject section */
+
+/* Begin XCBuildConfiguration section */
+		435E66761A4AB60C00472D50 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Debug;
+		};
+		435E66771A4AB60C00472D50 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		435E66751A4AB60C00472D50 /* Build configuration list for PBXProject "audiographer" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				435E66761A4AB60C00472D50 /* Debug */,
+				435E66771A4AB60C00472D50 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 435E66721A4AB60C00472D50 /* Project object */;
+}
diff --git a/libs/audiographer/wscript b/libs/audiographer/wscript
index 2fe2739..d3efbf5 100644
--- a/libs/audiographer/wscript
+++ b/libs/audiographer/wscript
@@ -70,7 +70,7 @@ def build(bld):
         # macros for this shared library
         audiographer.defines      = [ 'LIBAUDIOGRAPHER_DLL_EXPORTS=1' ]
     else:
-        audiographer              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=libardour_sources)
+        audiographer              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=audiographer_sources)
         audiographer.cxxflags     = [ '-fPIC' ]
         audiographer.cflags       = [ '-fPIC' ]
         audiographer.defines      = []
diff --git a/libs/backends/MSVCbackends/portaudio_audiobackend.vcproj b/libs/backends/MSVCbackends/portaudio_audiobackend.vcproj
index 610891a..2120a32 100644
--- a/libs/backends/MSVCbackends/portaudio_audiobackend.vcproj
+++ b/libs/backends/MSVCbackends/portaudio_audiobackend.vcproj
@@ -42,7 +42,7 @@
 				AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
 				Optimization="0"
 				AdditionalIncludeDirectories="..;..\portaudio;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\..;..\..\..\..\support\MB3Portaudio\include"
-				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_PORTAUDIO_BACKEND;WITH_ASIO;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
 				MinimalRebuild="true"
 				RuntimeLibrary="3"
 				WarningLevel="3"
@@ -124,7 +124,7 @@
 				Optimization="2"
 				InlineFunctionExpansion="1"
 				AdditionalIncludeDirectories="..;..\portaudio;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\..;..\..\..\..\support\MB3Portaudio\include"
-				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_PORTAUDIO_BACKEND;WITH_ASIO;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
 				StringPooling="false"
 				RuntimeLibrary="2"
 				EnableEnhancedInstructionSet="1"
@@ -206,7 +206,7 @@
 				AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
 				Optimization="0"
 				AdditionalIncludeDirectories="..;..\portaudio;..\..\ardour;..\..\pbd;..\..\timecode;..\..\evoral;"..\..\midi++2";"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include";"$(GenericIncludeFolder)\libsndfile";"$(GenericIncludeFolder)\gtk-2.0";"$(GenericIncludeFolder)\cairo";"$(GenericIncludeFolder)\freetype2";"$(GenericIncludeFolder)\pango-1.0";"$(GenericIncludeFolder)\gtk-2.0\gdk";"$(GenericIncludeFolder)\atk-2.0";"$(GenericIncludeFolder)\lrdf";"$(GenericIncludeFolder)\raptor";"$(GenericIncludeFolder)\boost";..\..;..\..\..\..\support\MB3Portaudio\include"
-				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_PORTAUDIO_BACKEND;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_PORTAUDIO_BACKEND;WITH_ASIO;ARDOURBACKEND_DLL_EXPORTS;RUBBERBAND_IS_IN_WIN_STATIC_LIB;USE_CAIRO_IMAGE_SURFACE;NOMINMAX;NO_POSIX_MEMALIGN;INCLUDE_ARDOUR_MISCELLANEOUS=1;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;GNU_WIN32;WIN32;_WIN32;_WINDOWS;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";PACKAGE="\"libardour_portaudio\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_PORTAUDIO=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
 				StringPooling="false"
 				RuntimeLibrary="2"
 				EnableEnhancedInstructionSet="1"
@@ -269,6 +269,14 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			<File
+				RelativePath="..\portaudio\midi_util.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\mmcss.cc"
+				>
+			</File>
+			<File
 				RelativePath="..\portaudio\portaudio_backend.cc"
 				>
 			</File>
@@ -276,6 +284,22 @@
 				RelativePath="..\portaudio\portaudio_io.cc"
 				>
 			</File>
+			<File
+				RelativePath="..\portaudio\win_utils.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\winmmemidi_input_device.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\winmmemidi_io.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\winmmemidi_output_device.cc"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="Header Files"
@@ -283,6 +307,22 @@
 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
 			>
 			<File
+				RelativePath="..\portaudio\cycle_timer.h"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\debug.h"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\midi_util.h"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\mmcss.h"
+				>
+			</File>
+			<File
 				RelativePath="..\portaudio\portaudio_backend.h"
 				>
 			</File>
@@ -294,6 +334,22 @@
 				RelativePath="..\portaudio\rt_thread.h"
 				>
 			</File>
+			<File
+				RelativePath="..\portaudio\win_utils.h"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\winmmemidi_input_device.h"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\winmmemidi_io.h"
+				>
+			</File>
+			<File
+				RelativePath="..\portaudio\winmmemidi_output_device.h"
+				>
+			</File>
 		</Filter>
 		<Filter
 			Name="Resource Files"
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc
index ab6c029..9e81170 100644
--- a/libs/backends/alsa/alsa_audiobackend.cc
+++ b/libs/backends/alsa/alsa_audiobackend.cc
@@ -44,6 +44,9 @@ std::vector<AudioBackend::DeviceStatus> AlsaAudioBackend::_output_audio_device_s
 std::vector<AudioBackend::DeviceStatus> AlsaAudioBackend::_duplex_audio_device_status;
 std::vector<AudioBackend::DeviceStatus> AlsaAudioBackend::_midi_device_status;
 
+ALSADeviceInfo AlsaAudioBackend::_input_audio_device_info;
+ALSADeviceInfo AlsaAudioBackend::_output_audio_device_info;
+
 AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info)
 	: AudioBackend (e, info)
 	, _pcmi (0)
@@ -70,6 +73,8 @@ AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info)
 {
 	_instance_name = s_instance_name;
 	pthread_mutex_init (&_port_callback_mutex, 0);
+	_input_audio_device_info.valid = false;
+	_output_audio_device_info.valid = false;
 }
 
 AlsaAudioBackend::~AlsaAudioBackend ()
@@ -211,47 +216,118 @@ AlsaAudioBackend::acquire_device(const char* device_name)
 }
 
 std::vector<float>
-AlsaAudioBackend::available_sample_rates (const std::string&) const
+AlsaAudioBackend::available_sample_rates2 (const std::string& input_device, const std::string& output_device) const
 {
 	std::vector<float> sr;
-	sr.push_back (8000.0);
-	sr.push_back (22050.0);
-	sr.push_back (24000.0);
-	sr.push_back (44100.0);
-	sr.push_back (48000.0);
-	sr.push_back (88200.0);
-	sr.push_back (96000.0);
-	sr.push_back (176400.0);
-	sr.push_back (192000.0);
+	if (input_device == _("None") && output_device == _("None")) {
+		return sr;
+	}
+	else if (input_device == _("None")) {
+		sr = available_sample_rates (output_device);
+	}
+	else if (output_device == _("None")) {
+		sr = available_sample_rates (input_device);
+	} else {
+		std::vector<float> sr_in =  available_sample_rates (input_device);
+		std::vector<float> sr_out = available_sample_rates (output_device);
+		std::set_intersection (sr_in.begin(), sr_in.end(), sr_out.begin(), sr_out.end(), std::back_inserter(sr));
+	}
+	return sr;
+}
+
+std::vector<float>
+AlsaAudioBackend::available_sample_rates (const std::string& device) const
+{
+	ALSADeviceInfo *nfo = NULL;
+	std::vector<float> sr;
+	if (device == _("None")) {
+		return sr;
+	}
+	if (device == _input_audio_device && _input_audio_device_info.valid) {
+		nfo = &_input_audio_device_info;
+	}
+	else if (device == _output_audio_device && _output_audio_device_info.valid) {
+		nfo = &_output_audio_device_info;
+	}
+
+	static const float avail_rates [] = { 8000, 22050.0, 24000.0, 44100.0, 48000.0, 88200.0, 96000.0, 176400.0, 192000.0 };
+
+	for (size_t i = 0 ; i < sizeof(avail_rates) / sizeof(float); ++i) {
+		if (!nfo || (avail_rates[i] >= nfo->min_rate && avail_rates[i] <= nfo->max_rate)) {
+			sr.push_back (avail_rates[i]);
+		}
+	}
+
 	return sr;
 }
 
 std::vector<uint32_t>
-AlsaAudioBackend::available_buffer_sizes (const std::string&) const
+AlsaAudioBackend::available_buffer_sizes2 (const std::string& input_device, const std::string& output_device) const
 {
 	std::vector<uint32_t> bs;
-	bs.push_back (32);
-	bs.push_back (64);
-	bs.push_back (128);
-	bs.push_back (256);
-	bs.push_back (512);
-	bs.push_back (1024);
-	bs.push_back (2048);
-	bs.push_back (4096);
-	bs.push_back (8192);
+	if (input_device == _("None") && output_device == _("None")) {
+		return bs;
+	}
+	else if (input_device == _("None")) {
+		bs = available_buffer_sizes (output_device);
+	}
+	else if (output_device == _("None")) {
+		bs = available_buffer_sizes (input_device);
+	} else {
+		std::vector<uint32_t> bs_in =  available_buffer_sizes (input_device);
+		std::vector<uint32_t> bs_out = available_buffer_sizes (output_device);
+		std::set_intersection (bs_in.begin(), bs_in.end(), bs_out.begin(), bs_out.end(), std::back_inserter(bs));
+	}
+	return bs;
+}
+
+std::vector<uint32_t>
+AlsaAudioBackend::available_buffer_sizes (const std::string& device) const
+{
+	ALSADeviceInfo *nfo = NULL;
+	std::vector<uint32_t> bs;
+	if (device == _("None")) {
+		return bs;
+	}
+	if (device == _input_audio_device && _input_audio_device_info.valid) {
+		nfo = &_input_audio_device_info;
+	}
+	else if (device == _output_audio_device && _output_audio_device_info.valid) {
+		nfo = &_output_audio_device_info;
+	}
+
+	static const unsigned long avail_sizes [] = { 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
+
+	for (size_t i = 0 ; i < sizeof(avail_sizes) / sizeof(unsigned long); ++i) {
+		if (!nfo || (avail_sizes[i] >= nfo->min_size && avail_sizes[i] <= nfo->max_size)) {
+			bs.push_back (avail_sizes[i]);
+		}
+	}
 	return bs;
 }
 
 uint32_t
-AlsaAudioBackend::available_input_channel_count (const std::string&) const
+AlsaAudioBackend::available_input_channel_count (const std::string& device) const
 {
-	return 128; // TODO query current device
+	if (device == _("None")) {
+		return 0;
+	}
+	if (device == _input_audio_device && _input_audio_device_info.valid) {
+		return _input_audio_device_info.max_channels;
+	}
+	return 128;
 }
 
 uint32_t
-AlsaAudioBackend::available_output_channel_count (const std::string&) const
+AlsaAudioBackend::available_output_channel_count (const std::string& device) const
 {
-	return 128; // TODO query current device
+	if (device == _("None")) {
+		return 0;
+	}
+	if (device == _output_audio_device && _output_audio_device_info.valid) {
+		return _output_audio_device_info.max_channels;
+	}
+	return 128;
 }
 
 bool
@@ -269,14 +345,62 @@ AlsaAudioBackend::can_change_buffer_size_when_running () const
 int
 AlsaAudioBackend::set_input_device_name (const std::string& d)
 {
+	if (_input_audio_device == d) {
+		return 0;
+	}
 	_input_audio_device = d;
+
+	if (d == _("None")) {
+		_input_audio_device_info.valid = false;
+		return 0;
+	}
+	std::string alsa_device;
+	std::map<std::string, std::string> devices;
+
+	get_alsa_audio_device_names(devices, HalfDuplexIn);
+	for (std::map<std::string, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
+		if (i->first == d) {
+			alsa_device = i->second;
+			break;
+		}
+	}
+	if (alsa_device == "") {
+		_input_audio_device_info.valid = false;
+		return 1;
+	}
+	/* device will be busy once used, hence cache the parameters */
+	/* return */ get_alsa_device_parameters (alsa_device.c_str(), true, &_input_audio_device_info);
 	return 0;
 }
 
 int
 AlsaAudioBackend::set_output_device_name (const std::string& d)
 {
+	if (_output_audio_device == d) {
+		return 0;
+	}
+
 	_output_audio_device = d;
+
+	if (d == _("None")) {
+		_output_audio_device_info.valid = false;
+		return 0;
+	}
+	std::string alsa_device;
+	std::map<std::string, std::string> devices;
+
+	get_alsa_audio_device_names(devices, HalfDuplexOut);
+	for (std::map<std::string, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
+		if (i->first == d) {
+			alsa_device = i->second;
+			break;
+		}
+	}
+	if (alsa_device == "") {
+		_output_audio_device_info.valid = false;
+		return 1;
+	}
+	/* return */ get_alsa_device_parameters (alsa_device.c_str(), true, &_output_audio_device_info);
 	return 0;
 }
 
diff --git a/libs/backends/alsa/alsa_audiobackend.h b/libs/backends/alsa/alsa_audiobackend.h
index 49066e3..e604fe0 100644
--- a/libs/backends/alsa/alsa_audiobackend.h
+++ b/libs/backends/alsa/alsa_audiobackend.h
@@ -34,6 +34,8 @@
 #include "ardour/system_exec.h"
 #include "ardour/types.h"
 
+#include "ardouralsautil/deviceinfo.h"
+
 #include "zita-alsa-pcmi.h"
 #include "alsa_rawmidi.h"
 #include "alsa_sequencer.h"
@@ -169,7 +171,9 @@ class AlsaAudioBackend : public AudioBackend {
 		std::vector<DeviceStatus> enumerate_input_devices () const;
 		std::vector<DeviceStatus> enumerate_output_devices () const;
 		std::vector<float> available_sample_rates (const std::string& device) const;
+		std::vector<float> available_sample_rates2 (const std::string&, const std::string&) const;
 		std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
+		std::vector<uint32_t> available_buffer_sizes2 (const std::string&, const std::string&) const;
 		uint32_t available_input_channel_count (const std::string& device) const;
 		uint32_t available_output_channel_count (const std::string& device) const;
 
@@ -319,6 +323,8 @@ class AlsaAudioBackend : public AudioBackend {
 		static std::vector<AudioBackend::DeviceStatus> _output_audio_device_status;
 		static std::vector<AudioBackend::DeviceStatus> _duplex_audio_device_status;
 		static std::vector<AudioBackend::DeviceStatus> _midi_device_status;
+		static ARDOUR::ALSADeviceInfo _input_audio_device_info;
+		static ARDOUR::ALSADeviceInfo _output_audio_device_info;
 
 		mutable std::string _input_audio_device;
 		mutable std::string _output_audio_device;
diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc
index 09bab52..4e01a26 100644
--- a/libs/backends/coreaudio/coreaudio_backend.cc
+++ b/libs/backends/coreaudio/coreaudio_backend.cc
@@ -17,6 +17,21 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+
+/* use an additional midi message parser
+ *
+ * coreaudio does packetize midi. every packet includes a timestamp.
+ * With any real midi-device with a phyical layer
+ * 1 packet = 1 event (no concurrent events are possible on a cable)
+ *
+ * Howver, some USB-midi keyboards manage to send concurrent events
+ * which end up in the same packet (eg. 6 byte message: 2 note-on).
+ *
+ * An additional parser is needed to separate them
+ */
+#define USE_MIDI_PARSER
+
+
 #include <regex.h>
 #include <sys/mman.h>
 #include <sys/time.h>
@@ -104,6 +119,13 @@ CoreAudioBackend::CoreAudioBackend (AudioEngine& e, AudioBackendInfo& info)
 	, _dsp_load (0)
 	, _processed_samples (0)
 	, _port_change_flag (false)
+#ifdef USE_MIDI_PARSER
+	, _unbuffered_bytes(0)
+	, _total_bytes(0)
+	, _expected_bytes(0)
+	, _status_byte(0)
+	, _parser_bytes(0)
+#endif
 {
 	_instance_name = s_instance_name;
 	pthread_mutex_init (&_port_callback_mutex, 0);
@@ -189,27 +211,36 @@ CoreAudioBackend::enumerate_output_devices () const
 }
 
 std::vector<float>
-CoreAudioBackend::available_sample_rates (const std::string&) const
+CoreAudioBackend::available_sample_rates (const std::string& device) const
+{
+	std::vector<float> sr;
+	_pcmio->available_sample_rates (name_to_id (device), sr);
+	return sr;
+}
+
+std::vector<float>
+CoreAudioBackend::available_sample_rates2 (const std::string& input_device, const std::string& output_device) const
 {
 	std::vector<float> sr;
 	std::vector<float> sr_in;
 	std::vector<float> sr_out;
 
-	const uint32_t inp = name_to_id(_input_audio_device);
-	const uint32_t out = name_to_id(_output_audio_device);
+	const uint32_t inp = name_to_id (input_device);
+	const uint32_t out = name_to_id (output_device);
+
 	if (inp == UINT32_MAX && out == UINT32_MAX) {
 		return sr;
 	} else if (inp == UINT32_MAX) {
-		_pcmio->available_sample_rates(out, sr_out);
+		_pcmio->available_sample_rates (out, sr_out);
 		return sr_out;
 	} else if (out == UINT32_MAX) {
-		_pcmio->available_sample_rates(inp, sr_in);
+		_pcmio->available_sample_rates (inp, sr_in);
 		return sr_in;
 	} else {
-		_pcmio->available_sample_rates(inp, sr_in);
-		_pcmio->available_sample_rates(out, sr_out);
+		_pcmio->available_sample_rates (inp, sr_in);
+		_pcmio->available_sample_rates (out, sr_out);
 		// TODO allow to use different SR per device, tweak aggregate
-		std::set_intersection(sr_in.begin(), sr_in.end(), sr_out.begin(), sr_out.end(), std::back_inserter(sr));
+		std::set_intersection (sr_in.begin(), sr_in.end(), sr_out.begin(), sr_out.end(), std::back_inserter(sr));
 		return sr;
 	}
 }
@@ -218,10 +249,34 @@ std::vector<uint32_t>
 CoreAudioBackend::available_buffer_sizes (const std::string& device) const
 {
 	std::vector<uint32_t> bs;
-	_pcmio->available_buffer_sizes(name_to_id(device), bs);
+	_pcmio->available_buffer_sizes (name_to_id (device), bs);
 	return bs;
 }
 
+std::vector<uint32_t>
+CoreAudioBackend::available_buffer_sizes2 (const std::string& input_device, const std::string& output_device) const
+{
+	std::vector<uint32_t> bs;
+	std::vector<uint32_t> bs_in;
+	std::vector<uint32_t> bs_out;
+	const uint32_t inp = name_to_id (input_device);
+	const uint32_t out = name_to_id (output_device);
+	if (inp == UINT32_MAX && out == UINT32_MAX) {
+		return bs;
+	} else if (inp == UINT32_MAX) {
+		_pcmio->available_buffer_sizes (out, bs_out);
+		return bs_out;
+	} else if (out == UINT32_MAX) {
+		_pcmio->available_buffer_sizes (inp, bs_in);
+		return bs_in;
+	} else {
+		_pcmio->available_buffer_sizes (inp, bs_in);
+		_pcmio->available_buffer_sizes (out, bs_out);
+		std::set_intersection (bs_in.begin(), bs_in.end(), bs_out.begin(), bs_out.end(), std::back_inserter(bs));
+		return bs;
+	}
+}
+
 uint32_t
 CoreAudioBackend::available_input_channel_count (const std::string&) const
 {
@@ -277,7 +332,7 @@ CoreAudioBackend::set_output_device_name (const std::string& d)
 int
 CoreAudioBackend::set_sample_rate (float sr)
 {
-	std::vector<float> srs = available_sample_rates (/* really ignored */_input_audio_device);
+	std::vector<float> srs = available_sample_rates2 (_input_audio_device, _output_audio_device);
 	if (std::find(srs.begin(), srs.end(), sr) == srs.end()) {
 		return -1;
 	}
@@ -425,7 +480,12 @@ CoreAudioBackend::midi_option () const
 void
 CoreAudioBackend::launch_control_app ()
 {
-    _pcmio->launch_control_app(name_to_id(_input_audio_device));
+	if (name_to_id (_input_audio_device) != UINT32_MAX) {
+		_pcmio->launch_control_app(name_to_id(_input_audio_device));
+	}
+	if (name_to_id (_output_audio_device) != UINT32_MAX) {
+		_pcmio->launch_control_app(name_to_id(_output_audio_device));
+	}
 }
 
 /* State Control */
@@ -1559,6 +1619,100 @@ CoreAudioBackend::freewheel_thread ()
 	return 0;
 }
 
+#ifdef USE_MIDI_PARSER
+bool
+CoreAudioBackend::midi_process_byte (const uint8_t byte)
+{
+	if (byte >= 0xf8) {
+		// Realtime
+		if (byte == 0xfd) {
+			// undefined
+			return false;
+		}
+		midi_prepare_byte_event (byte);
+		return true;
+	}
+	if (byte == 0xf7) {
+		// Sysex end
+		if (_status_byte == 0xf0) {
+			midi_record_byte (byte);
+			return midi_prepare_buffered_event ();
+		}
+		_total_bytes = 0;
+		_unbuffered_bytes = 0;
+		_expected_bytes = 0;
+		_status_byte = 0;
+		return false;
+	}
+	if (byte >= 0x80) {
+		// Non-realtime status byte
+		if (_total_bytes) {
+			_total_bytes = 0;
+			_unbuffered_bytes = 0;
+		}
+		_status_byte = byte;
+		switch (byte & 0xf0) {
+			case 0x80:
+			case 0x90:
+			case 0xa0:
+			case 0xb0:
+			case 0xe0:
+				// Note On, Note Off, Aftertouch, Control Change, Pitch Wheel
+				_expected_bytes = 3;
+				break;
+			case 0xc0:
+			case 0xd0:
+				// Program Change, Channel Pressure
+				_expected_bytes = 2;
+				break;
+			case 0xf0:
+				switch (byte) {
+					case 0xf0:
+						// Sysex
+						_expected_bytes = 0;
+						break;
+					case 0xf1:
+					case 0xf3:
+						// MTC Quarter Frame, Song Select
+						_expected_bytes = 2;
+						break;
+					case 0xf2:
+						// Song Position
+						_expected_bytes = 3;
+						break;
+					case 0xf4:
+					case 0xf5:
+						// Undefined
+						_expected_bytes = 0;
+						_status_byte = 0;
+						return false;
+					case 0xf6:
+						// Tune Request
+						midi_prepare_byte_event (byte);
+						_expected_bytes = 0;
+						_status_byte = 0;
+						return true;
+				}
+		}
+		midi_record_byte (byte);
+		return false;
+	}
+	// Data byte
+	if (! _status_byte) {
+		// Data bytes without a status will be discarded.
+		_total_bytes++;
+		_unbuffered_bytes++;
+		return false;
+	}
+	if (! _total_bytes) {
+		midi_record_byte (_status_byte);
+	}
+	midi_record_byte(byte);
+	return (_total_bytes == _expected_bytes) ? midi_prepare_buffered_event() : false;
+}
+#endif
+
+
 int
 CoreAudioBackend::process_callback (const uint32_t n_samples, const uint64_t host_time)
 {
@@ -1614,7 +1768,29 @@ CoreAudioBackend::process_callback (const uint32_t n_samples, const uint64_t hos
 		while (_midiio->recv_event (i, nominal_time, time_ns, data, size)) {
 			pframes_t time = floor((float) time_ns * _samplerate * 1e-9);
 			assert (time < n_samples);
+#ifndef USE_MIDI_PARSER
 			midi_event_put((void*)mbuf, time, data, size);
+#else
+			assert (size < 128);// coremidi limit per packet
+			bool first_time = true; // this would need to be rememberd per port.
+			for (size_t mb = 0; mb < size; ++mb) {
+				if (first_time && !(data[mb] & 0x80)) {
+					/* expect a status byte at the beginning or every Packet.
+					 *
+					 * This parser drops messages spanning multiple packets
+					 * (sysex > 127 bytes).
+					 * see also libs/backends/alsa/alsa_rawmidi.cc
+					 * which implements a complete parser per port without this limit.
+					 */
+					continue;
+				}
+				first_time = false;
+
+				if (midi_process_byte (data[mb])) {
+					midi_event_put ((void*)mbuf, time, _parser_buffer, _parser_bytes);
+				}
+			}
+#endif
 			size = sizeof(data);
 		}
 	}
diff --git a/libs/backends/coreaudio/coreaudio_backend.h b/libs/backends/coreaudio/coreaudio_backend.h
index 3300fc4..55aaf47 100644
--- a/libs/backends/coreaudio/coreaudio_backend.h
+++ b/libs/backends/coreaudio/coreaudio_backend.h
@@ -171,7 +171,9 @@ class CoreAudioBackend : public AudioBackend {
 		std::vector<DeviceStatus> enumerate_output_devices () const;
 
 		std::vector<float> available_sample_rates (const std::string& device) const;
+		std::vector<float> available_sample_rates2 (const std::string&, const std::string&) const;
 		std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
+		std::vector<uint32_t> available_buffer_sizes2 (const std::string&, const std::string&) const;
 		uint32_t available_input_channel_count (const std::string& device) const;
 		uint32_t available_output_channel_count (const std::string& device) const;
 
@@ -445,6 +447,46 @@ class CoreAudioBackend : public AudioBackend {
 			return NULL;
 		}
 
+#ifdef USE_MIDI_PARSER
+
+		bool midi_process_byte (const uint8_t);
+
+		void midi_record_byte (uint8_t byte) {
+			if (_total_bytes < sizeof (_parser_buffer)) {
+				_parser_buffer[_total_bytes] = byte;
+			} else {
+				++_unbuffered_bytes;
+			}
+			++_total_bytes;
+		}
+
+		void midi_prepare_byte_event (const uint8_t byte) {
+			_parser_buffer[0] = byte;
+			_parser_bytes = 1;
+		}
+
+		bool midi_prepare_buffered_event () {
+			const bool result = _unbuffered_bytes == 0;
+			if (result) {
+				_parser_bytes = _total_bytes;
+			}
+			_total_bytes = 0;
+			_unbuffered_bytes = 0;
+			if (_status_byte >= 0xf0) {
+				_expected_bytes = 0;
+				_status_byte = 0;
+			}
+			return result;
+		}
+
+		size_t  _unbuffered_bytes;
+		size_t  _total_bytes;
+		size_t  _expected_bytes;
+		uint8_t _status_byte;
+		uint8_t _parser_buffer[128];
+		uint8_t _parser_bytes;
+#endif
+
 }; // class CoreAudioBackend
 
 } // namespace
diff --git a/libs/backends/coreaudio/coreaudio_pcmio.cc b/libs/backends/coreaudio/coreaudio_pcmio.cc
index b6105c9..5be717b 100644
--- a/libs/backends/coreaudio/coreaudio_pcmio.cc
+++ b/libs/backends/coreaudio/coreaudio_pcmio.cc
@@ -82,7 +82,7 @@ static OSStatus GetHardwarePropertyWrapper (AudioDevicePropertyID prop, UInt32*
 	property_address.mElement = kAudioObjectPropertyElementMaster;
 	return AudioObjectGetPropertyData(kAudioObjectSystemObject, &property_address, 0, NULL, size, d);
 #else
-	return AudioHardwareGetProperty (kAudioHardwarePropertyDevices, size, d);
+	return AudioHardwareGetProperty (prop, size, d);
 #endif
 }
 
@@ -822,12 +822,21 @@ CoreAudioPCM::pcm_start (
 	AudioDeviceID device_id;
 	AudioStreamBasicDescription srcFormat, dstFormat;
 
+#ifndef COREAUDIO_108
+	ComponentDescription cd = {kAudioUnitType_Output, kAudioUnitSubType_HALOutput, kAudioUnitManufacturer_Apple, 0, 0};
+	Component HALOutput = FindNextComponent(NULL, &cd);
+	if (!HALOutput) { errorMsg="FindNextComponent"; goto error; }
+
+	err = OpenAComponent(HALOutput, &_auhal);
+	if (err != noErr) { errorMsg="OpenAComponent"; goto error; }
+#else
 	AudioComponentDescription cd = {kAudioUnitType_Output, kAudioUnitSubType_HALOutput, kAudioUnitManufacturer_Apple, 0, 0};
 	AudioComponent HALOutput = AudioComponentFindNext(NULL, &cd);
 	if (!HALOutput) { errorMsg="AudioComponentFindNext"; goto error; }
 
 	err = AudioComponentInstanceNew(HALOutput, &_auhal);
 	if (err != noErr) { errorMsg="AudioComponentInstanceNew"; goto error; }
+#endif
 
 	err = AudioUnitInitialize(_auhal);
 	if (err != noErr) { errorMsg="AudioUnitInitialize"; goto error; }
diff --git a/libs/backends/coreaudio/coremidi_io.cc b/libs/backends/coreaudio/coremidi_io.cc
index 0cef589..a64fade 100644
--- a/libs/backends/coreaudio/coremidi_io.cc
+++ b/libs/backends/coreaudio/coremidi_io.cc
@@ -24,28 +24,71 @@
 
 using namespace ARDOUR;
 
+#ifndef NDEBUG
+static int _debug_mode = 0;
+#endif
+
 static void notifyProc (const MIDINotification *message, void *refCon) {
 	CoreMidiIo *self = static_cast<CoreMidiIo*>(refCon);
 	self->notify_proc(message);
 }
 
+#ifndef NDEBUG
+static void print_packet (const MIDIPacket *p) {
+	fprintf (stderr, "CoreMIDI: Packet %d bytes [ ", p->length);
+	for (int bb = 0; bb < p->length; ++bb) {
+		fprintf (stderr, "%02x ", ((uint8_t*)p->data)[bb]);
+	}
+	fprintf (stderr, "]\n");
+}
+
+static void dump_packet_list (const UInt32 numPackets, MIDIPacket const *p) {
+	for (UInt32 i = 0; i < numPackets; ++i) {
+		print_packet (p);
+		p = MIDIPacketNext (p);
+	}
+}
+#endif
+
 static void midiInputCallback(const MIDIPacketList *list, void *procRef, void *srcRef) {
 	CoreMidiIo *self = static_cast<CoreMidiIo*> (procRef);
 	if (!self || !self->enabled()) {
 		// skip while freewheeling
+#ifndef NDEBUG
+		if (_debug_mode & 2) {
+			fprintf (stderr, "Ignored Midi Packet while freewheeling:\n");
+			dump_packet_list (list->numPackets, &list->packet[0]);
+		}
+#endif
 		return;
 	}
 	RingBuffer<uint8_t> * rb  = static_cast<RingBuffer < uint8_t > *> (srcRef);
-	if (!rb) return;
+	if (!rb) {
+#ifndef NDEBUG
+		if (_debug_mode & 4) {
+			fprintf (stderr, "Ignored Midi Packet - no ringbuffer:\n");
+			dump_packet_list (list->numPackets, &list->packet[0]);
+		}
+#endif
+		return;
+	}
 	MIDIPacket const *p = &list->packet[0];
 	for (UInt32 i = 0; i < list->numPackets; ++i) {
 		uint32_t len = ((p->length + 3)&~3) + sizeof(MIDITimeStamp) + sizeof(UInt16);
-		if (rb->write_space() < sizeof(uint32_t) + len) {
-			fprintf(stderr, "CoreMIDI: dropped MIDI event\n");
-			continue;
+#ifndef NDEBUG
+		if (_debug_mode & 1) {
+			print_packet (p);
 		}
-		rb->write ((uint8_t*)&len, sizeof(uint32_t));
-		rb->write ((uint8_t*)p, len);
+#endif
+		if (rb->write_space() > sizeof(uint32_t) + len) {
+			rb->write ((uint8_t*)&len, sizeof(uint32_t));
+			rb->write ((uint8_t*)p, len);
+		}
+#ifndef NDEBUG
+		else {
+			fprintf (stderr, "CoreMIDI: dropped MIDI event\n");
+		}
+#endif
 		p = MIDIPacketNext (p);
 	}
 }
@@ -88,6 +131,11 @@ CoreMidiIo::CoreMidiIo()
 	, _changed_arg (0)
 {
 	pthread_mutex_init (&_discovery_lock, 0);
+
+#ifndef NDEBUG
+	const char *p = getenv ("COREMIDIDEBUG");
+	if (p && *p) _debug_mode = atoi (p);
+#endif
 }
 
 CoreMidiIo::~CoreMidiIo()
diff --git a/libs/backends/coreaudio/wscript b/libs/backends/coreaudio/wscript
index 75bed91..9aad9cd 100644
--- a/libs/backends/coreaudio/wscript
+++ b/libs/backends/coreaudio/wscript
@@ -30,7 +30,7 @@ def build(bld):
     obj.target   = 'coreaudio_backend'
     obj.use      = 'libardour libpbd'
     obj.framework = [ 'CoreAudio', 'AudioToolbox', 'CoreServices' ]
-    if bld.env['build_target'] not in [ 'lion' ]:
+    if bld.env['build_target'] not in [ 'lion' ] and (not bld.env['build_arch'] == "ppc"):
         obj.framework += [ 'CoreMidi' ]
     else:
         obj.framework += [ 'CoreMIDI' ]
diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc
index 680c5a6..66978ef 100644
--- a/libs/backends/dummy/dummy_audiobackend.cc
+++ b/libs/backends/dummy/dummy_audiobackend.cc
@@ -93,7 +93,7 @@ DummyAudioBackend::~DummyAudioBackend ()
 std::string
 DummyAudioBackend::name () const
 {
-	return X_("Dummy");
+	return X_("Dummy"); // internal name
 }
 
 bool
@@ -1312,7 +1312,7 @@ static bool already_configured ();
 static bool available ();
 
 static ARDOUR::AudioBackendInfo _descriptor = {
-	"Dummy",
+	_("None (Dummy)"),
 	instantiate,
 	deinstantiate,
 	backend_factory,
@@ -1737,7 +1737,7 @@ void DummyAudioPort::generate (const pframes_t n_samples)
 			{
 				const float vols = 2.f / (float)_gen_perio2;
 				for (pframes_t i = 0; i < n_samples; ++i) {
-					const float g = fabsf (_gen_count2 * vols - 1.0);
+					const float g = fabsf (_gen_count2 * vols - 1.f);
 					_buffer[i] = g * _wavetable[_gen_offset];
 					_gen_offset = (_gen_offset + 1) % _gen_period;
 					_gen_count2 = (_gen_count2 + 1) % _gen_perio2;
diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc
index d66055d..c3ce0b0 100644
--- a/libs/backends/jack/jack_audiobackend.cc
+++ b/libs/backends/jack/jack_audiobackend.cc
@@ -838,7 +838,7 @@ JACKAudioBackend::join_process_threads ()
 	for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
 	     i != _jack_threads.end(); i++) {
 
-#if defined(USING_JACK2_EXPANSION_OF_JACK_API) || defined(PLATFORM_WINDOWS)
+#if defined(USING_JACK2_EXPANSION_OF_JACK_API) || defined __jack_systemdeps_h__
 		// jack_client is not used by JACK2's implementation
 		// also jack_client_close() leaves threads active
 		if (jack_client_stop_thread (NULL, *i) != 0)
@@ -860,7 +860,7 @@ JACKAudioBackend::join_process_threads ()
 bool
 JACKAudioBackend::in_process_thread ()
 {
-#ifdef COMPILER_MINGW
+#if defined COMPILER_MINGW && (!defined PTW32_VERSION || defined __jack_systemdeps_h__)
 	if (_main_thread == GetCurrentThread()) {
 		return true;
 	}
@@ -873,7 +873,7 @@ JACKAudioBackend::in_process_thread ()
 	for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
 	     i != _jack_threads.end(); i++) {
 
-#ifdef COMPILER_MINGW
+#if defined COMPILER_MINGW && (!defined PTW32_VERSION || defined __jack_systemdeps_h__)
 		if (*i == GetCurrentThread()) {
 			return true;
 		}
@@ -917,7 +917,7 @@ JACKAudioBackend::process_thread ()
         /* JACK doesn't do this for us when we use the wait API
          */
 
-#ifdef COMPILER_MINGW
+#if defined COMPILER_MINGW && (!defined PTW32_VERSION || defined __jack_systemdeps_h__)
 	_main_thread = GetCurrentThread();
 #else
 	_main_thread = pthread_self ();
diff --git a/libs/backends/jack/jack_portengine.cc b/libs/backends/jack/jack_portengine.cc
index 1f0515b..8aa489d 100644
--- a/libs/backends/jack/jack_portengine.cc
+++ b/libs/backends/jack/jack_portengine.cc
@@ -106,7 +106,16 @@ JACKAudioBackend::when_connected_to_jack ()
 int
 JACKAudioBackend::set_port_name (PortHandle port, const std::string& name)
 {
+#if HAVE_JACK_PORT_RENAME
+	jack_client_t* client = _jack_connection->jack();
+	if (client) {
+		return jack_port_rename (client, (jack_port_t*) port, name.c_str());
+	} else {
+		return -1;
+	}
+#else
 	return jack_port_set_name ((jack_port_t*) port, name.c_str());
+#endif
 }
 
 string
diff --git a/libs/backends/jack/jack_utils.cc b/libs/backends/jack/jack_utils.cc
index c6cbf0f..2ea110d 100644
--- a/libs/backends/jack/jack_utils.cc
+++ b/libs/backends/jack/jack_utils.cc
@@ -698,8 +698,10 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
 #ifdef PLATFORM_WINDOWS
 	// must use sync mode on windows
 	args.push_back ("-S");
+#endif
 
-	// this needs to be added now on windows
+#if (defined PLATFORM_WINDOWS || defined __APPLE__)
+	// midi systems needs to be added before the audio driver for jack2
 	if (!options.midi_driver.empty () && options.midi_driver != get_none_string ()) {
 		args.push_back ("-X");
 		args.push_back (options.midi_driver);
@@ -879,7 +881,7 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
 		}
 	}
 
-	if (options.driver == alsa_driver_name || options.driver == coreaudio_driver_name) {
+	if (options.driver == alsa_driver_name) {
 
 		if (options.midi_driver != alsa_seq_midi_driver_name) {
 			if (!options.midi_driver.empty() && options.midi_driver != get_none_string ()) {
diff --git a/libs/backends/jack/weak_libjack.def b/libs/backends/jack/weak_libjack.def
index 5a3e080..8f6a6cd 100644
--- a/libs/backends/jack/weak_libjack.def
+++ b/libs/backends/jack/weak_libjack.def
@@ -36,6 +36,7 @@ JCFUN(1, jack_nframes_t, get_buffer_size, 0)
 JPFUN(1, jack_nframes_t, frames_since_cycle_start, (const jack_client_t *c), (c), 0)
 JPFUN(1, jack_nframes_t, frame_time, (const jack_client_t *c), (c), 0)
 JPFUN(1, jack_nframes_t, last_frame_time, (const jack_client_t *c), (c), 0)
+JPFUN(1, jack_time_t,    get_time, (void), (), 0)
 JCFUN(1, float,          cpu_load, 0)
 JCFUN(1, int,            is_realtime, 0)
 
@@ -53,6 +54,7 @@ JPFUN(1, int,            port_ensure_monitor, (jack_port_t *p, int o), (p,o), 0)
 JPFUN(1, int,            port_monitoring_input, (jack_port_t *p), (p), 0)
 
 JPFUN(1, const char*,    port_name, (const jack_port_t *p), (p), NULL)
+JPFUN(1, const char*,    port_short_name, (const jack_port_t *p), (p), NULL)
 JPFUN(1, int,            port_flags, (const jack_port_t *p), (p), 0)
 JPFUN(1, const char**,   get_ports,(jack_client_t *c, const char *p, const char *t, unsigned long f), (c,p,t,f), NULL)
 JPFUN(1, int,            port_name_size, (void), (), 0)
@@ -65,7 +67,9 @@ JPFUN(1, int,            port_unregister, (jack_client_t *c, jack_port_t *p), (c
 JPFUN(1, const char *,   port_type, (const jack_port_t *p), (p), 0)
 JPFUN(1, const char **,  port_get_connections, (const jack_port_t *p), (p), 0)
 JPFUN(1, const char **,  port_get_all_connections, (const jack_client_t *c, const jack_port_t *p), (c,p), 0)
-JPFUN(1, int,            port_set_name, (jack_port_t *p, const char *n), (p,n), 0)
+JPFUN(1, int,            port_set_name, (jack_port_t *p, const char *n), (p,n), -1)
+JXFUN(0, int,            port_rename, (jack_client_t *c, jack_port_t *p, const char *n), (c,p,n), return jack_port_set_name (p,n);)
+JPFUN(1, int,            port_get_aliases, (const jack_port_t *port, char* const aliases[2]), (port,aliases), 0)
 JPFUN(1, int,            port_disconnect, (jack_client_t *c, jack_port_t *p), (c,p), 0)
 JPFUN(1, int,            connect, (jack_client_t *c, const char *s, const char *d), (c,s,d), -1)
 JPFUN(1, int,            disconnect, (jack_client_t *c, const char *s, const char *d), (c,s,d), -1)
@@ -141,4 +145,9 @@ JPFUN(0, int,            remove_all_properties, (jack_client_t* c), (c), -1)
 JPFUN(0, int,            set_property_change_callback, (jack_client_t *c, JackPropertyChangeCallback s, void *a), (c,s,a), -1)
 #endif
 
+/* <jack/statistics.h> */
+JCFUN(1, float,          get_max_delayed_usecs, 0.0)
+JCFUN(1, float,          get_xrun_delayed_usecs, 0.0)
+JVFUN(0,                 reset_max_delayed_usecs, (jack_client_t *c), (c),)
+
 #endif // end USE_WEAK_JACK
diff --git a/libs/backends/jack/weak_libjack.h b/libs/backends/jack/weak_libjack.h
index abfe3af..0f98de3 100644
--- a/libs/backends/jack/weak_libjack.h
+++ b/libs/backends/jack/weak_libjack.h
@@ -55,6 +55,7 @@ int have_libjack(void);
 #define jack_frames_since_cycle_start       WJACK_frames_since_cycle_start
 #define jack_frame_time                     WJACK_frame_time
 #define jack_last_frame_time                WJACK_last_frame_time
+#define jack_get_time                       WJACK_get_time
 #define jack_cpu_load                       WJACK_cpu_load
 #define jack_is_realtime                    WJACK_is_realtime
 
@@ -87,6 +88,7 @@ int have_libjack(void);
 #define jack_port_monitoring_input          WJACK_port_monitoring_input
 
 #define jack_port_name                      WJACK_port_name
+#define jack_port_short_name                WJACK_port_short_name
 #define jack_port_flags                     WJACK_port_flags
 #define jack_get_ports                      WJACK_get_ports
 #define jack_port_name_size                 WJACK_port_name_size
@@ -95,6 +97,8 @@ int have_libjack(void);
 #define jack_port_by_name                   WJACK_port_by_name
 #define jack_port_by_id                     WJACK_port_by_id
 #define jack_port_set_name                  WJACK_port_set_name
+#define jack_port_get_aliases               WJACK_port_get_aliases
+#define jack_port_rename                    WJACK_port_rename
 #define jack_port_disconnect                WJACK_port_disconnect
 #define jack_port_register                  WJACK_port_register
 #define jack_port_unregister                WJACK_port_unregister
@@ -172,6 +176,11 @@ int have_libjack(void);
 #define jack_set_property_change_callback   WJACK_set_property_change_callback
 #endif
 
+/* <jack/statistics.h> */
+#define jack_get_max_delayed_usecs WJACK_get_max_delayed_usecs
+#define jack_get_xrun_delayed_usecs WJACK_get_xrun_delayed_usecs
+#define jack_reset_max_delayed_usecs WJACK_reset_max_delayed_usecs
+
 #endif // end USE_WEAK_JACK
 
 #include <jack/jack.h>
@@ -185,6 +194,9 @@ int have_libjack(void);
 #include <jack/metadata.h>
 #endif
 
+// prototype for function currently only available in jack1 headers
+int jack_port_rename (jack_client_t* client, jack_port_t *port, const char *port_name);
+
 #ifdef USE_WEAK_JACK
 
 #undef jack_client_open
diff --git a/libs/backends/jack/wscript b/libs/backends/jack/wscript
index fca2230..b2a12b5 100644
--- a/libs/backends/jack/wscript
+++ b/libs/backends/jack/wscript
@@ -41,11 +41,24 @@ def configure(conf):
     conf.check_cxx(fragment = "#include <jack/jack.h>\n#include <jack/metadata.h>\nint main(void) { jack_port_uuid(NULL); return 0; }\n",
                    mandatory = False,
                    msg = 'Checking for JACK metadata API',
+                   execute = False,
+                   features = ['cxx'],
                    okmsg = 'ok',
                    errmsg = 'not found (or broken). JACK metadata API will not be used',
                    define_name = 'HAVE_JACK_METADATA',
                    uselib = 'JACK')
-    
+
+    # Check to see if jack_port_rename() is available and working
+    conf.check_cxx(fragment = "#include <jack/jack.h>\nint main(void) { jack_client_t* c; jack_port_t* p; jack_port_rename (c, p, \"foo\"); return 0; }\n",
+                   mandatory = False,
+                   execute = False,
+                   features = ['cxx'],
+                   msg = 'Checking for jack_port_rename()',
+                   okmsg = 'ok',
+                   errmsg = 'not found (or broken). jack_port_rename() will not be used, and jack_port_set_name() will be used instead',
+                   define_name = 'HAVE_JACK_PORT_RENAME',
+                   uselib = 'JACK')
+
 def build(bld):
     obj = bld(features = 'c cxx cxxshlib')
     obj.source = [ 
@@ -68,11 +81,18 @@ def build(bld):
     if bld.env['build_target'] != 'mingw':
         obj.cxxflags = [ '-fPIC' ]
         obj.cflags   = [ '-fPIC' ]
+    else:
+        obj.cxxflags = [ ]
+        obj.cflags   = [ ]
 
     if bld.is_defined ('HAVE_JACK_METADATA'):
         obj.cxxflags += [ '-DHAVE_JACK_METADATA' ]
         obj.cflags += [ '-DHAVE_JACK_METADATA' ]
 
+    if bld.is_defined ('HAVE_JACK_PORT_RENAME'):
+        obj.cxxflags += [ '-DHAVE_JACK_PORT_RENAME' ]
+        obj.cflags += [ '-DHAVE_JACK_PORT_RENAME' ]
+
     if (bld.env['build_target'] == 'mingw'):
         obj.uselib   = [ 'PORTAUDIO' ]
     else:
diff --git a/libs/backends/portaudio/cycle_timer.h b/libs/backends/portaudio/cycle_timer.h
new file mode 100644
index 0000000..95811ae
--- /dev/null
+++ b/libs/backends/portaudio/cycle_timer.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef CYCLE_TIMER_H
+#define CYCLE_TIMER_H
+
+#include <stdint.h>
+#include <cmath>
+#include <algorithm>
+
+// Could call it FrameTimer and make it more generic
+// Could be an interface and or include clock source
+// include sample count/processed frames in iteration?
+class CycleTimer {
+public:
+	CycleTimer ()
+	    : m_cycle_start (0)
+	    , m_samplerate (0)
+	    , m_samples_per_cycle (0)
+	{
+	}
+
+	void set_samplerate (double samplerate) { m_samplerate = samplerate; }
+
+	double get_samplerate () const { return m_samplerate; }
+
+	double get_sample_length_us () const { return 1e6 / m_samplerate; }
+
+	double get_length_us () const
+	{
+		return get_sample_length_us () * m_samples_per_cycle;
+	}
+
+	void set_samples_per_cycle (uint32_t samples)
+	{
+		m_samples_per_cycle = samples;
+	}
+
+	uint32_t get_samples_per_cycle () const { return m_samples_per_cycle; }
+
+	// rint?? that may round to sample outside of cycle?
+	// max(0, value)?
+	uint32_t samples_since_cycle_start (uint64_t timer_val) const
+	{
+		if (timer_val < m_cycle_start) {
+			return 0;
+		}
+		return std::max((double)0, (timer_val - get_start ()) / get_sample_length_us ());
+	}
+
+	uint64_t timestamp_from_sample_offset (uint32_t sample_offset)
+	{
+		return m_cycle_start + get_sample_length_us () * sample_offset;
+	}
+
+	bool valid () const { return m_samples_per_cycle && m_samplerate; }
+
+	bool in_cycle (uint64_t timer_value_us) const
+	{ return (timer_value_us >= get_start()) && (timer_value_us < get_next_start());
+	}
+
+	void reset_start (uint64_t timestamp) { m_cycle_start = timestamp; }
+
+	uint64_t get_start () const { return m_cycle_start; }
+
+	uint64_t microseconds_since_start (uint64_t timestamp) const
+	{
+		return timestamp - m_cycle_start;
+	}
+
+	uint64_t microseconds_since_start (uint32_t samples) const
+	{
+		return m_cycle_start + samples * get_sample_length_us ();
+	}
+
+	uint64_t get_next_start () const
+	{
+		return m_cycle_start + rint (get_length_us ());
+	}
+
+private:
+	uint64_t m_cycle_start;
+
+	uint32_t m_samplerate;
+	uint32_t m_samples_per_cycle;
+};
+
+#endif // CYCLE_TIMER_H
diff --git a/libs/backends/portaudio/debug.h b/libs/backends/portaudio/debug.h
new file mode 100644
index 0000000..0270efa
--- /dev/null
+++ b/libs/backends/portaudio/debug.h
@@ -0,0 +1,13 @@
+#ifndef PORTAUDIO_BACKEND_DEBUG_H
+#define PORTAUDIO_BACKEND_DEBUG_H
+
+#include "pbd/debug.h"
+
+using namespace PBD;
+
+#define DEBUG_AUDIO(msg) DEBUG_TRACE (DEBUG::BackendAudio, msg);
+#define DEBUG_MIDI(msg) DEBUG_TRACE (DEBUG::BackendMIDI, msg);
+#define DEBUG_TIMING(msg) DEBUG_TRACE (DEBUG::BackendTiming, msg);
+#define DEBUG_THREADS(msg) DEBUG_TRACE (DEBUG::BackendThreads, msg);
+
+#endif // PORTAUDIO_BACKEND_DEBUG_H
diff --git a/libs/backends/alsa/select_sleep.h b/libs/backends/portaudio/midi_util.cc
similarity index 56%
copy from libs/backends/alsa/select_sleep.h
copy to libs/backends/portaudio/midi_util.cc
index ec6a93d..0542dfc 100644
--- a/libs/backends/alsa/select_sleep.h
+++ b/libs/backends/portaudio/midi_util.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004,2014 Robin Gareus <robin at gareus.org>
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,20 +16,38 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include <stdint.h>
-#include <sys/select.h>
+#include "midi_util.h"
 
-/* select() sleeps _at most_ a given time.
- * (compared to usleep() or nanosleep() which sleep at least a given time)
- */
-static void select_sleep (uint64_t usec) {
-	if (usec <= 10) return;
-	fd_set fd;
-	int max_fd=0;
-	struct timeval tv;
-	tv.tv_sec = usec / 1000000;
-	tv.tv_usec = usec % 1000000;
-	FD_ZERO (&fd);
-	select (max_fd, &fd, NULL, NULL, &tv);
-	// on Linux, tv reflects the actual time slept.
+int get_midi_msg_length (uint8_t status_byte)
+{
+	// define these with meaningful names
+	switch (status_byte & 0xf0) {
+	case 0x80:
+	case 0x90:
+	case 0xa0:
+	case 0xb0:
+	case 0xe0:
+		return 3;
+	case 0xc0:
+	case 0xd0:
+		return 2;
+	case 0xf0:
+		switch (status_byte) {
+		case 0xf0:
+			return 0;
+		case 0xf1:
+		case 0xf3:
+			return 2;
+		case 0xf2:
+			return 3;
+		case 0xf4:
+		case 0xf5:
+		case 0xf7:
+		case 0xfd:
+			break;
+		default:
+			return 1;
+		}
+	}
+	return -1;
 }
diff --git a/libs/backends/alsa/select_sleep.h b/libs/backends/portaudio/midi_util.h
similarity index 60%
copy from libs/backends/alsa/select_sleep.h
copy to libs/backends/portaudio/midi_util.h
index ec6a93d..7b6366a 100644
--- a/libs/backends/alsa/select_sleep.h
+++ b/libs/backends/portaudio/midi_util.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004,2014 Robin Gareus <robin at gareus.org>
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,20 +16,23 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#ifndef MIDI_UTIL_H
+#define MIDI_UTIL_H
+
 #include <stdint.h>
-#include <sys/select.h>
 
-/* select() sleeps _at most_ a given time.
- * (compared to usleep() or nanosleep() which sleep at least a given time)
- */
-static void select_sleep (uint64_t usec) {
-	if (usec <= 10) return;
-	fd_set fd;
-	int max_fd=0;
-	struct timeval tv;
-	tv.tv_sec = usec / 1000000;
-	tv.tv_usec = usec % 1000000;
-	FD_ZERO (&fd);
-	select (max_fd, &fd, NULL, NULL, &tv);
-	// on Linux, tv reflects the actual time slept.
-}
+struct MidiEventHeader {
+	uint64_t time;
+	size_t size;
+	MidiEventHeader (const uint64_t t, const size_t s)
+	    : time (t)
+	    , size (s)
+	{
+	}
+};
+
+// rename to get_midi_message_size?
+// @return -1 to indicate error
+int get_midi_msg_length (uint8_t status_byte);
+
+#endif
diff --git a/libs/backends/portaudio/mmcss.cc b/libs/backends/portaudio/mmcss.cc
new file mode 100644
index 0000000..d8cec02
--- /dev/null
+++ b/libs/backends/portaudio/mmcss.cc
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "mmcss.h"
+
+#include "pbd/compose.h"
+
+#include "debug.h"
+
+typedef HANDLE (WINAPI* AvSetMmThreadCharacteristicsA_t)(LPCSTR TaskName,
+                                                         LPDWORD TaskIndex);
+
+typedef BOOL (WINAPI* AvRevertMmThreadCharacteristics_t)(HANDLE AvrtHandle);
+
+typedef BOOL (WINAPI* AvSetMmThreadPriority_t)(
+    HANDLE AvrtHandle, mmcss::AVRT_PRIORITY Priority);
+
+static HMODULE avrt_dll = NULL;
+
+static AvSetMmThreadCharacteristicsA_t AvSetMmThreadCharacteristicsA = NULL;
+static AvRevertMmThreadCharacteristics_t AvRevertMmThreadCharacteristics = NULL;
+static AvSetMmThreadPriority_t AvSetMmThreadPriority = NULL;
+
+
+namespace mmcss {
+
+bool
+initialize ()
+{
+	if (avrt_dll != NULL) return true;
+
+	avrt_dll = LoadLibraryA ("avrt.dll");
+
+	if (avrt_dll == NULL) {
+		DEBUG_THREADS ("Unable to load avrt.dll\n");
+		return false;
+	}
+	bool unload_dll = false;
+
+	AvSetMmThreadCharacteristicsA =
+	    (AvSetMmThreadCharacteristicsA_t)GetProcAddress (
+	        avrt_dll, "AvSetMmThreadCharacteristicsA");
+
+	if (AvSetMmThreadCharacteristicsA == NULL) {
+		DEBUG_THREADS ("Unable to resolve AvSetMmThreadCharacteristicsA\n");
+		unload_dll = true;
+	}
+
+	AvRevertMmThreadCharacteristics =
+	    (AvRevertMmThreadCharacteristics_t)GetProcAddress (
+	        avrt_dll, "AvRevertMmThreadCharacteristics");
+
+	if (AvRevertMmThreadCharacteristics == NULL) {
+		DEBUG_THREADS ("Unable to resolve AvRevertMmThreadCharacteristics\n");
+		unload_dll = true;
+	}
+
+	AvSetMmThreadPriority = (AvSetMmThreadPriority_t)GetProcAddress (
+	    avrt_dll, "AvSetMmThreadPriority");
+
+	if (AvSetMmThreadPriority == NULL) {
+		DEBUG_THREADS ("Unable to resolve AvSetMmThreadPriority\n");
+		unload_dll = true;
+	}
+
+	if (unload_dll) {
+		DEBUG_THREADS (
+		    "MMCSS Unable to resolve necessary symbols, unloading avrt.dll\n");
+		deinitialize ();
+	}
+
+	return true;
+}
+
+bool
+deinitialize ()
+{
+	if (avrt_dll == NULL) return true;
+
+	if (FreeLibrary (avrt_dll) == 0) {
+		DEBUG_THREADS ("Unable to unload avrt.dll\n");
+		return false;
+	}
+
+	avrt_dll = NULL;
+
+	AvSetMmThreadCharacteristicsA = NULL;
+	AvRevertMmThreadCharacteristics = NULL;
+	AvSetMmThreadPriority = NULL;
+
+	return true;
+}
+
+bool
+set_thread_characteristics (const std::string& task_name, HANDLE* task_handle)
+{
+	if (AvSetMmThreadCharacteristicsA == NULL) return false;
+
+	DWORD task_index_dummy = 0;
+
+	*task_handle = AvSetMmThreadCharacteristicsA(task_name.c_str(), &task_index_dummy);
+
+	if (*task_handle == 0) {
+		DEBUG_THREADS (string_compose ("Failed to set Thread Characteristics to %1\n",
+		                               task_name));
+		return false;
+	}
+
+	DEBUG_THREADS (
+	    string_compose ("Set thread characteristics to %1\n", task_name));
+
+	return true;
+}
+
+bool
+revert_thread_characteristics (HANDLE task_handle)
+{
+	if (AvRevertMmThreadCharacteristics == NULL) return false;
+
+	if (AvRevertMmThreadCharacteristics (task_handle) == 0) {
+		DEBUG_THREADS ("Failed to set revert thread characteristics\n");
+		return false;
+	}
+
+	DEBUG_THREADS ("Reverted thread characteristics\n");
+
+	return true;
+}
+
+bool
+set_thread_priority (HANDLE task_handle, AVRT_PRIORITY priority)
+{
+	if (AvSetMmThreadPriority == NULL) return false;
+
+	if (AvSetMmThreadPriority (task_handle, priority) == 0) {
+		DEBUG_THREADS (
+		    string_compose ("Failed to set thread priority %1\n", priority));
+		return false;
+	}
+
+	DEBUG_THREADS (string_compose ("Set thread priority to %1\n", priority));
+
+	return true;
+}
+
+} // namespace mmcss
diff --git a/libs/backends/alsa/select_sleep.h b/libs/backends/portaudio/mmcss.h
similarity index 55%
copy from libs/backends/alsa/select_sleep.h
copy to libs/backends/portaudio/mmcss.h
index ec6a93d..deb9a41 100644
--- a/libs/backends/alsa/select_sleep.h
+++ b/libs/backends/portaudio/mmcss.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004,2014 Robin Gareus <robin at gareus.org>
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,20 +16,34 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include <stdint.h>
-#include <sys/select.h>
+#ifndef MMCSS_H
+#define MMCSS_H
 
-/* select() sleeps _at most_ a given time.
- * (compared to usleep() or nanosleep() which sleep at least a given time)
- */
-static void select_sleep (uint64_t usec) {
-	if (usec <= 10) return;
-	fd_set fd;
-	int max_fd=0;
-	struct timeval tv;
-	tv.tv_sec = usec / 1000000;
-	tv.tv_usec = usec % 1000000;
-	FD_ZERO (&fd);
-	select (max_fd, &fd, NULL, NULL, &tv);
-	// on Linux, tv reflects the actual time slept.
-}
+#include <windows.h>
+
+#include <string>
+
+namespace mmcss {
+
+enum AVRT_PRIORITY {
+	AVRT_PRIORITY_VERYLOW = -2,
+	AVRT_PRIORITY_LOW,
+	AVRT_PRIORITY_NORMAL,
+	AVRT_PRIORITY_HIGH,
+	AVRT_PRIORITY_CRITICAL
+};
+
+bool initialize ();
+
+bool deinitialize ();
+
+bool set_thread_characteristics (const std::string& task_name, HANDLE *task_handle);
+
+bool revert_thread_characteristics (HANDLE task_handle);
+
+bool set_thread_priority (HANDLE, AVRT_PRIORITY);
+
+
+} // namespace mmcss
+
+#endif // MMCSS_H
diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc
index 0277ca1..0356025 100644
--- a/libs/backends/portaudio/portaudio_backend.cc
+++ b/libs/backends/portaudio/portaudio_backend.cc
@@ -36,12 +36,24 @@
 #include "ardour/port_manager.h"
 #include "i18n.h"
 
+#include "win_utils.h"
+#include "mmcss.h"
+
+#include "debug.h"
+
 using namespace ARDOUR;
 
+namespace {
+
+const char * const winmme_driver_name = X_("WinMME");
+
+}
+
 static std::string s_instance_name;
 size_t PortAudioBackend::_max_buffer_size = 8192;
 std::vector<std::string> PortAudioBackend::_midi_options;
-std::vector<AudioBackend::DeviceStatus> PortAudioBackend::_audio_device_status;
+std::vector<AudioBackend::DeviceStatus> PortAudioBackend::_input_audio_device_status;
+std::vector<AudioBackend::DeviceStatus> PortAudioBackend::_output_audio_device_status;
 
 PortAudioBackend::PortAudioBackend (AudioEngine& e, AudioBackendInfo& info)
 	: AudioBackend (e, info)
@@ -50,8 +62,11 @@ PortAudioBackend::PortAudioBackend (AudioEngine& e, AudioBackendInfo& info)
 	, _active (false)
 	, _freewheel (false)
 	, _measure_latency (false)
-	, _last_process_start (0)
-	, _audio_device("")
+	, m_cycle_count(0)
+	, m_total_deviation_us(0)
+	, m_max_deviation_us(0)
+	, _input_audio_device("")
+	, _output_audio_device("")
 	, _midi_driver_option(_("None"))
 	, _samplerate (48000)
 	, _samples_per_period (1024)
@@ -66,12 +81,19 @@ PortAudioBackend::PortAudioBackend (AudioEngine& e, AudioBackendInfo& info)
 	_instance_name = s_instance_name;
 	pthread_mutex_init (&_port_callback_mutex, 0);
 
+	mmcss::initialize ();
+
 	_pcmio = new PortAudioIO ();
+	_midiio = new WinMMEMidiIO ();
 }
 
 PortAudioBackend::~PortAudioBackend ()
 {
 	delete _pcmio; _pcmio = 0;
+	delete _midiio; _midiio = 0;
+
+	mmcss::deinitialize ();
+
 	pthread_mutex_destroy (&_port_callback_mutex);
 }
 
@@ -89,34 +111,104 @@ PortAudioBackend::is_realtime () const
 	return true;
 }
 
+bool
+PortAudioBackend::requires_driver_selection() const
+{
+	// we could do this but implementation would need changing
+	/*
+	if (enumerate_drivers().size() == 1) {
+		return false;
+	}
+	*/
+	return true;
+}
+
+std::vector<std::string>
+PortAudioBackend::enumerate_drivers () const
+{
+	DEBUG_AUDIO ("Portaudio: enumerate_drivers\n");
+	std::vector<std::string> currently_available;
+	_pcmio->host_api_list (currently_available);
+	return currently_available;
+}
+
+int
+PortAudioBackend::set_driver (const std::string& name)
+{
+	DEBUG_AUDIO (string_compose ("Portaudio: set_driver %1 \n", name));
+	if (!_pcmio->set_host_api (name)) {
+		DEBUG_AUDIO (string_compose ("Portaudio: Unable to set_driver %1 \n", name));
+		return -1;
+	}
+	return 0;
+}
+
+std::string
+PortAudioBackend::driver_name () const
+{
+	std::string driver_name = _pcmio->get_host_api ();
+	DEBUG_AUDIO (string_compose ("Portaudio: driver_name %1 \n", driver_name));
+	return driver_name;
+}
+
+bool
+PortAudioBackend::use_separate_input_and_output_devices () const
+{
+	return true;
+}
+
 std::vector<AudioBackend::DeviceStatus>
 PortAudioBackend::enumerate_devices () const
 {
+	DEBUG_AUDIO ("Portaudio: ERROR enumerate devices should not be called \n");
+	return std::vector<AudioBackend::DeviceStatus>();
+}
+
+std::vector<AudioBackend::DeviceStatus>
+PortAudioBackend::enumerate_input_devices () const
+{
 	_pcmio->discover();
-	_audio_device_status.clear();
-	std::map<int, std::string> devices;
-	_pcmio->device_list(devices);
+	_input_audio_device_status.clear();
+	std::map<int, std::string> input_devices;
+	_pcmio->input_device_list(input_devices);
 
-	for (std::map<int, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
-		if (_audio_device == "") _audio_device = i->second;
-		_audio_device_status.push_back (DeviceStatus (i->second, true));
+	for (std::map<int, std::string>::const_iterator i = input_devices.begin (); i != input_devices.end(); ++i) {
+		if (_input_audio_device == "") _input_audio_device = i->second;
+		_input_audio_device_status.push_back (DeviceStatus (i->second, true));
+	}
+	return _input_audio_device_status;
+}
+
+std::vector<AudioBackend::DeviceStatus>
+PortAudioBackend::enumerate_output_devices () const
+{
+	_pcmio->discover();
+	_output_audio_device_status.clear();
+	std::map<int, std::string> output_devices;
+	_pcmio->output_device_list(output_devices);
+
+	for (std::map<int, std::string>::const_iterator i = output_devices.begin (); i != output_devices.end(); ++i) {
+		if (_output_audio_device == "") _output_audio_device = i->second;
+		_output_audio_device_status.push_back (DeviceStatus (i->second, true));
 	}
-	return _audio_device_status;
+	return _output_audio_device_status;
 }
 
 std::vector<float>
 PortAudioBackend::available_sample_rates (const std::string&) const
 {
+	DEBUG_AUDIO ("Portaudio: available_sample_rates\n");
 	std::vector<float> sr;
-	_pcmio->available_sample_rates(name_to_id(_audio_device), sr);
+	_pcmio->available_sample_rates(name_to_id(_input_audio_device), sr);
 	return sr;
 }
 
 std::vector<uint32_t>
 PortAudioBackend::available_buffer_sizes (const std::string&) const
 {
+	DEBUG_AUDIO ("Portaudio: available_buffer_sizes\n");
 	std::vector<uint32_t> bs;
-	_pcmio->available_buffer_sizes(name_to_id(_audio_device), bs);
+	_pcmio->available_buffer_sizes(name_to_id(_input_audio_device), bs);
 	return bs;
 }
 
@@ -147,7 +239,23 @@ PortAudioBackend::can_change_buffer_size_when_running () const
 int
 PortAudioBackend::set_device_name (const std::string& d)
 {
-	_audio_device = d;
+	DEBUG_AUDIO ("Portaudio: set_device_name should not be called\n");
+	return 0;
+}
+
+int
+PortAudioBackend::set_input_device_name (const std::string& d)
+{
+	DEBUG_AUDIO (string_compose ("Portaudio: set_input_device_name %1\n", d));
+	_input_audio_device = d;
+	return 0;
+}
+
+int
+PortAudioBackend::set_output_device_name (const std::string& d)
+{
+	DEBUG_AUDIO (string_compose ("Portaudio: set_output_device_name %1\n", d));
+	_output_audio_device = d;
 	return 0;
 }
 
@@ -211,7 +319,19 @@ PortAudioBackend::set_systemic_output_latency (uint32_t sl)
 std::string
 PortAudioBackend::device_name () const
 {
-	return _audio_device;
+	return "Unused";
+}
+
+std::string
+PortAudioBackend::input_device_name () const
+{
+	return _input_audio_device;
+}
+
+std::string
+PortAudioBackend::output_device_name () const
+{
+	return _output_audio_device;
 }
 
 float
@@ -256,13 +376,25 @@ PortAudioBackend::systemic_output_latency () const
 	return _systemic_audio_output_latency;
 }
 
+std::string
+PortAudioBackend::control_app_name () const
+{
+	return _pcmio->control_app_name (name_to_id (_input_audio_device));
+}
+
+void
+PortAudioBackend::launch_control_app ()
+{
+	return _pcmio->launch_control_app (name_to_id(_input_audio_device));
+}
+
 /* MIDI */
 
 std::vector<std::string>
 PortAudioBackend::enumerate_midi_options () const
 {
 	if (_midi_options.empty()) {
-		//_midi_options.push_back (_("PortMidi"));
+		_midi_options.push_back (winmme_driver_name);
 		_midi_options.push_back (_("None"));
 	}
 	return _midi_options;
@@ -271,9 +403,10 @@ PortAudioBackend::enumerate_midi_options () const
 int
 PortAudioBackend::set_midi_option (const std::string& opt)
 {
-	if (opt != _("None") /* && opt != _("PortMidi")*/) {
+	if (opt != _("None") && opt != winmme_driver_name) {
 		return -1;
 	}
+	DEBUG_MIDI (string_compose ("Setting midi option to %1\n", opt));
 	_midi_driver_option = opt;
 	return 0;
 }
@@ -320,9 +453,8 @@ PortAudioBackend::_start (bool for_latency_measurement)
 	_dsp_load = 0;
 	_freewheeling = false;
 	_freewheel = false;
-	_last_process_start = 0;
 
-	_pcmio->pcm_setup (name_to_id(_audio_device), name_to_id(_audio_device), _samplerate, _samples_per_period);
+	_pcmio->pcm_setup (name_to_id(_input_audio_device), name_to_id(_output_audio_device), _samplerate, _samples_per_period);
 
 	switch (_pcmio->state ()) {
 		case 0: /* OK */ break;
@@ -360,10 +492,28 @@ PortAudioBackend::_start (bool for_latency_measurement)
 	_run = true;
 	_port_change_flag = false;
 
-	// TODO MIDI
+	if (_midi_driver_option == winmme_driver_name) {
+		_midiio->set_enabled(true);
+		//_midiio->set_port_changed_callback(midi_port_change, this);
+		_midiio->start(); // triggers port discovery, callback coremidi_rediscover()
+	}
+
+	m_cycle_timer.set_samplerate(_samplerate);
+	m_cycle_timer.set_samples_per_cycle(_samples_per_period);
+
+	DEBUG_MIDI ("Registering MIDI ports\n");
+
+	if (register_system_midi_ports () != 0) {
+		PBD::error << _ ("PortAudioBackend: failed to register system midi ports.")
+		           << endmsg;
+		_run = false;
+		return -1;
+	}
+
+	DEBUG_AUDIO ("Registering Audio ports\n");
 
 	if (register_system_audio_ports()) {
-		PBD::error << _("PortAudioBackend: failed to register system ports.") << endmsg;
+		PBD::error << _("PortAudioBackend: failed to register system audio ports.") << endmsg;
 		_run = false;
 		return -1;
 	}
@@ -476,19 +626,19 @@ PortAudioBackend::samples_since_cycle_start ()
 	if (!_active || !_run || _freewheeling || _freewheel) {
 		return 0;
 	}
-	if (_last_process_start == 0) {
+	if (!m_cycle_timer.valid()) {
 		return 0;
 	}
 
-	const int64_t elapsed_time_us = g_get_monotonic_time() - _last_process_start;
-	return std::max((pframes_t)0, (pframes_t)rint(1e-6 * elapsed_time_us * _samplerate));
+	return m_cycle_timer.samples_since_cycle_start (utils::get_microseconds());
 }
 
 int
 PortAudioBackend::name_to_id(std::string device_name) const {
 	uint32_t device_id = UINT32_MAX;
 	std::map<int, std::string> devices;
-	_pcmio->device_list(devices);
+	_pcmio->input_device_list(devices);
+	_pcmio->output_device_list(devices);
 
 	for (std::map<int, std::string>::const_iterator i = devices.begin (); i != devices.end(); ++i) {
 		if (i->second == device_name) {
@@ -505,7 +655,23 @@ PortAudioBackend::portaudio_process_thread (void *arg)
 	ThreadData* td = reinterpret_cast<ThreadData*> (arg);
 	boost::function<void ()> f = td->f;
 	delete td;
+
+#ifdef USE_MMCSS_THREAD_PRIORITIES
+	HANDLE task_handle;
+
+	mmcss::set_thread_characteristics ("Pro Audio", &task_handle);
+	mmcss::set_thread_priority (task_handle, mmcss::AVRT_PRIORITY_NORMAL);
+#endif
+
+	DWORD tid = GetCurrentThreadId ();
+	DEBUG_THREADS (string_compose ("Process Thread Child ID: %1\n", tid));
+
 	f ();
+
+#ifdef USE_MMCSS_THREAD_PRIORITIES
+	mmcss::revert_thread_characteristics (task_handle);
+#endif
+
 	return 0;
 }
 
@@ -626,6 +792,28 @@ PortAudioBackend::get_port_name (PortEngine::PortHandle port) const
 	return static_cast<PamPort*>(port)->name ();
 }
 
+int
+PortAudioBackend::get_port_property (PortHandle port,
+                                     const std::string& key,
+                                     std::string& value,
+                                     std::string& type) const
+{
+	if (!valid_port (port)) {
+		PBD::error << _ ("PortAudioBackend::get_port_name: Invalid Port(s)")
+		           << endmsg;
+		return -1;
+	}
+
+	if (key == "http://jackaudio.org/metadata/pretty-name") {
+		type = "";
+		value = static_cast<PamPort*>(port)->pretty_name ();
+		if (!value.empty()) {
+			return 0;
+		}
+	}
+	return -1;
+}
+
 PortEngine::PortHandle
 PortAudioBackend::get_port_by_name (const std::string& name) const
 {
@@ -749,7 +937,10 @@ PortAudioBackend::register_system_audio_ports()
 		PortHandle p = add_port(std::string(tmp), DataType::AUDIO, static_cast<PortFlags>(IsOutput | IsPhysical | IsTerminal));
 		if (!p) return -1;
 		set_latency_range (p, false, lr);
-		_system_inputs.push_back(static_cast<PortAudioPort*>(p));
+		PortAudioPort* audio_port = static_cast<PortAudioPort*>(p);
+		audio_port->set_pretty_name (
+		    _pcmio->get_input_channel_name (name_to_id (_input_audio_device), i));
+		_system_inputs.push_back (audio_port);
 	}
 
 	lr.min = lr.max = portaudio_reported_output_latency + (_measure_latency ? 0 : _systemic_audio_output_latency);
@@ -759,7 +950,56 @@ PortAudioBackend::register_system_audio_ports()
 		PortHandle p = add_port(std::string(tmp), DataType::AUDIO, static_cast<PortFlags>(IsInput | IsPhysical | IsTerminal));
 		if (!p) return -1;
 		set_latency_range (p, true, lr);
-		_system_outputs.push_back(static_cast<PamPort*>(p));
+		PortAudioPort* audio_port = static_cast<PortAudioPort*>(p);
+		audio_port->set_pretty_name (
+		    _pcmio->get_output_channel_name (name_to_id (_output_audio_device), i));
+		_system_outputs.push_back(audio_port);
+	}
+	return 0;
+}
+
+int
+PortAudioBackend::register_system_midi_ports()
+{
+	if (_midi_driver_option == _("None")) {
+		DEBUG_MIDI ("No MIDI backend selected, not system midi ports available\n");
+		return 0;
+	}
+
+	LatencyRange lr;
+	lr.min = lr.max = _samples_per_period;
+
+	const std::vector<WinMMEMidiInputDevice*> inputs = _midiio->get_inputs();
+
+	for (std::vector<WinMMEMidiInputDevice*>::const_iterator i = inputs.begin ();
+	     i != inputs.end ();
+	     ++i) {
+		std::string port_name = "system_midi:" + (*i)->name() + " capture";
+		PortHandle p =
+		    add_port (port_name,
+		              DataType::MIDI,
+		              static_cast<PortFlags>(IsOutput | IsPhysical | IsTerminal));
+		if (!p) return -1;
+		set_latency_range (p, false, lr);
+		_system_midi_in.push_back (static_cast<PortMidiPort*>(p));
+		DEBUG_MIDI (string_compose ("Registered MIDI input port: %1\n", port_name));
+	}
+
+	const std::vector<WinMMEMidiOutputDevice*> outputs = _midiio->get_outputs();
+
+	for (std::vector<WinMMEMidiOutputDevice*>::const_iterator i = outputs.begin ();
+	     i != outputs.end ();
+	     ++i) {
+		std::string port_name = "system_midi:" + (*i)->name() + " playback";
+		PortHandle p =
+		    add_port (port_name,
+		              DataType::MIDI,
+		              static_cast<PortFlags>(IsInput | IsPhysical | IsTerminal));
+		if (!p) return -1;
+		set_latency_range (p, false, lr);
+		static_cast<PortMidiPort*>(p)->set_n_periods(2);
+		_system_midi_out.push_back (static_cast<PortMidiPort*>(p));
+		DEBUG_MIDI (string_compose ("Registered MIDI output port: %1\n", port_name));
 	}
 	return 0;
 }
@@ -933,11 +1173,10 @@ PortAudioBackend::midi_event_put (
 	if (!buffer || !port_buffer) return -1;
 	PortMidiBuffer& dst = * static_cast<PortMidiBuffer*>(port_buffer);
 	if (dst.size () && (pframes_t)dst.back ()->timestamp () > timestamp) {
-#ifndef NDEBUG
 		// nevermind, ::get_buffer() sorts events
-		fprintf (stderr, "PortMidiBuffer: unordered event: %d > %d\n",
-				(pframes_t)dst.back ()->timestamp (), timestamp);
-#endif
+		DEBUG_MIDI (string_compose ("PortMidiBuffer: unordered event: %1 > %2\n",
+		                            (pframes_t)dst.back ()->timestamp (),
+		                            timestamp));
 	}
 	dst.push_back (boost::shared_ptr<PortMidiEvent>(new PortMidiEvent (timestamp, buffer, size)));
 	return 0;
@@ -1118,7 +1357,10 @@ PortAudioBackend::main_process_thread ()
 	_processed_samples = 0;
 
 	uint64_t clock1, clock2;
+	int64_t min_elapsed_us = 1000000;
+	int64_t max_elapsed_us = 0;
 	const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate;
+	// const int64_t nomial_time = m_cycle_timer.get_length_us();
 
 	manager.registration_callback();
 	manager.graph_order_callback();
@@ -1129,6 +1371,16 @@ PortAudioBackend::main_process_thread ()
 		engine.halted_callback("PortAudio I/O error.");
 	}
 
+#ifdef USE_MMCSS_THREAD_PRIORITIES
+	HANDLE task_handle;
+
+	mmcss::set_thread_characteristics ("Pro Audio", &task_handle);
+	mmcss::set_thread_priority (task_handle, mmcss::AVRT_PRIORITY_NORMAL);
+#endif
+
+	DWORD tid = GetCurrentThreadId ();
+	DEBUG_THREADS (string_compose ("Process Thread Master ID: %1\n", tid));
+
 	while (_run) {
 
 		if (_freewheeling != _freewheel) {
@@ -1142,9 +1394,7 @@ PortAudioBackend::main_process_thread ()
 				case 0: // OK
 					break;
 				case 1:
-#ifndef NDEBUG
-					printf("PortAudio: Xrun\n");
-#endif
+					DEBUG_AUDIO ("PortAudio: Xrun\n");
 					engine.Xrun ();
 					break;
 				default:
@@ -1153,7 +1403,7 @@ PortAudioBackend::main_process_thread ()
 			}
 
 			uint32_t i = 0;
-			clock1 = g_get_monotonic_time();
+			clock1 = utils::get_microseconds ();
 
 			/* get audio */
 			i = 0;
@@ -1166,6 +1416,26 @@ PortAudioBackend::main_process_thread ()
 			for (std::vector<PamPort*>::const_iterator it = _system_midi_in.begin (); it != _system_midi_in.end (); ++it, ++i) {
 				PortMidiBuffer* mbuf = static_cast<PortMidiBuffer*>((*it)->get_buffer(0));
 				mbuf->clear();
+				uint64_t timestamp;
+				pframes_t sample_offset;
+				uint8_t data[256];
+				size_t size = sizeof(data);
+				while (_midiio->dequeue_input_event (i,
+				                                     m_cycle_timer.get_start (),
+				                                     m_cycle_timer.get_next_start (),
+				                                     timestamp,
+				                                     data,
+				                                     size)) {
+					sample_offset = m_cycle_timer.samples_since_cycle_start (timestamp);
+					midi_event_put (mbuf, sample_offset, data, size);
+					DEBUG_MIDI (string_compose ("Dequeuing incoming MIDI data for device: %1 "
+					                            "sample_offset: %2 timestamp: %3, size: %4\n",
+					                            _midiio->get_inputs ()[i]->name (),
+					                            sample_offset,
+					                            timestamp,
+					                            size));
+					size = sizeof(data);
+				}
 			}
 
 			/* clear output buffers */
@@ -1173,25 +1443,61 @@ PortAudioBackend::main_process_thread ()
 				memset ((*it)->get_buffer (_samples_per_period), 0, _samples_per_period * sizeof (Sample));
 			}
 
+			m_last_cycle_start = m_cycle_timer.get_start ();
+			m_cycle_timer.reset_start(utils::get_microseconds());
+			m_cycle_count++;
+
+			uint64_t cycle_diff_us = (m_cycle_timer.get_start () - m_last_cycle_start);
+			int64_t deviation_us = (cycle_diff_us - m_cycle_timer.get_length_us());
+			m_total_deviation_us += ::llabs(deviation_us);
+			m_max_deviation_us =
+				std::max (m_max_deviation_us, (uint64_t)::llabs (deviation_us));
+
+			if ((m_cycle_count % 1000) == 0) {
+				uint64_t mean_deviation_us = m_total_deviation_us / m_cycle_count;
+				DEBUG_TIMING (
+				    string_compose ("Mean avg cycle deviation: %1(ms), max %2(ms)\n",
+				                    mean_deviation_us * 1e-3,
+				                    m_max_deviation_us * 1e-3));
+			}
+
+			if (::llabs(deviation_us) > m_cycle_timer.get_length_us()) {
+				DEBUG_TIMING (string_compose (
+				    "time between process(ms): %1, Est(ms): %2, Dev(ms): %3\n",
+				    cycle_diff_us * 1e-3,
+				    m_cycle_timer.get_length_us () * 1e-3,
+				    deviation_us * 1e-3));
+			}
+
 			/* call engine process callback */
-			_last_process_start = g_get_monotonic_time();
 			if (engine.process_callback (_samples_per_period)) {
 				_pcmio->pcm_stop ();
 				_active = false;
 				return 0;
 			}
-#if 0
 			/* mixdown midi */
 			for (std::vector<PamPort*>::iterator it = _system_midi_out.begin (); it != _system_midi_out.end (); ++it) {
-				static_cast<PortBackendMidiPort*>(*it)->next_period();
+				static_cast<PortMidiPort*>(*it)->next_period();
 			}
-
 			/* queue outgoing midi */
 			i = 0;
 			for (std::vector<PamPort*>::const_iterator it = _system_midi_out.begin (); it != _system_midi_out.end (); ++it, ++i) {
-				// TODO
+				const PortMidiBuffer* src = static_cast<const PortMidiPort*>(*it)->const_buffer();
+
+				for (PortMidiBuffer::const_iterator mit = src->begin (); mit != src->end (); ++mit) {
+					uint64_t timestamp =
+					    m_cycle_timer.timestamp_from_sample_offset ((*mit)->timestamp ());
+					DEBUG_MIDI (
+					    string_compose ("Queuing outgoing MIDI data for device: "
+					                    "%1 sample_offset: %2 timestamp: %3, size: %4\n",
+					                    _midiio->get_outputs ()[i]->name (),
+					                    (*mit)->timestamp (),
+					                    timestamp,
+					                    (*mit)->size ()));
+					_midiio->enqueue_output_event (
+					    i, timestamp, (*mit)->data (), (*mit)->size ());
+				}
 			}
-#endif
 
 			/* write back audio */
 			i = 0;
@@ -1202,10 +1508,19 @@ PortAudioBackend::main_process_thread ()
 			_processed_samples += _samples_per_period;
 
 			/* calculate DSP load */
-			clock2 = g_get_monotonic_time();
+			clock2 = utils::get_microseconds ();
 			const int64_t elapsed_time = clock2 - clock1;
 			_dsp_load = elapsed_time / (float) nomial_time;
 
+			max_elapsed_us = std::max (elapsed_time, max_elapsed_us);
+			min_elapsed_us = std::min (elapsed_time, min_elapsed_us);
+			if ((m_cycle_count % 1000) == 0) {
+				DEBUG_TIMING (
+				    string_compose ("Elapsed process time(usecs) max: %1, min: %2\n",
+				                    max_elapsed_us,
+				                    min_elapsed_us));
+			}
+
 		} else {
 			// Freewheelin'
 
@@ -1214,11 +1529,10 @@ PortAudioBackend::main_process_thread ()
 				memset ((*it)->get_buffer (_samples_per_period), 0, _samples_per_period * sizeof (Sample));
 			}
 
-			clock1 = g_get_monotonic_time();
+			clock1 = utils::get_microseconds ();
 
 			// TODO clear midi or stop midi recv when entering fwheelin'
 
-			_last_process_start = 0;
 			if (engine.process_callback (_samples_per_period)) {
 				_pcmio->pcm_stop ();
 				_active = false;
@@ -1270,6 +1584,11 @@ PortAudioBackend::main_process_thread ()
 	if (_run) {
 		engine.halted_callback("PortAudio I/O error.");
 	}
+
+#ifdef USE_MMCSS_THREAD_PRIORITIES
+	mmcss::revert_thread_characteristics (task_handle);
+#endif
+
 	return 0;
 }
 
diff --git a/libs/backends/portaudio/portaudio_backend.h b/libs/backends/portaudio/portaudio_backend.h
index 36aebe0..f1ff790 100644
--- a/libs/backends/portaudio/portaudio_backend.h
+++ b/libs/backends/portaudio/portaudio_backend.h
@@ -33,6 +33,8 @@
 #include "ardour/types.h"
 
 #include "portaudio_io.h"
+#include "winmmemidi_io.h"
+#include "cycle_timer.h"
 
 namespace ARDOUR {
 
@@ -63,9 +65,11 @@ class PamPort { // PortAudio / PortMidi Backend Port
 		virtual ~PamPort ();
 
 		const std::string& name () const { return _name; }
+		const std::string& pretty_name () const { return _pretty_name; }
 		PortFlags flags () const { return _flags; }
 
 		int set_name (const std::string &name) { _name = name; return 0; }
+		int set_pretty_name (const std::string& name) { _pretty_name = name; return 0;}
 
 		virtual DataType type () const = 0;
 
@@ -105,6 +109,7 @@ class PamPort { // PortAudio / PortMidi Backend Port
 	private:
 		PortAudioBackend &_osx_backend;
 		std::string _name;
+		std::string _pretty_name;
 		const PortFlags _flags;
 		LatencyRange _capture_latency_range;
 		LatencyRange _playback_latency_range;
@@ -160,7 +165,16 @@ class PortAudioBackend : public AudioBackend {
 		std::string name () const;
 		bool is_realtime () const;
 
+		bool requires_driver_selection() const;
+		std::string driver_name () const;
+		std::vector<std::string> enumerate_drivers () const;
+		int set_driver (const std::string&);
+
+		bool use_separate_input_and_output_devices () const;
 		std::vector<DeviceStatus> enumerate_devices () const;
+		std::vector<DeviceStatus> enumerate_input_devices () const;
+		std::vector<DeviceStatus> enumerate_output_devices () const;
+
 		std::vector<float> available_sample_rates (const std::string& device) const;
 		std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
 		uint32_t available_input_channel_count (const std::string& device) const;
@@ -170,6 +184,8 @@ class PortAudioBackend : public AudioBackend {
 		bool can_change_buffer_size_when_running () const;
 
 		int set_device_name (const std::string&);
+		int set_input_device_name (const std::string&);
+		int set_output_device_name (const std::string&);
 		int set_sample_rate (float);
 		int set_buffer_size (uint32_t);
 		int set_interleaved (bool yn);
@@ -184,6 +200,8 @@ class PortAudioBackend : public AudioBackend {
 
 		/* Retrieving parameters */
 		std::string  device_name () const;
+		std::string  input_device_name () const;
+		std::string  output_device_name () const;
 		float        sample_rate () const;
 		uint32_t     buffer_size () const;
 		bool         interleaved () const;
@@ -197,8 +215,8 @@ class PortAudioBackend : public AudioBackend {
 		bool can_set_systemic_midi_latencies () const { return false; }
 
 		/* External control app */
-		std::string control_app_name () const { return std::string (); }
-		void launch_control_app () {}
+		std::string control_app_name () const;
+		void launch_control_app ();
 
 		/* MIDI */
 		std::vector<std::string> enumerate_midi_options () const;
@@ -246,6 +264,7 @@ class PortAudioBackend : public AudioBackend {
 		int         set_port_name (PortHandle, const std::string&);
 		std::string get_port_name (PortHandle) const;
 		PortHandle  get_port_by_name (const std::string&) const;
+		int get_port_property (PortHandle, const std::string& key, std::string& value, std::string& type) const;
 
 		int get_ports (const std::string& port_name_pattern, DataType type, PortFlags flags, std::vector<std::string>&) const;
 
@@ -300,6 +319,7 @@ class PortAudioBackend : public AudioBackend {
 	private:
 		std::string _instance_name;
 		PortAudioIO *_pcmio;
+		WinMMEMidiIO *_midiio;
 
 		bool  _run; /* keep going or stop, ardour thread */
 		bool  _active; /* is running, process thread */
@@ -307,13 +327,20 @@ class PortAudioBackend : public AudioBackend {
 		bool  _freewheeling;
 		bool  _measure_latency;
 
-		uint64_t _last_process_start;
+		uint64_t m_cycle_count;
+		uint64_t m_total_deviation_us;
+		uint64_t m_max_deviation_us;
+
+		CycleTimer m_cycle_timer;
+		uint64_t m_last_cycle_start;
 
 		static std::vector<std::string> _midi_options;
-		static std::vector<AudioBackend::DeviceStatus> _audio_device_status;
+		static std::vector<AudioBackend::DeviceStatus> _input_audio_device_status;
+		static std::vector<AudioBackend::DeviceStatus> _output_audio_device_status;
 		static std::vector<AudioBackend::DeviceStatus> _midi_device_status;
 
-		mutable std::string _audio_device;
+		mutable std::string _input_audio_device;
+		mutable std::string _output_audio_device;
 		std::string _midi_driver_option;
 
 		/* audio settings */
@@ -351,6 +378,7 @@ class PortAudioBackend : public AudioBackend {
 		/* port engine */
 		PortHandle add_port (const std::string& shortname, ARDOUR::DataType, ARDOUR::PortFlags);
 		int register_system_audio_ports ();
+		int register_system_midi_ports ();
 		void unregister_ports (bool system_only = false);
 
 		std::vector<PamPort *> _ports;
diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc
index 18a676f..809666f 100644
--- a/libs/backends/portaudio/portaudio_io.cc
+++ b/libs/backends/portaudio/portaudio_io.cc
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 Robin Gareus <robin at gareus.org>
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,8 +21,17 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <glibmm.h>
 #include "portaudio_io.h"
 
+#ifdef WITH_ASIO
+#include "pa_asio.h"
+#endif
+
+#include "pbd/compose.h"
+
+#include "debug.h"
+
 #define INTERLEAVED_INPUT
 #define INTERLEAVED_OUTPUT
 
@@ -38,6 +48,7 @@ PortAudioIO::PortAudioIO ()
 	, _cur_sample_rate (0)
 	, _cur_input_latency (0)
 	, _cur_output_latency (0)
+	, _host_api_index(-1)
 {
 }
 
@@ -50,30 +61,64 @@ PortAudioIO::~PortAudioIO ()
 		Pa_Terminate();
 	}
 
-	for (std::map<int, paDevice*>::const_iterator i = _devices.begin (); i != _devices.end(); ++i) {
-		delete i->second;
-	}
-	_devices.clear();
+	clear_device_lists ();
 
 	free (_input_buffer); _input_buffer = NULL;
 	free (_output_buffer); _output_buffer = NULL;
 }
 
+std::string
+PortAudioIO::control_app_name (int device_id) const
+{
+	const PaHostApiInfo* info = Pa_GetHostApiInfo (_host_api_index);
+	std::string app_name;
+
+	if (info == NULL) {
+		DEBUG_AUDIO (string_compose ("Unable to determine Host API from index %1\n",
+		                             _host_api_index));
+		return app_name;
+	}
+
+	PaHostApiTypeId type_id = info->type;
+
+#ifdef WITH_ASIO
+	if (type_id == paASIO) {
+		// is this used for anything, or just acts as a boolean?
+		return "PortaudioASIO";
+	}
+#endif
+
+	return app_name;
+}
+
+void
+PortAudioIO::launch_control_app (int device_id)
+{
+#ifdef WITH_ASIO
+	PaError err = PaAsio_ShowControlPanel (device_id, NULL);
+
+	if (err != paNoError) {
+		// error << ?
+		DEBUG_AUDIO (string_compose (
+		    "Unable to show control panel for device with index %1\n", device_id));
+	}
+#endif
+}
 
 int
 PortAudioIO::available_sample_rates(int device_id, std::vector<float>& sampleRates)
 {
 	static const float ardourRates[] = { 8000.0, 22050.0, 24000.0, 44100.0, 48000.0, 88200.0, 96000.0, 176400.0, 192000.0};
 
-	assert(_initialized);
+	if (!initialize_pa()) return -1;
 
 	// TODO use  separate int device_input, int device_output ?!
 	if (device_id == -1) {
-		device_id = Pa_GetDefaultInputDevice();
+		device_id = get_default_input_device ();
 	}
-#ifndef NDEBUG
-	printf("PortAudio: Querying Samplerates for device %d\n", device_id);
-#endif
+
+	DEBUG_AUDIO (
+	    string_compose ("Querying Samplerates for device %1\n", device_id));
 
 	sampleRates.clear();
 	const PaDeviceInfo* nfo = Pa_GetDeviceInfo(device_id);
@@ -113,87 +158,353 @@ PortAudioIO::available_sample_rates(int device_id, std::vector<float>& sampleRat
 	return 0;
 }
 
-int
-PortAudioIO::available_buffer_sizes(int device_id, std::vector<uint32_t>& bufferSizes)
+#ifdef WITH_ASIO
+bool
+PortAudioIO::get_asio_buffer_properties (int device_id,
+                                         long& min_size_frames,
+                                         long& max_size_frames,
+                                         long& preferred_size_frames,
+                                         long& granularity)
+{
+	// we shouldn't really need all these checks but it shouldn't hurt
+	const PaDeviceInfo* device_info = Pa_GetDeviceInfo(device_id);
+
+	if (!device_info) {
+		DEBUG_AUDIO (string_compose (
+		    "Unable to get device info from device index %1\n", device_id));
+		return false;
+	}
+
+	const PaHostApiInfo* info = Pa_GetHostApiInfo (device_info->hostApi);
+
+	if (info == NULL) {
+		DEBUG_AUDIO (string_compose (
+		    "Unable to determine Host API from device index %1\n", device_id));
+		return false;
+	}
+
+	if (info->type != paASIO) {
+		DEBUG_AUDIO (string_compose (
+		    "ERROR device_id %1 is not an ASIO device\n", device_id));
+		return false;
+	}
+
+	PaError err = PaAsio_GetAvailableBufferSizes (device_id,
+	                                              &min_size_frames,
+	                                              &max_size_frames,
+	                                              &preferred_size_frames,
+	                                              &granularity);
+
+	if (err != paNoError) {
+		DEBUG_AUDIO (string_compose (
+		    "Unable to determine available buffer sizes for device %1\n", device_id));
+		return false;
+	}
+	return true;
+}
+
+bool
+PortAudioIO::get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes)
+{
+	long min_size_frames = 0;
+	long max_size_frames = 0;
+	long preferred_size_frames = 0;
+	long granularity = 0;
+
+	if (!get_asio_buffer_properties (device_id,
+	                                 min_size_frames,
+	                                 max_size_frames,
+	                                 preferred_size_frames,
+	                                 granularity)) {
+		DEBUG_AUDIO (string_compose (
+		    "Unable to get device buffer properties from device index %1\n", device_id));
+		return false;
+	}
+
+	DEBUG_AUDIO (string_compose ("ASIO buffer properties for device %1, "
+	                             "min_size_frames: %2, max_size_frames: %3, "
+	                             "preferred_size_frames: %4, granularity: %5\n",
+	                             device_id,
+	                             min_size_frames,
+	                             max_size_frames,
+	                             preferred_size_frames,
+	                             granularity));
+
+#ifdef USE_ASIO_MIN_MAX_BUFFER_SIZES
+	if (min_size_frames >= max_size_frames) {
+		buffer_sizes.push_back (preferred_size_frames);
+		return true;
+	}
+
+	long buffer_size = min_size_frames;
+	while (buffer_size <= max_size_frames) {
+		buffer_sizes.push_back (buffer_size);
+
+		if (granularity <= 0) {
+			// buffer sizes are power of 2
+			buffer_size = buffer_size * 2;
+		} else {
+			buffer_size += granularity;
+		}
+	}
+#else
+	buffer_sizes.push_back (preferred_size_frames);
+#endif
+	return true;
+}
+#endif
+
+bool
+PortAudioIO::get_default_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes)
 {
-	// TODO
 	static const uint32_t ardourSizes[] = { 64, 128, 256, 512, 1024, 2048, 4096 };
 	for(uint32_t i = 0; i < sizeof(ardourSizes)/sizeof(uint32_t); ++i) {
-		bufferSizes.push_back (ardourSizes[i]);
+		buffer_sizes.push_back (ardourSizes[i]);
 	}
+	return true;
+}
+
+int
+PortAudioIO::available_buffer_sizes(int device_id, std::vector<uint32_t>& buffer_sizes)
+{
+#ifdef WITH_ASIO
+	const PaHostApiInfo* info = Pa_GetHostApiInfo (_host_api_index);
+
+	if (info == NULL) {
+		DEBUG_AUDIO (string_compose ("Unable to determine Host API from index %1\n",
+		                             _host_api_index));
+		return -1;
+	}
+
+	PaHostApiTypeId type_id = info->type;
+
+	if (type_id == paASIO) {
+		if (get_asio_buffer_sizes (device_id, buffer_sizes)) {
+			return 0;
+		}
+	}
+#endif
+
+	get_default_buffer_sizes (device_id, buffer_sizes);
+
 	return 0;
 }
 
 void
-PortAudioIO::device_list (std::map<int, std::string> &devices) const {
-	devices.clear();
-	for (std::map<int, paDevice*>::const_iterator i = _devices.begin (); i != _devices.end(); ++i) {
-		devices.insert (std::pair<int, std::string> (i->first, i->second->name));
+PortAudioIO::input_device_list(std::map<int, std::string> &devices) const
+{
+	for (std::map<int, paDevice*>::const_iterator i = _input_devices.begin ();
+	     i != _input_devices.end ();
+	     ++i) {
+		devices.insert (std::pair<int, std::string>(i->first, Glib::locale_to_utf8(i->second->name)));
 	}
 }
 
 void
-PortAudioIO::discover()
+PortAudioIO::output_device_list(std::map<int, std::string> &devices) const
 {
-	for (std::map<int, paDevice*>::const_iterator i = _devices.begin (); i != _devices.end(); ++i) {
-		delete i->second;
+	for (std::map<int, paDevice*>::const_iterator i = _output_devices.begin ();
+	     i != _output_devices.end ();
+	     ++i) {
+		devices.insert (std::pair<int, std::string>(i->first, Glib::locale_to_utf8(i->second->name)));
 	}
-	_devices.clear();
-	
+}
+
+bool
+PortAudioIO::initialize_pa ()
+{
 	PaError err = paNoError;
 
 	if (!_initialized) {
 		err = Pa_Initialize();
+		if (err != paNoError) {
+			return false;
+		}
+		_initialized = true;
+		_host_api_index = Pa_GetDefaultHostApi ();
+		_host_api_name = get_host_api_name_from_index (_host_api_index);
 	}
-	if (err != paNoError) {
-		return;
+
+	return true;
+}
+
+void
+PortAudioIO::host_api_list (std::vector<std::string>& api_list)
+{
+	if (!initialize_pa()) return;
+
+	PaHostApiIndex count = Pa_GetHostApiCount();
+
+	if (count < 0) return;
+
+	for (int i = 0; i < count; ++i) {
+		const PaHostApiInfo* info = Pa_GetHostApiInfo (i);
+		if (info->name != NULL) { // possible?
+			api_list.push_back (info->name);
+		}
 	}
+}
 
-	_initialized = true;
+std::string
+PortAudioIO::get_host_api_name_from_index (PaHostApiIndex index)
+{
+	std::vector<std::string> api_list;
+	host_api_list(api_list);
+	return api_list[index];
+}
 
-	{
-		const PaDeviceInfo* nfo_i = Pa_GetDeviceInfo(Pa_GetDefaultInputDevice());
-		const PaDeviceInfo* nfo_o = Pa_GetDeviceInfo(Pa_GetDefaultOutputDevice());
-		if (nfo_i && nfo_o) {
-			_devices.insert (std::pair<int, paDevice*> (-1,
-						new paDevice("Default",
-							nfo_i->maxInputChannels,
-							nfo_o->maxOutputChannels
-							)));
+bool
+PortAudioIO::set_host_api (const std::string& host_api_name)
+{
+	PaHostApiIndex new_index = get_host_api_index_from_name (host_api_name);
+
+	if (new_index < 0) {
+		DEBUG_AUDIO ("Portaudio: Error setting host API\n");
+		return false;
+	}
+	_host_api_index = new_index;
+	_host_api_name = host_api_name;
+	return true;
+}
+
+PaHostApiIndex
+PortAudioIO::get_host_api_index_from_name (const std::string& name)
+{
+	if (!initialize_pa()) return -1;
+
+	PaHostApiIndex count = Pa_GetHostApiCount();
+
+	if (count < 0) {
+		DEBUG_AUDIO ("Host API count < 0\n");
+		return -1;
+	}
+
+	for (int i = 0; i < count; ++i) {
+		const PaHostApiInfo* info = Pa_GetHostApiInfo (i);
+		if (info != NULL && info->name != NULL) { // possible?
+			if (name == info->name) {
+				return i;
+			}
 		}
 	}
+	DEBUG_AUDIO (string_compose ("Unable to get host API from name: %1\n", name));
+
+	return -1;
+}
+
+PaDeviceIndex
+PortAudioIO::get_default_input_device ()
+{
+	const PaHostApiInfo* info = Pa_GetHostApiInfo (_host_api_index);
+	if (info == NULL) return -1;
+	return info->defaultInputDevice;
+}
+
+PaDeviceIndex
+PortAudioIO::get_default_output_device ()
+{
+	const PaHostApiInfo* info = Pa_GetHostApiInfo (_host_api_index);
+	if (info == NULL) return -1;
+	return info->defaultOutputDevice;
+}
+
+void
+PortAudioIO::clear_device_lists ()
+{
+	for (std::map<int, paDevice*>::const_iterator i = _input_devices.begin (); i != _input_devices.end(); ++i) {
+		delete i->second;
+	}
+	_input_devices.clear();
+
+	for (std::map<int, paDevice*>::const_iterator i = _output_devices.begin (); i != _output_devices.end(); ++i) {
+		delete i->second;
+	}
+	_output_devices.clear();
+}
+
+void
+PortAudioIO::add_default_devices ()
+{
+	const PaHostApiInfo* info = Pa_GetHostApiInfo (_host_api_index);
+	if (info == NULL) return;
+
+	const PaDeviceInfo* nfo_i = Pa_GetDeviceInfo(get_default_input_device());
+	const PaDeviceInfo* nfo_o = Pa_GetDeviceInfo(get_default_output_device());
+	if (nfo_i && nfo_o) {
+		_input_devices.insert (std::pair<int, paDevice*> (-1,
+					new paDevice("Default",
+						nfo_i->maxInputChannels,
+						nfo_o->maxOutputChannels
+						)));
+		_output_devices.insert (std::pair<int, paDevice*> (-1,
+					new paDevice("Default",
+						nfo_i->maxInputChannels,
+						nfo_o->maxOutputChannels
+						)));
+	}
+}
+
+void
+PortAudioIO::add_devices ()
+{
+	const PaHostApiInfo* info = Pa_GetHostApiInfo (_host_api_index);
+	if (info == NULL) return;
 
 	int n_devices = Pa_GetDeviceCount();
-#ifndef NDEBUG
-	printf("PortAudio %d devices found:\n", n_devices);
-#endif
+
+	DEBUG_AUDIO (string_compose ("PortAudio found %1 devices\n", n_devices));
 
 	for (int i = 0 ; i < n_devices; ++i) {
 		const PaDeviceInfo* nfo = Pa_GetDeviceInfo(i);
+
 		if (!nfo) continue;
-#ifndef NDEBUG
-		printf(" (%d) '%s' in: %d (lat: %.1f .. %.1f) out: %d (lat: %.1f .. %.1f) sr:%.2f\n",
-				i, nfo->name,
-				nfo->maxInputChannels,
-				nfo->defaultLowInputLatency * 1e3,
-				nfo->defaultHighInputLatency * 1e3,
-				nfo->maxOutputChannels,
-				nfo->defaultLowOutputLatency * 1e3,
-				nfo->defaultHighOutputLatency * 1e3,
-				nfo->defaultSampleRate);
-#endif
+		if (nfo->hostApi != _host_api_index) continue;
+
+		DEBUG_AUDIO (string_compose (" (%1) '%2' '%3' in: %4 (lat: %5 .. %6) out: %7 "
+		                             "(lat: %8 .. %9) sr:%10\n",
+		                             i,
+		                             info->name,
+		                             nfo->name,
+		                             nfo->maxInputChannels,
+		                             nfo->defaultLowInputLatency * 1e3,
+		                             nfo->defaultHighInputLatency * 1e3,
+		                             nfo->maxOutputChannels,
+		                             nfo->defaultLowOutputLatency * 1e3,
+		                             nfo->defaultHighOutputLatency * 1e3,
+		                             nfo->defaultSampleRate));
+
 		if ( nfo->maxInputChannels == 0 && nfo->maxOutputChannels == 0) {
 			continue;
 		}
-		_devices.insert (std::pair<int, paDevice*> (i, new paDevice(
-						nfo->name,
-						nfo->maxInputChannels,
-						nfo->maxOutputChannels
-						)));
+
+		if (nfo->maxInputChannels > 0) {
+			_input_devices.insert (std::pair<int, paDevice*> (i, new paDevice(
+							nfo->name,
+							nfo->maxInputChannels,
+							nfo->maxOutputChannels
+							)));
+		}
+		if (nfo->maxOutputChannels > 0) {
+			_output_devices.insert (std::pair<int, paDevice*> (i, new paDevice(
+							nfo->name,
+							nfo->maxInputChannels,
+							nfo->maxOutputChannels
+							)));
+		}
 	}
 }
 
 void
+PortAudioIO::discover()
+{
+	DEBUG_AUDIO ("PortAudio: discover\n");
+	if (!initialize_pa()) return;
+
+	clear_device_lists ();
+	add_devices ();
+}
+
+void
 PortAudioIO::pcm_stop ()
 {
 	if (_stream) {
@@ -244,28 +555,21 @@ PortAudioIO::pcm_setup (
 {
 	_state = -2;
 
-	// TODO error reporting sans fprintf()
-
 	PaError err = paNoError;
 	const PaDeviceInfo *nfo_in;
 	const PaDeviceInfo *nfo_out;
 	const PaStreamInfo *nfo_s;
 		
-	if (!_initialized) {
-		err = Pa_Initialize();
-	}
-	if (err != paNoError) {
-		fprintf(stderr, "PortAudio Initialization Failed\n");
+	if (!initialize_pa()) {
+		DEBUG_AUDIO ("PortAudio Initialization Failed\n");
 		goto error;
 	}
-	_initialized = true;
-
 
 	if (device_input == -1) {
-		device_input = Pa_GetDefaultInputDevice();
+		device_input = get_default_input_device ();
 	}
 	if (device_output == -1) {
-		device_output = Pa_GetDefaultOutputDevice();
+		device_output = get_default_output_device ();
 	}
 
 	_capture_channels = 0;
@@ -274,15 +578,14 @@ PortAudioIO::pcm_setup (
 	_cur_input_latency = 0;
 	_cur_output_latency = 0;
 
-#ifndef NDEBUG
-	printf("PortAudio Device IDs: i:%d o:%d\n", device_input, device_output);
-#endif
+	DEBUG_AUDIO (string_compose (
+	    "PortAudio Device IDs: i:%1 o:%2\n", device_input, device_output));
 
 	nfo_in = Pa_GetDeviceInfo(device_input);
 	nfo_out = Pa_GetDeviceInfo(device_output);
 
 	if (!nfo_in && ! nfo_out) {
-		fprintf(stderr, "PortAudio Cannot Query Device Info\n");
+		DEBUG_AUDIO ("PortAudio Cannot Query Device Info\n");
 		goto error;
 	}
 
@@ -294,29 +597,29 @@ PortAudioIO::pcm_setup (
 	}
 
 	if(_capture_channels == 0 && _playback_channels == 0) {
-		fprintf(stderr, "PortAudio no Input and no output channels.\n");
+		DEBUG_AUDIO ("PortAudio no input or output channels.\n");
 		goto error;
 	}
 
-
 #ifdef __APPLE__
 	// pa_mac_core_blocking.c pa_stable_v19_20140130
 	// BUG: ringbuffer alloc requires power-of-two chn count.
 	if ((_capture_channels & (_capture_channels - 1)) != 0) {
-		printf("Adjusted capture channes to power of two (portaudio rb bug)\n");
+		DEBUG_AUDIO (
+		    "Adjusted capture channels to power of two (portaudio rb bug)\n");
 		_capture_channels = lower_power_of_two (_capture_channels);
 	}
 
 	if ((_playback_channels & (_playback_channels - 1)) != 0) {
-		printf("Adjusted capture channes to power of two (portaudio rb bug)\n");
+		DEBUG_AUDIO (
+		    "Adjusted capture channels to power of two (portaudio rb bug)\n");
 		_playback_channels = lower_power_of_two (_playback_channels);
 	}
 #endif
-	
-#ifndef NDEBUG
-	printf("PortAudio Channels: in:%d out:%d\n",
-			_capture_channels, _playback_channels);
-#endif
+
+	DEBUG_AUDIO (string_compose ("PortAudio Channels: in:%1 out:%2\n",
+	                             _capture_channels,
+	                             _playback_channels));
 
 	PaStreamParameters inputParam;
 	PaStreamParameters outputParam;
@@ -352,17 +655,17 @@ PortAudioIO::pcm_setup (
 			_playback_channels > 0 ? &outputParam: NULL,
 			sample_rate,
 			samples_per_period,
-			paClipOff | paDitherOff,
+			paDitherOff,
 			NULL, NULL);
 
 	if (err != paNoError) {
-		fprintf(stderr, "PortAudio failed to start stream.\n");
+		DEBUG_AUDIO ("PortAudio failed to start stream.\n");
 		goto error;
 	}
 
 	nfo_s = Pa_GetStreamInfo (_stream);
 	if (!nfo_s) {
-		fprintf(stderr, "PortAudio failed to query stream information.\n");
+		DEBUG_AUDIO ("PortAudio failed to query stream information.\n");
 		pcm_stop();
 		goto error;
 	}
@@ -371,18 +674,22 @@ PortAudioIO::pcm_setup (
 	_cur_input_latency = nfo_s->inputLatency * _cur_sample_rate;
 	_cur_output_latency = nfo_s->outputLatency * _cur_sample_rate;
 
-#ifndef NDEBUG
-	printf("PA Sample Rate  %.1f SPS\n", _cur_sample_rate);
-	printf("PA Input Latency  %.1fms  %d spl\n", 1e3 * nfo_s->inputLatency, _cur_input_latency);
-	printf("PA Output Latency %.1fms  %d spl\n", 1e3 * nfo_s->outputLatency, _cur_output_latency);
-#endif
+	DEBUG_AUDIO (string_compose ("PA Sample Rate %1 SPS\n", _cur_sample_rate));
+
+	DEBUG_AUDIO (string_compose ("PA Input Latency %1ms, %2 spl\n",
+	                             1e3 * nfo_s->inputLatency,
+	                             _cur_input_latency));
+
+	DEBUG_AUDIO (string_compose ("PA Output Latency %1ms, %2 spl\n",
+	                             1e3 * nfo_s->outputLatency,
+	                             _cur_output_latency));
 
 	_state = 0;
 
 	if (_capture_channels > 0) {
 		_input_buffer = (float*) malloc (samples_per_period * _capture_channels * sizeof(float));
 		if (!_input_buffer) {
-			fprintf(stderr, "PortAudio failed to allocate input buffer.\n");
+			DEBUG_AUDIO ("PortAudio failed to allocate input buffer.\n");
 			pcm_stop();
 			goto error;
 		}
@@ -391,7 +698,7 @@ PortAudioIO::pcm_setup (
 	if (_playback_channels > 0) {
 		_output_buffer = (float*) calloc (samples_per_period * _playback_channels, sizeof(float));
 		if (!_output_buffer) {
-			fprintf(stderr, "PortAudio failed to allocate output buffer.\n");
+			DEBUG_AUDIO ("PortAudio failed to allocate output buffer.\n");
 			pcm_stop();
 			goto error;
 		}
@@ -404,7 +711,6 @@ error:
 	_playback_channels = 0;
 	free (_input_buffer); _input_buffer = NULL;
 	free (_output_buffer); _output_buffer = NULL;
-	Pa_Terminate();
 	return -1;
 }
 
@@ -440,6 +746,47 @@ PortAudioIO::next_cycle (uint32_t n_samples)
 	return xrun ? 1 : 0;
 }
 
+std::string
+PortAudioIO::get_input_channel_name (int device_id, uint32_t channel) const
+{
+#ifdef WITH_ASIO
+	const char* channel_name;
+
+	// This will return an error for non-ASIO devices so no need to check if
+	// the device_id corresponds to an ASIO device.
+	PaError err = PaAsio_GetInputChannelName (device_id, channel, &channel_name);
+
+	if (err == paNoError) {
+		DEBUG_AUDIO (
+		    string_compose ("Input channel name for device %1, channel %2 is %3\n",
+		                    device_id,
+		                    channel,
+		                    channel_name));
+		return channel_name;
+	}
+#endif
+	return std::string();
+}
+
+std::string
+PortAudioIO::get_output_channel_name (int device_id, uint32_t channel) const
+{
+#ifdef WITH_ASIO
+	const char* channel_name;
+
+	PaError err = PaAsio_GetOutputChannelName (device_id, channel, &channel_name);
+
+	if (err == paNoError) {
+		DEBUG_AUDIO (
+		    string_compose ("Output channel name for device %1, channel %2 is %3\n",
+		                    device_id,
+		                    channel,
+		                    channel_name));
+		return channel_name;
+	}
+#endif
+	return std::string();
+}
 
 #ifdef INTERLEAVED_INPUT
 
diff --git a/libs/backends/portaudio/portaudio_io.h b/libs/backends/portaudio/portaudio_io.h
index 532dc66..f5ee897 100644
--- a/libs/backends/portaudio/portaudio_io.h
+++ b/libs/backends/portaudio/portaudio_io.h
@@ -37,12 +37,36 @@ public:
 
 	int      state (void) const { return _state; }
 
+	bool     initialize_pa ();
+
+	void host_api_list (std::vector<std::string>&);
+	bool set_host_api (const std::string& host_api_name);
+	std::string get_host_api () const { return _host_api_name; }
+	PaHostApiIndex get_host_api_index_from_name (const std::string& name);
+
+	PaDeviceIndex get_default_input_device ();
+	PaDeviceIndex get_default_output_device ();
+
 	void     discover();
-	void     device_list (std::map<int, std::string> &devices) const;
+	void     input_device_list (std::map<int, std::string> &devices) const;
+	void     output_device_list (std::map<int, std::string> &devices) const;
 
-	int      available_sample_rates (int device_id, std::vector<float>& sampleRates);
-	int      available_buffer_sizes (int device_id, std::vector<uint32_t>& sampleRates);
+	int available_sample_rates (int device_id, std::vector<float>& sample_rates);
+	int available_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes);
 
+	bool get_default_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_sizes);
+#ifdef WITH_ASIO
+	bool get_asio_buffer_properties (int device_id,
+	                                 long& min_size_frames,
+	                                 long& max_size_frames,
+	                                 long& preferred_size_frames,
+	                                 long& granularity);
+
+	bool get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_size);
+#endif
+
+	std::string control_app_name (int device_id) const;
+	void launch_control_app (int device_id);
 
 	void     pcm_stop (void);
 	int      pcm_start (void);
@@ -57,6 +81,9 @@ public:
 	uint32_t n_playback_channels (void) const { return _playback_channels; }
 	uint32_t n_capture_channels (void) const { return _capture_channels; }
 
+	std::string get_input_channel_name (int device_id, uint32_t channel) const;
+	std::string get_output_channel_name (int device_id, uint32_t channel) const;
+
 	double   sample_rate (void) const { return _cur_sample_rate; }
 	uint32_t capture_latency (void) const { return _cur_input_latency; }
 	uint32_t playback_latency (void) const { return _cur_output_latency; }
@@ -66,7 +93,14 @@ public:
 	int      get_capture_channel (uint32_t chn, float *input, uint32_t n_samples);
 	int      set_playback_channel (uint32_t chn, const float *input, uint32_t n_samples);
 
-private:
+private: // Methods
+
+	void clear_device_lists ();
+	void add_default_devices ();
+	void add_devices ();
+	std::string get_host_api_name_from_index (PaHostApiIndex index);
+
+private: // Data
 	int  _state;
 	bool _initialized;
 
@@ -82,7 +116,6 @@ private:
 	uint32_t _cur_input_latency;
 	uint32_t _cur_output_latency;
 
-
 	struct paDevice {
 		std::string name;
 		uint32_t n_inputs;
@@ -95,7 +128,12 @@ private:
 		{}
 	};
 
-	std::map<int, paDevice *> _devices;
+	std::map<int, paDevice *> _input_devices;
+	std::map<int, paDevice *> _output_devices;
+
+	PaHostApiIndex _host_api_index;
+	std::string _host_api_name;
+
 };
 
 } // namespace
diff --git a/libs/backends/portaudio/win_utils.cc b/libs/backends/portaudio/win_utils.cc
new file mode 100644
index 0000000..3b98582
--- /dev/null
+++ b/libs/backends/portaudio/win_utils.cc
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "win_utils.h"
+
+#include <windows.h>
+#include <mmsystem.h>
+
+#include "pbd/compose.h"
+
+#include "debug.h"
+
+namespace {
+
+LARGE_INTEGER
+get_frequency ()
+{
+	LARGE_INTEGER freq;
+	QueryPerformanceFrequency(&freq);
+	return freq;
+}
+
+
+UINT&
+old_timer_resolution ()
+{
+	static UINT timer_res_ms = 0;
+	return timer_res_ms;
+}
+
+} // anon namespace
+
+namespace utils {
+
+bool
+set_min_timer_resolution ()
+{
+	TIMECAPS caps;
+
+	if (timeGetDevCaps (&caps, sizeof(TIMECAPS)) != TIMERR_NOERROR) {
+		DEBUG_TIMING ("Could not get timer device capabilities.\n");
+		return false;
+	} else {
+		old_timer_resolution () = caps.wPeriodMin;
+		if (timeBeginPeriod (caps.wPeriodMin) != TIMERR_NOERROR) {
+			DEBUG_TIMING (string_compose (
+			    "Could not set minimum timer resolution to %1(ms)\n", caps.wPeriodMin));
+			return false;
+		}
+	}
+
+	DEBUG_TIMING (string_compose ("Multimedia timer resolution set to %1(ms)\n",
+	                              caps.wPeriodMin));
+
+	return true;
+}
+
+bool
+reset_timer_resolution ()
+{
+	if (old_timer_resolution ()) {
+		if (timeEndPeriod (old_timer_resolution ()) != TIMERR_NOERROR) {
+			DEBUG_TIMING ("Could not reset timer resolution.\n");
+			return false;
+		}
+	}
+
+	DEBUG_TIMING (string_compose ("Multimedia timer resolution set to %1(ms)\n",
+	                              old_timer_resolution ()));
+
+	return true;
+}
+
+uint64_t get_microseconds ()
+{
+	static LARGE_INTEGER frequency = get_frequency ();
+	LARGE_INTEGER current_val;
+
+	QueryPerformanceCounter (&current_val);
+
+	return (uint64_t)(((double)current_val.QuadPart) /
+	                  ((double)frequency.QuadPart) * 1000000.0);
+}
+
+} // namespace utils
diff --git a/libs/backends/alsa/select_sleep.h b/libs/backends/portaudio/win_utils.h
similarity index 58%
copy from libs/backends/alsa/select_sleep.h
copy to libs/backends/portaudio/win_utils.h
index ec6a93d..50576b9 100644
--- a/libs/backends/alsa/select_sleep.h
+++ b/libs/backends/portaudio/win_utils.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004,2014 Robin Gareus <robin at gareus.org>
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,20 +16,19 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include <stdint.h>
-#include <sys/select.h>
+#ifndef WIN_UTILS_H
+#define WIN_UTILS_H
+
+#include "stdint.h"
+
+namespace utils {
+
+bool set_min_timer_resolution ();
+
+bool reset_timer_resolution ();
+
+uint64_t get_microseconds ();
 
-/* select() sleeps _at most_ a given time.
- * (compared to usleep() or nanosleep() which sleep at least a given time)
- */
-static void select_sleep (uint64_t usec) {
-	if (usec <= 10) return;
-	fd_set fd;
-	int max_fd=0;
-	struct timeval tv;
-	tv.tv_sec = usec / 1000000;
-	tv.tv_usec = usec % 1000000;
-	FD_ZERO (&fd);
-	select (max_fd, &fd, NULL, NULL, &tv);
-	// on Linux, tv reflects the actual time slept.
 }
+
+#endif // WIN_UTILS_H
diff --git a/libs/backends/portaudio/winmmemidi_input_device.cc b/libs/backends/portaudio/winmmemidi_input_device.cc
new file mode 100644
index 0000000..d7a0a6d
--- /dev/null
+++ b/libs/backends/portaudio/winmmemidi_input_device.cc
@@ -0,0 +1,395 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "winmmemidi_input_device.h"
+
+#include <stdexcept>
+#include <cmath>
+
+#include "pbd/compose.h"
+
+#include "win_utils.h"
+#include "midi_util.h"
+
+#include "mmcss.h"
+
+#include "debug.h"
+
+static const uint32_t MIDI_BUFFER_SIZE = 32768;
+static const uint32_t SYSEX_BUFFER_SIZE = 32768;
+
+namespace ARDOUR {
+
+WinMMEMidiInputDevice::WinMMEMidiInputDevice (int index)
+	: m_handle(0)
+	, m_started(false)
+	, m_midi_buffer(new RingBuffer<uint8_t>(MIDI_BUFFER_SIZE))
+	, m_sysex_buffer(new uint8_t[SYSEX_BUFFER_SIZE])
+{
+	DEBUG_MIDI (string_compose ("Creating midi input device index: %1\n", index));
+
+	std::string error_msg;
+
+	if (!open (index, error_msg)) {
+		DEBUG_MIDI (error_msg);
+		throw std::runtime_error (error_msg);
+	}
+
+	// perhaps this should be called in open
+	if (!add_sysex_buffer (error_msg)) {
+		DEBUG_MIDI (error_msg);
+		std::string close_error;
+		if (!close (close_error)) {
+			DEBUG_MIDI (close_error);
+		}
+		throw std::runtime_error (error_msg);
+	}
+
+	set_device_name (index);
+}
+
+WinMMEMidiInputDevice::~WinMMEMidiInputDevice ()
+{
+	std::string error_msg;
+	if (!close (error_msg)) {
+		DEBUG_MIDI (error_msg);
+	}
+}
+
+bool
+WinMMEMidiInputDevice::open (UINT index, std::string& error_msg)
+{
+	MMRESULT result = midiInOpen (&m_handle,
+	                              index,
+	                              (DWORD_PTR) winmm_input_callback,
+	                              (DWORD_PTR) this,
+	                              CALLBACK_FUNCTION | MIDI_IO_STATUS);
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		return false;
+	}
+	DEBUG_MIDI (string_compose ("Opened MIDI device index %1\n", index));
+	return true;
+}
+
+bool
+WinMMEMidiInputDevice::close (std::string& error_msg)
+{
+	// return error message for first error encountered?
+	bool success = true;
+
+	MMRESULT result = midiInReset (m_handle);
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		DEBUG_MIDI (error_msg);
+		success = false;
+	}
+	result = midiInUnprepareHeader (m_handle, &m_sysex_header, sizeof(MIDIHDR));
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		DEBUG_MIDI (error_msg);
+		success = false;
+	}
+	result = midiInClose (m_handle);
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		DEBUG_MIDI (error_msg);
+		success = false;
+	}
+	m_handle = 0;
+	if (success) {
+		DEBUG_MIDI (string_compose ("Closed MIDI device: %1\n", name ()));
+	} else {
+		DEBUG_MIDI (string_compose ("Unable to Close MIDI device: %1\n", name ()));
+	}
+	return success;
+}
+
+bool
+WinMMEMidiInputDevice::add_sysex_buffer (std::string& error_msg)
+{
+	m_sysex_header.dwBufferLength = SYSEX_BUFFER_SIZE;
+	m_sysex_header.dwFlags = 0;
+	m_sysex_header.lpData = (LPSTR)m_sysex_buffer.get ();
+
+	MMRESULT result = midiInPrepareHeader (m_handle, &m_sysex_header, sizeof(MIDIHDR));
+
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		DEBUG_MIDI (error_msg);
+		return false;
+	}
+	result = midiInAddBuffer (m_handle, &m_sysex_header, sizeof(MIDIHDR));
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		DEBUG_MIDI (error_msg);
+		return false;
+	}
+	return true;
+}
+
+bool
+WinMMEMidiInputDevice::set_device_name (UINT index)
+{
+	MIDIINCAPS capabilities;
+	MMRESULT result = midiInGetDevCaps (index, &capabilities, sizeof(capabilities));
+	if (result != MMSYSERR_NOERROR) {
+		DEBUG_MIDI (get_error_string (result));
+		m_name = "Unknown Midi Input Device";
+		return false;
+	} else {
+		m_name = capabilities.szPname;
+	}
+	return true;
+}
+
+std::string
+WinMMEMidiInputDevice::get_error_string (MMRESULT error_code)
+{
+	char error_msg[MAXERRORLENGTH];
+	MMRESULT result = midiInGetErrorText (error_code, error_msg, MAXERRORLENGTH);
+	if (result != MMSYSERR_NOERROR) {
+		return error_msg;
+	}
+	return "WinMMEMidiInput: Unknown Error code";
+}
+
+void CALLBACK
+WinMMEMidiInputDevice::winmm_input_callback(HMIDIIN handle,
+                                            UINT msg,
+                                            DWORD_PTR instance,
+                                            DWORD_PTR midi_msg,
+                                            DWORD timestamp)
+{
+	WinMMEMidiInputDevice* midi_input = (WinMMEMidiInputDevice*)instance;
+
+#ifdef USE_MMCSS_THREAD_PRIORITIES
+
+	static HANDLE input_thread = GetCurrentThread ();
+	static bool priority_boosted = false;
+
+#if 0 // GetThreadId() is Vista or later only.
+	if (input_thread != GetCurrentThread ()) {
+		DWORD otid = GetThreadId (input_thread);
+		DWORD ntid = GetThreadId (GetCurrentThread ());
+		// There was a reference on the internet somewhere that it is possible
+		// for the callback to come from different threads(thread pool) this
+		// could be problematic but I haven't seen this behaviour yet
+		DEBUG_THREADS (string_compose (
+		    "WinMME input Thread ID Changed: was %1, now %2\n", otid, ntid));
+	}
+#endif
+
+	HANDLE task_handle;
+
+	if (!priority_boosted) {
+		mmcss::set_thread_characteristics ("Pro Audio", &task_handle);
+		mmcss::set_thread_priority (task_handle, mmcss::AVRT_PRIORITY_HIGH);
+		priority_boosted = true;
+	}
+#endif
+
+	switch (msg) {
+	case MIM_OPEN:
+	case MIM_CLOSE:
+		// devices_changed_callback
+		break;
+	case MIM_MOREDATA:
+		// passing MIDI_IO_STATUS to midiInOpen means that MIM_MOREDATA
+		// will be sent when the callback isn't processing MIM_DATA messages
+		// fast enough to keep up with messages arriving at input device
+		// driver. I'm not sure what could be done differently if that occurs
+		// so just handle MIM_DATA as per normal
+	case MIM_DATA:
+		midi_input->handle_short_msg ((const uint8_t*)&midi_msg, (uint32_t)timestamp);
+		break;
+	case MIM_LONGDATA:
+		midi_input->handle_sysex_msg ((MIDIHDR*)&midi_msg, (uint32_t)timestamp);
+		break;
+	case MIM_ERROR:
+		DEBUG_MIDI ("WinMME: Driver sent an invalid MIDI message\n");
+		break;
+	case MIM_LONGERROR:
+		DEBUG_MIDI ("WinMME: Driver sent an invalid or incomplete SYSEX message\n");
+		break;
+	}
+}
+
+void
+WinMMEMidiInputDevice::handle_short_msg (const uint8_t* midi_data,
+                                         uint32_t timestamp)
+{
+	int length = get_midi_msg_length (midi_data[0]);
+
+	if (length == 0 || length == -1) {
+		DEBUG_MIDI ("ERROR: midi input driver sent an invalid midi message\n");
+		return;
+	}
+
+	enqueue_midi_msg (midi_data, length, timestamp);
+}
+
+void
+WinMMEMidiInputDevice::handle_sysex_msg (MIDIHDR* const midi_header,
+                                         uint32_t timestamp)
+{
+#ifdef ENABLE_SYSEX
+	LPMIDIHDR header = (LPMIDIHDR)midi_header;
+	size_t byte_count = header->dwBytesRecorded;
+
+	if (!byte_count) {
+		DEBUG_MIDI (
+		    "ERROR: WinMME driver has returned sysex header to us with no bytes\n");
+		return;
+	}
+
+	uint8_t* data = (uint8_t*)header->lpData;
+
+	if ((data[0] != 0xf0) || (data[byte_count - 1] != 0xf7)) {
+		DEBUG_MIDI (string_compose ("Discarding %1 byte sysex chunk\n", byte_count));
+	} else {
+		enqueue_midi_msg (data, byte_count, timestamp);
+	}
+
+	MMRESULT result = midiInAddBuffer (m_handle, &m_sysex_header, sizeof(MIDIHDR));
+	if (result != MMSYSERR_NOERROR) {
+		DEBUG_MIDI (get_error_string (result));
+	}
+#endif
+}
+
+// fix param order
+bool
+WinMMEMidiInputDevice::dequeue_midi_event (uint64_t timestamp_start,
+                                           uint64_t timestamp_end,
+                                           uint64_t& timestamp,
+                                           uint8_t* midi_data,
+                                           size_t& data_size)
+{
+	const uint32_t read_space = m_midi_buffer->read_space();
+	struct MidiEventHeader h(0,0);
+
+	if (read_space <= sizeof(MidiEventHeader)) {
+		return false;
+	}
+
+	RingBuffer<uint8_t>::rw_vector vector;
+	m_midi_buffer->get_read_vector (&vector);
+	if (vector.len[0] >= sizeof(MidiEventHeader)) {
+		memcpy ((uint8_t*)&h, vector.buf[0], sizeof(MidiEventHeader));
+	} else {
+		if (vector.len[0] > 0) {
+			memcpy ((uint8_t*)&h, vector.buf[0], vector.len[0]);
+		}
+		assert (vector.buf[1] || vector.len[0] == sizeof(MidiEventHeader));
+		memcpy (((uint8_t*)&h) + vector.len[0],
+		        vector.buf[1],
+		        sizeof(MidiEventHeader) - vector.len[0]);
+	}
+
+	if (h.time >= timestamp_end) {
+		DEBUG_TIMING (string_compose ("WinMMEMidiInput EVENT %1(ms) early\n",
+		                              (h.time - timestamp_end) * 1e-3));
+		return false;
+	} else if (h.time < timestamp_start) {
+		DEBUG_TIMING (string_compose ("WinMMEMidiInput EVENT %1(ms) late\n",
+		                              (timestamp_start - h.time) * 1e-3));
+	}
+
+	m_midi_buffer->increment_read_idx (sizeof(MidiEventHeader));
+
+	assert (h.size > 0);
+	if (h.size > data_size) {
+		DEBUG_MIDI ("WinMMEMidiInput::dequeue_event MIDI event too large!\n");
+		m_midi_buffer->increment_read_idx (h.size);
+		return false;
+	}
+	if (m_midi_buffer->read (&midi_data[0], h.size) != h.size) {
+		DEBUG_MIDI ("WinMMEMidiInput::dequeue_event Garbled MIDI EVENT DATA!!\n");
+		return false;
+	}
+	timestamp = h.time;
+	data_size = h.size;
+	return true;
+}
+
+bool
+WinMMEMidiInputDevice::enqueue_midi_msg (const uint8_t* midi_data,
+                                         size_t data_size,
+                                         uint32_t timestamp)
+{
+	const uint32_t total_size = sizeof(MidiEventHeader) + data_size;
+
+	if (data_size == 0) {
+		DEBUG_MIDI ("ERROR: zero length midi data\n");
+		return false;
+	}
+
+	if (m_midi_buffer->write_space () < total_size) {
+		DEBUG_MIDI ("WinMMEMidiInput: ring buffer overflow\n");
+		return false;
+	}
+
+	// don't use winmme timestamps for now
+	uint64_t ts = utils::get_microseconds ();
+
+	DEBUG_TIMING (string_compose (
+	    "Enqueing MIDI data device: %1 with timestamp: %2 and size %3\n",
+	    name (),
+	    ts,
+	    data_size));
+
+	struct MidiEventHeader h (ts, data_size);
+	m_midi_buffer->write ((uint8_t*)&h, sizeof(MidiEventHeader));
+	m_midi_buffer->write (midi_data, data_size);
+	return true;
+}
+
+bool
+WinMMEMidiInputDevice::start ()
+{
+	if (!m_started) {
+		MMRESULT result = midiInStart (m_handle);
+		m_started = (result == MMSYSERR_NOERROR);
+		if (!m_started) {
+			DEBUG_MIDI (get_error_string (result));
+		} else {
+			DEBUG_MIDI (
+			    string_compose ("WinMMEMidiInput: device %1 started\n", name ()));
+		}
+	}
+	return m_started;
+}
+
+bool
+WinMMEMidiInputDevice::stop ()
+{
+	if (m_started) {
+		MMRESULT result = midiInStop (m_handle);
+		m_started = (result != MMSYSERR_NOERROR);
+		if (m_started) {
+			DEBUG_MIDI (get_error_string (result));
+		} else {
+			DEBUG_MIDI (
+			    string_compose ("WinMMEMidiInput: device %1 stopped\n", name ()));
+		}
+	}
+	return !m_started;
+}
+
+} // namespace ARDOUR
diff --git a/libs/backends/portaudio/winmmemidi_input_device.h b/libs/backends/portaudio/winmmemidi_input_device.h
new file mode 100644
index 0000000..b1a7fb6
--- /dev/null
+++ b/libs/backends/portaudio/winmmemidi_input_device.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef WINMME_MIDI_INPUT_DEVICE_H
+#define WINMME_MIDI_INPUT_DEVICE_H
+
+#include <windows.h>
+#include <mmsystem.h>
+
+#include <stdint.h>
+
+#include <string>
+
+#include <boost/scoped_array.hpp>
+#include <boost/scoped_ptr.hpp>
+
+#include <pbd/ringbuffer.h>
+
+namespace ARDOUR {
+
+class WinMMEMidiInputDevice {
+public: // ctors
+	WinMMEMidiInputDevice (int index);
+
+	~WinMMEMidiInputDevice ();
+
+public: // methods
+
+	/**
+	 * Dequeue events that have accumulated in winmm_input_callback.
+	 *
+	 * This is called by the audio processing thread/callback to transfer events
+	 * into midi ports before processing.
+	 */
+	bool dequeue_midi_event (uint64_t timestamp_start,
+	                         uint64_t timestamp_end,
+	                         uint64_t& timestamp,
+	                         uint8_t* data,
+	                         size_t& size);
+
+	bool start ();
+	bool stop ();
+
+	void set_enabled (bool enable);
+
+	bool get_enabled ();
+
+	/**
+	 * @return Name of midi device
+	 */
+	std::string name () const { return m_name; }
+
+private: // methods
+	bool open (UINT index, std::string& error_msg);
+	bool close (std::string& error_msg);
+
+	bool add_sysex_buffer (std::string& error_msg);
+	bool set_device_name (UINT index);
+
+	std::string get_error_string (MMRESULT error_code);
+
+	static void CALLBACK winmm_input_callback (HMIDIIN handle,
+	                                           UINT msg,
+	                                           DWORD_PTR instance,
+	                                           DWORD_PTR midi_msg,
+	                                           DWORD timestamp);
+
+	void handle_short_msg (const uint8_t* midi_data, uint32_t timestamp);
+
+	void handle_sysex_msg (MIDIHDR* const midi_header, uint32_t timestamp);
+
+	bool enqueue_midi_msg (const uint8_t* midi_data, size_t size, uint32_t timestamp);
+
+private: // data
+	HMIDIIN m_handle;
+	MIDIHDR m_sysex_header;
+
+	bool m_started;
+
+	std::string m_name;
+
+	// can't use unique_ptr yet
+	boost::scoped_ptr<RingBuffer<uint8_t> > m_midi_buffer;
+	boost::scoped_array<uint8_t> m_sysex_buffer;
+};
+
+}
+
+#endif // WINMME_MIDI_INPUT_DEVICE_H
diff --git a/libs/backends/portaudio/winmmemidi_io.cc b/libs/backends/portaudio/winmmemidi_io.cc
new file mode 100644
index 0000000..710456d
--- /dev/null
+++ b/libs/backends/portaudio/winmmemidi_io.cc
@@ -0,0 +1,294 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <windows.h>
+#include <mmsystem.h>
+
+#include <sstream>
+
+#include "pbd/error.h"
+#include "pbd/compose.h"
+
+#include "winmmemidi_io.h"
+#include "win_utils.h"
+#include "debug.h"
+
+#include "i18n.h"
+
+using namespace ARDOUR;
+using namespace utils;
+
+WinMMEMidiIO::WinMMEMidiIO()
+	: m_active (false)
+	, m_enabled (true)
+	, m_run (false)
+	, m_changed_callback (0)
+	, m_changed_arg (0)
+{
+	pthread_mutex_init (&m_device_lock, 0);
+}
+
+WinMMEMidiIO::~WinMMEMidiIO()
+{
+	pthread_mutex_lock (&m_device_lock);
+	cleanup();
+	pthread_mutex_unlock (&m_device_lock);
+	pthread_mutex_destroy (&m_device_lock);
+}
+
+void
+WinMMEMidiIO::cleanup()
+{
+	DEBUG_MIDI ("MIDI cleanup\n");
+	m_active = false;
+
+	destroy_input_devices ();
+	destroy_output_devices ();
+}
+
+bool
+WinMMEMidiIO::dequeue_input_event (uint32_t port,
+                                   uint64_t timestamp_start,
+                                   uint64_t timestamp_end,
+                                   uint64_t &timestamp,
+                                   uint8_t *d,
+                                   size_t &s)
+{
+	if (!m_active) {
+		return false;
+	}
+	assert(port < m_inputs.size());
+
+	// m_inputs access should be protected by trylock
+	return m_inputs[port]->dequeue_midi_event (
+	    timestamp_start, timestamp_end, timestamp, d, s);
+}
+
+bool
+WinMMEMidiIO::enqueue_output_event (uint32_t port,
+                                    uint64_t timestamp,
+                                    const uint8_t *d,
+                                    const size_t s)
+{
+	if (!m_active) {
+		return false;
+	}
+	assert(port < m_outputs.size());
+
+	// m_outputs access should be protected by trylock
+	return m_outputs[port]->enqueue_midi_event (timestamp, d, s);
+}
+
+
+std::string
+WinMMEMidiIO::port_id (uint32_t port, bool input)
+{
+	std::stringstream ss;
+
+	if (input) {
+		ss << "system:midi_capture_";
+		ss << port;
+	} else {
+		ss << "system:midi_playback_";
+		ss << port;
+	}
+	return ss.str();
+}
+
+std::string
+WinMMEMidiIO::port_name (uint32_t port, bool input)
+{
+	if (input) {
+		if (port < m_inputs.size ()) {
+			return m_inputs[port]->name ();
+		}
+	} else {
+		if (port < m_outputs.size ()) {
+			return m_outputs[port]->name ();
+		}
+	}
+	return "";
+}
+
+void
+WinMMEMidiIO::start ()
+{
+	if (m_run) {
+		DEBUG_MIDI ("MIDI driver already started\n");
+		return;
+	}
+
+	m_run = true;
+	DEBUG_MIDI ("Starting MIDI driver\n");
+
+	set_min_timer_resolution();
+	discover();
+	start_devices ();
+}
+
+
+void
+WinMMEMidiIO::stop ()
+{
+	DEBUG_MIDI ("Stopping MIDI driver\n");
+	m_run = false;
+	stop_devices ();
+	pthread_mutex_lock (&m_device_lock);
+	cleanup ();
+	pthread_mutex_unlock (&m_device_lock);
+
+	reset_timer_resolution();
+}
+
+void
+WinMMEMidiIO::start_devices ()
+{
+	for (std::vector<WinMMEMidiInputDevice*>::iterator i = m_inputs.begin ();
+	     i < m_inputs.end();
+	     ++i) {
+		if (!(*i)->start ()) {
+			PBD::error << string_compose (_("Unable to start MIDI input device %1\n"),
+			                              (*i)->name ()) << endmsg;
+		}
+	}
+	for (std::vector<WinMMEMidiOutputDevice*>::iterator i = m_outputs.begin ();
+	     i < m_outputs.end();
+	     ++i) {
+		if (!(*i)->start ()) {
+			PBD::error << string_compose (_ ("Unable to start MIDI output device %1\n"),
+			                              (*i)->name ()) << endmsg;
+		}
+	}
+}
+
+void
+WinMMEMidiIO::stop_devices ()
+{
+	for (std::vector<WinMMEMidiInputDevice*>::iterator i = m_inputs.begin ();
+	     i < m_inputs.end();
+	     ++i) {
+		if (!(*i)->stop ()) {
+			PBD::error << string_compose (_ ("Unable to stop MIDI input device %1\n"),
+			                              (*i)->name ()) << endmsg;
+		}
+	}
+	for (std::vector<WinMMEMidiOutputDevice*>::iterator i = m_outputs.begin ();
+	     i < m_outputs.end();
+	     ++i) {
+		if (!(*i)->stop ()) {
+			PBD::error << string_compose (_ ("Unable to stop MIDI output device %1\n"),
+			                              (*i)->name ()) << endmsg;
+		}
+	}
+}
+
+void
+WinMMEMidiIO::create_input_devices ()
+{
+	int srcCount = midiInGetNumDevs ();
+
+	DEBUG_MIDI (string_compose ("MidiIn count: %1\n", srcCount));
+
+	for (int i = 0; i < srcCount; ++i) {
+		try {
+			WinMMEMidiInputDevice* midi_input = new WinMMEMidiInputDevice (i);
+			if (midi_input) {
+				m_inputs.push_back (midi_input);
+			}
+		}
+		catch (...) {
+			DEBUG_MIDI ("Unable to create MIDI input\n");
+			continue;
+		}
+	}
+}
+void
+WinMMEMidiIO::create_output_devices ()
+{
+	int dstCount = midiOutGetNumDevs ();
+
+	DEBUG_MIDI (string_compose ("MidiOut count: %1\n", dstCount));
+
+	for (int i = 0; i < dstCount; ++i) {
+		try {
+			WinMMEMidiOutputDevice* midi_output = new WinMMEMidiOutputDevice(i);
+			if (midi_output) {
+				m_outputs.push_back(midi_output);
+			}
+		} catch(...) {
+			DEBUG_MIDI ("Unable to create MIDI output\n");
+			continue;
+		}
+	}
+}
+
+void
+WinMMEMidiIO::destroy_input_devices ()
+{
+	while (!m_inputs.empty ()) {
+		WinMMEMidiInputDevice* midi_input = m_inputs.back ();
+		// assert(midi_input->stopped ());
+		m_inputs.pop_back ();
+		delete midi_input;
+	}
+}
+
+void
+WinMMEMidiIO::destroy_output_devices ()
+{
+	while (!m_outputs.empty ()) {
+		WinMMEMidiOutputDevice* midi_output = m_outputs.back ();
+		// assert(midi_output->stopped ());
+		m_outputs.pop_back ();
+		delete midi_output;
+	}
+}
+
+void
+WinMMEMidiIO::discover()
+{
+	if (!m_run) {
+		return;
+	}
+
+	if (pthread_mutex_trylock (&m_device_lock)) {
+		return;
+	}
+
+	cleanup ();
+
+	create_input_devices ();
+	create_output_devices ();
+
+	if (!(m_inputs.size () || m_outputs.size ())) {
+		DEBUG_MIDI ("No midi inputs or outputs\n");
+		pthread_mutex_unlock (&m_device_lock);
+		return;
+	}
+
+	DEBUG_MIDI (string_compose ("Discovered %1 inputs and %2 outputs\n",
+	                            m_inputs.size (),
+	                            m_outputs.size ()));
+
+	if (m_changed_callback) {
+		m_changed_callback(m_changed_arg);
+	}
+
+	m_active = true;
+	pthread_mutex_unlock (&m_device_lock);
+}
diff --git a/libs/backends/portaudio/winmmemidi_io.h b/libs/backends/portaudio/winmmemidi_io.h
new file mode 100644
index 0000000..28450e9
--- /dev/null
+++ b/libs/backends/portaudio/winmmemidi_io.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef WINMME_MIDI_IO_H
+#define WINMME_MIDI_IO_H
+
+#include <map>
+#include <vector>
+#include <string>
+#include <stdint.h>
+#include <pthread.h>
+
+#include <boost/shared_ptr.hpp>
+#include "pbd/ringbuffer.h"
+
+#include "winmmemidi_input_device.h"
+#include "winmmemidi_output_device.h"
+
+namespace ARDOUR {
+
+struct WinMMEMIDIPacket {
+
+#if 0
+	WinMMEMIDIPacket (const WinMMEMIDIPacket& other)
+	    : timeStamp (other.timeStamp)
+	    , length (other.length)
+	{
+		if (length > 0) {
+			memcpy (data, other.data, length);
+		}
+	}
+#endif
+
+	// MIDITimeStamp timeStamp;
+	uint16_t length;
+	uint8_t data[256];
+};
+
+typedef std::vector<boost::shared_ptr<WinMMEMIDIPacket> > WinMMEMIDIQueue;
+
+class WinMMEMidiIO {
+public:
+	WinMMEMidiIO ();
+	~WinMMEMidiIO ();
+
+	void start ();
+	void stop ();
+
+	bool dequeue_input_event (uint32_t port,
+	                          uint64_t timestamp_start,
+	                          uint64_t timestamp_end,
+	                          uint64_t& timestamp,
+	                          uint8_t* data,
+	                          size_t& size);
+
+	bool enqueue_output_event (uint32_t port,
+	                           uint64_t timestamp,
+	                           const uint8_t* data,
+	                           const size_t size);
+
+	uint32_t n_midi_inputs (void) const { return m_inputs.size(); }
+	uint32_t n_midi_outputs (void) const { return m_outputs.size(); }
+
+	std::vector<WinMMEMidiInputDevice*> get_inputs () { return m_inputs; }
+	std::vector<WinMMEMidiOutputDevice*> get_outputs () { return m_outputs; }
+
+	std::string port_id (uint32_t, bool input);
+	std::string port_name (uint32_t, bool input);
+
+	void set_enabled (bool yn = true) { m_enabled = yn; }
+	bool enabled (void) const { return m_active && m_enabled; }
+
+	void set_port_changed_callback (void (changed_callback (void*)), void *arg) {
+		m_changed_callback = changed_callback;
+		m_changed_arg = arg;
+	}
+
+private: // Methods
+	void discover ();
+	void cleanup ();
+
+	void create_input_devices ();
+	void create_output_devices ();
+
+	void destroy_input_devices ();
+	void destroy_output_devices ();
+
+	void start_devices ();
+	void stop_devices ();
+
+private: // Data
+
+	std::vector<WinMMEMidiInputDevice*> m_inputs;
+	std::vector<WinMMEMidiOutputDevice*> m_outputs;
+
+	bool              m_active;
+	bool              m_enabled;
+	bool              m_run;
+
+	void (* m_changed_callback) (void*);
+	void  * m_changed_arg;
+
+	// protects access to m_inputs and m_outputs
+	pthread_mutex_t m_device_lock;
+};
+
+} // namespace
+
+#endif // WINMME_MIDI_IO_H
+
diff --git a/libs/backends/portaudio/winmmemidi_output_device.cc b/libs/backends/portaudio/winmmemidi_output_device.cc
new file mode 100644
index 0000000..7dec08e
--- /dev/null
+++ b/libs/backends/portaudio/winmmemidi_output_device.cc
@@ -0,0 +1,508 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "winmmemidi_output_device.h"
+
+#include <glibmm.h>
+
+#include "pbd/debug.h"
+#include "pbd/compose.h"
+
+#include "rt_thread.h"
+#include "win_utils.h"
+#include "midi_util.h"
+
+#include "mmcss.h"
+#include "debug.h"
+
+// remove dup with input_device
+static const uint32_t MIDI_BUFFER_SIZE = 32768;
+static const uint32_t MAX_MIDI_MSG_SIZE = 256; // fix this for sysex
+static const uint32_t MAX_QUEUE_SIZE = 4096;
+
+namespace ARDOUR {
+
+WinMMEMidiOutputDevice::WinMMEMidiOutputDevice (int index)
+	: m_handle(0)
+	, m_queue_semaphore(0)
+	, m_sysex_semaphore(0)
+	, m_timer(0)
+	, m_started(false)
+	, m_enabled(false)
+	, m_thread_running(false)
+	, m_thread_quit(false)
+	, m_midi_buffer(new RingBuffer<uint8_t>(MIDI_BUFFER_SIZE))
+{
+	DEBUG_MIDI (string_compose ("Creating midi output device index: %1\n", index));
+
+	std::string error_msg;
+
+	if (!open (index, error_msg)) {
+		DEBUG_MIDI (error_msg);
+		throw std::runtime_error (error_msg);
+	}
+
+	set_device_name (index);
+}
+
+WinMMEMidiOutputDevice::~WinMMEMidiOutputDevice ()
+{
+	std::string error_msg;
+	if (!close (error_msg)) {
+		DEBUG_MIDI (error_msg);
+	}
+}
+
+bool
+WinMMEMidiOutputDevice::enqueue_midi_event (uint64_t timestamp,
+                                            const uint8_t* data,
+                                            size_t size)
+{
+	const uint32_t total_bytes = sizeof(MidiEventHeader) + size;
+	if (m_midi_buffer->write_space () < total_bytes) {
+		DEBUG_MIDI ("WinMMEMidiOutput: ring buffer overflow\n");
+		return false;
+	}
+
+	MidiEventHeader h (timestamp, size);
+	m_midi_buffer->write ((uint8_t*)&h, sizeof(MidiEventHeader));
+	m_midi_buffer->write (data, size);
+
+	signal (m_queue_semaphore);
+	return true;
+}
+
+bool
+WinMMEMidiOutputDevice::open (UINT index, std::string& error_msg)
+{
+	MMRESULT result = midiOutOpen (&m_handle,
+	                               index,
+	                               (DWORD_PTR)winmm_output_callback,
+	                               (DWORD_PTR) this,
+	                               CALLBACK_FUNCTION);
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		return false;
+	}
+
+	m_queue_semaphore = CreateSemaphore (NULL, 0, MAX_QUEUE_SIZE, NULL);
+	if (m_queue_semaphore == NULL) {
+		DEBUG_MIDI ("WinMMEMidiOutput: Unable to create queue semaphore\n");
+		return false;
+	}
+	m_sysex_semaphore = CreateSemaphore (NULL, 0, 1, NULL);
+	if (m_sysex_semaphore == NULL) {
+		DEBUG_MIDI ("WinMMEMidiOutput: Unable to create sysex semaphore\n");
+		return false;
+	}
+	return true;
+}
+
+bool
+WinMMEMidiOutputDevice::close (std::string& error_msg)
+{
+	// return error message for first error encountered?
+	bool success = true;
+	MMRESULT result = midiOutReset (m_handle);
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		DEBUG_MIDI (error_msg);
+		success = false;
+	}
+	result = midiOutClose (m_handle);
+	if (result != MMSYSERR_NOERROR) {
+		error_msg = get_error_string (result);
+		DEBUG_MIDI (error_msg);
+		success = false;
+	}
+
+	if (m_sysex_semaphore) {
+		if (!CloseHandle (m_sysex_semaphore)) {
+			DEBUG_MIDI ("WinMMEMidiOut Unable to close sysex semaphore\n");
+			success = false;
+		} else {
+			m_sysex_semaphore = 0;
+		}
+	}
+	if (m_queue_semaphore) {
+		if (!CloseHandle (m_queue_semaphore)) {
+			DEBUG_MIDI ("WinMMEMidiOut Unable to close queue semaphore\n");
+			success = false;
+		} else {
+			m_queue_semaphore = 0;
+		}
+	}
+
+	m_handle = 0;
+	return success;
+}
+
+bool
+WinMMEMidiOutputDevice::set_device_name (UINT index)
+{
+	MIDIOUTCAPS capabilities;
+	MMRESULT result =
+	    midiOutGetDevCaps (index, &capabilities, sizeof(capabilities));
+
+	if (result != MMSYSERR_NOERROR) {
+		DEBUG_MIDI (get_error_string (result));
+		m_name = "Unknown Midi Output Device";
+		return false;
+	} else {
+		m_name = capabilities.szPname;
+	}
+	return true;
+}
+
+std::string
+WinMMEMidiOutputDevice::get_error_string (MMRESULT error_code)
+{
+	char error_msg[MAXERRORLENGTH];
+	MMRESULT result = midiOutGetErrorText (error_code, error_msg, MAXERRORLENGTH);
+	if (result != MMSYSERR_NOERROR) {
+		return error_msg;
+	}
+	return "WinMMEMidiOutput: Unknown Error code";
+}
+
+bool
+WinMMEMidiOutputDevice::start ()
+{
+	if (m_thread_running) {
+		DEBUG_MIDI (
+		    string_compose ("WinMMEMidiOutput: device %1 already started\n", m_name));
+		return true;
+	}
+
+	m_timer = CreateWaitableTimer (NULL, FALSE, NULL);
+
+	if (!m_timer) {
+		DEBUG_MIDI ("WinMMEMidiOutput: unable to create waitable timer\n");
+		return false;
+	}
+
+	if (!start_midi_output_thread ()) {
+		DEBUG_MIDI ("WinMMEMidiOutput: Failed to start MIDI output thread\n");
+
+		if (!CloseHandle (m_timer)) {
+			DEBUG_MIDI ("WinMMEMidiOutput: unable to close waitable timer\n");
+		}
+		return false;
+	}
+	return true;
+}
+
+bool
+WinMMEMidiOutputDevice::stop ()
+{
+	if (!m_thread_running) {
+		DEBUG_MIDI ("WinMMEMidiOutputDevice: device already stopped\n");
+		return true;
+	}
+
+	if (!stop_midi_output_thread ()) {
+		DEBUG_MIDI ("WinMMEMidiOutput: Failed to start MIDI output thread\n");
+		return false;
+	}
+
+	if (!CloseHandle (m_timer)) {
+		DEBUG_MIDI ("WinMMEMidiOutput: unable to close waitable timer\n");
+		return false;
+	}
+	m_timer = 0;
+	return true;
+}
+
+bool
+WinMMEMidiOutputDevice::start_midi_output_thread ()
+{
+	m_thread_quit = false;
+
+	//pthread_attr_t attr;
+	size_t stacksize = 100000;
+
+	// TODO Use native threads
+	if (_realtime_pthread_create (SCHED_FIFO, -21, stacksize,
+				&m_output_thread_handle, midi_output_thread, this)) {
+		return false;
+	}
+
+	int timeout = 5000;
+	while (!m_thread_running && --timeout > 0) { Glib::usleep (1000); }
+	if (timeout == 0 || !m_thread_running) {
+		DEBUG_MIDI (string_compose ("Unable to start midi output device thread: %1\n",
+		                            m_name));
+		return false;
+	}
+	return true;
+}
+
+bool
+WinMMEMidiOutputDevice::stop_midi_output_thread ()
+{
+	int timeout = 5000;
+	m_thread_quit = true;
+
+	while (m_thread_running && --timeout > 0) { Glib::usleep (1000); }
+	if (timeout == 0 || m_thread_running) {
+		DEBUG_MIDI (string_compose ("Unable to stop midi output device thread: %1\n",
+		                             m_name));
+		return false;
+	}
+
+	void *status;
+	if (pthread_join (m_output_thread_handle, &status)) {
+		DEBUG_MIDI (string_compose ("Unable to join midi output device thread: %1\n",
+		                            m_name));
+		return false;
+	}
+	return true;
+}
+
+bool
+WinMMEMidiOutputDevice::signal (HANDLE semaphore)
+{
+	bool result = (bool)ReleaseSemaphore (semaphore, 1, NULL);
+	if (!result) {
+		DEBUG_MIDI ("WinMMEMidiOutDevice: Cannot release semaphore\n");
+	}
+	return result;
+}
+
+bool
+WinMMEMidiOutputDevice::wait (HANDLE semaphore)
+{
+	DWORD result = WaitForSingleObject (semaphore, INFINITE);
+	switch (result) {
+	case WAIT_FAILED:
+		DEBUG_MIDI ("WinMMEMidiOutDevice: WaitForSingleObject Failed\n");
+		break;
+	case WAIT_OBJECT_0:
+		return true;
+	default:
+		DEBUG_MIDI ("WinMMEMidiOutDevice: Unexpected result from WaitForSingleObject\n");
+	}
+	return false;
+}
+
+void CALLBACK
+WinMMEMidiOutputDevice::winmm_output_callback (HMIDIOUT handle,
+                                               UINT msg,
+                                               DWORD_PTR instance,
+                                               DWORD_PTR midi_data,
+                                               DWORD_PTR timestamp)
+{
+	((WinMMEMidiOutputDevice*)instance)
+	    ->midi_output_callback (msg, midi_data, timestamp);
+}
+
+void
+WinMMEMidiOutputDevice::midi_output_callback (UINT message,
+                                              DWORD_PTR midi_data,
+                                              DWORD_PTR timestamp)
+{
+	switch (message) {
+	case MOM_CLOSE:
+		DEBUG_MIDI ("WinMMEMidiOutput - MIDI device closed\n");
+		break;
+	case MOM_DONE:
+		signal (m_sysex_semaphore);
+		break;
+	case MOM_OPEN:
+		DEBUG_MIDI ("WinMMEMidiOutput - MIDI device opened\n");
+		break;
+	case MOM_POSITIONCB:
+		LPMIDIHDR header = (LPMIDIHDR)midi_data;
+		DEBUG_MIDI (string_compose ("WinMMEMidiOut - %1 bytes out of %2 bytes of "
+		                            "the current sysex message have been sent.\n",
+		                            header->dwOffset,
+		                            header->dwBytesRecorded));
+	}
+}
+
+void*
+WinMMEMidiOutputDevice::midi_output_thread (void *arg)
+{
+	WinMMEMidiOutputDevice* output_device = reinterpret_cast<WinMMEMidiOutputDevice*> (arg);
+	output_device->midi_output_thread ();
+	return 0;
+}
+
+void
+WinMMEMidiOutputDevice::midi_output_thread ()
+{
+	m_thread_running = true;
+
+	DEBUG_MIDI ("WinMMEMidiOut: MIDI output thread started\n");
+
+#ifdef USE_MMCSS_THREAD_PRIORITIES
+	HANDLE task_handle;
+
+	mmcss::set_thread_characteristics ("Pro Audio", &task_handle);
+	mmcss::set_thread_priority (task_handle, mmcss::AVRT_PRIORITY_HIGH);
+#endif
+
+	while (!m_thread_quit) {
+		if (!wait (m_queue_semaphore)) {
+			break;
+		}
+
+		MidiEventHeader h (0, 0);
+		uint8_t data[MAX_MIDI_MSG_SIZE];
+
+		const uint32_t read_space = m_midi_buffer->read_space ();
+
+		if (read_space > sizeof(MidiEventHeader)) {
+			if (m_midi_buffer->read ((uint8_t*)&h, sizeof(MidiEventHeader)) !=
+			    sizeof(MidiEventHeader)) {
+				DEBUG_MIDI ("WinMMEMidiOut: Garbled MIDI EVENT HEADER!!\n");
+				break;
+			}
+			assert (read_space >= h.size);
+
+			if (h.size > MAX_MIDI_MSG_SIZE) {
+				m_midi_buffer->increment_read_idx (h.size);
+				DEBUG_MIDI ("WinMMEMidiOut: MIDI event too large!\n");
+				continue;
+			}
+			if (m_midi_buffer->read (&data[0], h.size) != h.size) {
+				DEBUG_MIDI ("WinMMEMidiOut: Garbled MIDI EVENT DATA!!\n");
+				break;
+			}
+		} else {
+			// error/assert?
+			DEBUG_MIDI ("WinMMEMidiOut: MIDI buffer underrun, shouldn't occur\n");
+			continue;
+		}
+		uint64_t current_time = utils::get_microseconds ();
+
+		DEBUG_TIMING (string_compose (
+		    "WinMMEMidiOut: h.time = %1, current_time = %2\n", h.time, current_time));
+
+		if (h.time > current_time) {
+
+			DEBUG_TIMING (string_compose ("WinMMEMidiOut: waiting at %1 for %2 "
+			                              "milliseconds before sending message\n",
+			                              ((double)current_time) / 1000.0,
+			                              ((double)(h.time - current_time)) / 1000.0));
+
+			if (!wait_for_microseconds (h.time - current_time))
+			{
+				DEBUG_MIDI ("WinMMEMidiOut: Error waiting for timer\n");
+				break;
+			}
+
+			uint64_t wakeup_time = utils::get_microseconds ();
+			DEBUG_TIMING (string_compose ("WinMMEMidiOut: woke up at %1(ms)\n",
+			                              ((double)wakeup_time) / 1000.0));
+			if (wakeup_time > h.time) {
+				DEBUG_TIMING (string_compose ("WinMMEMidiOut: overslept by %1(ms)\n",
+				                              ((double)(wakeup_time - h.time)) / 1000.0));
+			} else if (wakeup_time < h.time) {
+				DEBUG_TIMING (string_compose ("WinMMEMidiOut: woke up %1(ms) too early\n",
+				                              ((double)(h.time - wakeup_time)) / 1000.0));
+			}
+
+		} else if (h.time < current_time) {
+			DEBUG_TIMING (string_compose (
+			    "WinMMEMidiOut: MIDI event at sent to driver %1(ms) late\n",
+			    ((double)(current_time - h.time)) / 1000.0));
+		}
+
+		DWORD message = 0;
+		MMRESULT result;
+		switch (h.size) {
+		case 3:
+			message |= (((DWORD)data[2]) << 16);
+		// Fallthrough on purpose.
+		case 2:
+			message |= (((DWORD)data[1]) << 8);
+		// Fallthrough on purpose.
+		case 1:
+			message |= (DWORD)data[0];
+			result = midiOutShortMsg (m_handle, message);
+			if (result != MMSYSERR_NOERROR) {
+				DEBUG_MIDI (
+				    string_compose ("WinMMEMidiOutput: %1\n", get_error_string (result)));
+			}
+			continue;
+		}
+
+#if ENABLE_SYSEX
+		MIDIHDR header;
+		header.dwBufferLength = h.size;
+		header.dwFlags = 0;
+		header.lpData = (LPSTR)data;
+
+		result = midiOutPrepareHeader (m_handle, &header, sizeof(MIDIHDR));
+		if (result != MMSYSERR_NOERROR) {
+			DEBUG_MIDI (string_compose ("WinMMEMidiOutput: midiOutPrepareHeader %1\n",
+			                            get_error_string (result)));
+			continue;
+		}
+
+		result = midiOutLongMsg (m_handle, &header, sizeof(MIDIHDR));
+		if (result != MMSYSERR_NOERROR) {
+			DEBUG_MIDI (string_compose ("WinMMEMidiOutput: midiOutLongMsg %1\n",
+			                            get_error_string (result)));
+			continue;
+		}
+
+		// Sysex messages may be sent synchronously or asynchronously.  The
+		// choice is up to the WinMME driver.  So, we wait until the message is
+		// sent, regardless of the driver's choice.
+		if (!wait (m_sysex_semaphore)) {
+			break;
+		}
+
+		result = midiOutUnprepareHeader (m_handle, &header, sizeof(MIDIHDR));
+		if (result != MMSYSERR_NOERROR) {
+			DEBUG_MIDI (string_compose ("WinMMEMidiOutput: midiOutUnprepareHeader %1\n",
+			                            get_error_string (result)));
+			break;
+		}
+#endif
+	}
+
+#ifdef USE_MMCSS_THREAD_PRIORITIES
+	mmcss::revert_thread_characteristics (task_handle);
+#endif
+
+	m_thread_running = false;
+}
+
+bool
+WinMMEMidiOutputDevice::wait_for_microseconds (int64_t wait_us)
+{
+	LARGE_INTEGER due_time;
+
+	// 100 ns resolution
+	due_time.QuadPart = -((LONGLONG)(wait_us * 10));
+	if (!SetWaitableTimer (m_timer, &due_time, 0, NULL, NULL, 0)) {
+		DEBUG_MIDI ("WinMMEMidiOut: Error waiting for timer\n");
+		return false;
+	}
+
+	if (!wait (m_timer)) {
+		return false;
+	}
+
+	return true;
+}
+
+} // namespace ARDOUR
diff --git a/libs/backends/portaudio/winmmemidi_output_device.h b/libs/backends/portaudio/winmmemidi_output_device.h
new file mode 100644
index 0000000..8c4d4d0
--- /dev/null
+++ b/libs/backends/portaudio/winmmemidi_output_device.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2015 Tim Mayberry <mojofunk at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef WINMME_MIDI_OUTPUT_DEVICE_H
+#define WINMME_MIDI_OUTPUT_DEVICE_H
+
+#include <windows.h>
+#include <mmsystem.h>
+
+#include <stdint.h>
+#include <pthread.h>
+
+#include <string>
+
+#include <boost/scoped_ptr.hpp>
+
+#include <pbd/ringbuffer.h>
+
+namespace ARDOUR {
+
+class WinMMEMidiOutputDevice {
+public:
+	WinMMEMidiOutputDevice (int index);
+
+	~WinMMEMidiOutputDevice ();
+
+	bool enqueue_midi_event (uint64_t rel_event_time_us,
+	                         const uint8_t* data,
+	                         const size_t size);
+
+	bool start ();
+	bool stop ();
+
+	void set_enabled (bool enable);
+	bool get_enabled ();
+
+	std::string name () const { return m_name; }
+
+private: // Methods
+	bool open (UINT index, std::string& error_msg);
+	bool close (std::string& error_msg);
+
+	bool set_device_name (UINT index);
+
+	std::string get_error_string (MMRESULT error_code);
+
+	bool start_midi_output_thread ();
+	bool stop_midi_output_thread ();
+
+	bool signal (HANDLE semaphore);
+	bool wait (HANDLE semaphore);
+
+	static void* midi_output_thread (void*);
+	void midi_output_thread ();
+
+	bool wait_for_microseconds (int64_t us);
+
+	static void CALLBACK winmm_output_callback (HMIDIOUT handle,
+	                                            UINT msg,
+	                                            DWORD_PTR instance,
+	                                            DWORD_PTR midi_data,
+	                                            DWORD_PTR timestamp);
+
+	void midi_output_callback (UINT msg, DWORD_PTR data, DWORD_PTR timestamp);
+
+private: // Data
+	HMIDIOUT m_handle;
+
+	HANDLE m_queue_semaphore;
+	HANDLE m_sysex_semaphore;
+
+	HANDLE m_timer;
+
+	bool m_started;
+	bool m_enabled;
+
+	std::string m_name;
+
+	pthread_t m_output_thread_handle;
+
+	bool m_thread_running;
+	bool m_thread_quit;
+
+	boost::scoped_ptr<RingBuffer<uint8_t> > m_midi_buffer;
+};
+
+} // namespace ARDOUR
+
+#endif // WINMME_MIDI_OUTPUT_DEVICE_H
diff --git a/libs/backends/portaudio/wscript b/libs/backends/portaudio/wscript
index 4b77f96..9c661d8 100644
--- a/libs/backends/portaudio/wscript
+++ b/libs/backends/portaudio/wscript
@@ -17,12 +17,18 @@ def options(opt):
 def configure(conf):
     autowaf.configure(conf)
     autowaf.check_pkg(conf, 'portaudio-2.0', uselib_store='PORTAUDIO', atleast_version='19')
+    conf.check(header_name='pa_asio.h', define_name='WITH_ASIO', mandatory=False)
 
 def build(bld):
     obj = bld(features = 'cxx cxxshlib')
     obj.source = [ 'portaudio_backend.cc',
                    'portaudio_io.cc',
-#                  'portmidi_io.cc'
+                   'winmmemidi_io.cc',
+                   'winmmemidi_input_device.cc',
+                   'winmmemidi_output_device.cc',
+                   'win_utils.cc',
+                   'midi_util.cc',
+                   'mmcss.cc'
                  ]
     obj.includes = ['.']
     obj.name     = 'portaudio_backend'
@@ -31,5 +37,6 @@ def build(bld):
     obj.uselib   = ['PORTAUDIO']
     obj.install_path  = os.path.join(bld.env['LIBDIR'], 'backends')
     obj.defines = ['PACKAGE="' + I18N_PACKAGE + '"',
-                   'ARDOURBACKEND_DLL_EXPORTS'
+                   'ARDOURBACKEND_DLL_EXPORTS',
+                   'USE_MMCSS_THREAD_PRIORITIES'
                   ]
diff --git a/libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj/project.pbxproj b/libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..ac12773
--- /dev/null
+++ b/libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj/project.pbxproj
@@ -0,0 +1,517 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		43278FF0194EFB30003C9FEA /* basics.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43278FC8194EFB30003C9FEA /* basics.hpp */; };
+		43278FF1194EFB30003C9FEA /* compiletime_functions.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43278FC9194EFB30003C9FEA /* compiletime_functions.hpp */; };
+		43278FF2194EFB30003C9FEA /* atomic_ops.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43278FCB194EFB30003C9FEA /* atomic_ops.hpp */; };
+		43278FF3194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43278FCC194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp */; };
+		43278FF4194EFB30003C9FEA /* WCFourCC.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FCE194EFB30003C9FEA /* WCFourCC.h */; };
+		43278FF5194EFB30003C9FEA /* WTByteOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FCF194EFB30003C9FEA /* WTByteOrder.h */; };
+		43278FF6194EFB30003C9FEA /* WUComPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD0194EFB30003C9FEA /* WUComPtr.h */; };
+		43278FF7194EFB30003C9FEA /* WUDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD1194EFB30003C9FEA /* WUDefines.h */; };
+		43278FF8194EFB30003C9FEA /* WUMathConsts.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD2194EFB30003C9FEA /* WUMathConsts.h */; };
+		43278FF9194EFB30003C9FEA /* WUTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD3194EFB30003C9FEA /* WUTypes.h */; };
+		43278FFA194EFB30003C9FEA /* IncludeWindows.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD5194EFB30003C9FEA /* IncludeWindows.h */; };
+		43278FFB194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FD6194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp */; };
+		43278FFC194EFB30003C9FEA /* WCMRAudioDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD7194EFB30003C9FEA /* WCMRAudioDeviceManager.h */; };
+		43278FFD194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FD8194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp */; };
+		43278FFE194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD9194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h */; };
+		43278FFF194EFB30003C9FEA /* WCMRNativeAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FDA194EFB30003C9FEA /* WCMRNativeAudio.cpp */; };
+		43279000194EFB30003C9FEA /* WCMRNativeAudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FDB194EFB30003C9FEA /* WCMRNativeAudio.h */; };
+		43279001194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FDC194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp */; };
+		43279002194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FDD194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h */; };
+		43279003194EFB30003C9FEA /* MinMaxUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FDF194EFB30003C9FEA /* MinMaxUtilities.h */; };
+		43279004194EFB30003C9FEA /* safe_delete.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE0194EFB30003C9FEA /* safe_delete.h */; };
+		43279005194EFB30003C9FEA /* UMicroseconds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FE1194EFB30003C9FEA /* UMicroseconds.cpp */; };
+		43279006194EFB30003C9FEA /* UMicroseconds.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE2194EFB30003C9FEA /* UMicroseconds.h */; };
+		43279007194EFB30003C9FEA /* WCFixedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE3194EFB30003C9FEA /* WCFixedString.h */; };
+		43279008194EFB30003C9FEA /* WUErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE4194EFB30003C9FEA /* WUErrors.h */; };
+		43279009194EFB30003C9FEA /* WCRefManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FE6194EFB30003C9FEA /* WCRefManager.cpp */; };
+		4327900A194EFB30003C9FEA /* WCRefManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE7194EFB30003C9FEA /* WCRefManager.h */; };
+		4327900B194EFB30003C9FEA /* WCThreadSafe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FE9194EFB30003C9FEA /* WCThreadSafe.cpp */; };
+		4327900C194EFB30003C9FEA /* WCThreadSafe.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FEA194EFB30003C9FEA /* WCThreadSafe.h */; };
+		4327900D194EFB30003C9FEA /* WavesPublicAPI_Defines.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FED194EFB30003C9FEA /* WavesPublicAPI_Defines.h */; };
+		4327900E194EFB30003C9FEA /* wstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FEE194EFB30003C9FEA /* wstdint.h */; };
+		4327900F194EFB30003C9FEA /* WTErr.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FEF194EFB30003C9FEA /* WTErr.h */; };
+		43AA86F0194EED8900A67B56 /* waves_audiobackend.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E5194EED8900A67B56 /* waves_audiobackend.cc */; };
+		43AA86F1194EED8900A67B56 /* waves_audiobackend.latency.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E6194EED8900A67B56 /* waves_audiobackend.latency.cc */; };
+		43AA86F2194EED8900A67B56 /* waves_audiobackend.midi.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E7194EED8900A67B56 /* waves_audiobackend.midi.cc */; };
+		43AA86F3194EED8900A67B56 /* waves_audiobackend.port_engine.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E8194EED8900A67B56 /* waves_audiobackend.port_engine.cc */; };
+		43AA86F4194EED8900A67B56 /* waves_audioport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E9194EED8900A67B56 /* waves_audioport.cc */; };
+		43AA86F5194EED8900A67B56 /* waves_dataport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EA194EED8900A67B56 /* waves_dataport.cc */; };
+		43AA86F6194EED8900A67B56 /* waves_midi_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EB194EED8900A67B56 /* waves_midi_buffer.cc */; };
+		43AA86F7194EED8900A67B56 /* waves_midi_device_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EC194EED8900A67B56 /* waves_midi_device_manager.cc */; };
+		43AA86F8194EED8900A67B56 /* waves_midi_device.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86ED194EED8900A67B56 /* waves_midi_device.cc */; };
+		43AA86F9194EED8900A67B56 /* waves_midi_event.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EE194EED8900A67B56 /* waves_midi_event.cc */; };
+		43AA86FA194EED8900A67B56 /* waves_midiport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EF194EED8900A67B56 /* waves_midiport.cc */; };
+		43AA8703194EEDAC00A67B56 /* waves_audiobackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FB194EEDAC00A67B56 /* waves_audiobackend.h */; };
+		43AA8704194EEDAC00A67B56 /* waves_audioport.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FC194EEDAC00A67B56 /* waves_audioport.h */; };
+		43AA8705194EEDAC00A67B56 /* waves_dataport.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FD194EEDAC00A67B56 /* waves_dataport.h */; };
+		43AA8706194EEDAC00A67B56 /* waves_midi_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FE194EEDAC00A67B56 /* waves_midi_buffer.h */; };
+		43AA8707194EEDAC00A67B56 /* waves_midi_device_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FF194EEDAC00A67B56 /* waves_midi_device_manager.h */; };
+		43AA8708194EEDAC00A67B56 /* waves_midi_device.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8700194EEDAC00A67B56 /* waves_midi_device.h */; };
+		43AA8709194EEDAC00A67B56 /* waves_midi_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8701194EEDAC00A67B56 /* waves_midi_event.h */; };
+		43AA870A194EEDAC00A67B56 /* waves_midiport.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8702194EEDAC00A67B56 /* waves_midiport.h */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		43278FC8194EFB30003C9FEA /* basics.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = basics.hpp; path = ../wavesapi/akupara/basics.hpp; sourceTree = SOURCE_ROOT; };
+		43278FC9194EFB30003C9FEA /* compiletime_functions.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = compiletime_functions.hpp; path = ../wavesapi/akupara/compiletime_functions.hpp; sourceTree = SOURCE_ROOT; };
+		43278FCB194EFB30003C9FEA /* atomic_ops.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = atomic_ops.hpp; path = ../wavesapi/akupara/threading/atomic_ops.hpp; sourceTree = SOURCE_ROOT; };
+		43278FCC194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = atomic_ops_gcc_x86.hpp; path = ../wavesapi/akupara/threading/atomic_ops_gcc_x86.hpp; sourceTree = SOURCE_ROOT; };
+		43278FCE194EFB30003C9FEA /* WCFourCC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCFourCC.h; path = ../wavesapi/BasicTypes/WCFourCC.h; sourceTree = SOURCE_ROOT; };
+		43278FCF194EFB30003C9FEA /* WTByteOrder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WTByteOrder.h; path = ../wavesapi/BasicTypes/WTByteOrder.h; sourceTree = SOURCE_ROOT; };
+		43278FD0194EFB30003C9FEA /* WUComPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUComPtr.h; path = ../wavesapi/BasicTypes/WUComPtr.h; sourceTree = SOURCE_ROOT; };
+		43278FD1194EFB30003C9FEA /* WUDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUDefines.h; path = ../wavesapi/BasicTypes/WUDefines.h; sourceTree = SOURCE_ROOT; };
+		43278FD2194EFB30003C9FEA /* WUMathConsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUMathConsts.h; path = ../wavesapi/BasicTypes/WUMathConsts.h; sourceTree = SOURCE_ROOT; };
+		43278FD3194EFB30003C9FEA /* WUTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUTypes.h; path = ../wavesapi/BasicTypes/WUTypes.h; sourceTree = SOURCE_ROOT; };
+		43278FD5194EFB30003C9FEA /* IncludeWindows.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IncludeWindows.h; path = ../wavesapi/devicemanager/IncludeWindows.h; sourceTree = SOURCE_ROOT; };
+		43278FD6194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCMRAudioDeviceManager.cpp; path = ../wavesapi/devicemanager/WCMRAudioDeviceManager.cpp; sourceTree = SOURCE_ROOT; };
+		43278FD7194EFB30003C9FEA /* WCMRAudioDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCMRAudioDeviceManager.h; path = ../wavesapi/devicemanager/WCMRAudioDeviceManager.h; sourceTree = SOURCE_ROOT; };
+		43278FD8194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCMRCoreAudioDeviceManager.cpp; path = ../wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp; sourceTree = SOURCE_ROOT; };
+		43278FD9194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCMRCoreAudioDeviceManager.h; path = ../wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h; sourceTree = SOURCE_ROOT; };
+		43278FDA194EFB30003C9FEA /* WCMRNativeAudio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCMRNativeAudio.cpp; path = ../wavesapi/devicemanager/WCMRNativeAudio.cpp; sourceTree = SOURCE_ROOT; };
+		43278FDB194EFB30003C9FEA /* WCMRNativeAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCMRNativeAudio.h; path = ../wavesapi/devicemanager/WCMRNativeAudio.h; sourceTree = SOURCE_ROOT; };
+		43278FDC194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCMRPortAudioDeviceManager.cpp; path = ../wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp; sourceTree = SOURCE_ROOT; };
+		43278FDD194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCMRPortAudioDeviceManager.h; path = ../wavesapi/devicemanager/WCMRPortAudioDeviceManager.h; sourceTree = SOURCE_ROOT; };
+		43278FDF194EFB30003C9FEA /* MinMaxUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MinMaxUtilities.h; path = ../wavesapi/miscutils/MinMaxUtilities.h; sourceTree = SOURCE_ROOT; };
+		43278FE0194EFB30003C9FEA /* safe_delete.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = safe_delete.h; path = ../wavesapi/miscutils/safe_delete.h; sourceTree = SOURCE_ROOT; };
+		43278FE1194EFB30003C9FEA /* UMicroseconds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UMicroseconds.cpp; path = ../wavesapi/miscutils/UMicroseconds.cpp; sourceTree = SOURCE_ROOT; };
+		43278FE2194EFB30003C9FEA /* UMicroseconds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UMicroseconds.h; path = ../wavesapi/miscutils/UMicroseconds.h; sourceTree = SOURCE_ROOT; };
+		43278FE3194EFB30003C9FEA /* WCFixedString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCFixedString.h; path = ../wavesapi/miscutils/WCFixedString.h; sourceTree = SOURCE_ROOT; };
+		43278FE4194EFB30003C9FEA /* WUErrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUErrors.h; path = ../wavesapi/miscutils/WUErrors.h; sourceTree = SOURCE_ROOT; };
+		43278FE6194EFB30003C9FEA /* WCRefManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCRefManager.cpp; path = ../wavesapi/refmanager/WCRefManager.cpp; sourceTree = SOURCE_ROOT; };
+		43278FE7194EFB30003C9FEA /* WCRefManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCRefManager.h; path = ../wavesapi/refmanager/WCRefManager.h; sourceTree = SOURCE_ROOT; };
+		43278FE9194EFB30003C9FEA /* WCThreadSafe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCThreadSafe.cpp; path = ../wavesapi/threads/WCThreadSafe.cpp; sourceTree = SOURCE_ROOT; };
+		43278FEA194EFB30003C9FEA /* WCThreadSafe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCThreadSafe.h; path = ../wavesapi/threads/WCThreadSafe.h; sourceTree = SOURCE_ROOT; };
+		43278FED194EFB30003C9FEA /* WavesPublicAPI_Defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WavesPublicAPI_Defines.h; path = ../wavesapi/wavespublicapi/1.0/WavesPublicAPI_Defines.h; sourceTree = SOURCE_ROOT; };
+		43278FEE194EFB30003C9FEA /* wstdint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wstdint.h; path = ../wavesapi/wavespublicapi/wstdint.h; sourceTree = SOURCE_ROOT; };
+		43278FEF194EFB30003C9FEA /* WTErr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WTErr.h; path = ../wavesapi/wavespublicapi/WTErr.h; sourceTree = SOURCE_ROOT; };
+		43AA86DC194EECE000A67B56 /* libwaves_audiobackend.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwaves_audiobackend.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		43AA86E5194EED8900A67B56 /* waves_audiobackend.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audiobackend.cc; path = ../waves_audiobackend.cc; sourceTree = SOURCE_ROOT; };
+		43AA86E6194EED8900A67B56 /* waves_audiobackend.latency.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audiobackend.latency.cc; path = ../waves_audiobackend.latency.cc; sourceTree = SOURCE_ROOT; };
+		43AA86E7194EED8900A67B56 /* waves_audiobackend.midi.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audiobackend.midi.cc; path = ../waves_audiobackend.midi.cc; sourceTree = SOURCE_ROOT; };
+		43AA86E8194EED8900A67B56 /* waves_audiobackend.port_engine.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audiobackend.port_engine.cc; path = ../waves_audiobackend.port_engine.cc; sourceTree = SOURCE_ROOT; };
+		43AA86E9194EED8900A67B56 /* waves_audioport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audioport.cc; path = ../waves_audioport.cc; sourceTree = SOURCE_ROOT; };
+		43AA86EA194EED8900A67B56 /* waves_dataport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_dataport.cc; path = ../waves_dataport.cc; sourceTree = SOURCE_ROOT; };
+		43AA86EB194EED8900A67B56 /* waves_midi_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midi_buffer.cc; path = ../waves_midi_buffer.cc; sourceTree = SOURCE_ROOT; };
+		43AA86EC194EED8900A67B56 /* waves_midi_device_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midi_device_manager.cc; path = ../waves_midi_device_manager.cc; sourceTree = SOURCE_ROOT; };
+		43AA86ED194EED8900A67B56 /* waves_midi_device.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midi_device.cc; path = ../waves_midi_device.cc; sourceTree = SOURCE_ROOT; };
+		43AA86EE194EED8900A67B56 /* waves_midi_event.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midi_event.cc; path = ../waves_midi_event.cc; sourceTree = SOURCE_ROOT; };
+		43AA86EF194EED8900A67B56 /* waves_midiport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midiport.cc; path = ../waves_midiport.cc; sourceTree = SOURCE_ROOT; };
+		43AA86FB194EEDAC00A67B56 /* waves_audiobackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_audiobackend.h; path = ../waves_audiobackend.h; sourceTree = SOURCE_ROOT; };
+		43AA86FC194EEDAC00A67B56 /* waves_audioport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_audioport.h; path = ../waves_audioport.h; sourceTree = SOURCE_ROOT; };
+		43AA86FD194EEDAC00A67B56 /* waves_dataport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_dataport.h; path = ../waves_dataport.h; sourceTree = SOURCE_ROOT; };
+		43AA86FE194EEDAC00A67B56 /* waves_midi_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midi_buffer.h; path = ../waves_midi_buffer.h; sourceTree = SOURCE_ROOT; };
+		43AA86FF194EEDAC00A67B56 /* waves_midi_device_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midi_device_manager.h; path = ../waves_midi_device_manager.h; sourceTree = SOURCE_ROOT; };
+		43AA8700194EEDAC00A67B56 /* waves_midi_device.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midi_device.h; path = ../waves_midi_device.h; sourceTree = SOURCE_ROOT; };
+		43AA8701194EEDAC00A67B56 /* waves_midi_event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midi_event.h; path = ../waves_midi_event.h; sourceTree = SOURCE_ROOT; };
+		43AA8702194EEDAC00A67B56 /* waves_midiport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midiport.h; path = ../waves_midiport.h; sourceTree = SOURCE_ROOT; };
+		43AA870B194EEDC600A67B56 /* wscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = wscript; path = ../wscript; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		43AA86D9194EECE000A67B56 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		43278FC6194EFB30003C9FEA /* wavesapi */ = {
+			isa = PBXGroup;
+			children = (
+				43278FC7194EFB30003C9FEA /* akupara */,
+				43278FCD194EFB30003C9FEA /* BasicTypes */,
+				43278FD4194EFB30003C9FEA /* devicemanager */,
+				43278FDE194EFB30003C9FEA /* miscutils */,
+				43278FE5194EFB30003C9FEA /* refmanager */,
+				43278FE8194EFB30003C9FEA /* threads */,
+				43278FEB194EFB30003C9FEA /* wavespublicapi */,
+			);
+			name = wavesapi;
+			path = ../wavesapi;
+			sourceTree = SOURCE_ROOT;
+		};
+		43278FC7194EFB30003C9FEA /* akupara */ = {
+			isa = PBXGroup;
+			children = (
+				43278FC8194EFB30003C9FEA /* basics.hpp */,
+				43278FC9194EFB30003C9FEA /* compiletime_functions.hpp */,
+				43278FCA194EFB30003C9FEA /* threading */,
+			);
+			path = akupara;
+			sourceTree = "<group>";
+		};
+		43278FCA194EFB30003C9FEA /* threading */ = {
+			isa = PBXGroup;
+			children = (
+				43278FCB194EFB30003C9FEA /* atomic_ops.hpp */,
+				43278FCC194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp */,
+			);
+			path = threading;
+			sourceTree = "<group>";
+		};
+		43278FCD194EFB30003C9FEA /* BasicTypes */ = {
+			isa = PBXGroup;
+			children = (
+				43278FCE194EFB30003C9FEA /* WCFourCC.h */,
+				43278FCF194EFB30003C9FEA /* WTByteOrder.h */,
+				43278FD0194EFB30003C9FEA /* WUComPtr.h */,
+				43278FD1194EFB30003C9FEA /* WUDefines.h */,
+				43278FD2194EFB30003C9FEA /* WUMathConsts.h */,
+				43278FD3194EFB30003C9FEA /* WUTypes.h */,
+			);
+			path = BasicTypes;
+			sourceTree = "<group>";
+		};
+		43278FD4194EFB30003C9FEA /* devicemanager */ = {
+			isa = PBXGroup;
+			children = (
+				43278FD5194EFB30003C9FEA /* IncludeWindows.h */,
+				43278FD6194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp */,
+				43278FD7194EFB30003C9FEA /* WCMRAudioDeviceManager.h */,
+				43278FD8194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp */,
+				43278FD9194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h */,
+				43278FDA194EFB30003C9FEA /* WCMRNativeAudio.cpp */,
+				43278FDB194EFB30003C9FEA /* WCMRNativeAudio.h */,
+				43278FDC194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp */,
+				43278FDD194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h */,
+			);
+			path = devicemanager;
+			sourceTree = "<group>";
+		};
+		43278FDE194EFB30003C9FEA /* miscutils */ = {
+			isa = PBXGroup;
+			children = (
+				43278FDF194EFB30003C9FEA /* MinMaxUtilities.h */,
+				43278FE0194EFB30003C9FEA /* safe_delete.h */,
+				43278FE1194EFB30003C9FEA /* UMicroseconds.cpp */,
+				43278FE2194EFB30003C9FEA /* UMicroseconds.h */,
+				43278FE3194EFB30003C9FEA /* WCFixedString.h */,
+				43278FE4194EFB30003C9FEA /* WUErrors.h */,
+			);
+			path = miscutils;
+			sourceTree = "<group>";
+		};
+		43278FE5194EFB30003C9FEA /* refmanager */ = {
+			isa = PBXGroup;
+			children = (
+				43278FE6194EFB30003C9FEA /* WCRefManager.cpp */,
+				43278FE7194EFB30003C9FEA /* WCRefManager.h */,
+			);
+			path = refmanager;
+			sourceTree = "<group>";
+		};
+		43278FE8194EFB30003C9FEA /* threads */ = {
+			isa = PBXGroup;
+			children = (
+				43278FE9194EFB30003C9FEA /* WCThreadSafe.cpp */,
+				43278FEA194EFB30003C9FEA /* WCThreadSafe.h */,
+			);
+			path = threads;
+			sourceTree = "<group>";
+		};
+		43278FEB194EFB30003C9FEA /* wavespublicapi */ = {
+			isa = PBXGroup;
+			children = (
+				43278FEC194EFB30003C9FEA /* 1.0 */,
+				43278FEE194EFB30003C9FEA /* wstdint.h */,
+				43278FEF194EFB30003C9FEA /* WTErr.h */,
+			);
+			path = wavespublicapi;
+			sourceTree = "<group>";
+		};
+		43278FEC194EFB30003C9FEA /* 1.0 */ = {
+			isa = PBXGroup;
+			children = (
+				43278FED194EFB30003C9FEA /* WavesPublicAPI_Defines.h */,
+			);
+			path = 1.0;
+			sourceTree = "<group>";
+		};
+		43AA86D3194EECE000A67B56 = {
+			isa = PBXGroup;
+			children = (
+				43278FC6194EFB30003C9FEA /* wavesapi */,
+				43AA870C194EEDCA00A67B56 /* scripts */,
+				43AA86E4194EECF300A67B56 /* headers */,
+				43AA86E3194EECEB00A67B56 /* source */,
+				43AA86DD194EECE000A67B56 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		43AA86DD194EECE000A67B56 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				43AA86DC194EECE000A67B56 /* libwaves_audiobackend.dylib */,
+			);
+			name = Products;
+			sourceTree = SOURCE_ROOT;
+		};
+		43AA86E3194EECEB00A67B56 /* source */ = {
+			isa = PBXGroup;
+			children = (
+				43AA86E5194EED8900A67B56 /* waves_audiobackend.cc */,
+				43AA86E6194EED8900A67B56 /* waves_audiobackend.latency.cc */,
+				43AA86E7194EED8900A67B56 /* waves_audiobackend.midi.cc */,
+				43AA86E8194EED8900A67B56 /* waves_audiobackend.port_engine.cc */,
+				43AA86E9194EED8900A67B56 /* waves_audioport.cc */,
+				43AA86EA194EED8900A67B56 /* waves_dataport.cc */,
+				43AA86EB194EED8900A67B56 /* waves_midi_buffer.cc */,
+				43AA86EC194EED8900A67B56 /* waves_midi_device_manager.cc */,
+				43AA86ED194EED8900A67B56 /* waves_midi_device.cc */,
+				43AA86EE194EED8900A67B56 /* waves_midi_event.cc */,
+				43AA86EF194EED8900A67B56 /* waves_midiport.cc */,
+			);
+			name = source;
+			sourceTree = SOURCE_ROOT;
+		};
+		43AA86E4194EECF300A67B56 /* headers */ = {
+			isa = PBXGroup;
+			children = (
+				43AA86FB194EEDAC00A67B56 /* waves_audiobackend.h */,
+				43AA86FC194EEDAC00A67B56 /* waves_audioport.h */,
+				43AA86FD194EEDAC00A67B56 /* waves_dataport.h */,
+				43AA86FE194EEDAC00A67B56 /* waves_midi_buffer.h */,
+				43AA86FF194EEDAC00A67B56 /* waves_midi_device_manager.h */,
+				43AA8700194EEDAC00A67B56 /* waves_midi_device.h */,
+				43AA8701194EEDAC00A67B56 /* waves_midi_event.h */,
+				43AA8702194EEDAC00A67B56 /* waves_midiport.h */,
+			);
+			name = headers;
+			sourceTree = SOURCE_ROOT;
+		};
+		43AA870C194EEDCA00A67B56 /* scripts */ = {
+			isa = PBXGroup;
+			children = (
+				43AA870B194EEDC600A67B56 /* wscript */,
+			);
+			name = scripts;
+			sourceTree = SOURCE_ROOT;
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		43AA86DA194EECE000A67B56 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				43AA8703194EEDAC00A67B56 /* waves_audiobackend.h in Headers */,
+				43AA8704194EEDAC00A67B56 /* waves_audioport.h in Headers */,
+				43AA8705194EEDAC00A67B56 /* waves_dataport.h in Headers */,
+				43AA8706194EEDAC00A67B56 /* waves_midi_buffer.h in Headers */,
+				43AA8707194EEDAC00A67B56 /* waves_midi_device_manager.h in Headers */,
+				43AA8708194EEDAC00A67B56 /* waves_midi_device.h in Headers */,
+				43AA8709194EEDAC00A67B56 /* waves_midi_event.h in Headers */,
+				43AA870A194EEDAC00A67B56 /* waves_midiport.h in Headers */,
+				43278FF0194EFB30003C9FEA /* basics.hpp in Headers */,
+				43278FF1194EFB30003C9FEA /* compiletime_functions.hpp in Headers */,
+				43278FF2194EFB30003C9FEA /* atomic_ops.hpp in Headers */,
+				43278FF3194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp in Headers */,
+				43278FF4194EFB30003C9FEA /* WCFourCC.h in Headers */,
+				43278FF5194EFB30003C9FEA /* WTByteOrder.h in Headers */,
+				43278FF6194EFB30003C9FEA /* WUComPtr.h in Headers */,
+				43278FF7194EFB30003C9FEA /* WUDefines.h in Headers */,
+				43278FF8194EFB30003C9FEA /* WUMathConsts.h in Headers */,
+				43278FF9194EFB30003C9FEA /* WUTypes.h in Headers */,
+				43278FFA194EFB30003C9FEA /* IncludeWindows.h in Headers */,
+				43278FFC194EFB30003C9FEA /* WCMRAudioDeviceManager.h in Headers */,
+				43278FFE194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h in Headers */,
+				43279000194EFB30003C9FEA /* WCMRNativeAudio.h in Headers */,
+				43279002194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h in Headers */,
+				43279003194EFB30003C9FEA /* MinMaxUtilities.h in Headers */,
+				43279004194EFB30003C9FEA /* safe_delete.h in Headers */,
+				43279006194EFB30003C9FEA /* UMicroseconds.h in Headers */,
+				43279007194EFB30003C9FEA /* WCFixedString.h in Headers */,
+				43279008194EFB30003C9FEA /* WUErrors.h in Headers */,
+				4327900A194EFB30003C9FEA /* WCRefManager.h in Headers */,
+				4327900C194EFB30003C9FEA /* WCThreadSafe.h in Headers */,
+				4327900D194EFB30003C9FEA /* WavesPublicAPI_Defines.h in Headers */,
+				4327900E194EFB30003C9FEA /* wstdint.h in Headers */,
+				4327900F194EFB30003C9FEA /* WTErr.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		43AA86DB194EECE000A67B56 /* waves_audiobackend */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 43AA86E0194EECE000A67B56 /* Build configuration list for PBXNativeTarget "waves_audiobackend" */;
+			buildPhases = (
+				43AA86D8194EECE000A67B56 /* Sources */,
+				43AA86D9194EECE000A67B56 /* Frameworks */,
+				43AA86DA194EECE000A67B56 /* Headers */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = waves_audiobackend;
+			productName = waves_audiobackend;
+			productReference = 43AA86DC194EECE000A67B56 /* libwaves_audiobackend.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		43AA86D4194EECE000A67B56 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0460;
+				ORGANIZATIONNAME = Waves;
+			};
+			buildConfigurationList = 43AA86D7194EECE000A67B56 /* Build configuration list for PBXProject "waves_audiobackend" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 43AA86D3194EECE000A67B56;
+			productRefGroup = 43AA86DD194EECE000A67B56 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				43AA86DB194EECE000A67B56 /* waves_audiobackend */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		43AA86D8194EECE000A67B56 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				43AA86F0194EED8900A67B56 /* waves_audiobackend.cc in Sources */,
+				43AA86F1194EED8900A67B56 /* waves_audiobackend.latency.cc in Sources */,
+				43AA86F2194EED8900A67B56 /* waves_audiobackend.midi.cc in Sources */,
+				43AA86F3194EED8900A67B56 /* waves_audiobackend.port_engine.cc in Sources */,
+				43AA86F4194EED8900A67B56 /* waves_audioport.cc in Sources */,
+				43AA86F5194EED8900A67B56 /* waves_dataport.cc in Sources */,
+				43AA86F6194EED8900A67B56 /* waves_midi_buffer.cc in Sources */,
+				43AA86F7194EED8900A67B56 /* waves_midi_device_manager.cc in Sources */,
+				43AA86F8194EED8900A67B56 /* waves_midi_device.cc in Sources */,
+				43AA86F9194EED8900A67B56 /* waves_midi_event.cc in Sources */,
+				43AA86FA194EED8900A67B56 /* waves_midiport.cc in Sources */,
+				43278FFB194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp in Sources */,
+				43278FFD194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp in Sources */,
+				43278FFF194EFB30003C9FEA /* WCMRNativeAudio.cpp in Sources */,
+				43279001194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp in Sources */,
+				43279005194EFB30003C9FEA /* UMicroseconds.cpp in Sources */,
+				43279009194EFB30003C9FEA /* WCRefManager.cpp in Sources */,
+				4327900B194EFB30003C9FEA /* WCThreadSafe.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		43AA86DE194EECE000A67B56 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		43AA86DF194EECE000A67B56 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		43AA86E1194EECE000A67B56 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				EXECUTABLE_PREFIX = lib;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		43AA86E2194EECE000A67B56 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				EXECUTABLE_PREFIX = lib;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		43AA86D7194EECE000A67B56 /* Build configuration list for PBXProject "waves_audiobackend" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				43AA86DE194EECE000A67B56 /* Debug */,
+				43AA86DF194EECE000A67B56 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		43AA86E0194EECE000A67B56 /* Build configuration list for PBXNativeTarget "waves_audiobackend" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				43AA86E1194EECE000A67B56 /* Debug */,
+				43AA86E2194EECE000A67B56 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 43AA86D4194EECE000A67B56 /* Project object */;
+}
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/project.pbxproj b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.pbxproj
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/project.pbxproj
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.pbxproj
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/project.xcworkspace/xcuserdata/VKamyshniy.xcuserdatad/UserInterfaceState.xcuserstate b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/xcuserdata/VKamyshniy.xcuserdatad/UserInterfaceState.xcuserstate
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/project.xcworkspace/xcuserdata/VKamyshniy.xcuserdatad/UserInterfaceState.xcuserstate
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/xcuserdata/VKamyshniy.xcuserdatad/UserInterfaceState.xcuserstate
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/xcschememanagement.plist b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/xcschememanagement.plist
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/xcschememanagement.plist
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/xcschememanagement.plist
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Assemble Application.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Assemble Application.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Compile Java.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Compile Java.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/CopyJavaSources.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/CopyJavaSources.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/PmDefaults.xcscheme
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/PmDefaults.xcscheme
diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/xcschememanagement.plist b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/xcschememanagement.plist
similarity index 100%
copy from libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/xcschememanagement.plist
copy to libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/xcschememanagement.plist
diff --git a/libs/backends/wavesaudio/waves_audiobackend.cc b/libs/backends/wavesaudio/waves_audiobackend.cc
index 8a1661b..8cd94c4 100644
--- a/libs/backends/wavesaudio/waves_audiobackend.cc
+++ b/libs/backends/wavesaudio/waves_audiobackend.cc
@@ -21,6 +21,15 @@
 #include "waves_audioport.h"
 #include "waves_midiport.h"
 
+#include "ardour/runtime_functions.h"
+
+#ifdef COMPILER_MSVC
+#include <windows.h>
+#define sleep(X) Sleep((X) * 1000)
+// JE - Perhaps we should be using Glib::usleep() here, rather than sleep()??  But
+// that would make the Waves backend dependent on Glib (which is isn't, currently).
+#endif
+
 using namespace ARDOUR;
 
 #if defined __MINGW64__ || defined __MINGW32__
@@ -40,8 +49,8 @@ void WavesAudioBackend::AudioDeviceManagerNotification (NotificationReason reaso
             std::cout << "-------------------------------  WCMRAudioDeviceManagerClient::DeviceDebugInfo -- " << (char*)parameter << std::endl;
             break;
         case WCMRAudioDeviceManagerClient::BufferSizeChanged:
-            std::cout << "-------------------------------  WCMRAudioDeviceManagerClient::BufferSizeChanged: " << *(uint32_t*)parameter << std::endl;
-			_buffer_size_change(*(uint32_t*)parameter);
+            std::cout << "-------------------------------  WCMRAudioDeviceManagerClient::BufferSizeChanged: " << *(int*)parameter << std::endl;
+			_buffer_size_change(*(int*)parameter);
             break;
         case WCMRAudioDeviceManagerClient::RequestReset:
             std::cout << "-------------------------------  WCMRAudioDeviceManagerClient::RequestReset" << std::endl;
@@ -52,7 +61,7 @@ void WavesAudioBackend::AudioDeviceManagerNotification (NotificationReason reaso
             break;
         case WCMRAudioDeviceManagerClient::SamplingRateChanged:
             std::cout << "-------------------------------  WCMRAudioDeviceManagerClient::SamplingRateChanged: " << *(float*)parameter << std::endl;
-			set_sample_rate(*(float*)parameter);
+			_sample_rate_change(*(float*)parameter);
             break;
         case WCMRAudioDeviceManagerClient::Dropout:
             std::cout << "-------------------------------  WCMRAudioDeviceManagerClient::Dropout: " << std::endl;
@@ -75,7 +84,7 @@ void WavesAudioBackend::AudioDeviceManagerNotification (NotificationReason reaso
             engine.request_device_list_update();
             break;
         case WCMRAudioDeviceManagerClient::IODeviceDisconnected:
-            std::cout << "-------------------------------  WCMRAudioDeviceManagerClient::DeviceListChanged" << std::endl;
+            std::cout << "-------------------------------  WCMRAudioDeviceManagerClient::IODeviceDisconnected" << std::endl;
             engine.request_device_list_update();
             break;
         case WCMRAudioDeviceManagerClient::AudioCallback:
@@ -221,23 +230,6 @@ float WavesAudioBackend::default_sample_rate () const
     return AudioBackend::default_sample_rate (); 
 }
 
-uint32_t 
-WavesAudioBackend::default_buffer_size (const std::string& device_name) const
-{
-#ifdef __APPLE__
-	return AudioBackend::default_buffer_size (device_name);
-#else
-    DeviceInfo devInfo;
-    WTErr err = _audio_device_manager.GetDeviceInfoByName(device_name, devInfo);
-
-    if (err != eNoErr) {
-        std::cerr << "WavesAudioBackend::default_buffer_size (): Failed to get buffer size for device [" << device_name << "]" << std::endl;
-        return AudioBackend::default_buffer_size (device_name);
-    }
-	
-	return devInfo.m_DefaultBufferSize; 
-#endif
-}
 
 std::vector<uint32_t> 
 WavesAudioBackend::available_buffer_sizes (const std::string& device_name) const
@@ -418,11 +410,14 @@ WavesAudioBackend::set_sample_rate (float sample_rate)
         return -1;
     }
 
-	_sample_rate_change(sample_rate);
+    // if call to set sample rate is successful
+    // but device sample rate differs from the value we tried to set
+    // this means we are driven by device for buffer size
+    sample_rate = _device->CurrentSamplingRate ();
+    _sample_rate_change(sample_rate);
        
     if (device_needs_restart) {
         // COMMENTED DBG LOGS */ std::cout << "\t\t[" << _device->DeviceName() << "]->SetStreaming (true);"<< std::endl;
-        _call_thread_init_callback = true;
         retVal  = _device->SetStreaming (true);
         if (retVal != eNoErr) {
             std::cerr << "WavesAudioBackend::set_sample_rate (): [" << _device->DeviceName () << "]->SetStreaming (true) failed (" << retVal << ") !" << std::endl;
@@ -471,7 +466,6 @@ WavesAudioBackend::set_buffer_size (uint32_t buffer_size)
     
     if (device_needs_restart) {
         // COMMENTED DBG LOGS */ std::cout << "\t\t[" << _device->DeviceName() << "]->SetStreaming (true);"<< std::endl;
-        _call_thread_init_callback = true;
         retVal  = _device->SetStreaming (true);
         if (retVal != eNoErr) {
             std::cerr << "WavesAudioBackend::set_buffer_size (): [" << _device->DeviceName () << "]->SetStreaming (true) failed (" << retVal << ") !" << std::endl;
@@ -497,8 +491,6 @@ WavesAudioBackend::reset_device ()
 {
     // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::_reset_device ():" << std::endl;
 
-    WTErr retVal = eNoErr;
-
     if (!_device) {
         std::cerr << "WavesAudioBackend::set_buffer_size (): No device is set!" << std::endl;
         return -1;
@@ -707,7 +699,6 @@ WavesAudioBackend::_start (bool for_latency_measurement)
 
     manager.registration_callback ();
 
-    _call_thread_init_callback = true;
     WTErr retVal  = _device->SetStreaming (true);
     if (retVal != eNoErr) {
         std::cerr << "WavesAudioBackend::_start (): [" << _device->DeviceName () << "]->SetStreaming () failed!" << std::endl;
@@ -738,11 +729,6 @@ WavesAudioBackend::_audio_device_callback (const float* input_buffer,
     // COMMENTED FREQUENT DBG LOGS */ std::cout << "WavesAudioBackend::_audio_device_callback ():" << _device->DeviceName () << std::endl;
     _sample_time_at_cycle_start = sample_time;
     _cycle_start_time_nanos = cycle_start_time_nanos;
-    
-    /* There is the possibility that the thread this runs in may change from
-     *  callback to callback, so do it every time.
-     */
-    _main_thread = pthread_self ();
 
     if (_buffer_size != nframes) {
         // COMMENTED DBG LOGS */ std::cout << "\tAudioEngine::thread_init_callback() buffer size and nframes are not equal: " << _buffer_size << "!=" << nframes << std::endl;
@@ -755,9 +741,30 @@ WavesAudioBackend::_audio_device_callback (const float* input_buffer,
     if (_call_thread_init_callback) {
         _call_thread_init_callback = false;
         // COMMENTED DBG LOGS */ std::cout << "\tAudioEngine::thread_init_callback() invoked for " << std::hex << pthread_self() << std::dec << " !" << std::endl;
+        
+        /* There is the possibility that the thread this runs in may change from
+         *  callback to callback, so do it every time.
+         */
+        _main_thread = pthread_self ();
+        
         AudioEngine::thread_init_callback (this);
     }
 
+    if ( !engine.thread_initialised_for_audio_processing () ) {
+	    std::cerr << "\tWavesAudioBackend::_audio_device_callback (): It's an attempt to call process callback from the thread which didn't initialize it " << std::endl;
+	    
+	    AudioEngine::thread_init_callback (this);
+    }
+    
+    if (pthread_equal (_main_thread, pthread_self()) == 0) {
+#ifdef PTW32_VERSION
+            std::cerr << "Process thread ID has changed. Expected thread: " << _main_thread.p <<  " current thread: " << pthread_self().p << std::dec << " !" << std::endl;
+#else
+            std::cerr << "Process thread ID has changed. Expected thread: " << _main_thread <<  " current thread: " << pthread_self() << std::dec << " !" << std::endl;
+#endif
+            _main_thread = pthread_self();
+    }
+
     engine.process_callback (nframes);
     
     _write_audio_data_to_device (output_buffer, nframes);
@@ -815,11 +822,23 @@ WavesAudioBackend::freewheel (bool start_stop)
             }
             _call_thread_init_callback = true;
             _freewheel_thread ();
-            engine.freewheel_callback (start_stop);
+            
+            while (!engine.freewheeling()) {
+                sleep(0);
+            }
+            
+            // freewheel thread was not activated successfully
+            if (_freewheel_thread_active == false) {
+                engine.freewheel_callback(false);
+            }
         }
         else {
             _freewheel_thread_active = false; // stop _freewheel_thread ()
-            engine.freewheel_callback (start_stop);
+            
+            while (engine.freewheeling()) {
+                sleep(0);
+            }
+            
             _call_thread_init_callback = true;
             WTErr retval = _device->SetStreaming (true);
             if (retval != eNoErr) {
@@ -859,6 +878,10 @@ WavesAudioBackend::_freewheel_thread ()
         _freewheel_thread_active = true;
         if ((pthread_create (&thread_id, &attributes, __start_process_thread, thread_data))) {
             _freewheel_thread_active = false;
+            
+            // release invoking thread
+            engine.freewheel_callback(true);
+            
             std::cerr << "WavesAudioBackend::freewheel_thread (): pthread_create () failed!" << std::endl;
             return;
         }
@@ -867,6 +890,9 @@ WavesAudioBackend::_freewheel_thread ()
         return;
     }
     
+    // notify angine that freewheeling is started
+    engine.freewheel_callback(true);
+    
     if (_call_thread_init_callback) {
         _call_thread_init_callback = false;
         AudioEngine::thread_init_callback (this);
@@ -875,6 +901,10 @@ WavesAudioBackend::_freewheel_thread ()
     while (_freewheel_thread_active) {
         engine.process_callback (_buffer_size);
     }
+    
+    // notify angine that freewheeling is stopped
+    engine.freewheel_callback(false);
+    
     // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::_freewheel_thread (): FINISHED" << std::endl;
     return;
 }
@@ -1158,13 +1188,12 @@ WavesAudioBackend::_read_audio_data_from_device (const float* input_buffer, pfra
 {
 #if defined(PLATFORM_WINDOWS)
     const float **buffer = (const float**)input_buffer;
-    size_t copied_bytes = nframes*sizeof(float);
 
     for(std::vector<WavesAudioPort*>::iterator it = _physical_audio_inputs.begin ();
         it != _physical_audio_inputs.end();
         ++it)
     {
-        memcpy((*it)->buffer(), *buffer, copied_bytes);
+		ARDOUR::copy_vector ((*it)->buffer(), *buffer, nframes);
         ++buffer;
     }
 #else
@@ -1247,7 +1276,6 @@ WavesAudioBackend::__instantiate (const std::string& arg1, const std::string& ar
 	LARGE_INTEGER Frequency;
 	QueryPerformanceFrequency(&Frequency);
 	__performance_counter_frequency = Frequency.QuadPart;
-	std::cout << "__performance_counter_frequency:" << __performance_counter_frequency << std::endl;
 
 #endif
     return 0;
diff --git a/libs/backends/wavesaudio/waves_audiobackend.h b/libs/backends/wavesaudio/waves_audiobackend.h
index ad40d09..74322b1 100644
--- a/libs/backends/wavesaudio/waves_audiobackend.h
+++ b/libs/backends/wavesaudio/waves_audiobackend.h
@@ -93,8 +93,6 @@ class WavesMidiPort;
 
     virtual std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
 
-    virtual uint32_t default_buffer_size (const std::string& device) const;
-
     virtual uint32_t available_input_channel_count (const std::string& device) const;
 
     virtual uint32_t available_output_channel_count (const std::string& device) const;
diff --git a/libs/backends/wavesaudio/waves_audioport.cc b/libs/backends/wavesaudio/waves_audioport.cc
index 4ded37d..4918025 100644
--- a/libs/backends/wavesaudio/waves_audioport.cc
+++ b/libs/backends/wavesaudio/waves_audioport.cc
@@ -18,13 +18,21 @@
 */
 
 #include "waves_audioport.h"
+#include "ardour/runtime_functions.h"
+#include "pbd/malign.h"
 
 using namespace ARDOUR;
 
 WavesAudioPort::WavesAudioPort (const std::string& port_name, PortFlags flags)
     : WavesDataPort (port_name, flags)    
 {
-    memset (_buffer, 0, sizeof (_buffer));
+	aligned_malloc ((void**)&_buffer, MAX_BUFFER_SIZE_BYTES, 32 /*32 byte alignment*/);
+    memset (_buffer, 0, MAX_BUFFER_SIZE_BYTES);
+}
+
+WavesAudioPort::~WavesAudioPort ()
+{
+	aligned_free (_buffer);
 }
 
 
@@ -40,14 +48,19 @@ void* WavesAudioPort::get_buffer (pframes_t nframes)
              * Base class WavesDataPort takes is supposed to provide enough consistentcy
              * of the connections.
              */
-            for (memcpy (_buffer, ((const WavesAudioPort*)*it)->const_buffer (), nframes * sizeof (Sample)), ++it;
-				 it != get_connections ().end ();
-				 ++it) {
-                Sample* tgt = buffer ();
-                const Sample* src = ((const WavesAudioPort*)*it)->const_buffer ();
-                for (uint32_t frame = 0; frame < nframes; ++frame, ++tgt, ++src)    {
-                    *tgt += *src;
-                }
+
+             // get first buffer data
+             // use optimized function to fill the buffer intialy
+             ARDOUR::copy_vector (_buffer, ((const WavesAudioPort*)*it)->const_buffer (), nframes);
+             ++it;
+            
+             // mix the rest
+             for (; it != get_connections ().end (); ++it) {
+                 Sample* tgt = buffer ();
+                 const Sample* src = ((const WavesAudioPort*)*it)->const_buffer ();
+
+                 // use otimized function to mix the buffers
+                 ARDOUR::mix_buffers_no_gain (tgt, src, nframes);
             }
         }
     }
@@ -59,4 +72,4 @@ void
 WavesAudioPort::_wipe_buffer()
 {
 	memset (_buffer, 0, sizeof (_buffer));
-}
\ No newline at end of file
+}
diff --git a/libs/backends/wavesaudio/waves_audioport.h b/libs/backends/wavesaudio/waves_audioport.h
index 5b4ab52..d658dba 100644
--- a/libs/backends/wavesaudio/waves_audioport.h
+++ b/libs/backends/wavesaudio/waves_audioport.h
@@ -35,7 +35,7 @@ public:
 
     WavesAudioPort (const std::string& port_name, PortFlags flags);
 
-    virtual ~WavesAudioPort () { };
+    virtual ~WavesAudioPort ();
 
     virtual DataType type () const {    return DataType::AUDIO; };
 
@@ -49,7 +49,7 @@ protected:
 
 private:
 
-    Sample _buffer[MAX_BUFFER_SIZE_SAMPLES];
+    Sample *_buffer;
 };
 
 } // namespace
diff --git a/libs/backends/wavesaudio/waves_dataport.cc b/libs/backends/wavesaudio/waves_dataport.cc
index d1dacc9..b5485ac 100644
--- a/libs/backends/wavesaudio/waves_dataport.cc
+++ b/libs/backends/wavesaudio/waves_dataport.cc
@@ -35,7 +35,7 @@ WavesDataPort::WavesDataPort (const std::string& inport_name, PortFlags inflags)
 
 WavesDataPort::~WavesDataPort ()
 {
-    disconnect_all ();
+    _disconnect_all ();
 }
 
 
@@ -67,7 +67,7 @@ int WavesDataPort::connect (WavesDataPort *port)
     }
 
     if (is_connected (port)) {
-        std::cerr << "WavesDataPort::connect (): the ports are already connected!" << std::endl;
+        // std::cerr << "WavesDataPort::connect (): the ports are already connected!" << std::endl;
         return -1;
     }
 
@@ -115,8 +115,7 @@ void WavesDataPort::_disconnect (WavesDataPort *port, bool api_call)
         port->_disconnect (this, false);
     }
 
-	if (is_input() && _connections.empty())
-	{
+	if (is_input() && _connections.empty())	{
 		_wipe_buffer();
 	}
 }
@@ -124,13 +123,21 @@ void WavesDataPort::_disconnect (WavesDataPort *port, bool api_call)
 
 void WavesDataPort::disconnect_all ()
 {
+    _disconnect_all ();
+    
+	if (is_input())	{
+		_wipe_buffer();
+	}
+}
+
+void WavesDataPort::_disconnect_all ()
+{
     while (!_connections.empty ()) {
         _connections.back ()->_disconnect (this, false);
         _connections.pop_back ();
     }
 }
 
-
 bool WavesDataPort::is_physically_connected () const
 {
     for (std::vector<WavesDataPort*>::const_iterator it = _connections.begin (); it != _connections.end (); ++it) {
diff --git a/libs/backends/wavesaudio/waves_dataport.h b/libs/backends/wavesaudio/waves_dataport.h
index 1b2f26f..a5b8243 100644
--- a/libs/backends/wavesaudio/waves_dataport.h
+++ b/libs/backends/wavesaudio/waves_dataport.h
@@ -106,6 +106,7 @@ private:
     std::vector<WavesDataPort*> _connections;
 
     void _connect (WavesDataPort* port, bool api_call);
+    void _disconnect_all ();
     void _disconnect (WavesDataPort* port, bool api_call);
 };
 
diff --git a/libs/backends/wavesaudio/waves_midi_device.cc b/libs/backends/wavesaudio/waves_midi_device.cc
index 25d06da..9bb6661 100644
--- a/libs/backends/wavesaudio/waves_midi_device.cc
+++ b/libs/backends/wavesaudio/waves_midi_device.cc
@@ -18,6 +18,12 @@
 */
 
 #include <iostream>
+
+#include "pbd/error.h"
+#include "pbd/debug.h"
+#include "pbd/compose.h"
+#include "pbd/stacktrace.h"
+
 #include "waves_midi_device.h"
 #include "waves_midi_event.h"
 
@@ -27,6 +33,7 @@
 #define QUEUE_LENGTH 1024
 
 using namespace ARDOUR;
+using namespace PBD;
 
 WavesMidiDevice::WavesMidiDevice (const std::string& device_name)
     : _pm_input_id (pmNoDevice)
@@ -61,14 +68,16 @@ WavesMidiDevice::WavesMidiDevice (const std::string& device_name)
 
 WavesMidiDevice::~WavesMidiDevice ()
 {
-    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::~WavesMidiDevice ():" << name () << std::endl;
-    close ();
+        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::~WavesMidiDevice (): %1\n", name()));
+        close ();
 }
 
 int
 WavesMidiDevice::open (PmTimeProcPtr time_proc, void* time_info)
 {
-	if (is_input () ) {
+    DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::open (): %1", name ()));
+
+    if (is_input () ) {
 		// COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::open (): INPUT" << _pm_input_id << "-[" << name () <<  "]" << std::endl;
 			
 		if (!_input_pm_stream) {
@@ -78,26 +87,26 @@ WavesMidiDevice::open (PmTimeProcPtr time_proc, void* time_info)
 				_input_queue = Pm_QueueCreate (QUEUE_LENGTH, sizeof (const WavesMidiEvent*));
 				// COMMENTED DBG LOGS */ std::cout << "    DONE : " << std::endl;
 				if (NULL == _input_queue) {
-					std::cerr << "WavesMidiDevice::open (): _input_queue = Pm_QueueCreate () failed for " << _pm_input_id << "-[" << name () <<  "]!" << std::endl;
-					return -1;
+                    std::cerr << "WavesMidiDevice::open (): _input_queue = Pm_QueueCreate () failed for " << _pm_input_id << "-[" << name () <<  "]!" << std::endl;
+                    return -1;
 				}
 			} 
 			// create stream
 			// COMMENTED DBG LOGS */ std::cout << "    going to Pm_OpenInput : " << std::endl;
-			if (pmNoError != Pm_OpenInput (&_input_pm_stream, 
-			                               _pm_input_id,
-			                               NULL,
-			                               1024,
-			                               time_proc,
-			                               time_info)) {
-				// COMMENTED DBG LOGS */ std::cout << "    DONE : " << std::endl;
-				char* err_msg = new char[256];
-				Pm_GetHostErrorText(err_msg, 256);
-				std::cerr << "WavesMidiDevice::open (): Pm_OpenInput () failed for " << _pm_input_id << "-[" << name () <<  "]!" << std::endl;
-				std::cerr << "    Port Midi Host Error: " << err_msg << std::endl;
-				close ();
-				return -1;
-			}
+            if (pmNoError != Pm_OpenInput (&_input_pm_stream, 
+                                            _pm_input_id,
+                                            NULL,
+                                            1024,
+                                            time_proc,
+                                            time_info)) {
+					// COMMENTED DBG LOGS */ std::cout << "    DONE : " << std::endl;
+                    char* err_msg = new char[256];
+					Pm_GetHostErrorText(err_msg, 256);
+					std::cerr << "WavesMidiDevice::open (): Pm_OpenInput () failed for " << _pm_input_id << "-[" << name () <<  "]!" << std::endl;
+					std::cerr << "    Port Midi Host Error: " << err_msg << std::endl;
+					close ();
+                    return -1;
+            }
 			// COMMENTED DBG LOGS */ std::cout << "    DONE : " << std::endl;
 		} 
 	} 
@@ -142,6 +151,7 @@ WavesMidiDevice::open (PmTimeProcPtr time_proc, void* time_info)
 void
 WavesMidiDevice::close ()
 {
+	DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::close (): %1\n", name ()));
 	WavesMidiEvent *waves_midi_event;
 
 	// save _input_pm_stream and _output_pm_stream to local buf
@@ -197,114 +207,123 @@ WavesMidiDevice::close ()
 void
 WavesMidiDevice::do_io ()
 {
-    read_midi ();
-    write_midi ();
+        read_midi ();
+        write_midi ();
 }
 
 void
 WavesMidiDevice::read_midi ()
 {
-    if (NULL == _input_pm_stream) {
-        return;
-    }
-
-    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "]" << std::endl;
-
-    while (Pm_Poll (_input_pm_stream) > 0) {
-        PmEvent pm_event; // just one message at a time
-        int result = Pm_Read (_input_pm_stream, &pm_event, 1);
-        if (result < 0) {
-            std::cerr << "WavesMidiDevice::_read_midi (): Pm_Read () failed (" << result << ") for [" << name () << "]!" << std::endl;
-            break;
-        }
-        // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] evt-tm:" << pm_event.timestamp << std::endl;
-        if (_incomplete_waves_midi_event == NULL ) {
-            // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] : new _incomplete_waves_midi_event" << std::endl;
-            _incomplete_waves_midi_event = new WavesMidiEvent (pm_event.timestamp);
+        if (NULL == _input_pm_stream) {
+                return;
         }
         
-        WavesMidiEvent *nested_pm_event = _incomplete_waves_midi_event->append_data (pm_event);
-        if (nested_pm_event) {
-            Pm_Enqueue (_input_queue, &nested_pm_event);
-            // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] : Pm_Enqueue (_input_queue, nested_pm_event)" << std::endl;
+        while (Pm_Poll (_input_pm_stream) > 0) {
+
+                PmEvent pm_event; // just one message at a time
+                int result = Pm_Read (_input_pm_stream, &pm_event, 1);
+
+                if (result < 0) {
+                        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("Pm_Read failed for (): [%1]\n", name()));
+                        break;
+                }
+
+                DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] evt-tm: %2\n", name(), pm_event.timestamp));
+
+                if (_incomplete_waves_midi_event == NULL ) {
+                        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] new incomplete_waves_midi_event\n", name()));
+                        _incomplete_waves_midi_event = new WavesMidiEvent (pm_event.timestamp);
+                }
+                
+                WavesMidiEvent *nested_pm_event = _incomplete_waves_midi_event->append_data (pm_event);
+
+                if (nested_pm_event) {
+                        Pm_Enqueue (_input_queue, &nested_pm_event);
+                        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] : Pm_Enqueue (_input_queue, nested_pm_event)\n", name()));
+                }
+                
+                switch ( _incomplete_waves_midi_event->state ()) {
+                case WavesMidiEvent::BROKEN:
+                        delete _incomplete_waves_midi_event;
+                        _incomplete_waves_midi_event = NULL;
+                        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] : case WavesMidiEvent::BROKEN:\n", name()));
+                        break;
+                case WavesMidiEvent::COMPLETE:
+                        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] : Pm_Enqueue (_input_queue, _incomplete_waves_midi_event); %3\n",  name (), _incomplete_waves_midi_event));
+
+						if (pmNoError != Pm_Enqueue (_input_queue, &_incomplete_waves_midi_event) ) {
+							char* err_msg = new char[256];
+							Pm_GetHostErrorText(err_msg, 256);
+							std::cerr << "WavesMidiDevice::read_midi (): Pm_Enqueue () failed for [" << name () <<  "]!" << std::endl;
+							std::cerr << "Error: " << err_msg << std::endl;
+						}
+
+                        _incomplete_waves_midi_event = NULL;
+                        break;
+                default:
+                        break;
+                }
         }
-        switch ( _incomplete_waves_midi_event->state ()) {
-            case WavesMidiEvent::BROKEN:
-                delete _incomplete_waves_midi_event;
-                _incomplete_waves_midi_event = NULL;
-                // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] : case WavesMidiEvent::BROKEN:" << std::endl;
-            break;
-            case WavesMidiEvent::COMPLETE:
-                // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] : Pm_Enqueue (_input_queue, _incomplete_waves_midi_event); " << std::hex << (void*)_incomplete_waves_midi_event << std::dec << std::endl;
-                Pm_Enqueue (_input_queue, &_incomplete_waves_midi_event);
-                _incomplete_waves_midi_event = NULL;
-            break;
-            default:
-            break;
-        }
-    }
 }
 
-
 void
 WavesMidiDevice::write_midi ()
 {
-    if (NULL == _output_pm_stream) {
-        return;
-    }
-    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_write_midi (): " << _pm_device_id << "-[" << name () << "]" << std::endl;
-
-    PmError err;
-    WavesMidiEvent *waves_midi_event;
-
-    while (1 == Pm_Dequeue (_output_queue, &waves_midi_event)) {
-        if (waves_midi_event->sysex ()) {
-            // LATENCY compensation
-            err = Pm_WriteSysEx (_output_pm_stream, waves_midi_event->timestamp () - LATENCY, waves_midi_event->data ());
-            if (0 > err) {
-                std::cout << "WavesMidiDevice::write_event_to_device (): [" << name () << "] Pm_WriteSysEx () failed (" << err << ")!" << std::endl;
-            };
-            // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_write_midi (): SYSEX used, ev->tm:" << waves_midi_event->timestamp () - LATENCY << std::endl;
+        if (NULL == _output_pm_stream) {
+                return;
         }
-        else
-        {
-            err = Pm_WriteShort (_output_pm_stream, waves_midi_event->timestamp () - LATENCY, * (PmMessage*)waves_midi_event->data ());
-            if (0 > err) {
-                std::cout << "WavesMidiDevice::write_event_to_device (): [" << name () << "] Pm_WriteShort () failed (" << err << ")!" << std::endl;
-            }
-            // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_write_midi (): SHORTMSG used, ev->tm:" << waves_midi_event->timestamp () - LATENCY <<  std::endl;
+
+        PmError err;
+        WavesMidiEvent *waves_midi_event;
+        
+        while (1 == Pm_Dequeue (_output_queue, &waves_midi_event)) {
+                if (waves_midi_event->sysex ()) {
+                        // LATENCY compensation
+                        err = Pm_WriteSysEx (_output_pm_stream, waves_midi_event->timestamp () - LATENCY, waves_midi_event->data ());
+                        if (0 > err) {
+                                std::cerr << "WavesMidiDevice::write_event_to_device (): [" << name () << "] Pm_WriteSysEx () failed (" << err << ")!" << std::endl;
+                        };
+                        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_write_midi (): SYSEX used, ev->tm: %1", waves_midi_event->timestamp () - LATENCY));
+                }
+                else
+                {
+                        err = Pm_WriteShort (_output_pm_stream, waves_midi_event->timestamp () - LATENCY, * (PmMessage*)waves_midi_event->data ());
+                        if (0 > err) {
+                                error << "WavesMidiDevice::write_event_to_device (): [" << name () << "] Pm_WriteShort () failed (" << err << ")!" << endmsg;
+                        }
+                        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_write_midi (): SHORTMSG used, ev->tm: %1\n", waves_midi_event->timestamp () - LATENCY));
+                }
         }
-    }
-    return;
-}
 
+        return;
+}
+                 
 int
 WavesMidiDevice::enqueue_output_waves_midi_event (const WavesMidiEvent* waves_midi_event)
 {
-    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::enqueue_output_waves_midi_event (): " << _pm_device_id << "-[" << name () << "]" << std::endl;
-
-    if (waves_midi_event == NULL) {
-        std::cerr << "WavesMidiDevice::put_event_to_callback (): 'waves_midi_event' is NULL!" << std::endl;
-        return -1;
-    }
-
-    PmError err = Pm_Enqueue (_output_queue, &waves_midi_event);
-
-    if (0 > err) {
-        std::cerr << "WavesMidiDevice::put_event_to_callback (): Pm_Enqueue () failed (" << err << ")!" << std::endl;
-        return -1;
-    };
-
-    return 0;
+        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::enqueue_output_waves_midi_event () [%1]\n", name()));
+        
+        if (waves_midi_event == NULL) {
+                error << "WavesMidiDevice::put_event_to_callback (): 'waves_midi_event' is NULL!" << endmsg;
+                return -1;
+        }
+        
+        PmError err = Pm_Enqueue (_output_queue, &waves_midi_event);
+        
+        if (0 > err) {
+                error << "WavesMidiDevice::put_event_to_callback (): Pm_Enqueue () failed (" << err << ")!" << endmsg;
+                return -1;
+        };
+        
+        return 0;
 }
 
 WavesMidiEvent* 
 WavesMidiDevice::dequeue_input_waves_midi_event ()
 {
-    WavesMidiEvent* waves_midi_event;
-    if (Pm_Dequeue (_input_queue, &waves_midi_event) == 1) {
-        return waves_midi_event;
-    }
-    return NULL;
+        WavesMidiEvent* waves_midi_event;
+        if (Pm_Dequeue (_input_queue, &waves_midi_event) == 1) {
+                return waves_midi_event;
+        }
+        return NULL;
 }
-
diff --git a/libs/backends/wavesaudio/waves_midi_device_manager.cc b/libs/backends/wavesaudio/waves_midi_device_manager.cc
index dcc5fa0..344deee 100644
--- a/libs/backends/wavesaudio/waves_midi_device_manager.cc
+++ b/libs/backends/wavesaudio/waves_midi_device_manager.cc
@@ -54,7 +54,7 @@ WavesMidiDeviceManager::~WavesMidiDeviceManager ()
 int
 WavesMidiDeviceManager::start ()
 {
-    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::stream ():" << std::endl;
+    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::start ():" << std::endl;
     if ( _active == true ) {
         return -1;
     }
@@ -77,7 +77,7 @@ WavesMidiDeviceManager::start ()
 int
 WavesMidiDeviceManager::stream (bool yn)
 {
-    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::stream ():" << std::endl;
+    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::stream (" << (yn?"true":"false") << "):" << std::endl;
     if (!_active) {
         std::cerr << "WavesMidiDeviceManager::stream (): the midi device manager is not started up !" << std::endl;
         return -1;
@@ -88,7 +88,8 @@ WavesMidiDeviceManager::stream (bool yn)
     }
 
     if (yn)    {
-        if ( Pt_Start (1, __portmidi_callback, this) != ptNoError) {
+        // __portmidi_callback will be called once per 50 msec
+        if ( Pt_Start (50, __portmidi_callback, this) != ptNoError) {
             std::cerr << "WavesMidiDeviceManager::stream (): Pt_Start () failed!" << std::endl;
             return -1;
         }
@@ -130,7 +131,7 @@ WavesMidiDeviceManager::stop ()
 void 
 WavesMidiDeviceManager::__portmidi_callback (PtTimestamp timestamp, void * userData)
 {
-    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::__portmidi_callback ():" << std::endl;
+    // COMMENTED FREQUENT DBG LOGS */ std::cout << "WavesMidiDeviceManager::__portmidi_callback ():" << std::endl;
     WavesMidiDeviceManager *dm = (WavesMidiDeviceManager *)userData;
     
     if (dm == NULL) {
@@ -149,8 +150,10 @@ WavesMidiDeviceManager::_portmidi_callback (PtTimestamp timestamp)
 
     if ((_input_device_count != midiInGetNumDevs ()) || (_output_device_count != midiOutGetNumDevs ())) {
         _audiobackend._changed_midi_devices ();
-        return;
-    }
+        // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::_portmidi_callback ():" << std::endl;
+        // COMMENTED DBG LOGS */ std::cout << "                        _input_device_count ?= midiInGetNumDevs () :" << _input_device_count << " ?= " << midiInGetNumDevs () << std::endl;
+        // COMMENTED DBG LOGS */ std::cout << "                        _output_device_count ?= midiOutGetNumDevs () :" << _output_device_count << " ?= " << midiOutGetNumDevs () << std::endl;
+   }
 }
 
 void WavesMidiDeviceManager::do_read ()
@@ -178,6 +181,7 @@ WavesMidiDeviceManager::__get_time_ms (void *time_info)
 
 WavesMidiDevice* WavesMidiDeviceManager::_get_device (const std::string& name)
 {
+    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::_get_device ():" << std::endl;
     for (size_t i = 0; i < _devices.size (); i++) {
         if (name == _devices[i]->name ()) {
             return _devices[i];
@@ -190,12 +194,23 @@ WavesMidiDevice* WavesMidiDeviceManager::_get_device (const std::string& name)
 int
 WavesMidiDeviceManager::_create_devices ()
 {
+    // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::_create_devices () :" << std::endl;
     int count = Pm_CountDevices ();
 
     for (int i = 0; i < count; i++) {
 
         const PmDeviceInfo* pm_device_info = Pm_GetDeviceInfo (i);
-
+        // COMMENTED DBG LOGS */ std::cout << "                                    interf : " << pm_device_info->interf << std::endl;
+        // COMMENTED DBG LOGS */ std::cout << "                                      name : " << pm_device_info->name << std::endl;
+        // COMMENTED DBG LOGS */ std::cout << "                                     input : " << pm_device_info->input << std::endl;
+        // COMMENTED DBG LOGS */ std::cout << "                                    output : " << pm_device_info->output << std::endl;
+        // COMMENTED DBG LOGS */ std::cout << "                                    opened : " << pm_device_info->opened << std::endl;
+#if defined (PLATFORM_WINDOWS)
+       if (strncmp (pm_device_info->name, "Microsoft", strlen ("Microsoft")) == 0) {
+           // COMMENTED DBG LOGS */ std::cout << "      skipping anything from Microsoft :" << pm_device_info->name << std::endl;
+           continue;
+       }
+#endif
         if (pm_device_info == NULL) {
             std::cerr << "WavesMidiDeviceManager::_create_devices (): Pm_GetDeviceInfo (" << i << ") failed!" << std::endl;
             continue;
diff --git a/libs/backends/wavesaudio/waves_midi_event.cc b/libs/backends/wavesaudio/waves_midi_event.cc
index 7960cb4..f75946c 100644
--- a/libs/backends/wavesaudio/waves_midi_event.cc
+++ b/libs/backends/wavesaudio/waves_midi_event.cc
@@ -16,10 +16,15 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
+
+#include "pbd/debug.h"
+#include "pbd/compose.h"
+
 #include "memory.h"
 #include "waves_midi_event.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 WavesMidiEvent::WavesMidiEvent (PmTimestamp timestamp)
     : _size (0)
@@ -37,13 +42,27 @@ WavesMidiEvent::WavesMidiEvent (PmTimestamp timestamp, const uint8_t* data, size
     , _data (data && datalen ? new uint8_t[ (datalen < sizeof (PmMessage)) ? sizeof (PmMessage) : datalen] : NULL)
     , _state (data && datalen ? COMPLETE : BROKEN) 
 {
-    // COMMENTED DBG LOGS */ std::cout  << "WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : Size=" << _size << "---" << datalen << std::endl;
-    if (_state == COMPLETE) {
-        // COMMENTED DBG LOGS */ std::cout  << "\t\t\t Allocated Size=" << ((datalen < sizeof (PmMessage)) ? sizeof (PmMessage) : datalen) << std::endl;
-        memcpy (_data, data, datalen);
-    }
-}
+        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : Size=%1---%2\n", _size, datalen));
+        if (_state == COMPLETE) {
+                DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "\t\t\t Allocated Size=%1\n", ((datalen < sizeof (PmMessage)) ? sizeof (PmMessage) : datalen)));
+                memcpy (_data, data, datalen);
+
+#ifndef NDEBUG
+                if (DEBUG_ENABLED (DEBUG::WavesMIDI)) {
+                        DEBUG_STR_DECL(a);
+                        for (size_t i=0; i < datalen; ++i) {
+                                DEBUG_STR_APPEND(a,std::hex);
+                                DEBUG_STR_APPEND(a,"0x");
+                                DEBUG_STR_APPEND(a,(int)data[i]);
+                                DEBUG_STR_APPEND(a,' ');
+                        }
+                        DEBUG_STR_APPEND(a,'\n');
+                        DEBUG_TRACE (DEBUG::WavesMIDI, DEBUG_STR(a).str());
+	}
+#endif
 
+        }
+}
 
 WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source)
     : _size (source.size ())
@@ -51,11 +70,25 @@ WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source)
     , _data ((source.size () && source.const_data ()) ? new uint8_t[ (source.size () < sizeof (PmMessage)) ? sizeof (PmMessage) : source.size ()] : NULL)
     , _state (source.state () ) 
 {
-    // COMMENTED DBG LOGS */ std::cout  << "WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : Size=" << _size << "---" << source.size () << std::endl;
-    // COMMENTED DBG LOGS */ std::cout  << "\t\t\t Allocated Size=" << ((source.size () < sizeof (PmMessage)) ? sizeof (PmMessage) : source.size ()) << std::endl;
-    if (_data && source.const_data ()) {
-        memcpy (_data, source.const_data (), source.size ());
-    }
+        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : Size=%1---%2\n", _size, source.size ()));
+        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "\t\t\t Allocated Size=%1\n", ((source.size () < sizeof (PmMessage)) ? sizeof (PmMessage) : source.size ())));
+        if (_data && source.const_data ()) {
+                memcpy (_data, source.const_data (), source.size ());
+
+#ifndef NDEBUG
+                if (DEBUG_ENABLED (DEBUG::WavesMIDI)) {
+                        DEBUG_STR_DECL(a);
+                        for (size_t i=0; i < source.size(); ++i) {
+                                DEBUG_STR_APPEND(a,std::hex);
+                                DEBUG_STR_APPEND(a,"0x");
+                                DEBUG_STR_APPEND(a,(int)source.const_data()[i]);
+                                DEBUG_STR_APPEND(a,' ');
+                        }
+                        DEBUG_STR_APPEND(a,'\n');
+                        DEBUG_TRACE (DEBUG::WavesMIDI, DEBUG_STR(a).str());
+                }
+#endif
+        }
 }
 
 
@@ -67,74 +100,78 @@ WavesMidiEvent::~WavesMidiEvent ()
 
 WavesMidiEvent *WavesMidiEvent::append_data (const PmEvent &midi_event)
 {
-    switch ( _state ) {
+        switch ( _state ) {
         case INCOMPLETE: 
-            break;
-        default:
-            // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::append_data (): NO case INCOMPLETE" << std::endl;
-            _state = BROKEN;
-            return NULL;
-    }
-
-    size_t message_size = _midi_message_size (midi_event.message);
-    uint8_t message_status = Pm_MessageStatus (midi_event.message);
-
-    if (_data == NULL) { // This is a first event to add
-        bool sysex = (message_status == SYSEX);
-        _data = new unsigned char [sysex ? PM_DEFAULT_SYSEX_BUFFER_SIZE : sizeof (PmMessage)];
-        if (!sysex)
-        {
-            // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::append_data (): SHORT MSG" << std::endl;
-            * (PmMessage*)_data = 0; 
-            switch (message_size) {
-                case 1:
-                case 3:
-                    _size = message_size;
-                    // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::append_data (): size = " << _size << std::endl;
                 break;
-                default:
-                    // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::append_data (): WRONG MESSAGE SIZE (" << message_size << ") in the message: ";
-                    // COMMENTED DBG LOGS */ std::cout << std::hex << (int) ((unsigned char*)&midi_event)[0] << " " << (int) ((unsigned char*)&midi_event)[1] << " " << (int) ((unsigned char*)&midi_event)[2] << " " << (int) ((unsigned char*)&midi_event)[3] << std::dec << std::endl;
-                    _state = BROKEN;
+        default:
+                DEBUG_TRACE (DEBUG::WavesMIDI, "WavesMidiEvent::append_data (): NO case INCOMPLETE\n");
+                _state = BROKEN;
                 return NULL;
-            }
-            // COMMENTED DBG LOGS */ std::cout << "\t size = " << _size << std::endl;
-            memcpy (_data, &midi_event.message, _size);
-            // COMMENTED DBG LOGS */ std::cout << "\t\t size = " << _size << std::endl;
-            _state = COMPLETE;
-            // COMMENTED DBG LOGS */ std::cout << "\t\t\t size = " << _size << std::endl;
-            return NULL;
         }
-    }
-
-    // Now let's parse to sysex msg
-    if (message_status >= REAL_TIME_FIRST) { // Nested Real Time MIDI event
-        WavesMidiEvent *waves_midi_message = new WavesMidiEvent (midi_event.timestamp);
-        waves_midi_message->append_data (midi_event);
-        return waves_midi_message;
-    }
-
-    if (message_status >= STATUS_FIRST && (message_status != EOX) && _size) { // Certainly it's a broken SYSEX case
-        WavesMidiEvent *waves_midi_message = new WavesMidiEvent (midi_event.timestamp);
-        waves_midi_message->append_data (midi_event);
-        return waves_midi_message;
-    }
+        
+        size_t message_size = _midi_message_size (midi_event.message);
+        uint8_t message_status = Pm_MessageStatus (midi_event.message);
+        
+        if (_data == NULL) { // This is a first event to add
+                bool sysex = (message_status == SYSEX);
+                _data = new unsigned char [sysex ? PM_DEFAULT_SYSEX_BUFFER_SIZE : sizeof (PmMessage)];
+                if (!sysex)
+                {
+                        DEBUG_TRACE (DEBUG::WavesMIDI, "WavesMidiEvent::append_data (): SHORT MSG\n");
+                        * (PmMessage*)_data = 0; 
+                        switch (message_size) {
+                        case 1:
+                        case 2:
+                        case 3:
+                                _size = message_size;
+                                DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "WavesMidiEvent::append_data (): size = %1\n", _size));
+                                break;
+                         default:
+                                DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "WavesMidiEvent::append_data (): WRONG MESSAGE SIZE (%1 not %2) %3 [%4 %5 %6 %7] %8\n", 
+                                                                                message_size,
+                                                                                std::hex,
+                                                                                (int) ((unsigned char*)&midi_event)[0],
+                                                                                (int) ((unsigned char*)&midi_event)[1],
+                                                                                (int) ((unsigned char*)&midi_event)[2],
+                                                                                (int) ((unsigned char*)&midi_event)[3],
+                                                                                std::dec));
+                                _state = BROKEN;
+                                return NULL;
+                        }
+                        memcpy (_data, &midi_event.message, _size);
+                        _state = COMPLETE;
+                        DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "\t\t\t size = %1\n", _size));
+                        return NULL;
+                }
+        }
+        
+        // Now let's parse to sysex msg
+        if (message_status >= REAL_TIME_FIRST) { // Nested Real Time MIDI event
+                WavesMidiEvent *waves_midi_message = new WavesMidiEvent (midi_event.timestamp);
+                waves_midi_message->append_data (midi_event);
+                return waves_midi_message;
+        }
+        
+        if (message_status >= STATUS_FIRST && (message_status != EOX) && _size) { // Certainly it's a broken SYSEX case
+                WavesMidiEvent *waves_midi_message = new WavesMidiEvent (midi_event.timestamp);
+                waves_midi_message->append_data (midi_event);
+                return waves_midi_message;
+        }
 
-    const uint8_t* source_data ((uint8_t*)&midi_event.message);
-    
-    for (size_t i = 0; i < sizeof (midi_event.message); ++i) {
-        _data[_size] = source_data[i];
-        _size++;
+        const uint8_t* source_data ((uint8_t*)&midi_event.message);
         
-        if (source_data[i] == EOX) { // Ended SYSEX message
-            _state = COMPLETE;
-            return NULL;
+        for (size_t i = 0; i < sizeof (midi_event.message); ++i) {
+                _data[_size] = source_data[i];
+                _size++;
+                
+                if (source_data[i] == EOX) { // Ended SYSEX message
+                        _state = COMPLETE;
+                        return NULL;
+                }
         }
-    }
-    return NULL;
+        return NULL;
 }
 
-
 size_t WavesMidiEvent::_midi_message_size (PmMessage midi_message)
 {
     static int high_lengths[] = {
diff --git a/libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h b/libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h
index 3bfb1d7..1279b33 100644
--- a/libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h
+++ b/libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h
@@ -63,7 +63,7 @@
     #define WIN_ONLY(__Something_only_for_windows__)
     #define MAC_ONLY(__Something_only_for_mac__) __Something_only_for_mac__
     
-    #if defined(i386) || defined(__i386) || defined(__i386__) || defined (__ppc__)
+    #if defined(i386) || defined(__i386) || defined(__i386__)
         #define kNumArchBits 32
     #endif
     #if defined(__x86_64) || defined(__x86_64__)
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp
index cddc218..138810f 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp
@@ -339,6 +339,12 @@ bool WCMRAudioDevice::Streaming ()
 //**********************************************************************************************
 WTErr WCMRAudioDevice::SetStreaming (bool newState)
 {
+	// We must notify angine about our intention to start streming
+	// so Engine will provide all the initializations in the first audio callback
+	if (newState) {
+		m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming);
+	}
+	
 	//This will most likely be overridden, the base class simply
 	//changes the member.
 	m_IsStreaming = newState;
@@ -355,10 +361,10 @@ WTErr WCMRAudioDevice::ResetDevice ()
 	WTErr err = SetStreaming(false);
 	
 	if (err == eNoErr)
-		SetActive(false);
+		err = SetActive(false);
 
 	if (err == eNoErr && wasActive)
-		SetActive(true);
+		err = SetActive(true);
 
 	if (err == eNoErr && wasStreaming)
 		SetStreaming(true);
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h
index 99aba05..6821f25 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h
@@ -57,9 +57,9 @@ struct DeviceInfo
 	DeviceID m_DeviceId;
 	std::string m_DeviceName;
 	std::vector<int> m_AvailableSampleRates;
+	std::vector<int> m_AvailableBufferSizes;
 	unsigned int m_MaxInputChannels;
 	unsigned int m_MaxOutputChannels;
-	unsigned int m_DefaultBufferSize;
 
     DeviceInfo():
     m_DeviceId(-1), m_DeviceName("Unknown"), m_MaxInputChannels(0), m_MaxOutputChannels(0)
@@ -127,7 +127,7 @@ class WCMRAudioDeviceManagerClient
         float *acdOutputBuffer;
         size_t acdFrames;
         int64_t acdSampleTime;
-        int64_t acdCycleStartTimeNanos;
+        uint64_t acdCycleStartTimeNanos;
     };
 
 	virtual void AudioDeviceManagerNotification (NotificationReason WCUNUSEDPARAM(reason), void *WCUNUSEDPARAM(pParam)) {}
@@ -199,7 +199,6 @@ protected:
 	std::vector<std::string> m_OutputChannels; ///< List of output channel names.
 	std::vector<int> m_SamplingRates; ///< List of available sampling rates.
 	std::vector<int> m_BufferSizes; ///< List of available buffer sizes.
-	int m_DefaultBufferSize; ///soundcard preferred buffer size
 	
 	int m_CurrentSamplingRate; ///< Currently selected sampling rate.
 	int m_CurrentBufferSize; ///< Currently selected buffer size.
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp
index 8cfa096..f7f05d7 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp
@@ -39,7 +39,7 @@ static const int gAllBufferSizes[] =
 ///< The default SR.
 static const int DEFAULT_SR = 44100;
 ///< The default buffer size.
-static const int DEFAULT_BUFFERSIZE = 128;
+static const int DEFAULT_BUFFERSIZE = 1024;
 
 static const int NONE_DEVICE_ID = -1;
 
@@ -115,7 +115,6 @@ WCMRCoreAudioDevice::WCMRCoreAudioDevice (WCMRCoreAudioDeviceManager *pManager,
     
     m_CurrentSamplingRate = DEFAULT_SR;
     m_CurrentBufferSize = DEFAULT_BUFFERSIZE;
-    m_DefaultBufferSize = DEFAULT_BUFFERSIZE;
     m_StopRequested = true;
     m_pInputData = NULL;
     
@@ -248,6 +247,9 @@ WTErr WCMRCoreAudioDevice::UpdateDeviceInfo ()
     
     WTErr retVal = eNoErr;  
     
+    // Some devices change the ID during restart
+    WTErr errId = UpdateDeviceId();
+    
     // Update all devices parts regardless of errors
     WTErr errName = UpdateDeviceName();
     WTErr errIn =   UpdateDeviceInputs();
@@ -258,7 +260,7 @@ WTErr WCMRCoreAudioDevice::UpdateDeviceInfo ()
     errSR = UpdateDeviceSampleRates();
     errBS = UpdateDeviceBufferSizes();
 
-    if(errName != eNoErr || errIn != eNoErr || errOut != eNoErr || errSR != eNoErr || errBS != eNoErr)
+    if(errId != eNoErr || errName != eNoErr || errIn != eNoErr || errOut != eNoErr || errSR != eNoErr || errBS != eNoErr)
     {
         retVal = eCoreAudioFailed;
     }
@@ -266,6 +268,70 @@ WTErr WCMRCoreAudioDevice::UpdateDeviceInfo ()
     return retVal;  
 }
 
+
+WTErr WCMRCoreAudioDevice::UpdateDeviceId()
+{
+    //Get device count...
+    UInt32 propSize = 0;
+    WTErr retVal = eNoErr;
+    OSStatus osErr = AudioHardwareGetPropertyInfo (kAudioHardwarePropertyDevices, &propSize, NULL);
+    ASSERT_ERROR(osErr, "AudioHardwareGetProperty 1");
+    if (WUIsError(osErr))
+        throw osErr;
+    
+    size_t numDevices = propSize / sizeof (AudioDeviceID);
+    AudioDeviceID* deviceIDs = new AudioDeviceID[numDevices];
+    
+    //retrieve the device IDs
+    propSize = numDevices * sizeof (AudioDeviceID);
+    osErr = AudioHardwareGetProperty (kAudioHardwarePropertyDevices, &propSize, deviceIDs);
+    ASSERT_ERROR(osErr, "Error while getting audio devices: AudioHardwareGetProperty 2");
+    if (WUIsError(osErr))
+        throw osErr;
+    
+    //now add the ones that are not there...
+    for (size_t deviceIndex = 0; deviceIndex < numDevices; deviceIndex++)
+    {
+        DeviceInfo* pDevInfo = 0;
+        
+        //Get device name and create new DeviceInfo entry
+        //Get property name size.
+        osErr = AudioDeviceGetPropertyInfo(deviceIDs[deviceIndex], 0, 0, kAudioDevicePropertyDeviceName, &propSize, NULL);
+        if (osErr == kAudioHardwareNoError)
+        {
+            //Get property: name.
+            char* deviceName = new char[propSize];
+            osErr = AudioDeviceGetProperty(deviceIDs[deviceIndex], 0, 0, kAudioDevicePropertyDeviceName, &propSize, deviceName);
+            if (osErr == kAudioHardwareNoError)
+            {
+                if ( (m_DeviceName == deviceName) &&
+                     (m_DeviceID != deviceIDs[deviceIndex]) ) {
+                    
+                    m_DeviceID = deviceIDs[deviceIndex];
+                    
+                    m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Current device has changed it's id.");
+                }
+            }
+            else
+            {
+                retVal = eCoreAudioFailed;
+                DEBUG_MSG("Failed to get device name. Device ID: " << m_DeviceID);
+            }
+            
+            delete [] deviceName;
+        }
+        else
+        {
+            retVal = eCoreAudioFailed;
+            DEBUG_MSG("Failed to get device name prop Info. Device ID: " << m_DeviceID);
+        }
+    }
+    
+    delete [] deviceIDs;
+	return retVal;
+}
+
+
 //**********************************************************************************************
 // WCMRCoreAudioDevice::UpdateDeviceName 
 //
@@ -881,8 +947,6 @@ WTErr WCMRCoreAudioDevice::SetAndCheckCurrentSamplingRate (int newRate)
     propSize = sizeof (Float64);
     err = AudioDeviceSetProperty(m_DeviceID, NULL, 0, 0, kAudioDevicePropertyNominalSampleRate, propSize, &newNominalRate);
     
-    m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Changed the Sampling Rate.");
-    
     if (err != kAudioHardwareNoError)
     {
         retVal = eCoreAudioFailed;
@@ -926,6 +990,8 @@ WTErr WCMRCoreAudioDevice::SetAndCheckCurrentSamplingRate (int newRate)
         // If sample rate actually changed
         if (tryAgain != 0)
         {
+            m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Changed the Sampling Rate.");
+            
             // Update member with new rate
             m_CurrentSamplingRate = newRate;
             
@@ -936,12 +1002,28 @@ WTErr WCMRCoreAudioDevice::SetAndCheckCurrentSamplingRate (int newRate)
         // If sample rate did not change after time out
         else
         {
-            // Update member with last read value
-            m_CurrentSamplingRate = static_cast<int>(actualSamplingRate);
+            // Check if current device sample rate is supported
+            bool found = false;
+            for(int i = 0; gAllSampleRates[i] > 0; i++)
+            {
+                if (fabs(gAllSampleRates[i] - actualSamplingRate) < 0.01) {
+                    found = true;
+                }
+            }
             
-            char debugMsg[128];
-            snprintf (debugMsg, sizeof(debugMsg), "Unable to change SR, even after waiting for %d milliseconds", actualWait * PROPERTY_CHANGE_SLEEP_TIME_MILLISECONDS);
-            m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)debugMsg);
+            if (found) {
+                // Update member with last read value
+                m_CurrentSamplingRate = static_cast<int>(actualSamplingRate);
+                
+                char debugMsg[128];
+                snprintf (debugMsg, sizeof(debugMsg), "Unable to change SR, even after waiting for %d milliseconds", actualWait * PROPERTY_CHANGE_SLEEP_TIME_MILLISECONDS);
+                m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)debugMsg);
+                
+                float sample_rate_update = actualSamplingRate;
+                m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::SamplingRateChanged, (void *)&sample_rate_update);
+            } else {
+                retVal = eGenericErr;
+            }
         }
     }
     
@@ -1731,7 +1813,6 @@ WTErr WCMRCoreAudioDevice::TearDownAUHAL()
 }
 
 
-
 //**********************************************************************************************
 // WCMRCoreAudioDevice::SetActive 
 //
@@ -1799,7 +1880,6 @@ WTErr WCMRCoreAudioDevice::SetActive (bool newState)
         m_IgnoreThisDrop = true;
 
         UpdateDeviceInfo();
-
     }
     
     m_IsActive = newState;
@@ -1909,6 +1989,9 @@ WTErr WCMRCoreAudioDevice::SetStreaming (bool newState)
         m_IOProcThreadPort = 0;
         m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Starting AUHAL.");
         
+		// Prepare for streaming - tell Engine to do the initialization for process callback
+		m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming);
+
         if (m_UseMultithreading)
         {
             //set thread constraints...
@@ -1924,6 +2007,7 @@ WTErr WCMRCoreAudioDevice::SetStreaming (bool newState)
         if(err)
         {
             DEBUG_MSG( "Failed to start AudioUnit, err " << err );
+            m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Failed to start AudioUnit.");
             retVal = eGenericErr;
             goto Exit;
         }
@@ -2554,7 +2638,7 @@ WTErr WCMRCoreAudioDeviceManager::getDeviceAvailableSampleRates(DeviceID deviceI
     
     return retVal;
 }
-    
+
     
 WTErr WCMRCoreAudioDeviceManager::getDeviceMaxInputChannels(DeviceID deviceId, unsigned int& inputChannels)
 {
@@ -2862,7 +2946,6 @@ WTErr WCMRCoreAudioDeviceManager::updateDeviceListImpl()
     if (eNoErr != err)
     {
         std::cout << "API::PortAudioDeviceManager::updateDeviceListImpl: Device list update error: "<< err << std::endl;
-        return err;
     }
     
     if (m_CurrentDevice)
@@ -2876,6 +2959,15 @@ WTErr WCMRCoreAudioDeviceManager::updateDeviceListImpl()
             NotifyClient (WCMRAudioDeviceManagerClient::IODeviceDisconnected);
             return err;
         }
+        
+        WCMRCoreAudioDevice* current_device = dynamic_cast<WCMRCoreAudioDevice*>(m_CurrentDevice);
+        
+        if ( current_device &&
+            (current_device->DeviceID() != devInfo.m_DeviceId ) )
+        {
+            NotifyClient (WCMRAudioDeviceManagerClient::RequestReset);
+            return err;
+        }
     }
     
     NotifyClient (WCMRAudioDeviceManagerClient::DeviceListChanged);
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h
index a3269f6..8bbd7d8 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h
@@ -138,6 +138,7 @@ protected:
 #endif //WV_USE_TONE_GEN
 	
 	WTErr UpdateDeviceInfo ();
+    WTErr UpdateDeviceId ();
 	WTErr UpdateDeviceName();
 	WTErr UpdateDeviceInputs();
 	WTErr UpdateDeviceOutputs();
@@ -167,8 +168,7 @@ protected:
 	static OSStatus StaticPropertyChangeProc (AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput,
 	AudioDevicePropertyID inPropertyID, void *inClientData);
 	void PropertyChangeProc (AudioDevicePropertyID inPropertyID);
-    
-    void resetAudioDevice();
+
 private:
 
 };
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp
index 7bea0b3..2e0490b 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp
@@ -35,6 +35,9 @@
 //**********************************************************************************************
 WCMRNativeAudioNoneDevice::WCMRNativeAudioNoneDevice (WCMRAudioDeviceManager *pManager)
 	: WCMRNativeAudioDevice (pManager, false /*useMultiThreading*/)
+#ifndef PTW32_VERSION
+	, m_SilenceThread(0)
+#endif
 #if defined (PLATFORM_WINDOWS)
     , _waitableTimerForUsleep (CreateWaitableTimer(NULL, TRUE, NULL))
 #endif
@@ -64,7 +67,6 @@ WCMRNativeAudioNoneDevice::WCMRNativeAudioNoneDevice (WCMRAudioDeviceManager *pM
 	}
 	_m_inputBuffer = new float[__m_NumInputChannels * m_BufferSizes.back()];
 	_m_outputBuffer = new float[__m_NumOutputChannels * m_BufferSizes.back()];
-	m_DefaultBufferSize = m_BufferSizes.back();
 	m_CurrentBufferSize = m_BufferSizes.back();
 }
 
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
index 7816fcb..35ac18c 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
@@ -118,7 +118,6 @@ WCMRPortAudioDevice::WCMRPortAudioDevice (WCMRPortAudioDeviceManager *pManager,
 	m_PortAudioStream = NULL;
 	m_CurrentSamplingRate = DEFAULT_SR;
 	m_CurrentBufferSize = DEFAULT_BUFFERSIZE;
-	m_DefaultBufferSize = DEFAULT_BUFFERSIZE;
 	m_StopRequested = true;
 	m_pInputData = NULL;
 
@@ -362,7 +361,6 @@ void WCMRPortAudioDevice::updateDeviceInfo (bool callerIsWaiting/*=false*/)
 	{
 		std::cout << "API::Device " << m_DeviceName << " Buffers: " << minSize << " " << maxSize << " " << preferredSize << std::endl;
 			
-		m_DefaultBufferSize = preferredSize;
 		m_BufferSizes.push_back (preferredSize);
 		useDefaultBuffers = false;
 	}
@@ -901,6 +899,9 @@ void WCMRPortAudioDevice::startStreaming (bool callerIsWaiting/*=false*/)
 		unsigned int inChannelCount = pDeviceInfo->maxInputChannels;
 		unsigned int outChannelCount = pDeviceInfo->maxOutputChannels;
 		
+		// Prepare for streaming - tell Engine to do the initialization for process callback
+		m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming);
+
 		paErr = Pa_StartStream( m_PortAudioStream );
 
 		if(paErr == paNoError)
@@ -1043,8 +1044,7 @@ void WCMRPortAudioDevice::resetDevice (bool callerIsWaiting /*=false*/ )
 		// Resume streaming if the device was streaming before
 		if(wasStreaming && m_lastErr == eNoErr && m_ConnectionStatus == DeviceAvailable)
 		{
-			// Notify the Application to prepare for the stream start
-			m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming);
+			// start streaming
 			startStreaming();
 		}
 	} else {
@@ -1076,24 +1076,29 @@ long WCMRPortAudioDevice::ASIOMessageHook (long selector, long WCUNUSEDPARAM(val
 		case kAsioResyncRequest:
 			m_ResyncRequested++;
 			std::cout << "\t\t\tWCMRPortAudioDevice::ASIOMessageHook -- kAsioResyncRequest" << std::endl;
-			m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset);
 			break;
 
 		case kAsioLatenciesChanged:
 			m_BufferSizeChangeRequested++;
 			std::cout << "\t\t\tWCMRPortAudioDevice::ASIOMessageHook -- kAsioLatenciesChanged" << std::endl;
-			m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset);
+			if (m_ResetRequested == 0) {
+				m_ResetRequested++;
+				m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset);
+			}
 			break;
 
 		case kAsioBufferSizeChange:
 			m_BufferSizeChangeRequested++;
 			std::cout << "\t\t\tWCMRPortAudioDevice::ASIOMessageHook -- m_BufferSizeChangeRequested" << std::endl;
-			m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset);
+			if (m_ResetRequested == 0) {
+				m_ResetRequested++;
+				m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset);
+			}
 			break;
 
 		case kAsioResetRequest:
-			m_ResetRequested++;
 			std::cout << "\t\t\tWCMRPortAudioDevice::ASIOMessageHook -- kAsioResetRequest" << std::endl;
+			m_ResetRequested++;
 			m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset);
 			break;
 
@@ -1540,6 +1545,32 @@ WTErr WCMRPortAudioDeviceManager::getDeviceAvailableSampleRates(DeviceID deviceI
 }
 
 
+WTErr WCMRPortAudioDeviceManager::getDeviceAvailableBufferSizes(DeviceID deviceId, std::vector<int>& buffers)
+{
+	WTErr retVal = eNoErr;
+	
+	buffers.clear();
+
+	//make PA request to get actual device buffer sizes
+	long minSize, maxSize, preferredSize, granularity;
+
+	PaError paErr = PaAsio_GetAvailableBufferSizes(deviceId, &minSize, &maxSize, &preferredSize, &granularity);
+
+	//for Windows ASIO devices we always use prefferes buffer size ONLY
+	if (paNoError == paErr )
+	{
+		buffers.push_back(preferredSize);
+	}
+	else
+	{
+		retVal = eAsioFailed;
+		std::cout << "API::PortAudioDeviceManager::GetBufferSizes: error: " <<  Pa_GetErrorText (paErr) << " getting buffer sizes for device: "<< deviceId << std::endl;
+	}
+
+	return retVal;
+}
+
+
 WTErr WCMRPortAudioDeviceManager::generateDeviceListImpl()
 {
 	std::cout << "API::PortAudioDeviceManager::Generating device list" << std::endl;
@@ -1586,6 +1617,7 @@ WTErr WCMRPortAudioDeviceManager::generateDeviceListImpl()
 				DeviceInfo *pDevInfo = new DeviceInfo(thisDeviceID, pPaDeviceInfo->name);
 				if (pDevInfo)
 				{
+					//Get available sample rates
 					std::vector<int> availableSampleRates;
 					WTErr wErr = WCMRPortAudioDeviceManager::getDeviceAvailableSampleRates(thisDeviceID, availableSampleRates);
 
@@ -1600,6 +1632,19 @@ WTErr WCMRPortAudioDeviceManager::generateDeviceListImpl()
 					pDevInfo->m_MaxInputChannels = pPaDeviceInfo->maxInputChannels;
 					pDevInfo->m_MaxOutputChannels = pPaDeviceInfo->maxOutputChannels;
 
+					//Get available buffer sizes
+					std::vector<int> availableBuffers;
+					wErr = getDeviceAvailableBufferSizes(thisDeviceID, availableBuffers);
+
+					if (wErr != eNoErr)
+					{
+						DEBUG_MSG ("Failed to get device available buffer sizes. Device ID: " << m_DeviceID);
+						delete pDevInfo;
+						continue; //proceed to the next device
+					}
+
+					pDevInfo->m_AvailableBufferSizes = availableBuffers;
+
 					//Now check if this device is acceptable according to current input/output settings
 					bool bRejectDevice = false;
 					switch(m_eAudioDeviceFilter)
@@ -1681,7 +1726,7 @@ WTErr WCMRPortAudioDeviceManager::getDeviceSampleRatesImpl(const std::string & d
     
 	if (m_CurrentDevice && deviceName == m_CurrentDevice->DeviceName() )
 	{
-		sampleRates.assign(m_CurrentDevice->SamplingRates().begin(), m_CurrentDevice->SamplingRates().end() );
+		sampleRates=m_CurrentDevice->SamplingRates();
 		return retVal;
 	}
 
@@ -1690,7 +1735,7 @@ WTErr WCMRPortAudioDeviceManager::getDeviceSampleRatesImpl(const std::string & d
     
 	if (eNoErr == retVal)
 	{
-		sampleRates.assign(devInfo.m_AvailableSampleRates.begin(), devInfo.m_AvailableSampleRates.end() );
+		sampleRates=devInfo.m_AvailableSampleRates;
 	}
 	else
 	{
@@ -1710,44 +1755,28 @@ WTErr WCMRPortAudioDeviceManager::getDeviceBufferSizesImpl(const std::string & d
 	//first check if the request has been made for None device
 	if (deviceName == m_NoneDevice->DeviceName() )
 	{
-		buffers.assign(m_NoneDevice->BufferSizes().begin(), m_NoneDevice->BufferSizes().end() );
+		buffers=m_NoneDevice->BufferSizes();
 		return retVal;
 	}
 	
 	if (m_CurrentDevice && deviceName == m_CurrentDevice->DeviceName() )
 	{
-		buffers.assign(m_CurrentDevice->BufferSizes().begin(), m_CurrentDevice->BufferSizes().end() );
+		buffers=m_CurrentDevice->BufferSizes();
 		return retVal;
 	}
 
-	Pa_Initialize();
-
 	DeviceInfo devInfo; 
 	retVal = GetDeviceInfoByName(deviceName, devInfo);
 
 	if (eNoErr == retVal)
 	{
-		//make PA request to get actual device buffer sizes
-		long minSize, maxSize, preferredSize, granularity;
-		PaError paErr = PaAsio_GetAvailableBufferSizes(devInfo.m_DeviceId, &minSize, &maxSize, &preferredSize, &granularity);
-
-		//for Windows ASIO devices we always use prefferes buffer size ONLY
-		if (paNoError == paErr )
-		{
-			buffers.push_back(preferredSize);
-		}
-		else
-		{
-			retVal = eAsioFailed;
-			std::cout << "API::PortAudioDeviceManager::GetBufferSizes: error: " <<  Pa_GetErrorText (paErr) << " getting buffer sizes for device: "<< deviceName << std::endl;
-		}
+		std::cout << "API::PortAudioDeviceManager::GetBufferSizes: got buffer :"<< devInfo.m_AvailableBufferSizes.front() << std::endl;
+		buffers = devInfo.m_AvailableBufferSizes;
 	}
 	else
 	{
 		std::cout << "API::PortAudioDeviceManager::GetBufferSizes: Device not found: "<< deviceName << std::endl;
 	}
 
-	Pa_Terminate();
-
 	return retVal;
 }
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h
index 8f099ec..da20274 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h
@@ -172,6 +172,7 @@ protected:
 private:
 	// helper functions for this class only
     WTErr getDeviceAvailableSampleRates(DeviceID deviceId, std::vector<int>& sampleRates);
+	WTErr getDeviceAvailableBufferSizes(DeviceID deviceId, std::vector<int>& buffers);
 
 	WCMRAudioDevice*			m_NoneDevice;
 };
diff --git a/libs/backends/wavesaudio/wscript b/libs/backends/wavesaudio/wscript
index 1303791..89fe65b 100644
--- a/libs/backends/wavesaudio/wscript
+++ b/libs/backends/wavesaudio/wscript
@@ -88,10 +88,10 @@ def build(bld):
     obj.use      = 'libardour libpbd'
     if bld.env['build_target'] == 'mingw':
         obj.uselib   = ['PORTAUDIO']
-        obj.cxxflags = [ '-fPIC' ]
-        obj.cflags   = [ '-fPIC', '-fms-extensions' ]
+        obj.cxxflags = [ bld.env['compiler_flags_dict']['pic'] ]
+        obj.cflags   = [ bld.env['compiler_flags_dict']['pic'], bld.env['compiler_flags_dict']['c-anonymous-union'] ]
     else:
-        obj.cflags   = ['-fms-extensions' ]
+        obj.cflags   = [ bld.env['compiler_flags_dict']['c-anonymous-union'] ]
     obj.install_path  = os.path.join(bld.env['LIBDIR'], 'backends')
 
     if bld.env['build_target']== 'mingw':
diff --git a/libs/canvas/macosx/canvas/canvas.xcodeproj/project.pbxproj b/libs/canvas/macosx/canvas/canvas.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..868d680
--- /dev/null
+++ b/libs/canvas/macosx/canvas/canvas.xcodeproj/project.pbxproj
@@ -0,0 +1,224 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXFileReference section */
+		4397596719CADB4300740098 /* arc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arc.h; path = ../../canvas/arc.h; sourceTree = "<group>"; };
+		4397596819CADB4300740098 /* arrow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arrow.h; path = ../../canvas/arrow.h; sourceTree = "<group>"; };
+		4397596919CADB4300740098 /* canvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = canvas.h; path = ../../canvas/canvas.h; sourceTree = "<group>"; };
+		4397596A19CADB4300740098 /* circle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = circle.h; path = ../../canvas/circle.h; sourceTree = "<group>"; };
+		4397596B19CADB4300740098 /* container.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = container.h; path = ../../canvas/container.h; sourceTree = "<group>"; };
+		4397596C19CADB4300740098 /* curve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = curve.h; path = ../../canvas/curve.h; sourceTree = "<group>"; };
+		4397596D19CADB4300740098 /* debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../../canvas/debug.h; sourceTree = "<group>"; };
+		4397596E19CADB4300740098 /* fill.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fill.h; path = ../../canvas/fill.h; sourceTree = "<group>"; };
+		4397596F19CADB4300740098 /* flag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flag.h; path = ../../canvas/flag.h; sourceTree = "<group>"; };
+		4397597019CADB4300740098 /* fwd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fwd.h; path = ../../canvas/fwd.h; sourceTree = "<group>"; };
+		4397597119CADB4300740098 /* image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = image.h; path = ../../canvas/image.h; sourceTree = "<group>"; };
+		4397597219CADB4300740098 /* interpolated_curve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = interpolated_curve.h; path = ../../canvas/interpolated_curve.h; sourceTree = "<group>"; };
+		4397597319CADB4300740098 /* item.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = item.h; path = ../../canvas/item.h; sourceTree = "<group>"; };
+		4397597419CADB4300740098 /* line_set.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = line_set.h; path = ../../canvas/line_set.h; sourceTree = "<group>"; };
+		4397597519CADB4300740098 /* line.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = line.h; path = ../../canvas/line.h; sourceTree = "<group>"; };
+		4397597619CADB4300740098 /* lookup_table.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lookup_table.h; path = ../../canvas/lookup_table.h; sourceTree = "<group>"; };
+		4397597719CADB4300740098 /* outline.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = outline.h; path = ../../canvas/outline.h; sourceTree = "<group>"; };
+		4397597819CADB4300740098 /* pixbuf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pixbuf.h; path = ../../canvas/pixbuf.h; sourceTree = "<group>"; };
+		4397597919CADB4300740098 /* poly_item.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = poly_item.h; path = ../../canvas/poly_item.h; sourceTree = "<group>"; };
+		4397597A19CADB4300740098 /* poly_line.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = poly_line.h; path = ../../canvas/poly_line.h; sourceTree = "<group>"; };
+		4397597B19CADB4300740098 /* polygon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = polygon.h; path = ../../canvas/polygon.h; sourceTree = "<group>"; };
+		4397597C19CADB4300740098 /* rectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rectangle.h; path = ../../canvas/rectangle.h; sourceTree = "<group>"; };
+		4397597D19CADB4300740098 /* root_group.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = root_group.h; path = ../../canvas/root_group.h; sourceTree = "<group>"; };
+		4397597E19CADB4300740098 /* ruler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ruler.h; path = ../../canvas/ruler.h; sourceTree = "<group>"; };
+		4397597F19CADB4300740098 /* scroll_group.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scroll_group.h; path = ../../canvas/scroll_group.h; sourceTree = "<group>"; };
+		4397598019CADB4300740098 /* stateful_image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stateful_image.h; path = ../../canvas/stateful_image.h; sourceTree = "<group>"; };
+		4397598119CADB4300740098 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = ../../canvas/text.h; sourceTree = "<group>"; };
+		4397598219CADB4300740098 /* tracking_text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tracking_text.h; path = ../../canvas/tracking_text.h; sourceTree = "<group>"; };
+		4397598319CADB4300740098 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../../canvas/types.h; sourceTree = "<group>"; };
+		4397598419CADB4300740098 /* utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../canvas/utils.h; sourceTree = "<group>"; };
+		4397598519CADB4300740098 /* version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../../canvas/version.h; sourceTree = "<group>"; };
+		4397598619CADB4300740098 /* visibility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../canvas/visibility.h; sourceTree = "<group>"; };
+		4397598719CADB4300740098 /* wave_view.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = wave_view.h; path = ../../canvas/wave_view.h; sourceTree = "<group>"; };
+		4397598819CADB4300740098 /* widget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = widget.h; path = ../../canvas/widget.h; sourceTree = "<group>"; };
+		4397598919CADB4300740098 /* xfade_curve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = xfade_curve.h; path = ../../canvas/xfade_curve.h; sourceTree = "<group>"; };
+		4397598A19CADB4300740098 /* xml_ui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = xml_ui.h; path = ../../canvas/xml_ui.h; sourceTree = "<group>"; };
+		43A0170F19D56040007D3CE8 /* arc.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arc.cc; path = ../../arc.cc; sourceTree = "<group>"; };
+		43A0171019D56040007D3CE8 /* arrow.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arrow.cc; path = ../../arrow.cc; sourceTree = "<group>"; };
+		43A0171119D56040007D3CE8 /* canvas.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = canvas.cc; path = ../../canvas.cc; sourceTree = "<group>"; };
+		43A0171219D56040007D3CE8 /* circle.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = circle.cc; path = ../../circle.cc; sourceTree = "<group>"; };
+		43A0171319D56040007D3CE8 /* container.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = container.cc; path = ../../container.cc; sourceTree = "<group>"; };
+		43A0171419D56040007D3CE8 /* curve.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = curve.cc; path = ../../curve.cc; sourceTree = "<group>"; };
+		43A0171519D56040007D3CE8 /* debug.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = debug.cc; path = ../../debug.cc; sourceTree = "<group>"; };
+		43A0171619D56040007D3CE8 /* fill.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fill.cc; path = ../../fill.cc; sourceTree = "<group>"; };
+		43A0171719D56040007D3CE8 /* flag.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flag.cc; path = ../../flag.cc; sourceTree = "<group>"; };
+		43A0171819D56040007D3CE8 /* image.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = image.cc; path = ../../image.cc; sourceTree = "<group>"; };
+		43A0171919D56040007D3CE8 /* item.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = item.cc; path = ../../item.cc; sourceTree = "<group>"; };
+		43A0171A19D56040007D3CE8 /* line_set.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = line_set.cc; path = ../../line_set.cc; sourceTree = "<group>"; };
+		43A0171B19D56040007D3CE8 /* line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = line.cc; path = ../../line.cc; sourceTree = "<group>"; };
+		43A0171C19D56040007D3CE8 /* lookup_table.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = lookup_table.cc; path = ../../lookup_table.cc; sourceTree = "<group>"; };
+		43A0171D19D56040007D3CE8 /* outline.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = outline.cc; path = ../../outline.cc; sourceTree = "<group>"; };
+		43A0171E19D56040007D3CE8 /* pixbuf.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pixbuf.cc; path = ../../pixbuf.cc; sourceTree = "<group>"; };
+		43A0171F19D56040007D3CE8 /* poly_item.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = poly_item.cc; path = ../../poly_item.cc; sourceTree = "<group>"; };
+		43A0172019D56040007D3CE8 /* poly_line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = poly_line.cc; path = ../../poly_line.cc; sourceTree = "<group>"; };
+		43A0172119D56040007D3CE8 /* polygon.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = polygon.cc; path = ../../polygon.cc; sourceTree = "<group>"; };
+		43A0172219D56040007D3CE8 /* rectangle.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rectangle.cc; path = ../../rectangle.cc; sourceTree = "<group>"; };
+		43A0172319D56040007D3CE8 /* root_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = root_group.cc; path = ../../root_group.cc; sourceTree = "<group>"; };
+		43A0172419D56040007D3CE8 /* ruler.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ruler.cc; path = ../../ruler.cc; sourceTree = "<group>"; };
+		43A0172519D56040007D3CE8 /* scroll_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = scroll_group.cc; path = ../../scroll_group.cc; sourceTree = "<group>"; };
+		43A0172619D56040007D3CE8 /* stateful_image.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stateful_image.cc; path = ../../stateful_image.cc; sourceTree = "<group>"; };
+		43A0172719D56040007D3CE8 /* text.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = text.cc; path = ../../text.cc; sourceTree = "<group>"; };
+		43A0172819D56040007D3CE8 /* tracking_text.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tracking_text.cc; path = ../../tracking_text.cc; sourceTree = "<group>"; };
+		43A0172919D56040007D3CE8 /* types.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = types.cc; path = ../../types.cc; sourceTree = "<group>"; };
+		43A0172A19D56040007D3CE8 /* utils.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = utils.cc; path = ../../utils.cc; sourceTree = "<group>"; };
+		43A0172B19D56040007D3CE8 /* version.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = version.cc; path = ../../version.cc; sourceTree = "<group>"; };
+		43A0172C19D56040007D3CE8 /* wave_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = wave_view.cc; path = ../../wave_view.cc; sourceTree = "<group>"; };
+		43A0172D19D56040007D3CE8 /* widget.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = widget.cc; path = ../../widget.cc; sourceTree = "<group>"; };
+		43A0172E19D56040007D3CE8 /* xfade_curve.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xfade_curve.cc; path = ../../xfade_curve.cc; sourceTree = "<group>"; };
+		43A0172F19D56040007D3CE8 /* xml_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xml_ui.cc; path = ../../xml_ui.cc; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+		4397594919CADAFC00740098 = {
+			isa = PBXGroup;
+			children = (
+				4397595719CADB1200740098 /* headers */,
+				4397595619CADB0600740098 /* source */,
+			);
+			sourceTree = "<group>";
+		};
+		4397595619CADB0600740098 /* source */ = {
+			isa = PBXGroup;
+			children = (
+				43A0170F19D56040007D3CE8 /* arc.cc */,
+				43A0171019D56040007D3CE8 /* arrow.cc */,
+				43A0171119D56040007D3CE8 /* canvas.cc */,
+				43A0171219D56040007D3CE8 /* circle.cc */,
+				43A0171319D56040007D3CE8 /* container.cc */,
+				43A0171419D56040007D3CE8 /* curve.cc */,
+				43A0171519D56040007D3CE8 /* debug.cc */,
+				43A0171619D56040007D3CE8 /* fill.cc */,
+				43A0171719D56040007D3CE8 /* flag.cc */,
+				43A0171819D56040007D3CE8 /* image.cc */,
+				43A0171919D56040007D3CE8 /* item.cc */,
+				43A0171A19D56040007D3CE8 /* line_set.cc */,
+				43A0171B19D56040007D3CE8 /* line.cc */,
+				43A0171C19D56040007D3CE8 /* lookup_table.cc */,
+				43A0171D19D56040007D3CE8 /* outline.cc */,
+				43A0171E19D56040007D3CE8 /* pixbuf.cc */,
+				43A0171F19D56040007D3CE8 /* poly_item.cc */,
+				43A0172019D56040007D3CE8 /* poly_line.cc */,
+				43A0172119D56040007D3CE8 /* polygon.cc */,
+				43A0172219D56040007D3CE8 /* rectangle.cc */,
+				43A0172319D56040007D3CE8 /* root_group.cc */,
+				43A0172419D56040007D3CE8 /* ruler.cc */,
+				43A0172519D56040007D3CE8 /* scroll_group.cc */,
+				43A0172619D56040007D3CE8 /* stateful_image.cc */,
+				43A0172719D56040007D3CE8 /* text.cc */,
+				43A0172819D56040007D3CE8 /* tracking_text.cc */,
+				43A0172919D56040007D3CE8 /* types.cc */,
+				43A0172A19D56040007D3CE8 /* utils.cc */,
+				43A0172B19D56040007D3CE8 /* version.cc */,
+				43A0172C19D56040007D3CE8 /* wave_view.cc */,
+				43A0172D19D56040007D3CE8 /* widget.cc */,
+				43A0172E19D56040007D3CE8 /* xfade_curve.cc */,
+				43A0172F19D56040007D3CE8 /* xml_ui.cc */,
+			);
+			name = source;
+			sourceTree = "<group>";
+		};
+		4397595719CADB1200740098 /* headers */ = {
+			isa = PBXGroup;
+			children = (
+				4397596719CADB4300740098 /* arc.h */,
+				4397596819CADB4300740098 /* arrow.h */,
+				4397596919CADB4300740098 /* canvas.h */,
+				4397596A19CADB4300740098 /* circle.h */,
+				4397596B19CADB4300740098 /* container.h */,
+				4397596C19CADB4300740098 /* curve.h */,
+				4397596D19CADB4300740098 /* debug.h */,
+				4397596E19CADB4300740098 /* fill.h */,
+				4397596F19CADB4300740098 /* flag.h */,
+				4397597019CADB4300740098 /* fwd.h */,
+				4397597119CADB4300740098 /* image.h */,
+				4397597219CADB4300740098 /* interpolated_curve.h */,
+				4397597319CADB4300740098 /* item.h */,
+				4397597419CADB4300740098 /* line_set.h */,
+				4397597519CADB4300740098 /* line.h */,
+				4397597619CADB4300740098 /* lookup_table.h */,
+				4397597719CADB4300740098 /* outline.h */,
+				4397597819CADB4300740098 /* pixbuf.h */,
+				4397597919CADB4300740098 /* poly_item.h */,
+				4397597A19CADB4300740098 /* poly_line.h */,
+				4397597B19CADB4300740098 /* polygon.h */,
+				4397597C19CADB4300740098 /* rectangle.h */,
+				4397597D19CADB4300740098 /* root_group.h */,
+				4397597E19CADB4300740098 /* ruler.h */,
+				4397597F19CADB4300740098 /* scroll_group.h */,
+				4397598019CADB4300740098 /* stateful_image.h */,
+				4397598119CADB4300740098 /* text.h */,
+				4397598219CADB4300740098 /* tracking_text.h */,
+				4397598319CADB4300740098 /* types.h */,
+				4397598419CADB4300740098 /* utils.h */,
+				4397598519CADB4300740098 /* version.h */,
+				4397598619CADB4300740098 /* visibility.h */,
+				4397598719CADB4300740098 /* wave_view.h */,
+				4397598819CADB4300740098 /* widget.h */,
+				4397598919CADB4300740098 /* xfade_curve.h */,
+				4397598A19CADB4300740098 /* xml_ui.h */,
+			);
+			name = headers;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+		4397594A19CADAFC00740098 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0510;
+			};
+			buildConfigurationList = 4397594D19CADAFC00740098 /* Build configuration list for PBXProject "canvas" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 4397594919CADAFC00740098;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+			);
+		};
+/* End PBXProject section */
+
+/* Begin XCBuildConfiguration section */
+		4397594E19CADAFC00740098 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Debug;
+		};
+		4397594F19CADAFC00740098 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		4397594D19CADAFC00740098 /* Build configuration list for PBXProject "canvas" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				4397594E19CADAFC00740098 /* Debug */,
+				4397594F19CADAFC00740098 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 4397594A19CADAFC00740098 /* Project object */;
+}
diff --git a/libs/canvas/stateful_image.cc b/libs/canvas/stateful_image.cc
index b62da9c..f5cc76d 100644
--- a/libs/canvas/stateful_image.cc
+++ b/libs/canvas/stateful_image.cc
@@ -101,7 +101,7 @@ StatefulImage::load_states (const XMLNode& node)
 			error << _("no ID for state") << endmsg;
 			continue;
 		}
-		sscanf (prop->value().c_str(), "%zd", &id);
+		sscanf (prop->value().c_str(), "%" G_GSIZE_FORMAT, &id);
 
 		if ((prop = (*i)->property ("image")) == 0) {
 			error << _("no image for state") << endmsg;
diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc
index 809ea4e..e8db7d8 100644
--- a/libs/canvas/wave_view.cc
+++ b/libs/canvas/wave_view.cc
@@ -152,7 +152,7 @@ WaveView::debug_name() const
 void
 WaveView::image_ready ()
 {
-        DEBUG_TRACE (DEBUG::WaveView, string_compose ("queue draw for %1 at %2 (vis = %3 bbox = %4 CR %5)\n", this, g_get_monotonic_time(), visible(), _bounding_box, current_request));
+        DEBUG_TRACE (DEBUG::WaveView, string_compose ("queue draw for %1 at %2 (vis = %3 CR %4)\n", this, g_get_monotonic_time(), visible(), current_request));
 	redraw ();
 }
 
@@ -737,6 +737,7 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
 boost::shared_ptr<WaveViewCache::Entry>
 WaveView::cache_request_result (boost::shared_ptr<WaveViewThreadRequest> req) const
 {
+	
 	boost::shared_ptr<WaveViewCache::Entry> ret (new WaveViewCache::Entry (req->channel,
 	                                                                       req->height,
 	                                                                       req->amplitude,
@@ -983,6 +984,12 @@ WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_
 		
 		if (peaks_read > 0) {
 
+			/* region amplitude will have been used to generate the
+			 * peak values already, but not the visual-only
+			 * amplitude_above_axis. So apply that here before
+			 * rendering.
+			 */
+			
 			if (_amplitude_above_axis != 1.0) {
 				for (framecnt_t i = 0; i < n_peaks; ++i) {
 					peaks[i].max *= _amplitude_above_axis;
diff --git a/libs/canvas/wscript b/libs/canvas/wscript
index 3d741ec..67d26ea 100644
--- a/libs/canvas/wscript
+++ b/libs/canvas/wscript
@@ -80,7 +80,8 @@ def build(bld):
         obj = bld.stlib(features = 'cxx cxxstlib', source=canvas_sources)
         obj.cxxflags     = [ '-fPIC' ]
         obj.cflags       = [ '-fPIC' ]
-
+        obj.defines      = [ ]
+        
     obj.export_includes = ['.']
     obj.includes     = ['.']
     obj.uselib       = 'SIGCPP CAIROMM GTKMM BOOST'
diff --git a/libs/canvas/xfade_curve.cc b/libs/canvas/xfade_curve.cc
index d82e6ab..0d7d7a5 100644
--- a/libs/canvas/xfade_curve.cc
+++ b/libs/canvas/xfade_curve.cc
@@ -30,13 +30,19 @@ using namespace ArdourCanvas;
 using std::min;
 using std::max;
 
+#ifdef USE_TRACKS_CODE_FEATURES
+static const bool show_bg_fades = false;
+#else
+static const bool show_bg_fades = true;
+#endif
+	
 XFadeCurve::XFadeCurve (Canvas* c)
 	: Item (c)
 	, points_per_segment (32)
 	, _xfadeposition (Start)
 	, _outline_color (0x000000ff)
 	, _fill_color (0x22448880)
-	, show_background_fade (true)
+	, show_background_fade (show_bg_fades)
 {
 }
 
@@ -46,7 +52,7 @@ XFadeCurve::XFadeCurve (Canvas* c, XFadePosition pos)
 	, _xfadeposition (pos)
 	, _outline_color (0x000000ff)
 	, _fill_color (0x22448880)
-	, show_background_fade (true)
+	, show_background_fade (show_bg_fades)
 {
 }
 
@@ -56,7 +62,7 @@ XFadeCurve::XFadeCurve (Item* parent)
 	, _xfadeposition (Start)
 	, _outline_color (0x000000ff)
 	, _fill_color (0x22448880)
-	, show_background_fade (true)
+	, show_background_fade (show_bg_fades)
 {
 }
 
@@ -66,7 +72,7 @@ XFadeCurve::XFadeCurve (Item* parent, XFadePosition pos)
 	, _xfadeposition (pos)
 	, _outline_color (0x000000ff)
 	, _fill_color (0x22448880)
-	, show_background_fade (true)
+	, show_background_fade (show_bg_fades)
 {
 }
 
diff --git a/libs/evoral/evoral/ControlList.hpp b/libs/evoral/evoral/ControlList.hpp
index 7a82826..82868cd 100644
--- a/libs/evoral/evoral/ControlList.hpp
+++ b/libs/evoral/evoral/ControlList.hpp
@@ -124,8 +124,8 @@ public:
 	void slide (iterator before, double distance);
 	void shift (double before, double distance);
 
-	virtual void add (double when, double value, bool with_guards=true, bool with_default=true);
-	virtual void editor_add (double when, double value);
+	virtual void add (double when, double value, bool with_guards=true, bool with_initial=true);
+	virtual void editor_add (double when, double value, bool with_guard);
 	
 	void fast_simple_add (double when, double value);
 
diff --git a/libs/evoral/src/ControlList.cpp b/libs/evoral/src/ControlList.cpp
index a2f3aa4..5118744 100644
--- a/libs/evoral/src/ControlList.cpp
+++ b/libs/evoral/src/ControlList.cpp
@@ -399,7 +399,7 @@ ControlList::add_guard_point (double when)
 	most_recent_insert_iterator = lower_bound (_events.begin(), _events.end(), &cp, time_comparator);
 
 	double eval_value = unlocked_eval (insert_position);
-	
+
 	if (most_recent_insert_iterator == _events.end()) {
 		
 		DEBUG_TRACE (DEBUG::ControlList, string_compose ("@%1 insert iterator at end, adding eval-value there %2\n", this, eval_value));
@@ -407,7 +407,7 @@ ControlList::add_guard_point (double when)
 		/* leave insert iterator at the end */
 		
 	} else if ((*most_recent_insert_iterator)->when == when) {
-		
+
 		DEBUG_TRACE (DEBUG::ControlList, string_compose ("@%1 insert iterator at existing point, setting eval-value there %2\n", this, eval_value));
 		
 		/* most_recent_insert_iterator points to a control event
@@ -415,15 +415,15 @@ ControlList::add_guard_point (double when)
 		   nothing to do.
 		   
 		   ... except ... 
-		   
+
 		   advance most_recent_insert_iterator so that the "real"
 		   insert occurs in the right place, since it 
 		   points to the control event just inserted.
 		*/
-		
+
 		++most_recent_insert_iterator;
 	} else {
-		
+
 		/* insert a new control event at the right spot
 		 */
 		
@@ -431,7 +431,7 @@ ControlList::add_guard_point (double when)
 								 this, eval_value, (*most_recent_insert_iterator)->when));
 		
 		most_recent_insert_iterator = _events.insert (most_recent_insert_iterator, new ControlEvent (when, eval_value));
-		
+
 		/* advance most_recent_insert_iterator so that the "real"
 		 * insert occurs in the right place, since it 
 		 * points to the control event just inserted.
@@ -452,7 +452,7 @@ ControlList::in_write_pass () const
 }
 
 void
-ControlList::editor_add (double when, double value)
+ControlList::editor_add (double when, double value, bool with_guard)
 {
 	/* this is for making changes from a graphical line editor
 	*/
@@ -464,11 +464,19 @@ ControlList::editor_add (double when, double value)
 		 */
 
 		if (when >= 1) {
-			_events.insert (_events.end(), new ControlEvent (0, _default_value));
-			DEBUG_TRACE (DEBUG::ControlList, string_compose ("@%1 added default value %2 at zero\n", this, _default_value));
+			_events.insert (_events.end(), new ControlEvent (0, value));
+			DEBUG_TRACE (DEBUG::ControlList, string_compose ("@%1 added value %2 at zero\n", this, value));
 		}
 	}
 
+	insert_position = when;
+	if (with_guard) {
+		if (when > 64) {
+			add_guard_point (when - 64);
+		}
+		maybe_add_insert_guard (when);
+	}
+
 	ControlEvent cp (when, 0.0f);
 	iterator i = lower_bound (_events.begin(), _events.end(), &cp, time_comparator);
 	DEBUG_TRACE (DEBUG::ControlList, string_compose ("editor_add: actually add when= %1 value= %2\n", when, value));
@@ -491,9 +499,9 @@ ControlList::maybe_add_insert_guard (double when)
 			   new control point so that our insert will happen correctly. */
 			most_recent_insert_iterator = _events.insert (
 				most_recent_insert_iterator,
-				new ControlEvent (when + 1, (*most_recent_insert_iterator)->value));
+				new ControlEvent (when + 64, (*most_recent_insert_iterator)->value));
 			DEBUG_TRACE (DEBUG::ControlList, string_compose ("@%1 added insert guard point @ %2 = %3\n",
-			                                                 this, when+1,
+			                                                 this, when + 64,
 			                                                 (*most_recent_insert_iterator)->value));
 		}
 	}
@@ -546,7 +554,7 @@ ControlList::erase_from_iterator_to (iterator iter, double when)
 }
 
 void
-ControlList::add (double when, double value, bool with_guards, bool with_default)
+ControlList::add (double when, double value, bool with_guards, bool with_initial)
 {
 	/* this is for making changes from some kind of user interface or
 	   control surface (GUI, MIDI, OSC etc)
@@ -561,12 +569,12 @@ ControlList::add (double when, double value, bool with_guards, bool with_default
 		ControlEvent cp (when, 0.0f);
 		iterator insertion_point;
 
-		if (_events.empty() && with_default) {
+		if (_events.empty() && with_initial) {
 			
 			/* empty: add an "anchor" point if the point we're adding past time 0 */
 
 			if (when >= 1) {
-				_events.insert (_events.end(), new ControlEvent (0, _default_value));
+				_events.insert (_events.end(), new ControlEvent (0, value));
 				DEBUG_TRACE (DEBUG::ControlList, string_compose ("@%1 added default value %2 at zero\n", this, _default_value));
 			}
 		}
@@ -628,10 +636,10 @@ ControlList::add (double when, double value, bool with_guards, bool with_default
 			if ((*most_recent_insert_iterator)->value != value) {
 				DEBUG_TRACE (DEBUG::ControlList, string_compose ("@%1 reset existing point to new value %2\n", this, value));
 
-				/* only one point allowed per time point, so just
-				 * reset the value here.
+				/* only one point allowed per time point, so add a guard point
+				 * before it if needed then reset the value of the point.
 				 */
-				
+
 				(*most_recent_insert_iterator)->value = value;
 
 				/* if we modified the final value, then its as
@@ -649,10 +657,35 @@ ControlList::add (double when, double value, bool with_guards, bool with_default
 
 		} else {
 			DEBUG_TRACE (DEBUG::ControlList, string_compose ("@%1 insert new point at %2 at iterator at %3\n", this, when, (*most_recent_insert_iterator)->when));
-			
-			const bool done = maybe_insert_straight_line (when, value);
+			bool done = false;
+			/* check for possible straight line here until maybe_insert_straight_line () handles the insert iterator properly*/
+			if (most_recent_insert_iterator != _events.begin ()) {
+				bool have_point2 = false;
+				--most_recent_insert_iterator;
+				const bool have_point1 = (*most_recent_insert_iterator)->value == value;
+
+				if (most_recent_insert_iterator != _events.begin ()) {
+					--most_recent_insert_iterator;
+					have_point2 = (*most_recent_insert_iterator)->value == value;
+					++most_recent_insert_iterator;
+				}
+
+				if (have_point1 && have_point2) {
+					(*most_recent_insert_iterator)->when = when;
+					done = true;
+				} else {
+					++most_recent_insert_iterator;
+				}
+			}
+			//done = maybe_insert_straight_line (when, value) || done;
+			/* if the transport is stopped, add guard points (?) */
+			if (!done && !_in_write_pass && when > 64) {
+				add_guard_point (when - 64);
+				maybe_add_insert_guard (when);
+			}
+
 			if (with_guards) {
-				maybe_add_insert_guard(when);
+				maybe_add_insert_guard (when);
 			}
 
 			if (!done) {
diff --git a/libs/evoral/src/libsmf/smf.h b/libs/evoral/src/libsmf/smf.h
index cbc7035..e5b76ee 100644
--- a/libs/evoral/src/libsmf/smf.h
+++ b/libs/evoral/src/libsmf/smf.h
@@ -394,7 +394,7 @@ int smf_extract_vlq(const unsigned char *buf, const size_t buffer_length, uint32
 
 /* Routines for loading SMF files. */
 smf_t *smf_load(FILE *) WARN_UNUSED_RESULT;
-smf_t *smf_load_from_memory(const void *buffer, const size_t buffer_length) WARN_UNUSED_RESULT;
+smf_t *smf_load_from_memory(void *buffer, const size_t buffer_length) WARN_UNUSED_RESULT;
 
 /* Routine for writing SMF files. */
 int smf_save(smf_t *smf, FILE *file) WARN_UNUSED_RESULT;
diff --git a/libs/evoral/src/libsmf/smf_decode.c b/libs/evoral/src/libsmf/smf_decode.c
index 031577c..d527cf1 100644
--- a/libs/evoral/src/libsmf/smf_decode.c
+++ b/libs/evoral/src/libsmf/smf_decode.c
@@ -277,7 +277,7 @@ smf_event_decode_metadata(const smf_event_t *event)
 			break;
 
 		case 0x7F:
-			off += snprintf(buf + off, BUFFER_SIZE - off, "Proprietary (aka Sequencer) Event, length %zu",
+			off += snprintf(buf + off, BUFFER_SIZE - off, "Proprietary (aka Sequencer) Event, length %" G_GSIZE_FORMAT,
 				event->midi_buffer_length);
 			break;
 
diff --git a/libs/evoral/src/libsmf/smf_load.c b/libs/evoral/src/libsmf/smf_load.c
index 1db09a7..eeedcc3 100644
--- a/libs/evoral/src/libsmf/smf_load.c
+++ b/libs/evoral/src/libsmf/smf_load.c
@@ -873,14 +873,14 @@ load_file_into_buffer(void **file_buffer, size_t *file_buffer_length, FILE* stre
  * \return SMF or NULL, if loading failed.
   */
 smf_t *
-smf_load_from_memory(const void *buffer, const size_t buffer_length)
+smf_load_from_memory(void *buffer, const size_t buffer_length)
 {
 	int i;
 	int ret;
 
 	smf_t *smf = smf_new();
 
-	smf->file_buffer = (void *)buffer;
+	smf->file_buffer = (void *) buffer;
 	smf->file_buffer_length = buffer_length;
 	smf->next_chunk_offset = 0;
 
diff --git a/libs/evoral/src/libsmf/smf_save.c b/libs/evoral/src/libsmf/smf_save.c
index 05c6641..937409a 100644
--- a/libs/evoral/src/libsmf/smf_save.c
+++ b/libs/evoral/src/libsmf/smf_save.c
@@ -519,7 +519,7 @@ smf_validate(smf_t *smf)
 			assert(event);
 
 			if (!smf_event_is_valid(event)) {
-				g_critical("Event #%zu on track #%d is invalid.", eventno, trackno);
+				g_critical("Event #%" G_GSIZE_FORMAT " on track #%d is invalid.", eventno, trackno);
 				return (-5);
 			}
 
diff --git a/libs/fst/vstwin.c b/libs/fst/vstwin.c
index fe0afa7..3a1f624 100644
--- a/libs/fst/vstwin.c
+++ b/libs/fst/vstwin.c
@@ -377,7 +377,7 @@ fst_run_editor (VSTState* fst, void* window_parent)
 	if (fst->windows_window == NULL) {
 		HMODULE hInst;
 		HWND window;
-		struct ERect* er;
+		struct ERect* er = NULL;
 
 		if (!(fst->plugin->flags & effFlagsHasEditor)) {
 			fst_error ("Plugin \"%s\" has no editor", fst->handle->name);
@@ -424,9 +424,10 @@ fst_run_editor (VSTState* fst, void* window_parent)
 		fst->plugin->dispatcher (fst->plugin, effEditOpen, 0, 0, fst->windows_window, 0 );
 		fst->plugin->dispatcher (fst->plugin, effEditGetRect, 0, 0, &er, 0 );
 
-		fst->width =  er->right-er->left;
-		fst->height =  er->bottom-er->top;
-
+		if (er != NULL) {
+			fst->width = er->right - er->left;
+			fst->height = er->bottom - er->top;
+		}
 
 		fst->been_activated = TRUE;
 
diff --git a/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj b/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj
index 00513e6..0fe12e1 100644
--- a/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj
+++ b/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj
@@ -342,6 +342,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\fader.cc"
+				>
+			</File>
+			<File
 				RelativePath="..\fastmeter.cc"
 				>
 			</File>
@@ -548,6 +552,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\gtkmm2ext\fader.h"
+				>
+			</File>
+			<File
 				RelativePath="..\gtkmm2ext\fastmeter.h"
 				>
 			</File>
diff --git a/libs/gtkmm2ext/actions.cc b/libs/gtkmm2ext/actions.cc
index 666ac29..60ca2f0 100644
--- a/libs/gtkmm2ext/actions.cc
+++ b/libs/gtkmm2ext/actions.cc
@@ -139,11 +139,11 @@ ActionManager::lookup_entry (const ustring accel_path, Gtk::AccelKey& key)
 }
 
 struct SortActionsByLabel {
-    bool operator() (Glib::RefPtr<Gtk::Action> a, Glib::RefPtr<Gtk::Action> b) {
-	    ustring astr = a->get_accel_path();
-	    ustring bstr = b->get_accel_path();
-	    return astr < bstr;
-    }
+	bool operator() (Glib::RefPtr<Gtk::Action> a, Glib::RefPtr<Gtk::Action> b) {
+		ustring astr = a->get_accel_path();
+		ustring bstr = b->get_accel_path();
+		return astr < bstr;
+	}
 };
 
 void
@@ -289,71 +289,63 @@ struct ActionState {
 
 typedef std::vector<ActionState> ActionStates;
 
-static std::stack<boost::shared_ptr<ActionStates> > state_stack;
+static ActionStates action_states_to_restore;
+static bool actions_disabled = false;
 
-static boost::shared_ptr<ActionStates>
-get_action_state ()
+void
+ActionManager::save_action_states ()
 {
-	boost::shared_ptr<ActionStates> state = boost::shared_ptr<ActionStates>(new ActionStates);
-	
 	/* the C++ API for functions used here appears to be broken in
 	   gtkmm2.6, so we fall back to the C level.
 	*/
-
 	GList* list = gtk_ui_manager_get_action_groups (ActionManager::ui_manager->gobj());
 	GList* node;
 	GList* acts;
 
 	for (node = list; node; node = g_list_next (node)) {
-
+        
 		GtkActionGroup* group = (GtkActionGroup*) node->data;
-
-		/* first pass: collect them all */
-
-		typedef std::list<Glib::RefPtr<Gtk::Action> > action_list;
-		action_list the_acts;
-
+        
 		for (acts = gtk_action_group_list_actions (group); acts; acts = g_list_next (acts)) {
 			GtkAction* action = (GtkAction*) acts->data;
-
-			state->push_back (ActionState (action, gtk_action_get_sensitive (action)));
+			action_states_to_restore.push_back (ActionState (action, gtk_action_get_sensitive (action)));
 		}
 	}
-	
-	return state;
 }
 
 void
-ActionManager::push_action_state ()
+ActionManager::enable_active_actions ()
 {
-	state_stack.push (get_action_state());
-}
-
-void
-ActionManager::pop_action_state ()
-{
-	if (state_stack.empty()) {
-		warning << string_compose (_("programming error: %1"), X_("ActionManager::pop_action_state called with empty stack")) << endmsg;
-		return;
+	if (!actions_disabled) {
+		return ;
 	}
 
-	boost::shared_ptr<ActionStates> as = state_stack.top ();
-	state_stack.pop ();
-	
-	for (ActionStates::iterator i = as->begin(); i != as->end(); ++i) {
-		gtk_action_set_sensitive ((*i).action, (*i).sensitive);
+	for (ActionStates::iterator i = action_states_to_restore.begin(); i != action_states_to_restore.end(); ++i) {
+		if ((*i).action && (*i).sensitive) {
+			gtk_action_set_sensitive ((*i).action, true);
+		}
 	}
+
+	action_states_to_restore.clear ();
+	actions_disabled = false;
 }
 
 void
-ActionManager::disable_all_actions ()
+ActionManager::disable_active_actions ()
 {
-	push_action_state ();
-	boost::shared_ptr<ActionStates> as = state_stack.top ();
+	if (actions_disabled == true ) {
+		return ;
+	}
+	// save all action's states to action_states_to_restore
+	save_action_states ();
 	
-	for (ActionStates::iterator i = as->begin(); i != as->end(); ++i) {
-		gtk_action_set_sensitive ((*i).action, false);
+	// set all action's states disabled
+	for (ActionStates::iterator i = action_states_to_restore.begin(); i != action_states_to_restore.end(); ++i) {
+		if ((*i).sensitive) {
+			gtk_action_set_sensitive ((*i).action, false);
+		}
 	}
+	actions_disabled = true;
 }
 
 void
@@ -464,8 +456,24 @@ ActionManager::get_action_from_name (const char* name)
 void
 ActionManager::set_sensitive (vector<RefPtr<Action> >& actions, bool state)
 {
-	for (vector<RefPtr<Action> >::iterator i = actions.begin(); i != actions.end(); ++i) {
-		(*i)->set_sensitive (state);
+	// if actions weren't disabled
+	if (!actions_disabled) {
+		for (vector<RefPtr<Action> >::iterator i = actions.begin(); i != actions.end(); ++i) {
+			(*i)->set_sensitive (state);
+		}
+	}
+	else {
+		// actions were disabled
+		// so we should just set necessary action's states in action_states_to_restore
+		for (vector<RefPtr<Action> >::iterator i = actions.begin(); i != actions.end(); ++i) {
+			// go through action_states_to_restore and set state of actions
+			for (ActionStates::iterator j = action_states_to_restore.begin(); j != action_states_to_restore.end(); ++j) {
+				// all actions should have their individual name, so we can use it for comparison
+				if (gtk_action_get_name ((*j).action) == (*i)->get_name ()) {
+					(*j).sensitive = state;
+				}
+			}
+		}
 	}
 }
 
@@ -503,10 +511,10 @@ ActionManager::set_toggleaction_state (string n, bool s)
 
 	const char* action_name = last_slash + 1;
 
-        RefPtr<Action> act = get_action (group_name, action_name);
+	RefPtr<Action> act = get_action (group_name, action_name);
 	if (act) {
-	        RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
-       		tact->set_active (s);
+		RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
+		tact->set_active (s);
 	} else {
 		error << string_compose (_("Unknown action name: %1"),  name) << endmsg;
 	}
diff --git a/libs/gtkmm2ext/application.cc b/libs/gtkmm2ext/application.cc
index 54efb47..eb1cea1 100644
--- a/libs/gtkmm2ext/application.cc
+++ b/libs/gtkmm2ext/application.cc
@@ -59,6 +59,12 @@ Application::ready ()
 }
 
 void
+Application::hide ()
+{
+    gtk_application_hide ();
+}
+
+void
 Application::cleanup ()
 {
 	gtk_application_cleanup ();
diff --git a/libs/gtkmm2ext/auto_spin.cc b/libs/gtkmm2ext/auto_spin.cc
index 0f4c371..2c70cb4 100644
--- a/libs/gtkmm2ext/auto_spin.cc
+++ b/libs/gtkmm2ext/auto_spin.cc
@@ -143,6 +143,30 @@ AutoSpin::button_press (GdkEventButton *ev)
 	return TRUE;
 }
 
+gint
+AutoSpin::scroll_event (GdkEventScroll *ev)
+{
+	stop_spinning (0);
+
+	gfloat increment = step_increment;
+
+	if (ev->state & Keyboard::TertiaryModifier) {
+		increment = page_increment;
+	}
+
+	switch (ev->direction) {
+		case GDK_SCROLL_DOWN:
+		case GDK_SCROLL_LEFT:
+			adjust_value (-increment);
+			break;
+		case GDK_SCROLL_RIGHT:
+		case GDK_SCROLL_UP:
+			adjust_value (increment);
+			break;
+	}
+	return TRUE;
+}
+
 void
 AutoSpin::start_spinning (bool decrement, bool page)
 {
diff --git a/libs/gtkmm2ext/cairo_widget.cc b/libs/gtkmm2ext/cairo_widget.cc
index 2ffb2b4..aa8f883 100644
--- a/libs/gtkmm2ext/cairo_widget.cc
+++ b/libs/gtkmm2ext/cairo_widget.cc
@@ -65,6 +65,99 @@ CairoWidget::on_button_press_event (GdkEventButton*)
 	return false;
 }
 
+
+#ifdef USE_TRACKS_CODE_FEATURES
+
+/* This is Tracks version of this method.
+
+   The use of get_visible_window() in this method is an abuse of the GDK/GTK
+   semantics. It can and may break on different GDK backends, and uses a
+   side-effect/unintended behaviour in GDK/GTK to try to accomplish something
+   which should be done differently. I (Paul) have confirmed this with the GTK
+   development team.
+
+   For this reason, this code is not acceptable for ordinary merging into the Ardour libraries.
+
+   Ardour Developers: you are not obligated to maintain the internals of this
+   implementation in the face of build-time environment changes (e.g. -D
+   defines etc).
+*/
+
+bool
+CairoWidget::on_expose_event (GdkEventExpose *ev)
+{
+	cairo_rectangle_t expose_area;
+	expose_area.width = ev->area.width;
+	expose_area.height = ev->area.height;
+
+#ifdef USE_CAIRO_IMAGE_SURFACE_FOR_CAIRO_WIDGET
+	Cairo::RefPtr<Cairo::Context> cr;
+	if (get_visible_window ()) {
+		expose_area.x = 0;
+		expose_area.y = 0;
+		if (!_image_surface) {
+			_image_surface = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, get_width(), get_height());
+		}
+		cr = Cairo::Context::create (_image_surface);
+	} else {
+		expose_area.x = ev->area.x;
+		expose_area.y = ev->area.y;
+		cr = get_window()->create_cairo_context ();
+	}
+#else
+	expose_area.x = ev->area.x;
+	expose_area.y = ev->area.y;
+	Cairo::RefPtr<Cairo::Context> cr = get_window()->create_cairo_context ();
+#endif
+
+	cr->rectangle (expose_area.x, expose_area.y, expose_area.width, expose_area.height);
+	cr->clip ();
+
+	/* paint expose area the color of the parent window bg
+	*/
+
+    if (get_visible_window ()) {
+        Gdk::Color bg (get_parent_bg());
+		cr->rectangle (expose_area.x, expose_area.y, expose_area.width, expose_area.height);
+        cr->set_source_rgb (bg.get_red_p(), bg.get_green_p(), bg.get_blue_p());
+        cr->fill ();
+    }
+
+	render (cr->cobj(), &expose_area);
+
+#ifdef USE_CAIRO_IMAGE_SURFACE_FOR_CAIRO_WIDGET
+	if(get_visible_window ()) {
+		_image_surface->flush();
+		/* now blit our private surface back to the GDK one */
+
+		Cairo::RefPtr<Cairo::Context> cairo_context = get_window()->create_cairo_context ();
+
+		cairo_context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height);
+		cairo_context->clip ();
+		cairo_context->set_source (_image_surface, ev->area.x, ev->area.y);
+		cairo_context->set_operator (Cairo::OPERATOR_OVER);
+		cairo_context->paint ();
+	}
+#endif
+	
+	Gtk::Widget* child = get_child ();
+	
+	if (child) {
+		propagate_expose (*child, ev);
+	}
+
+	return true;
+}
+
+#else
+
+/* Ardour mainline: not using Tracks code features.
+
+   Tracks Developers: please do not modify this version of
+   ::on_expose_event(). The version used by Tracks is before the preceding
+   #else and contains hacks required for the Tracks GUI to work.
+*/
+
 bool
 CairoWidget::on_expose_event (GdkEventExpose *ev)
 {
@@ -126,10 +219,12 @@ CairoWidget::on_expose_event (GdkEventExpose *ev)
 #ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
 	}
 #endif
-
+	
 	return true;
 }
 
+#endif
+
 /** Marks the widget as dirty, so that render () will be called on
  *  the next GTK expose event.
  */
diff --git a/libs/gtkmm2ext/click_box.cc b/libs/gtkmm2ext/click_box.cc
index 63ab3db..7b2e67d 100644
--- a/libs/gtkmm2ext/click_box.cc
+++ b/libs/gtkmm2ext/click_box.cc
@@ -63,6 +63,13 @@ ClickBox::button_press_handler (GdkEventButton* ev)
 }
 
 bool
+ClickBox::on_scroll_event (GdkEventScroll* ev)
+{
+	AutoSpin::scroll_event (ev);
+	return true;
+}
+
+bool
 ClickBox::button_release_handler (GdkEventButton* ev)
 {
 	switch (ev->button) {
@@ -81,6 +88,7 @@ void
 ClickBox::set_label ()
 {
 	char buf[32];
+	int width, height;
 
 	bool const h = _printer (buf, get_adjustment());
 	if (!h) {
@@ -89,7 +97,17 @@ ClickBox::set_label ()
 	}
 
 	layout->set_text (buf);
-	layout->get_pixel_size (twidth, theight);
+	layout->get_pixel_size (width, height);
+
+	if (twidth < width && (width > 50))  {
+		/* override GenericPluginUI::build_control_ui()
+		 * Gtkmm2ext::set_size_request_to_display_given_text ("g9999999")
+		 * see http://tracker.ardour.org/view.php?id=6499
+		 */
+		set_size_request (std::min (300, width + 6), height + 4);
+	}
+
+	twidth = width; theight = height;
 
 	queue_draw ();
 }
diff --git a/libs/gtkmm2ext/fader.cc b/libs/gtkmm2ext/fader.cc
new file mode 100755
index 0000000..0fedd33
--- /dev/null
+++ b/libs/gtkmm2ext/fader.cc
@@ -0,0 +1,448 @@
+/*
+  Copyright (C) 2014 Waves Audio Ltd.
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+  $Id: fastmeter.h 570 2006-06-07 21:21:21Z sampo $
+*/
+
+
+#include <iostream>
+
+#include "pbd/stacktrace.h"
+
+#include "gtkmm2ext/fader.h"
+#include "gtkmm2ext/keyboard.h"
+#include "gtkmm2ext/rgb_macros.h"
+#include "gtkmm2ext/utils.h"
+#include "pbd/failed_constructor.h"
+#include "pbd/file_utils.h"
+#include "ardour/filesystem_paths.h"
+
+using namespace Gtkmm2ext;
+using namespace Gtk;
+using namespace std;
+
+#define CORNER_RADIUS 4
+#define CORNER_SIZE   2
+#define CORNER_OFFSET 1
+#define FADER_RESERVE 5
+
+
+static void get_closest_point_on_line(double xa, double ya, double xb, double yb, double xp, double yp, double& xl, double& yl )
+{
+	// Storing vector A->B
+	double a_to_b_x = xb - xa;
+	double a_to_b_y = yb - ya;
+    
+	// Storing vector A->P
+	double a_to_p_x = xp - xa;
+	double a_to_p_y = yp - ya;
+    
+
+	// Basically finding the squared magnitude
+	// of a_to_b
+	double atb2 = a_to_b_x * a_to_b_x + a_to_b_y * a_to_b_y;
+ 
+	// The dot product of a_to_p and a_to_b
+	double atp_dot_atb = a_to_p_x * a_to_b_x + a_to_p_y * a_to_b_y;
+    
+	// The normalized "distance" from a to
+	// your closest point
+	double t = atp_dot_atb / atb2;
+    
+	// Add the distance to A, moving
+	// towards B
+	double x = xa + a_to_b_x * t;
+	double y = ya + a_to_b_y * t;
+
+	if ((xa != xb)) {
+		if ((x < xa) && (x < xb)) {
+			if (xa < xb) {
+				x = xa;
+				y = ya;
+			} else {
+				x = xb;
+				y = yb;
+			}
+		} else if ((x > xa) && (x > xb)) {
+			if (xb > xa) {
+				x = xb;
+				y = yb;
+			} else {
+				x = xa;
+				y = ya;
+			}
+		}
+	} else {
+		if ((y < ya) && (y < yb)) {
+			if (ya < yb) {
+				x = xa;
+				y = ya;
+			} else {
+				x = xb;
+				y = yb;
+			}
+		} else if ((y > ya) && (y > yb)) {
+			if (yb > ya) {
+				x = xb;
+				y = yb;
+			} else {
+				x = xa;
+				y = ya;
+			}
+		}
+	}
+
+	xl = x;
+	yl = y;
+}
+
+Fader::Fader (Gtk::Adjustment& adj,
+              const Glib::RefPtr<Gdk::Pixbuf>& face_pixbuf,
+              const Glib::RefPtr<Gdk::Pixbuf>& active_face_pixbuf,
+              const Glib::RefPtr<Gdk::Pixbuf>& underlay_pixbuf,
+              const Glib::RefPtr<Gdk::Pixbuf>& handle_pixbuf,
+              const Glib::RefPtr<Gdk::Pixbuf>& active_handle_pixbuf,
+              int min_pos_x, 
+              int min_pos_y,
+              int max_pos_x,
+              int max_pos_y,
+              bool read_only)
+	: adjustment (adj)
+	, _face_pixbuf (face_pixbuf)
+	, _active_face_pixbuf (active_face_pixbuf)
+	, _underlay_pixbuf (underlay_pixbuf)
+	, _handle_pixbuf (handle_pixbuf)
+	, _active_handle_pixbuf (active_handle_pixbuf)
+	, _min_pos_x (min_pos_x)
+	, _min_pos_y (min_pos_y)
+	, _max_pos_x (max_pos_x)
+	, _max_pos_y (max_pos_y)
+	, _grab_window (0)
+	, _touch_cursor (0)
+	, _dragging (false)
+	, _default_value (adjustment.get_value())
+	, _read_only (read_only)
+{
+	update_unity_position ();
+
+	if (!_read_only) {
+		add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
+	}
+
+	adjustment.signal_value_changed().connect (mem_fun (*this, &Fader::adjustment_changed));
+	adjustment.signal_changed().connect (mem_fun (*this, &Fader::adjustment_changed));
+	CairoWidget::set_size_request(_face_pixbuf->get_width(), _face_pixbuf->get_height());
+}
+
+Fader::~Fader ()
+{
+	if (_touch_cursor) {
+		delete _touch_cursor;
+	}
+}
+
+void
+Fader::get_image_scales (double &x_scale, double &y_scale)
+{
+	int pbwidth = _face_pixbuf->get_width ();
+	int pbheight = _face_pixbuf->get_height ();
+	int width = get_width ();
+	int height = get_height ();
+	
+	if ((width != pbwidth) || (height != pbheight)) {
+		x_scale = double (width) / double (pbwidth);
+		if (x_scale == 0.0) {
+			x_scale = 1.0;
+		}
+		y_scale = double (height) / double (pbheight);
+		if (y_scale == 0.0) {
+			y_scale = 1.0;
+		}
+	} else {
+		x_scale = y_scale = 1.0;
+	}
+}
+
+void
+Fader::set_touch_cursor (const Glib::RefPtr<Gdk::Pixbuf>& touch_cursor)
+{
+	_touch_cursor = new Gdk::Cursor (Gdk::Display::get_default(), touch_cursor, 12, 12);
+}
+
+void
+Fader::render (cairo_t* cr, cairo_rectangle_t*)
+{
+	
+	double xscale = 1.0;
+	double yscale = 1.0;
+	
+	get_image_scales (xscale, yscale);
+	
+	cairo_matrix_t matrix;
+	cairo_get_matrix (cr, &matrix);
+	cairo_matrix_scale (&matrix, xscale, yscale);
+	cairo_set_matrix (cr, &matrix);
+	
+	get_handle_position (_last_drawn_x, _last_drawn_y);
+
+	if (_underlay_pixbuf != 0) {
+		gdk_cairo_set_source_pixbuf (cr,
+		                             _underlay_pixbuf->gobj(),
+		                             (_last_drawn_x - (int)((_underlay_pixbuf->get_width() * xscale) / 2.0 + 0.5)) / xscale,
+		                             (_last_drawn_y - (int)((_underlay_pixbuf->get_height() * yscale) / 2.0 + 0.5)) / yscale);
+		cairo_paint (cr);
+	}
+
+	gdk_cairo_set_source_pixbuf (cr,
+	                             ((get_state () == Gtk::STATE_ACTIVE) && (_active_face_pixbuf != 0)) ? 
+	                             _active_face_pixbuf->gobj() : 
+	                             _face_pixbuf->gobj(),
+	                             0,
+	                             0);
+	cairo_paint (cr);
+
+	const Glib::RefPtr<Gdk::Pixbuf> handle_pixbuf (_dragging ? _active_handle_pixbuf : _handle_pixbuf);
+	gdk_cairo_set_source_pixbuf (cr,
+	                             handle_pixbuf->gobj(),
+	                             (_last_drawn_x - (int)((handle_pixbuf->get_width() * xscale) / 2.0 + 0.5)) / xscale,
+	                             (_last_drawn_y - (int)((handle_pixbuf->get_height() * yscale) / 2.0 + 0.5)) / yscale);
+	cairo_paint (cr);
+}
+
+void
+Fader::on_size_request (GtkRequisition* req)
+{
+	req->width = _face_pixbuf->get_width();
+	req->height = _face_pixbuf->get_height();
+}
+
+void
+Fader::on_size_allocate (Gtk::Allocation& alloc)
+{
+	CairoWidget::on_size_allocate(alloc);
+	update_unity_position ();
+}
+
+bool
+Fader::on_button_press_event (GdkEventButton* ev)
+{
+	focus_handler();
+    
+	if (_read_only) {
+		return false;
+	}
+    
+	if (ev->type != GDK_BUTTON_PRESS) {
+		return false;
+	}
+
+	if (ev->button != 1 && ev->button != 2) {
+		return false;
+	}
+
+	if (_touch_cursor) {
+		get_window()->set_cursor (*_touch_cursor);
+	}
+
+	_grab_start_mouse_x = ev->x;
+	_grab_start_mouse_y = ev->y;
+	get_handle_position (_grab_start_handle_x, _grab_start_handle_y);
+
+	double xscale = 1.0;
+	double yscale = 1.0;
+	
+	get_image_scales (xscale, yscale);
+	
+	double hw = _handle_pixbuf->get_width() * xscale;
+	double hh = _handle_pixbuf->get_height() * yscale;
+
+	if ((ev->x < (_grab_start_handle_x - hw/2)) || (ev->x > (_grab_start_handle_x + hw/2)) || (ev->y < (_grab_start_handle_y - hh/2)) || (ev->y > (_grab_start_handle_y + hh/2))) {
+		return false;
+	}
+    
+	double ev_pos_x;
+	double ev_pos_y;
+		
+	get_closest_point_on_line(_min_pos_x, _min_pos_y,
+	                          _max_pos_x, _max_pos_y, 
+	                          ev->x, ev->y,
+	                          ev_pos_x, ev_pos_y );
+	add_modal_grab ();
+	
+	_grab_window = ev->window;
+	_dragging = true;
+	
+	gdk_pointer_grab(ev->window,false,
+	                 GdkEventMask (Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK),
+	                 NULL,
+	                 NULL,
+	                 ev->time);
+
+	queue_draw();
+	
+	return true;
+}
+
+bool
+Fader::on_button_release_event (GdkEventButton* ev)
+{
+	if (_read_only) {
+		return false;
+	}
+
+	if (_touch_cursor) {
+		get_window()->set_cursor ();
+	}
+
+	if (_dragging) { //temp
+		remove_modal_grab();
+		_dragging = false;
+		gdk_pointer_ungrab (GDK_CURRENT_TIME);
+		queue_draw ();
+	}
+	return false;
+}
+
+bool
+Fader::on_scroll_event (GdkEventScroll* ev)
+{
+	if (_read_only) {
+		return false;
+	}
+
+	int step_factor = 1;
+
+	switch (ev->direction) {
+	case GDK_SCROLL_RIGHT:
+	case GDK_SCROLL_UP:
+#ifdef __APPLE__
+		if ( ev->state & GDK_SHIFT_MASK ) {
+			step_factor = -1;
+		} else {
+			step_factor = 1;
+		}
+#else
+		step_factor = 1;
+#endif
+		break;
+	case GDK_SCROLL_LEFT:
+	case GDK_SCROLL_DOWN:
+#ifdef __APPLE__
+		if ( ev->state & GDK_SHIFT_MASK ) {
+			step_factor = 1;
+		} else {
+			step_factor = -1;
+		}
+#else
+		step_factor = -1;
+#endif
+		break;
+	default:
+		return false;
+	}
+	adjustment.set_value (adjustment.get_value() + step_factor * (adjustment.get_step_increment() ));
+	return true;
+}
+
+bool
+Fader::on_motion_notify_event (GdkEventMotion* ev)
+{
+	if (_read_only) {
+		return false;
+	}
+
+	if (_dragging) {
+		double ev_pos_x;
+		double ev_pos_y;
+		
+		if (ev->window != _grab_window) {
+			_grab_window = ev->window;
+			return true;
+		}
+
+		get_closest_point_on_line(_min_pos_x, _min_pos_y,
+		                          _max_pos_x, _max_pos_y, 
+		                          _grab_start_handle_x + (ev->x - _grab_start_mouse_x), _grab_start_handle_y + (ev->y - _grab_start_mouse_y),
+		                          ev_pos_x, ev_pos_y );
+		
+		double const fract = sqrt((ev_pos_x - _min_pos_x) * (ev_pos_x - _min_pos_x) +
+		                          (ev_pos_y - _min_pos_y) * (ev_pos_y - _min_pos_y)) /
+			sqrt((double)((_max_pos_x - _min_pos_x) * (_max_pos_x - _min_pos_x) +
+			              (_max_pos_y - _min_pos_y) * (_max_pos_y - _min_pos_y)));
+		
+		adjustment.set_value (adjustment.get_lower() + (adjustment.get_upper() - adjustment.get_lower()) * fract);
+	}
+	return true;
+}
+
+void
+Fader::adjustment_changed ()
+{
+	double handle_x;
+	double handle_y;
+	get_handle_position (handle_x, handle_y);
+
+	if ((handle_x != _last_drawn_x) || (handle_y != _last_drawn_y)) {
+		queue_draw ();
+	}
+}
+
+/** @return pixel offset of the current value from the right or bottom of the fader */
+void
+Fader::get_handle_position (double& x, double& y)
+{
+	double fract = (adjustment.get_value () - adjustment.get_lower()) / ((adjustment.get_upper() - adjustment.get_lower()));
+
+	x = (int)(_min_pos_x + (_max_pos_x - _min_pos_x) * fract);
+	y = (int)(_min_pos_y + (_max_pos_y - _min_pos_y) * fract);
+}
+
+bool
+Fader::on_enter_notify_event (GdkEventCrossing*)
+{
+	_hovering = true;
+	Keyboard::magic_widget_grab_focus ();
+	queue_draw ();
+	return false;
+}
+
+bool
+Fader::on_leave_notify_event (GdkEventCrossing*)
+{
+	if (_read_only) {
+		return false;
+	}
+
+	if (!_dragging) {
+		_hovering = false;
+		Keyboard::magic_widget_drop_focus();
+		queue_draw ();
+	}
+	return false;
+}
+
+void
+Fader::set_default_value (float d)
+{
+	_default_value = d;
+	update_unity_position ();
+}
+
+void
+Fader::update_unity_position ()
+{
+}
diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc
index b5319fb..c4df2b7 100644
--- a/libs/gtkmm2ext/gtk_ui.cc
+++ b/libs/gtkmm2ext/gtk_ui.cc
@@ -482,8 +482,40 @@ UI::do_request (UIRequest* req)
   ======================================================================*/
 
 void
+UI::dump_errors (std::ostream& ostr)
+{
+	Glib::Threads::Mutex::Lock lm (error_lock);
+	ostr << endl << X_("Errors/Messages:") << endl;
+	for (list<string>::const_iterator i = error_stack.begin(); i != error_stack.end(); ++i) {
+		ostr << *i << endl;
+	}
+	ostr << endl;
+}
+
+void
 UI::receive (Transmitter::Channel chn, const char *str)
 {
+	{
+		Glib::Threads::Mutex::Lock lm (error_lock);
+		switch (chn) {
+		case Transmitter::Fatal:
+			error_stack.push_back (string (X_("FATAL: ")) + str);
+			break;
+		case Transmitter::Error:
+			error_stack.push_back (string (X_("ERROR: ")) + str);
+			break;
+		case Transmitter::Warning:
+			error_stack.push_back (string (X_("WARNING: ")) + str);
+			break;
+		case Transmitter::Info:
+			error_stack.push_back (string (X_("INFO: ")) + str);
+			break;
+		case Transmitter::Throw:
+			error_stack.push_back (string (X_("THROW: ")) + str);
+			break;
+		}
+	}
+
 	if (caller_is_ui_thread()) {
 		process_error_message (chn, str);
 	} else {
diff --git a/libs/gtkmm2ext/gtkapplication_quartz.mm b/libs/gtkmm2ext/gtkapplication_quartz.mm
index 932eaa7..5809355 100644
--- a/libs/gtkmm2ext/gtkapplication_quartz.mm
+++ b/libs/gtkmm2ext/gtkapplication_quartz.mm
@@ -573,7 +573,9 @@ idle_call_activate (gpointer data)
 - (void) activate:(id) sender
 {
 	UNUSED_PARAMETER(sender);
-	g_idle_add (idle_call_activate, gtk_menu_item);
+    // Hot Fix. Increase Priority.
+	g_idle_add_full (G_PRIORITY_HIGH_IDLE, idle_call_activate, gtk_menu_item, NULL);
+//    g_idle_add (idle_call_activate, gtk_menu_item);
 }
 @end
 
@@ -1221,7 +1223,7 @@ create_apple_menu ()
 	[menuitem release];
 	[_app_menu addItem: [NSMenuItem separatorItem]];
 	menuitem = [[NSMenuItem alloc] initWithTitle:@"Hide"
-		    action:@selector(hide:) keyEquivalent:@""];
+		    action:@selector(hide:) keyEquivalent:@"h"];
 	[menuitem setTarget: NSApp];
 	[_app_menu addItem: menuitem];
 	[menuitem release];
@@ -1424,9 +1426,10 @@ namespace Gtk {
 
 @end
 
- at interface GtkApplicationDelegate : NSObject 
+ at interface GtkApplicationDelegate : NSObject
 -(BOOL) application:(NSApplication*) app openFile:(NSString*) file;
 - (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *) app;
+- (void) startApp;
 @end
 
 @implementation GtkApplicationDelegate
@@ -1476,6 +1479,12 @@ gtk_application_ready ()
 }
 
 extern "C" void
+gtk_application_hide ()
+{
+    [NSApp performSelector:@selector(hide:)];
+}
+
+extern "C" void
 gtk_application_cleanup()
 {
 	_exiting = 1;
diff --git a/libs/gtkmm2ext/gtkapplication_win32.c b/libs/gtkmm2ext/gtkapplication_win32.c
index 78d538b..7dd9db4 100644
--- a/libs/gtkmm2ext/gtkapplication_win32.c
+++ b/libs/gtkmm2ext/gtkapplication_win32.c
@@ -47,3 +47,8 @@ void
 gtk_application_ready (void)
 {
 }
+
+void
+gtk_application_hide (void)
+{
+}
diff --git a/libs/gtkmm2ext/gtkapplication_x11.c b/libs/gtkmm2ext/gtkapplication_x11.c
index 2b85677..6cf1055 100644
--- a/libs/gtkmm2ext/gtkapplication_x11.c
+++ b/libs/gtkmm2ext/gtkapplication_x11.c
@@ -50,3 +50,8 @@ void
 gtk_application_ready (void)
 {
 }
+
+void
+gtk_application_hide (void)
+{
+}
diff --git a/libs/gtkmm2ext/gtkmm2ext/actions.h b/libs/gtkmm2ext/gtkmm2ext/actions.h
index d13a16f..9ed1480 100644
--- a/libs/gtkmm2ext/gtkmm2ext/actions.h
+++ b/libs/gtkmm2ext/gtkmm2ext/actions.h
@@ -94,9 +94,9 @@ namespace ActionManager {
 	LIBGTKMM2EXT_API extern void set_toggleaction_state (std::string, bool);
 
        
-        LIBGTKMM2EXT_API extern void push_action_state ();
-        LIBGTKMM2EXT_API extern void pop_action_state ();
-        LIBGTKMM2EXT_API extern void disable_all_actions ();
+        LIBGTKMM2EXT_API extern void save_action_states ();
+        LIBGTKMM2EXT_API extern void enable_active_actions ();
+        LIBGTKMM2EXT_API extern void disable_active_actions ();
 };
 
 #endif /* __libgtkmm2ext_actions_h__ */
diff --git a/libs/gtkmm2ext/gtkmm2ext/application.h b/libs/gtkmm2ext/gtkmm2ext/application.h
index f0d029d..e66b6ea 100644
--- a/libs/gtkmm2ext/gtkmm2ext/application.h
+++ b/libs/gtkmm2ext/gtkmm2ext/application.h
@@ -45,6 +45,7 @@ public:
     ~Application ();
 
     void                     ready ();
+    void                     hide ();
     void                     cleanup ();
     void                     set_menu_bar (Gtk::MenuShell&);
     GtkApplicationMenuGroup* add_app_menu_group ();
diff --git a/libs/gtkmm2ext/gtkmm2ext/auto_spin.h b/libs/gtkmm2ext/gtkmm2ext/auto_spin.h
index 8a6c9ab..0f5a946 100644
--- a/libs/gtkmm2ext/gtkmm2ext/auto_spin.h
+++ b/libs/gtkmm2ext/gtkmm2ext/auto_spin.h
@@ -47,6 +47,7 @@ class LIBGTKMM2EXT_API AutoSpin
 	gint button_press (GdkEventButton *);
 	gint stop_spinning (GdkEventButton *ignored_but_here_for_clicked);
 	void start_spinning (bool decrementing, bool use_page);
+	gint scroll_event (GdkEventScroll *);
 
   private:
 	Gtk::Adjustment &adjustment;
diff --git a/libs/gtkmm2ext/gtkmm2ext/click_box.h b/libs/gtkmm2ext/gtkmm2ext/click_box.h
index c2afa2d..3b7fd0f 100644
--- a/libs/gtkmm2ext/gtkmm2ext/click_box.h
+++ b/libs/gtkmm2ext/gtkmm2ext/click_box.h
@@ -57,6 +57,7 @@ class LIBGTKMM2EXT_API ClickBox : public Gtk::DrawingArea, public AutoSpin
 	void style_changed (const Glib::RefPtr<Gtk::Style> &);
 	bool button_press_handler (GdkEventButton *);
 	bool button_release_handler (GdkEventButton *);
+	bool on_scroll_event (GdkEventScroll*);
 
 	sigc::slot<bool, char *, Gtk::Adjustment &> _printer;
 };
diff --git a/libs/gtkmm2ext/gtkmm2ext/fader.h b/libs/gtkmm2ext/gtkmm2ext/fader.h
new file mode 100755
index 0000000..84175d5
--- /dev/null
+++ b/libs/gtkmm2ext/gtkmm2ext/fader.h
@@ -0,0 +1,111 @@
+/*
+  Copyright (C) 2006 Paul Davis 
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __gtkmm2ext_fader_h__
+#define __gtkmm2ext_fader_h__
+
+#include <cmath>
+#include <stdint.h>
+
+#include <gtkmm/adjustment.h>
+#include <gdkmm.h>
+#include <gtkmm2ext/binding_proxy.h>
+#include "gtkmm2ext/cairo_widget.h"
+
+#include <boost/shared_ptr.hpp>
+
+#include "gtkmm2ext/visibility.h"
+
+namespace Gtkmm2ext {
+
+class LIBGTKMM2EXT_API Fader : public CairoWidget
+{
+  public:
+	Fader (Gtk::Adjustment& adjustment, 
+	       const Glib::RefPtr<Gdk::Pixbuf>& face_pixbuf,
+	       const Glib::RefPtr<Gdk::Pixbuf>& active_face_pixbuf,
+	       const Glib::RefPtr<Gdk::Pixbuf>& underlay_pixbuf,
+	       const Glib::RefPtr<Gdk::Pixbuf>& handle_pixbuf,
+	       const Glib::RefPtr<Gdk::Pixbuf>& active_handle_pixbuf,
+	       int min_pos_x, 
+	       int min_pos_y,
+	       int max_pos_x,
+	       int max_pos_y,
+	       bool read_only);
+
+	virtual ~Fader ();
+
+	void set_controllable (boost::shared_ptr<PBD::Controllable> c) { binding_proxy.set_controllable (c); }
+	void set_default_value (float);
+	void set_touch_cursor (const Glib::RefPtr<Gdk::Pixbuf>& touch_cursor);
+	void get_image_scales (double &x_scale, double &y_scale);
+
+  protected:
+	void get_handle_position (double& x, double& y);
+
+	void on_size_request (GtkRequisition*);
+	void on_size_allocate (Gtk::Allocation& alloc);
+
+	void render (cairo_t* cr, cairo_rectangle_t*);
+	bool on_button_press_event (GdkEventButton*);
+	bool on_button_release_event (GdkEventButton*);
+	bool on_motion_notify_event (GdkEventMotion*);
+	bool on_scroll_event (GdkEventScroll* ev);
+	bool on_enter_notify_event (GdkEventCrossing* ev);
+	bool on_leave_notify_event (GdkEventCrossing* ev);
+
+  protected:
+	Gtk::Adjustment& adjustment;
+	BindingProxy binding_proxy;
+
+  private:
+
+	const Glib::RefPtr<Gdk::Pixbuf> _face_pixbuf;
+	const Glib::RefPtr<Gdk::Pixbuf> _active_face_pixbuf;
+	const Glib::RefPtr<Gdk::Pixbuf> _underlay_pixbuf;
+	const Glib::RefPtr<Gdk::Pixbuf> _handle_pixbuf;
+	const Glib::RefPtr<Gdk::Pixbuf> _active_handle_pixbuf;
+	int _min_pos_x;
+	int _min_pos_y;
+	int _max_pos_x;
+	int _max_pos_y;
+
+	bool _hovering;
+
+	GdkWindow* _grab_window;
+	Gdk::Cursor *_touch_cursor;
+
+	double _grab_start_mouse_x;
+	double _grab_start_mouse_y;
+	double _grab_start_handle_x;
+	double _grab_start_handle_y;
+	double _last_drawn_x;
+	double _last_drawn_y;
+	bool _dragging;
+	float _default_value;
+	bool _read_only;
+
+	void adjustment_changed ();
+	void update_unity_position ();
+};
+
+
+} /* namespace */
+
+#endif /* __gtkmm2ext_fader_h__ */
diff --git a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
index 0a66acc..177adb0 100644
--- a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
+++ b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
@@ -138,6 +138,7 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest>
 	void flush_pending ();
 	void toggle_errors ();
 	void show_errors ();
+	void dump_errors (std::ostream&);
 	void touch_display (Touchable *);
 	void set_tip (Gtk::Widget &w, const gchar *tip);
 	void set_tip (Gtk::Widget &w, const std::string &tip);
@@ -166,7 +167,7 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest>
 	sigc::signal<void> theme_changed;
 
 	static bool just_hide_it (GdkEventAny *, Gtk::Window *);
-
+	
   protected:
 	virtual void handle_fatal (const char *);
 	virtual void display_message (const char *prefix, gint prefix_len,
@@ -195,6 +196,9 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest>
 	void process_error_message (Transmitter::Channel, const char *);
 	void do_quit ();
 
+	Glib::Threads::Mutex   error_lock;
+	std::list<std::string> error_stack;
+
 	void color_selection_done (bool status);
 	bool color_selection_deleted (GdkEventAny *);
 	bool color_picked;
diff --git a/libs/gtkmm2ext/gtkmm2ext/gtkapplication.h b/libs/gtkmm2ext/gtkmm2ext/gtkapplication.h
index 83594fe..4e977de 100644
--- a/libs/gtkmm2ext/gtkmm2ext/gtkapplication.h
+++ b/libs/gtkmm2ext/gtkmm2ext/gtkapplication.h
@@ -34,6 +34,7 @@ typedef struct _GtkApplicationMenuGroup GtkApplicationMenuGroup;
 
 LIBGTKMM2EXT_API int  gtk_application_init (void);
 LIBGTKMM2EXT_API void gtk_application_ready (void);
+LIBGTKMM2EXT_API void gtk_application_hide (void);
 LIBGTKMM2EXT_API void gtk_application_cleanup (void);
 
 LIBGTKMM2EXT_API void                      gtk_application_set_menu_bar       (GtkMenuShell    *menu_shell);
diff --git a/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h b/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h
index 6507bbb..9df2614 100644
--- a/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h
+++ b/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h
@@ -31,15 +31,17 @@ namespace Gtkmm2ext {
  */
 class LIBGTKMM2EXT_API PersistentTooltip : public sigc::trackable
 {
-public:
-	PersistentTooltip (Gtk::Widget *, int margin_y = 0);
+  public:
+	PersistentTooltip (Gtk::Widget *, bool draggable = false, int margin_y = 0);
 	virtual ~PersistentTooltip ();
 	
 	void set_tip (std::string);
-
+	void set_font (Pango::FontDescription font);
+	void set_center_alignment (bool align_to_center);
+   
 	virtual bool dragging () const;
 
-private:
+  private:
 	bool timeout ();
 	void show ();
 	void hide ();
@@ -54,6 +56,10 @@ private:
 	Gtk::Window* _window;
 	/** Our label */
 	Gtk::Label* _label;
+    
+	/** allow to drag
+	 */
+	bool _draggable;
 	/** true if we are `dragging', in the sense that button 1
 	    is being held over _target.
 	*/
@@ -62,6 +68,8 @@ private:
 	sigc::connection _timeout;
 	/** The tip text */
 	std::string _tip;
+	Pango::FontDescription _font;
+	bool _align_to_center;
 	int _margin_y;
 };
 
diff --git a/libs/gtkmm2ext/gtkmm2ext/pixfader.h b/libs/gtkmm2ext/gtkmm2ext/pixfader.h
index f137a4e..0a31634 100644
--- a/libs/gtkmm2ext/gtkmm2ext/pixfader.h
+++ b/libs/gtkmm2ext/gtkmm2ext/pixfader.h
@@ -58,6 +58,7 @@ class LIBGTKMM2EXT_API PixFader : public CairoWidget
 	void on_size_allocate (Gtk::Allocation& alloc);
 
 	void render (cairo_t *, cairo_rectangle_t*);
+	bool on_grab_broken_event (GdkEventGrabBroken*);
 	bool on_button_press_event (GdkEventButton*);
 	bool on_button_release_event (GdkEventButton*);
 	bool on_motion_notify_event (GdkEventMotion*);
diff --git a/libs/gtkmm2ext/gtkmm2ext/utils.h b/libs/gtkmm2ext/gtkmm2ext/utils.h
index 5832c91..6ed5d77 100644
--- a/libs/gtkmm2ext/gtkmm2ext/utils.h
+++ b/libs/gtkmm2ext/gtkmm2ext/utils.h
@@ -54,6 +54,7 @@ namespace Gtkmm2ext {
 	LIBGTKMM2EXT_API std::string fit_to_pixels (const std::string&, int pixel_width, Pango::FontDescription& font, int& actual_width, bool with_ellipses = false);
 	LIBGTKMM2EXT_API std::pair<std::string, double> fit_to_pixels (cairo_t *, std::string, double);
 	LIBGTKMM2EXT_API int pixel_width (const std::string& str, Pango::FontDescription& font);
+	LIBGTKMM2EXT_API void pixel_size (const std::string& str, Pango::FontDescription& font, int& width, int& height);
 
 	LIBGTKMM2EXT_API void get_ink_pixel_size (Glib::RefPtr<Pango::Layout>, 
 						  int& width, int& height);
@@ -100,6 +101,8 @@ namespace Gtkmm2ext {
 	LIBGTKMM2EXT_API void get_popdown_strings (Gtk::ComboBoxText&,
 	                          std::vector<std::string>&);
 
+	LIBGTKMM2EXT_API size_t get_popdown_string_count (Gtk::ComboBoxText&);
+
 	LIBGTKMM2EXT_API bool contains_value (Gtk::ComboBoxText&,
 	                          const std::string);
 
diff --git a/libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj/project.pbxproj b/libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..c7d7540
--- /dev/null
+++ b/libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj/project.pbxproj
@@ -0,0 +1,254 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXFileReference section */
+		4397599D19CB06D100740098 /* actions.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = actions.cc; path = ../../actions.cc; sourceTree = "<group>"; };
+		4397599E19CB06D100740098 /* application.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = application.cc; path = ../../application.cc; sourceTree = "<group>"; };
+		4397599F19CB06D100740098 /* auto_spin.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = auto_spin.cc; path = ../../auto_spin.cc; sourceTree = "<group>"; };
+		439759A019CB06D100740098 /* barcontroller.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = barcontroller.cc; path = ../../barcontroller.cc; sourceTree = "<group>"; };
+		439759A119CB06D100740098 /* bindable_button.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bindable_button.cc; path = ../../bindable_button.cc; sourceTree = "<group>"; };
+		439759A219CB06D100740098 /* binding_proxy.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = binding_proxy.cc; path = ../../binding_proxy.cc; sourceTree = "<group>"; };
+		439759A319CB06D100740098 /* bindings.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bindings.cc; path = ../../bindings.cc; sourceTree = "<group>"; };
+		439759A419CB06D100740098 /* cairo_packer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cairo_packer.cc; path = ../../cairo_packer.cc; sourceTree = "<group>"; };
+		439759A519CB06D100740098 /* cairo_widget.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cairo_widget.cc; path = ../../cairo_widget.cc; sourceTree = "<group>"; };
+		439759A619CB06D100740098 /* cairocell.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cairocell.cc; path = ../../cairocell.cc; sourceTree = "<group>"; };
+		439759A719CB06D100740098 /* cell_renderer_color_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cell_renderer_color_selector.cc; path = ../../cell_renderer_color_selector.cc; sourceTree = "<group>"; };
+		439759A819CB06D100740098 /* cell_renderer_pixbuf_multi.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cell_renderer_pixbuf_multi.cc; path = ../../cell_renderer_pixbuf_multi.cc; sourceTree = "<group>"; };
+		439759A919CB06D100740098 /* cell_renderer_pixbuf_toggle.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cell_renderer_pixbuf_toggle.cc; path = ../../cell_renderer_pixbuf_toggle.cc; sourceTree = "<group>"; };
+		439759AA19CB06D100740098 /* choice.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = choice.cc; path = ../../choice.cc; sourceTree = "<group>"; };
+		439759AB19CB06D100740098 /* click_box.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = click_box.cc; path = ../../click_box.cc; sourceTree = "<group>"; };
+		439759AC19CB06D100740098 /* cursors.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cursors.cc; path = ../../cursors.cc; sourceTree = "<group>"; };
+		439759AD19CB06D100740098 /* debug.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = debug.cc; path = ../../debug.cc; sourceTree = "<group>"; };
+		439759AE19CB06D100740098 /* dndtreeview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dndtreeview.cc; path = ../../dndtreeview.cc; sourceTree = "<group>"; };
+		439759AF19CB06D100740098 /* fader.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fader.cc; path = ../../fader.cc; sourceTree = "<group>"; };
+		439759B019CB06D100740098 /* fastmeter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fastmeter.cc; path = ../../fastmeter.cc; sourceTree = "<group>"; };
+		439759B119CB06D100740098 /* focus_entry.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = focus_entry.cc; path = ../../focus_entry.cc; sourceTree = "<group>"; };
+		439759B219CB06D100740098 /* grouped_buttons.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = grouped_buttons.cc; path = ../../grouped_buttons.cc; sourceTree = "<group>"; };
+		439759B319CB06D100740098 /* gtk_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = gtk_ui.cc; path = ../../gtk_ui.cc; sourceTree = "<group>"; };
+		439759B419CB06D100740098 /* gtkapplication_quartz.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = gtkapplication_quartz.mm; path = ../../gtkapplication_quartz.mm; sourceTree = "<group>"; };
+		439759B519CB06D100740098 /* gtkapplication_win32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gtkapplication_win32.c; path = ../../gtkapplication_win32.c; sourceTree = "<group>"; };
+		439759B619CB06D100740098 /* gtkapplication_x11.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gtkapplication_x11.c; path = ../../gtkapplication_x11.c; sourceTree = "<group>"; };
+		439759B719CB06D100740098 /* gtkapplication.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gtkapplication.c; path = ../../gtkapplication.c; sourceTree = "<group>"; };
+		439759B819CB06D100740098 /* idle_adjustment.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = idle_adjustment.cc; path = ../../idle_adjustment.cc; sourceTree = "<group>"; };
+		439759B919CB06D100740098 /* keyboard.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = keyboard.cc; path = ../../keyboard.cc; sourceTree = "<group>"; };
+		439759BB19CB070500740098 /* actions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = actions.h; path = ../../gtkmm2ext/actions.h; sourceTree = "<group>"; };
+		439759BC19CB070500740098 /* activatable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = activatable.h; path = ../../gtkmm2ext/activatable.h; sourceTree = "<group>"; };
+		439759BD19CB070500740098 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = ../../gtkmm2ext/application.h; sourceTree = "<group>"; };
+		439759BE19CB070500740098 /* auto_spin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = auto_spin.h; path = ../../gtkmm2ext/auto_spin.h; sourceTree = "<group>"; };
+		439759BF19CB070500740098 /* barcontroller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = barcontroller.h; path = ../../gtkmm2ext/barcontroller.h; sourceTree = "<group>"; };
+		439759C019CB070500740098 /* bindable_button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bindable_button.h; path = ../../gtkmm2ext/bindable_button.h; sourceTree = "<group>"; };
+		439759C119CB070500740098 /* binding_proxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = binding_proxy.h; path = ../../gtkmm2ext/binding_proxy.h; sourceTree = "<group>"; };
+		439759C219CB070500740098 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bindings.h; path = ../../gtkmm2ext/bindings.h; sourceTree = "<group>"; };
+		439759C319CB070500740098 /* cairo_packer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cairo_packer.h; path = ../../gtkmm2ext/cairo_packer.h; sourceTree = "<group>"; };
+		439759C419CB070500740098 /* cairo_widget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cairo_widget.h; path = ../../gtkmm2ext/cairo_widget.h; sourceTree = "<group>"; };
+		439759C519CB070500740098 /* cairocell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cairocell.h; path = ../../gtkmm2ext/cairocell.h; sourceTree = "<group>"; };
+		439759C619CB070500740098 /* cell_renderer_color_selector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cell_renderer_color_selector.h; path = ../../gtkmm2ext/cell_renderer_color_selector.h; sourceTree = "<group>"; };
+		439759C719CB070500740098 /* cell_renderer_pixbuf_multi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cell_renderer_pixbuf_multi.h; path = ../../gtkmm2ext/cell_renderer_pixbuf_multi.h; sourceTree = "<group>"; };
+		439759C819CB070500740098 /* cell_renderer_pixbuf_toggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cell_renderer_pixbuf_toggle.h; path = ../../gtkmm2ext/cell_renderer_pixbuf_toggle.h; sourceTree = "<group>"; };
+		439759C919CB070500740098 /* choice.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = choice.h; path = ../../gtkmm2ext/choice.h; sourceTree = "<group>"; };
+		439759CA19CB070500740098 /* click_box.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = click_box.h; path = ../../gtkmm2ext/click_box.h; sourceTree = "<group>"; };
+		439759CB19CB070500740098 /* cursors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cursors.h; path = ../../gtkmm2ext/cursors.h; sourceTree = "<group>"; };
+		439759CC19CB070500740098 /* debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../../gtkmm2ext/debug.h; sourceTree = "<group>"; };
+		439759CD19CB070500740098 /* dndtreeview.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dndtreeview.h; path = ../../gtkmm2ext/dndtreeview.h; sourceTree = "<group>"; };
+		439759CE19CB070500740098 /* dndvbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dndvbox.h; path = ../../gtkmm2ext/dndvbox.h; sourceTree = "<group>"; };
+		439759CF19CB070500740098 /* doi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = doi.h; path = ../../gtkmm2ext/doi.h; sourceTree = "<group>"; };
+		439759D019CB070500740098 /* fader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fader.h; path = ../../gtkmm2ext/fader.h; sourceTree = "<group>"; };
+		439759D119CB070500740098 /* fastmeter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fastmeter.h; path = ../../gtkmm2ext/fastmeter.h; sourceTree = "<group>"; };
+		439759D219CB070500740098 /* focus_entry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = focus_entry.h; path = ../../gtkmm2ext/focus_entry.h; sourceTree = "<group>"; };
+		439759D319CB070500740098 /* grouped_buttons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = grouped_buttons.h; path = ../../gtkmm2ext/grouped_buttons.h; sourceTree = "<group>"; };
+		439759D419CB070500740098 /* gtk_ui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gtk_ui.h; path = ../../gtkmm2ext/gtk_ui.h; sourceTree = "<group>"; };
+		439759D519CB070500740098 /* gtkapplication-private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "gtkapplication-private.h"; path = "../../gtkmm2ext/gtkapplication-private.h"; sourceTree = "<group>"; };
+		439759D619CB070500740098 /* gtkapplication.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gtkapplication.h; path = ../../gtkmm2ext/gtkapplication.h; sourceTree = "<group>"; };
+		439759D719CB070500740098 /* gtkutils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gtkutils.h; path = ../../gtkmm2ext/gtkutils.h; sourceTree = "<group>"; };
+		439759D819CB070500740098 /* gui_thread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gui_thread.h; path = ../../gtkmm2ext/gui_thread.h; sourceTree = "<group>"; };
+		439759D919CB070500740098 /* idle_adjustment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = idle_adjustment.h; path = ../../gtkmm2ext/idle_adjustment.h; sourceTree = "<group>"; };
+		439759DA19CB070500740098 /* keyboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = keyboard.h; path = ../../gtkmm2ext/keyboard.h; sourceTree = "<group>"; };
+		439759DB19CB070500740098 /* motionfeedback.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = motionfeedback.h; path = ../../gtkmm2ext/motionfeedback.h; sourceTree = "<group>"; };
+		439759DC19CB070500740098 /* paths_dialog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = paths_dialog.h; path = ../../gtkmm2ext/paths_dialog.h; sourceTree = "<group>"; };
+		439759DD19CB070500740098 /* persistent_tooltip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = persistent_tooltip.h; path = ../../gtkmm2ext/persistent_tooltip.h; sourceTree = "<group>"; };
+		439759DE19CB070500740098 /* pixfader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pixfader.h; path = ../../gtkmm2ext/pixfader.h; sourceTree = "<group>"; };
+		439759DF19CB070500740098 /* pixscroller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pixscroller.h; path = ../../gtkmm2ext/pixscroller.h; sourceTree = "<group>"; };
+		439759E019CB070500740098 /* popup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = popup.h; path = ../../gtkmm2ext/popup.h; sourceTree = "<group>"; };
+		439759E119CB070500740098 /* prolooks-helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "prolooks-helpers.h"; path = "../../gtkmm2ext/prolooks-helpers.h"; sourceTree = "<group>"; };
+		439759E219CB070500740098 /* prompter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = prompter.h; path = ../../gtkmm2ext/prompter.h; sourceTree = "<group>"; };
+		439759E319CB070500740098 /* rgb_macros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rgb_macros.h; path = ../../gtkmm2ext/rgb_macros.h; sourceTree = "<group>"; };
+		439759E419CB070500740098 /* scroomer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scroomer.h; path = ../../gtkmm2ext/scroomer.h; sourceTree = "<group>"; };
+		439759E519CB070500740098 /* selector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = selector.h; path = ../../gtkmm2ext/selector.h; sourceTree = "<group>"; };
+		439759E619CB070500740098 /* slider_controller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = slider_controller.h; path = ../../gtkmm2ext/slider_controller.h; sourceTree = "<group>"; };
+		439759E719CB070500740098 /* stateful_button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stateful_button.h; path = ../../gtkmm2ext/stateful_button.h; sourceTree = "<group>"; };
+		439759E819CB070500740098 /* sync-menu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "sync-menu.h"; path = "../../gtkmm2ext/sync-menu.h"; sourceTree = "<group>"; };
+		439759E919CB070500740098 /* tearoff.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tearoff.h; path = ../../gtkmm2ext/tearoff.h; sourceTree = "<group>"; };
+		439759EA19CB070500740098 /* textviewer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = textviewer.h; path = ../../gtkmm2ext/textviewer.h; sourceTree = "<group>"; };
+		439759EB19CB070500740098 /* treeutils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = treeutils.h; path = ../../gtkmm2ext/treeutils.h; sourceTree = "<group>"; };
+		439759EC19CB070500740098 /* utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../gtkmm2ext/utils.h; sourceTree = "<group>"; };
+		439759ED19CB070500740098 /* version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../../gtkmm2ext/version.h; sourceTree = "<group>"; };
+		439759EE19CB070500740098 /* visibility_tracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = visibility_tracker.h; path = ../../gtkmm2ext/visibility_tracker.h; sourceTree = "<group>"; };
+		439759EF19CB070500740098 /* visibility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../gtkmm2ext/visibility.h; sourceTree = "<group>"; };
+		439759F019CB070500740098 /* widget_state.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = widget_state.h; path = ../../gtkmm2ext/widget_state.h; sourceTree = "<group>"; };
+		439759F119CB070500740098 /* window_title.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window_title.h; path = ../../gtkmm2ext/window_title.h; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+		4397598F19CB06AC00740098 = {
+			isa = PBXGroup;
+			children = (
+				439759BA19CB06F000740098 /* headers */,
+				4397599C19CB06B200740098 /* source */,
+			);
+			sourceTree = "<group>";
+		};
+		4397599C19CB06B200740098 /* source */ = {
+			isa = PBXGroup;
+			children = (
+				4397599D19CB06D100740098 /* actions.cc */,
+				4397599E19CB06D100740098 /* application.cc */,
+				4397599F19CB06D100740098 /* auto_spin.cc */,
+				439759A019CB06D100740098 /* barcontroller.cc */,
+				439759A119CB06D100740098 /* bindable_button.cc */,
+				439759A219CB06D100740098 /* binding_proxy.cc */,
+				439759A319CB06D100740098 /* bindings.cc */,
+				439759A419CB06D100740098 /* cairo_packer.cc */,
+				439759A519CB06D100740098 /* cairo_widget.cc */,
+				439759A619CB06D100740098 /* cairocell.cc */,
+				439759A719CB06D100740098 /* cell_renderer_color_selector.cc */,
+				439759A819CB06D100740098 /* cell_renderer_pixbuf_multi.cc */,
+				439759A919CB06D100740098 /* cell_renderer_pixbuf_toggle.cc */,
+				439759AA19CB06D100740098 /* choice.cc */,
+				439759AB19CB06D100740098 /* click_box.cc */,
+				439759AC19CB06D100740098 /* cursors.cc */,
+				439759AD19CB06D100740098 /* debug.cc */,
+				439759AE19CB06D100740098 /* dndtreeview.cc */,
+				439759AF19CB06D100740098 /* fader.cc */,
+				439759B019CB06D100740098 /* fastmeter.cc */,
+				439759B119CB06D100740098 /* focus_entry.cc */,
+				439759B219CB06D100740098 /* grouped_buttons.cc */,
+				439759B319CB06D100740098 /* gtk_ui.cc */,
+				439759B419CB06D100740098 /* gtkapplication_quartz.mm */,
+				439759B519CB06D100740098 /* gtkapplication_win32.c */,
+				439759B619CB06D100740098 /* gtkapplication_x11.c */,
+				439759B719CB06D100740098 /* gtkapplication.c */,
+				439759B819CB06D100740098 /* idle_adjustment.cc */,
+				439759B919CB06D100740098 /* keyboard.cc */,
+			);
+			name = source;
+			sourceTree = "<group>";
+		};
+		439759BA19CB06F000740098 /* headers */ = {
+			isa = PBXGroup;
+			children = (
+				439759BB19CB070500740098 /* actions.h */,
+				439759BC19CB070500740098 /* activatable.h */,
+				439759BD19CB070500740098 /* application.h */,
+				439759BE19CB070500740098 /* auto_spin.h */,
+				439759BF19CB070500740098 /* barcontroller.h */,
+				439759C019CB070500740098 /* bindable_button.h */,
+				439759C119CB070500740098 /* binding_proxy.h */,
+				439759C219CB070500740098 /* bindings.h */,
+				439759C319CB070500740098 /* cairo_packer.h */,
+				439759C419CB070500740098 /* cairo_widget.h */,
+				439759C519CB070500740098 /* cairocell.h */,
+				439759C619CB070500740098 /* cell_renderer_color_selector.h */,
+				439759C719CB070500740098 /* cell_renderer_pixbuf_multi.h */,
+				439759C819CB070500740098 /* cell_renderer_pixbuf_toggle.h */,
+				439759C919CB070500740098 /* choice.h */,
+				439759CA19CB070500740098 /* click_box.h */,
+				439759CB19CB070500740098 /* cursors.h */,
+				439759CC19CB070500740098 /* debug.h */,
+				439759CD19CB070500740098 /* dndtreeview.h */,
+				439759CE19CB070500740098 /* dndvbox.h */,
+				439759CF19CB070500740098 /* doi.h */,
+				439759D019CB070500740098 /* fader.h */,
+				439759D119CB070500740098 /* fastmeter.h */,
+				439759D219CB070500740098 /* focus_entry.h */,
+				439759D319CB070500740098 /* grouped_buttons.h */,
+				439759D419CB070500740098 /* gtk_ui.h */,
+				439759D519CB070500740098 /* gtkapplication-private.h */,
+				439759D619CB070500740098 /* gtkapplication.h */,
+				439759D719CB070500740098 /* gtkutils.h */,
+				439759D819CB070500740098 /* gui_thread.h */,
+				439759D919CB070500740098 /* idle_adjustment.h */,
+				439759DA19CB070500740098 /* keyboard.h */,
+				439759DB19CB070500740098 /* motionfeedback.h */,
+				439759DC19CB070500740098 /* paths_dialog.h */,
+				439759DD19CB070500740098 /* persistent_tooltip.h */,
+				439759DE19CB070500740098 /* pixfader.h */,
+				439759DF19CB070500740098 /* pixscroller.h */,
+				439759E019CB070500740098 /* popup.h */,
+				439759E119CB070500740098 /* prolooks-helpers.h */,
+				439759E219CB070500740098 /* prompter.h */,
+				439759E319CB070500740098 /* rgb_macros.h */,
+				439759E419CB070500740098 /* scroomer.h */,
+				439759E519CB070500740098 /* selector.h */,
+				439759E619CB070500740098 /* slider_controller.h */,
+				439759E719CB070500740098 /* stateful_button.h */,
+				439759E819CB070500740098 /* sync-menu.h */,
+				439759E919CB070500740098 /* tearoff.h */,
+				439759EA19CB070500740098 /* textviewer.h */,
+				439759EB19CB070500740098 /* treeutils.h */,
+				439759EC19CB070500740098 /* utils.h */,
+				439759ED19CB070500740098 /* version.h */,
+				439759EE19CB070500740098 /* visibility_tracker.h */,
+				439759EF19CB070500740098 /* visibility.h */,
+				439759F019CB070500740098 /* widget_state.h */,
+				439759F119CB070500740098 /* window_title.h */,
+			);
+			name = headers;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+		4397599019CB06AC00740098 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0510;
+			};
+			buildConfigurationList = 4397599319CB06AC00740098 /* Build configuration list for PBXProject "gtkmm2ext" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 4397598F19CB06AC00740098;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+			);
+		};
+/* End PBXProject section */
+
+/* Begin XCBuildConfiguration section */
+		4397599419CB06AC00740098 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Debug;
+		};
+		4397599519CB06AC00740098 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		4397599319CB06AC00740098 /* Build configuration list for PBXProject "gtkmm2ext" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				4397599419CB06AC00740098 /* Debug */,
+				4397599519CB06AC00740098 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 4397599019CB06AC00740098 /* Project object */;
+}
diff --git a/libs/gtkmm2ext/persistent_tooltip.cc b/libs/gtkmm2ext/persistent_tooltip.cc
index d9ccfa1..88be6ef 100644
--- a/libs/gtkmm2ext/persistent_tooltip.cc
+++ b/libs/gtkmm2ext/persistent_tooltip.cc
@@ -21,6 +21,8 @@
 #include <gtkmm/label.h>
 #include "gtkmm2ext/persistent_tooltip.h"
 
+#include "pbd/stacktrace.h"
+
 #include "i18n.h"
 
 using namespace std;
@@ -28,11 +30,13 @@ using namespace Gtk;
 using namespace Gtkmm2ext;
 
 /** @param target The widget to provide the tooltip for */
-PersistentTooltip::PersistentTooltip (Gtk::Widget* target, int margin_y)
+PersistentTooltip::PersistentTooltip (Gtk::Widget* target, bool  draggable, int margin_y)
 	: _target (target)
 	, _window (0)
 	, _label (0)
+	, _draggable (draggable)
 	, _maybe_dragging (false)
+	, _align_to_center (true)
 	, _margin_y (margin_y)
 {
 	target->signal_enter_notify_event().connect (sigc::mem_fun (*this, &PersistentTooltip::enter), false);
@@ -97,7 +101,7 @@ PersistentTooltip::release (GdkEventButton* ev)
 bool
 PersistentTooltip::dragging () const
 {
-	return _maybe_dragging;
+	return _maybe_dragging && _draggable;
 }
 
 void
@@ -114,6 +118,7 @@ PersistentTooltip::show ()
 	if (_tip.empty()) {
 		return;
 	}
+
 	if (!_window) {
 		_window = new Window (WINDOW_POPUP);
 		_window->set_name (X_("ContrastingPopup"));
@@ -121,6 +126,7 @@ PersistentTooltip::show ()
 		_window->set_decorated (false);
 
 		_label = manage (new Label);
+		_label->modify_font (_font);
 		_label->set_use_markup (true);
 
 		_window->set_border_width (6);
@@ -136,19 +142,32 @@ PersistentTooltip::show ()
 	set_tip (_tip);
 
 	if (!_window->is_visible ()) {
-		int rx, ry, sw;
-		sw= gdk_screen_width();
-		_target->get_window()->get_origin (rx, ry);
-		_window->move (rx, ry + _target->get_height() + _margin_y);
-		_window->present ();
+		int rx, ry;
+		int sw = gdk_screen_width ();
 
+		_target->get_window()->get_origin (rx, ry);
+		
 		/* the window needs to be realized first
 		 * for _window->get_width() to be correct.
 		 */
+
+
 		if (sw < rx + _window->get_width()) {
+			/* right edge of window would be off the right edge of
+			   the screen, so don't show it in the usual place.
+			*/
 			rx = sw - _window->get_width();
-			_window->move (rx, ry + _target->get_height());
+			_window->move (rx, ry + _target->get_height() + _margin_y);
+		} else {
+			if (_align_to_center) {
+				_window->move (rx + (_target->get_width () - _window->get_width ()) / 2, ry + _target->get_height());
+			} else {
+				_window->move (rx, ry + _target->get_height());
+			}
 		}
+
+		_window->present ();
+
 	}
 }
 
@@ -161,3 +180,19 @@ PersistentTooltip::set_tip (string t)
 		_label->set_markup (t);
 	}
 }
+
+void
+PersistentTooltip::set_font (Pango::FontDescription font)
+{
+	_font = font;
+
+	if (_label) {
+		_label->modify_font (_font);
+	}
+}
+
+void
+PersistentTooltip::set_center_alignment (bool align_to_center)
+{
+	_align_to_center = align_to_center;
+}
diff --git a/libs/gtkmm2ext/pixfader.cc b/libs/gtkmm2ext/pixfader.cc
index b140d7b..1e814fd 100644
--- a/libs/gtkmm2ext/pixfader.cc
+++ b/libs/gtkmm2ext/pixfader.cc
@@ -71,7 +71,7 @@ PixFader::PixFader (Gtk::Adjustment& adj, int orientation, int fader_length, int
 
 	_adjustment.signal_value_changed().connect (mem_fun (*this, &PixFader::adjustment_changed));
 	_adjustment.signal_changed().connect (mem_fun (*this, &PixFader::adjustment_changed));
-
+	signal_grab_broken_event ().connect (mem_fun (*this, &PixFader::on_grab_broken_event));
 	if (_orien == VERT) {
 		CairoWidget::set_size_request(_girth, _span);
 	} else {
@@ -366,6 +366,18 @@ PixFader::on_size_allocate (Gtk::Allocation& alloc)
 }
 
 bool
+PixFader::on_grab_broken_event (GdkEventGrabBroken* ev)
+{
+	if (_dragging) {
+		remove_modal_grab();
+		_dragging = false;
+		gdk_pointer_ungrab (GDK_CURRENT_TIME);
+		StopGesture ();
+	}
+	return (_tweaks & NoButtonForward) ? true : false;
+}
+
+bool
 PixFader::on_button_press_event (GdkEventButton* ev)
 {
 	if (ev->type != GDK_BUTTON_PRESS) {
diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc
index 03396a4..f1616f1 100644
--- a/libs/gtkmm2ext/utils.cc
+++ b/libs/gtkmm2ext/utils.cc
@@ -322,6 +322,16 @@ Gtkmm2ext::get_popdown_strings (Gtk::ComboBoxText& cr, std::vector<std::string>&
 	}
 }
 
+size_t
+Gtkmm2ext::get_popdown_string_count (Gtk::ComboBoxText& cr)
+{
+	Glib::RefPtr<const Gtk::TreeModel> m = cr.get_model();
+	if (!m) {
+		return 0;
+	}
+	return m->children().size();
+}
+
 bool
 Gtkmm2ext::contains_value (Gtk::ComboBoxText& cr, const std::string text)
 {
@@ -705,6 +715,18 @@ Gtkmm2ext::pixel_width (const string& str, Pango::FontDescription& font)
 	return width;
 }
 
+void
+Gtkmm2ext::pixel_size (const string& str, Pango::FontDescription& font, int& width, int& height)
+{
+	Gtk::Label foo;
+	Glib::RefPtr<Pango::Layout> layout = foo.create_pango_layout ("");
+
+	layout->set_font_description (font);
+	layout->set_text (str);
+
+	Gtkmm2ext::get_ink_pixel_size (layout, width, height);
+}
+
 #if 0
 string
 Gtkmm2ext::fit_to_pixels (const string& str, int pixel_width, Pango::FontDescription& font, int& actual_width, bool with_ellipses)
diff --git a/libs/gtkmm2ext/fastmeter.cc b/libs/gtkmm2ext/waves_fastmeter.cc
similarity index 85%
copy from libs/gtkmm2ext/fastmeter.cc
copy to libs/gtkmm2ext/waves_fastmeter.cc
index 3d28253..d97a92a 100644
--- a/libs/gtkmm2ext/fastmeter.cc
+++ b/libs/gtkmm2ext/waves_fastmeter.cc
@@ -61,7 +61,7 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len,
 		)
 	: pixheight(0)
 	, pixwidth(0)
-	, _styleflags(styleflags)
+	, _styleflags(1)
 	, orientation(o)
 	, hold_cnt(hold)
 	, hold_state(0)
@@ -101,8 +101,8 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len,
 
 	set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
 
-	pixrect.x = 1;
-	pixrect.y = 1;
+	pixrect.x = 0;
+	pixrect.y = 0;
 
 	if (!len) {
 		len = 250;
@@ -110,21 +110,21 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len,
 	if (orientation == Vertical) {
 		pixheight = len;
 		pixwidth = dimen;
-		fgpattern = request_vertical_meter(pixwidth + 2, pixheight + 2, _clr, _stp, _styleflags);
-		bgpattern = request_vertical_background (pixwidth + 2, pixheight + 2, _bgc, false);
+		fgpattern = request_vertical_meter(pixwidth, pixheight, _clr, _stp, _styleflags);
+		bgpattern = request_vertical_background (pixwidth, pixheight, _bgc, false);
 
 	} else {
 		pixheight = dimen;
 		pixwidth = len;
-		fgpattern = request_horizontal_meter(pixwidth + 2, pixheight + 2, _clr, _stp, _styleflags);
-		bgpattern = request_horizontal_background (pixwidth + 2, pixheight + 2, _bgc, false);
+		fgpattern = request_horizontal_meter(pixwidth, pixheight, _clr, _stp, _styleflags);
+		bgpattern = request_horizontal_background (pixwidth, pixheight, _bgc, false);
 	}
 
 	pixrect.width = pixwidth;
 	pixrect.height = pixheight;
 
-	request_width = pixrect.width + 2;
-	request_height= pixrect.height + 2;
+	request_width = pixrect.width;
+	request_height= pixrect.height;
 
 	clear ();
 }
@@ -134,18 +134,23 @@ FastMeter::~FastMeter ()
 }
 
 void
-FastMeter::flush_pattern_cache () {
+FastMeter::flush_pattern_cache ()
+{
 	Pattern10Map::iterator i1;
 	PatternBgMap::iterator ib;
+
 	for (ib = hb_pattern_cache.begin(); ib !=  hb_pattern_cache.end(); ++ib) {
 		hb_pattern_cache.erase(ib);
 	}
+
 	for (i1 = hm_pattern_cache.begin(); i1 !=  hm_pattern_cache.end(); ++i1) {
 		hm_pattern_cache.erase(i1);
 	}
+
 	for (ib = vb_pattern_cache.begin(); ib !=  vb_pattern_cache.end(); ++ib) {
 		vb_pattern_cache.erase(ib);
 	}
+
 	for (i1 = vm_pattern_cache.begin(); i1 !=  vm_pattern_cache.end(); ++i1) {
 		vm_pattern_cache.erase(i1);
 	}
@@ -372,13 +377,13 @@ FastMeter::request_vertical_meter(
 
 Cairo::RefPtr<Cairo::Pattern>
 FastMeter::request_vertical_background(
-		int width, int height, int *bgc, bool shade)
+	int width, int height, int *bgc, bool /*shade */)
 {
 	height = max(height, min_pattern_metric_size);
 	height = min(height, max_pattern_metric_size);
 	height += 2;
 
-	const PatternBgMapKey key (width, height, bgc[0], bgc[1], shade);
+	const PatternBgMapKey key (width, height, bgc[0], bgc[1], false);
 	PatternBgMap::iterator i;
 	if ((i = vb_pattern_cache.find (key)) != vb_pattern_cache.end()) {
 		return i->second;
@@ -386,7 +391,7 @@ FastMeter::request_vertical_background(
 	// TODO flush pattern cache if it gets too large
 
 	Cairo::RefPtr<Cairo::Pattern> p = generate_meter_background (
-		width, height, bgc, shade, false);
+		width, height, bgc, false, false);
 	vb_pattern_cache[key] = p;
 
 	return p;
@@ -420,13 +425,13 @@ FastMeter::request_horizontal_meter(
 
 Cairo::RefPtr<Cairo::Pattern>
 FastMeter::request_horizontal_background(
-		int width, int height, int *bgc, bool shade)
+	int width, int height, int *bgc, bool /* shade */)
 {
 	width = max(width, min_pattern_metric_size);
 	width = min(width, max_pattern_metric_size);
 	width += 2;
 
-	const PatternBgMapKey key (width, height, bgc[0], bgc[1], shade);
+	const PatternBgMapKey key (width, height, bgc[0], bgc[1], false);
 	PatternBgMap::iterator i;
 	if ((i = hb_pattern_cache.find (key)) != hb_pattern_cache.end()) {
 		return i->second;
@@ -434,7 +439,7 @@ FastMeter::request_horizontal_background(
 	// TODO flush pattern cache if it gets too large
 
 	Cairo::RefPtr<Cairo::Pattern> p = generate_meter_background (
-		height, width, bgc, shade, true);
+		height, width, bgc, false, true);
 
 	hb_pattern_cache[key] = p;
 
@@ -517,9 +522,9 @@ FastMeter::vertical_size_allocate (Gtk::Allocation &alloc)
 
 	if (pixheight != h) {
 		fgpattern = request_vertical_meter (request_width, h, _clr, _stp, _styleflags);
-		bgpattern = request_vertical_background (request_width, h, highlight ? _bgh : _bgc, highlight);
-		pixheight = h - 2;
-		pixwidth  = request_width - 2;
+		bgpattern = request_vertical_background (request_width, h, highlight ? _bgh : _bgc, false);
+		pixheight = h;
+		pixwidth  = request_width;
 	}
 
 	CairoWidget::on_size_allocate (alloc);
@@ -542,9 +547,9 @@ FastMeter::horizontal_size_allocate (Gtk::Allocation &alloc)
 
 	if (pixwidth != w) {
 		fgpattern = request_horizontal_meter (w, request_height, _clr, _stp, _styleflags);
-		bgpattern = request_horizontal_background (w, request_height, highlight ? _bgh : _bgc, highlight);
-		pixwidth = w - 2;
-		pixheight  = request_height - 2;
+		bgpattern = request_horizontal_background (w, request_height, highlight ? _bgh : _bgc, false);
+		pixwidth = w;
+		pixheight  = request_height;
 	}
 
 	CairoWidget::on_size_allocate (alloc);
@@ -564,13 +569,12 @@ void
 FastMeter::vertical_expose (cairo_t* cr, cairo_rectangle_t* area)
 {
 	gint top_of_meter;
-	GdkRectangle intersection;
-	GdkRectangle background;
-	GdkRectangle eventarea;
+	// GdkRectangle background;
+	// GdkRectangle eventarea;
 
-	cairo_set_source_rgb (cr, 0, 0, 0); // black
-	rounded_rectangle (cr, 0, 0, pixwidth + 2, pixheight + 2, 2);
-	cairo_stroke (cr);
+	//cairo_set_source_rgb (cr, 0, 0, 0); // black
+	//rounded_rectangle (cr, 0, 0, pixwidth + 2, pixheight + 2, 2);
+	//cairo_stroke (cr);
 
 	top_of_meter = (gint) floor (pixheight * current_level);
 
@@ -578,44 +582,52 @@ FastMeter::vertical_expose (cairo_t* cr, cairo_rectangle_t* area)
 	 */
 
 	pixrect.height = top_of_meter;
-	pixrect.y = 1 + pixheight - top_of_meter;
-
-	background.x = 1;
-	background.y = 1;
-	background.width = pixrect.width;
-	background.height = pixheight - top_of_meter;
-
-	eventarea.x = area->x;
-	eventarea.y = area->y;
-	eventarea.width = area->width;
-	eventarea.height = area->height;
-
-	if (gdk_rectangle_intersect (&background, &eventarea, &intersection)) {
-		cairo_set_source (cr, bgpattern->cobj());
-		cairo_rectangle (cr, intersection.x, intersection.y, intersection.width, intersection.height);
-		cairo_fill (cr);
-	}
-
-	if (gdk_rectangle_intersect (&pixrect, &eventarea, &intersection)) {
+	pixrect.y = pixheight - top_of_meter;
+
+	// background.x = 0;
+	// background.y = 0;
+	// background.width = pixrect.width;
+	// background.height = pixheight - top_of_meter;
+
+	// eventarea.x = area->x;
+	// eventarea.y = area->y;
+	// eventarea.width = area->width;
+	// eventarea.height = area->height;
+
+	// Switching to CAIRO we would like to draw on the container's bkg.
+	// if (gdk_rectangle_intersect (&background, &eventarea, &intersection)) {
+        // cairo_set_source (cr, bgpattern->cobj());
+        // cairo_rectangle (cr, intersection.x, intersection.y, intersection.width, intersection.height);
+        // cairo_fill (cr);
+        // }
+
+	// MEMO: Normaly MATURE OS clips so called invalidated rects itself making APP free of
+	//       heavy operations which OS does with graphic HW
+
+        // NOTE FROM PAUL: GTK does clip already. The invalidated rect isn't the only area 
+        // we want to clip to however, which is why this object/class is called FastMeter.
+        // I have left stuff commented out as I found it when I merged from Ardour in August 2014,
+        // but this commenting and the previous MEMO comment represent a misunderstanding
+        // of what this code is doing.
+
+	// if (gdk_rectangle_intersect (&pixrect, &eventarea, &intersection)) {
 		// draw the part of the meter image that we need. the area we draw is bounded "in reverse" (top->bottom)
-		cairo_set_source (cr, fgpattern->cobj());
-		cairo_rectangle (cr, intersection.x, intersection.y, intersection.width, intersection.height);
+		//cairo_set_source (cr, fgpattern->cobj());
+		cairo_set_source_rgba (cr, 0.69, 0.69, 0.69, 1);
+		cairo_rectangle (cr, pixrect.x, pixrect.y, pixrect.width, pixrect.height);
 		cairo_fill (cr);
-	}
+	//}
 
 	// draw peak bar
 
 	if (hold_state) {
-		last_peak_rect.x = 1;
+		last_peak_rect.x = 0;
 		last_peak_rect.width = pixwidth;
-		last_peak_rect.y = max(1, 1 + pixheight - (int) floor (pixheight * current_peak));
-		if (_styleflags & 2) { // LED stripes
-			last_peak_rect.y = max(0, (last_peak_rect.y & (~1)));
-		}
+		last_peak_rect.y = max(0, pixheight - (gint) floor (pixheight * current_peak));
 		if (bright_hold || (_styleflags & 2)) {
-			last_peak_rect.height = max(0, min(3, pixheight - last_peak_rect.y - 1 ));
+			last_peak_rect.height = max(0, min(3, pixheight - last_peak_rect.y ));
 		} else {
-			last_peak_rect.height = max(0, min(2, pixheight - last_peak_rect.y - 1 ));
+			last_peak_rect.height = max(0, min(2, pixheight - last_peak_rect.y ));
 		}
 
 		cairo_set_source (cr, fgpattern->cobj());
@@ -637,13 +649,10 @@ void
 FastMeter::horizontal_expose (cairo_t* cr, cairo_rectangle_t* area)
 {
 	gint right_of_meter;
-	GdkRectangle intersection;
-	GdkRectangle background;
-	GdkRectangle eventarea;
 
-	cairo_set_source_rgb (cr, 0, 0, 0); // black
-	rounded_rectangle (cr, 0, 0, pixwidth + 2, pixheight + 2, 2);
-	cairo_stroke (cr);
+	//cairo_set_source_rgb (cr, 0, 0, 0); // black
+	//rounded_rectangle (cr, 0, 0, pixwidth + 2, pixheight + 2, 2);
+	//cairo_stroke (cr);
 
 	right_of_meter = (gint) floor (pixwidth * current_level);
 
@@ -652,28 +661,6 @@ FastMeter::horizontal_expose (cairo_t* cr, cairo_rectangle_t* area)
 
 	pixrect.width = right_of_meter;
 
-	background.x = 1 + right_of_meter;
-	background.y = 1;
-	background.width = pixwidth - right_of_meter;
-	background.height = pixheight;
-
-	eventarea.x = area->x;
-	eventarea.y = area->y;
-	eventarea.width = area->width;
-	eventarea.height = area->height;
-
-	if (gdk_rectangle_intersect (&background, &eventarea, &intersection)) {
-		cairo_set_source (cr, bgpattern->cobj());
-		cairo_rectangle (cr, intersection.x, intersection.y, intersection.width, intersection.height);
-		cairo_fill (cr);
-	}
-
-	if (gdk_rectangle_intersect (&pixrect, &eventarea, &intersection)) {
-		cairo_set_source (cr, fgpattern->cobj());
-		cairo_rectangle (cr, intersection.x, intersection.y, intersection.width, intersection.height);
-		cairo_fill (cr);
-	}
-
 	// draw peak bar
 
 	if (hold_state) {
@@ -730,9 +717,7 @@ FastMeter::set (float lvl, float peak)
 
 	current_level = lvl;
 
-	const float pixscale = (orientation == Vertical) ? pixheight : pixwidth;
-#define PIX(X) floor(pixscale * (X))
-	if (PIX(current_level) == PIX(old_level) && PIX(current_peak) == PIX(old_peak) && (hold_state == 0 || peak != -1)) {
+	if (current_level == old_level && current_peak == old_peak && (hold_state == 0 || peak != -1)) {
 		return;
 	}
 
@@ -757,10 +742,10 @@ FastMeter::queue_vertical_redraw (const Glib::RefPtr<Gdk::Window>& win, float ol
 
 	gint new_top = (gint) floor (pixheight * current_level);
 
-	rect.x = 1;
+	rect.x = 0;
 	rect.width = pixwidth;
 	rect.height = new_top;
-	rect.y = 1 + pixheight - new_top;
+	rect.y = pixheight - new_top;
 
 	if (current_level > old_level) {
 		/* colored/pixbuf got larger, just draw the new section */
@@ -809,10 +794,7 @@ FastMeter::queue_vertical_redraw (const Glib::RefPtr<Gdk::Window>& win, float ol
 			queue = true;
 		}
 		rect.x = 1;
-		rect.y = max(1, 1 + pixheight - (int) floor (pixheight * current_peak));
-		if (_styleflags & 2) { // LED stripes
-			rect.y = max(0, (rect.y & (~1)));
-		}
+		rect.y = max(1, 1 + pixheight - (gint) floor (pixheight * current_peak));
 		if (bright_hold || (_styleflags & 2)) {
 			rect.height = max(0, min(3, pixheight - last_peak_rect.y -1 ));
 		} else {
@@ -910,9 +892,9 @@ FastMeter::set_highlight (bool onoff)
 	}
 	highlight = onoff;
 	if (orientation == Vertical) {
-		bgpattern = request_vertical_background (pixwidth + 2, pixheight + 2, highlight ? _bgh : _bgc, highlight);
+		bgpattern = request_vertical_background (pixwidth + 2, pixheight + 2, highlight ? _bgh : _bgc, false);
 	} else {
-		bgpattern = request_horizontal_background (pixwidth + 2, pixheight + 2, highlight ? _bgh : _bgc, highlight);
+		bgpattern = request_horizontal_background (pixwidth + 2, pixheight + 2, highlight ? _bgh : _bgc, false);
 	}
 	queue_draw ();
 }
diff --git a/libs/gtkmm2ext/wscript b/libs/gtkmm2ext/wscript
index bbe4ae5..b7545c3 100644
--- a/libs/gtkmm2ext/wscript
+++ b/libs/gtkmm2ext/wscript
@@ -41,7 +41,6 @@ gtkmm2ext_sources = [
         'debug.cc',
         'dndtreeview.cc',
         'emscale.cc',
-        'fastmeter.cc',
         'focus_entry.cc',
         'grouped_buttons.cc',
         'gtk_ui.cc',
@@ -85,12 +84,18 @@ def configure(conf):
 
 
 def build(bld):
+    sources = gtkmm2ext_sources
+    if bld.is_tracks_build():
+        sources += [ 'waves_fastmeter.cc', 'fader.cc' ]
+    else:
+        sources += [ 'fastmeter.cc' ]
+
     if bld.is_defined ('INTERNAL_SHARED_LIBS'):
-        obj              = bld.shlib(features = 'c cxx cshlib cxxshlib', source=gtkmm2ext_sources)
+        obj              = bld.shlib(features = 'c cxx cshlib cxxshlib', source=sources)
         # defines for this library
         obj.defines      = [ 'LIBGTKMM2EXT_DLL_EXPORTS', 'ABSTRACT_UI_EXPORTS' ]
     else:
-        obj              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=gtkmm2ext_sources)
+        obj              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=sources)
         obj.cxxflags     = [ '-fPIC' ]
         obj.defines      = [ ]
 
@@ -99,7 +104,7 @@ def build(bld):
     obj.name         = 'libgtkmm2ext'
     obj.target       = 'gtkmm2ext'
     obj.uselib       = 'GTKMM GTK GTKOSX OSX GDK'
-    obj.use          = [ 'libpbd' ]
+    obj.use          = [ 'libpbd', 'libardour' ]
     obj.vnum         = GTKMM2EXT_LIB_VERSION
     obj.install_path = bld.env['LIBDIR']
     obj.defines     += [
diff --git a/libs/midi++2/macosx/midi++.xcodeproj/project.pbxproj b/libs/midi++2/macosx/midi++.xcodeproj/midi++.xcodeproj/project.pbxproj
similarity index 100%
copy from libs/midi++2/macosx/midi++.xcodeproj/project.pbxproj
copy to libs/midi++2/macosx/midi++.xcodeproj/midi++.xcodeproj/project.pbxproj
diff --git a/libs/panners/1in2out/panner_1in2out.cc b/libs/panners/1in2out/panner_1in2out.cc
index 2d5489f..50c058b 100644
--- a/libs/panners/1in2out/panner_1in2out.cc
+++ b/libs/panners/1in2out/panner_1in2out.cc
@@ -51,6 +51,7 @@
 #include "ardour/buffer_set.h"
 #include "ardour/audio_buffer.h"
 #include "ardour/pannable.h"
+#include "ardour/profile.h"
 
 #include "i18n.h"
 #include "panner_1in2out.h"
@@ -75,8 +76,10 @@ extern "C" ARDOURPANNER_API PanPluginDescriptor*  panner_descriptor () { return
 Panner1in2out::Panner1in2out (boost::shared_ptr<Pannable> p)
 	: Panner (p)
 {
-        if (!_pannable->has_state()) {
+        if (!Profile->get_trx () ) {
+            if (!_pannable->has_state ()) {
                 _pannable->pan_azimuth_control->set_value (0.5);
+            }
         }
         
         update ();
diff --git a/libs/panners/wscript b/libs/panners/wscript
index f3ce6e6..feedfa3 100644
--- a/libs/panners/wscript
+++ b/libs/panners/wscript
@@ -1,14 +1,15 @@
 #!/usr/bin/env python
 from waflib.extras import autowaf as autowaf
+from waflib import Options
 import os
 
 # Mandatory variables
 top = '.'
 out = 'build'
 
-panners = [ '2in2out', '1in2out', 'vbap', 'stereobalance' ]
 
 def options(opt):
+    
     autowaf.set_options(opt)
 
 def sub_config_and_use(conf, name, has_objects = True):
@@ -19,9 +20,19 @@ def configure(conf):
     autowaf.set_recursive()
     autowaf.configure(conf)
 
+    if conf.is_tracks_build():
+        panners = [ '1in2out', 'vbap', 'stereobalance' ]
+    else:
+        panners = [ '2in2out', '1in2out', 'vbap', 'stereobalance' ]
+
     for i in panners:
         sub_config_and_use(conf, i)
 
 def build(bld):
+    if bld.is_tracks_build():
+        panners = [ '1in2out', 'vbap', 'stereobalance' ]
+    else:
+        panners = [ '2in2out', '1in2out', 'vbap', 'stereobalance' ]
+
     for i in panners:
         bld.recurse(i)
diff --git a/libs/pbd/MSVCpbd/pbd.vcproj b/libs/pbd/MSVCpbd/pbd.vcproj
index 07bb5fa..e03b18a 100644
--- a/libs/pbd/MSVCpbd/pbd.vcproj
+++ b/libs/pbd/MSVCpbd/pbd.vcproj
@@ -62,7 +62,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="$(DllPrefix)giomm32$(GlibmmDllSuffix)D.lib $(DllPrefix)glibmm32$(GlibmmDllSuffix)D.lib pthreadVCE2.lib $(DllPrefix)gio32$(GlibDllSuffix)D.lib $(DllPrefix)glib32$(GlibDllSuffix)D.lib $(DllPrefix)gobject32$(GlibDllSuffix)D.lib $(DllPrefix)sigc++32-2.0D.lib libxml2D.lib libsndfile-1D.lib intlD.lib ws2_32.lib"
+				AdditionalDependencies="$(DllPrefix)giomm32$(GlibmmDllSuffix)D.lib $(DllPrefix)glibmm32$(GlibmmDllSuffix)D.lib pthreadVCE2.lib $(DllPrefix)gio32$(GlibDllSuffix)D.lib $(DllPrefix)glib32$(GlibDllSuffix)D.lib $(DllPrefix)gobject32$(GlibDllSuffix)D.lib $(DllPrefix)sigc++32-2.0D.lib libxml2D.lib libsndfile-1D.lib intlD.lib ws2_32.lib dbghelp.lib"
 				OutputFile="$(OutDir)\$(DllPrefix)$(ProjectName)32D.dll"
 				AdditionalLibraryDirectories="F:\pthread-win32\Pre-built.2\lib"
 				GenerateDebugInformation="true"
diff --git a/libs/pbd/cartesian.cc b/libs/pbd/cartesian.cc
index def1786..c228cf3 100644
--- a/libs/pbd/cartesian.cc
+++ b/libs/pbd/cartesian.cc
@@ -41,13 +41,12 @@ PBD::spherical_to_cartesian (double azi, double ele, double len, double& x, doub
 void 
 PBD::cartesian_to_spherical (double x, double y, double z, double& azimuth, double& elevation, double& length)
 {
-#if 1
 	/* converts cartesian coordinates to cylindrical in degrees*/
 
         double rho, theta, phi;
 
         rho = sqrt (x*x + y*y + z*z);
-        phi = acos (1.0/rho);
+        //phi = acos (1.0 / rho);
         theta = atan2 (y, x);
 
         /* XXX for now, clamp phi to zero */
@@ -67,46 +66,5 @@ PBD::cartesian_to_spherical (double x, double y, double z, double& azimuth, doub
         }
         
         length = rho;
-#else
-	/* converts cartesian coordinates to cylindrical in degrees*/
-
-	const double atorad = 2.0 * M_PI / 360.0;
-	double atan_y_per_x, atan_x_pl_y_per_z;
-	double distance;
-
-	if (x == 0.0) {
-		atan_y_per_x = M_PI / 2;
-	} else {
-		atan_y_per_x = atan2 (y,x);
-	}
-
-	if (y < 0.0) {
-		/* below x-axis: atan2 returns 0 .. -PI (negative) so convert to degrees and ADD to 180 */
-		azimuth = 180.0 + (atan_y_per_x / (M_PI/180.0) + 180.0);
-	} else {
-		/* above x-axis: atan2 returns 0 .. +PI so convert to degrees */
-		azimuth = atan_y_per_x / atorad;
-	}
-
-	distance = sqrt (x*x + y*y);
-
-	if (z == 0.0) {
-		atan_x_pl_y_per_z = 0.0;
-	} else {
-		atan_x_pl_y_per_z = atan2 (z,distance);
-	}
-
-	if (distance == 0.0) {
-		if (z < 0.0) {
-			atan_x_pl_y_per_z = -M_PI/2.0;
-		} else if (z > 0.0) {
-			atan_x_pl_y_per_z = M_PI/2.0;
-		}
-	}
-
-	elevation = atan_x_pl_y_per_z / atorad;
-
-	// distance = sqrtf (x*x + y*y + z*z);
-#endif
 }
 
diff --git a/libs/pbd/debug.cc b/libs/pbd/debug.cc
index 25ebb64..b42e7f0 100644
--- a/libs/pbd/debug.cc
+++ b/libs/pbd/debug.cc
@@ -54,6 +54,24 @@ DebugBits PBD::DEBUG::AbstractUI = PBD::new_debug_bit ("abstractui");
 DebugBits PBD::DEBUG::FileUtils = PBD::new_debug_bit ("fileutils");
 DebugBits PBD::DEBUG::Configuration = PBD::new_debug_bit ("configuration");
 
+/* These are debug bits that are used by backends. Since these are loaded dynamically,
+   after command-line parsing, defining them in code that is part of the backend
+   doesn't make them available for command line parsing. Put them here.
+
+   This is sort of a hack, because it means that the debug bits aren't defined
+   with the code in which they are relevant. But providing access to debug bits
+   from dynamically loaded code, for use in command line parsing, is way above the pay grade
+   of this debug tracing scheme.
+*/
+DebugBits PBD::DEBUG::BackendMIDI = PBD::new_debug_bit ("BackendMIDI");
+DebugBits PBD::DEBUG::BackendAudio = PBD::new_debug_bit ("BackendAudio");
+DebugBits PBD::DEBUG::BackendTiming = PBD::new_debug_bit ("BackendTiming");
+DebugBits PBD::DEBUG::BackendThreads = PBD::new_debug_bit ("BackendThreads");
+
+
+DebugBits PBD::DEBUG::WavesMIDI = PBD::new_debug_bit ("WavesMIDI");
+DebugBits PBD::DEBUG::WavesAudio = PBD::new_debug_bit ("WavesAudio");
+
 DebugBits PBD::debug_bits;
 
 DebugBits
diff --git a/libs/pbd/file_utils.cc b/libs/pbd/file_utils.cc
index 25d6759..a83d116 100644
--- a/libs/pbd/file_utils.cc
+++ b/libs/pbd/file_utils.cc
@@ -343,6 +343,17 @@ copy_recurse(const std::string & from_path, const std::string & to_dir)
 	}
 }
 
+bool
+touch_file (const std::string& path)
+{
+	int fd = g_open (path.c_str(), O_RDWR|O_CREAT, 0660);
+	if (fd >= 0) {
+		close (fd);
+		return true;
+	}
+	return false;
+}
+
 std::string
 get_absolute_path (const std::string & p)
 {
diff --git a/libs/pbd/fpu.cc b/libs/pbd/fpu.cc
index 4db7acd..13f0ea6 100644
--- a/libs/pbd/fpu.cc
+++ b/libs/pbd/fpu.cc
@@ -29,6 +29,7 @@
 #include <intrin.h>
 #endif
 
+#include "pbd/compose.h"
 #include "pbd/fpu.h"
 #include "pbd/error.h"
 
@@ -37,145 +38,231 @@
 using namespace PBD;
 using namespace std;
 
-FPU::FPU ()
+FPU* FPU::_instance (0);
+
+#if ( (defined __x86_64__) || (defined __i386__) || (defined _M_X64) || (defined _M_IX86) ) // ARCH_X86
+#ifndef PLATFORM_WINDOWS
+
+/* use __cpuid() as the name to match the MSVC/mingw intrinsic */
+
+static void
+__cpuid(int regs[4], int cpuid_leaf)
 {
-	unsigned long cpuflags = 0;
+        int eax, ebx, ecx, edx;
+        asm volatile (
+#if defined(__i386__)
+	        "pushl %%ebx;\n\t"
+#endif
+	        "movl %4, %%eax;\n\t"
+	        "cpuid;\n\t"
+	        "movl %%eax, %0;\n\t"
+	        "movl %%ebx, %1;\n\t"
+	        "movl %%ecx, %2;\n\t"
+	        "movl %%edx, %3;\n\t"
+#if defined(__i386__)
+	        "popl %%ebx;\n\t"
+#endif
+	        :"=m" (eax), "=m" (ebx), "=m" (ecx), "=m" (edx)
+	        :"r" (cpuid_leaf)
+	        :"%eax",
+#if !defined(__i386__)
+	         "%ebx",
+#endif
+	         "%ecx", "%edx");
+        
+        regs[0] = eax;
+        regs[1] = ebx;
+        regs[2] = ecx;
+        regs[3] = edx;
+}
+
+#endif /* !PLATFORM_WINDOWS */
 
-	_flags = Flags (0);
+#ifndef COMPILER_MSVC
+
+static uint64_t
+_xgetbv (uint32_t xcr)
+{
+#ifdef __APPLE__
+        /* it would be nice to make this work on OS X but as long we use veclib,
+           we don't really need to know about SSE/AVX on that platform.
+        */
+        return 0;
+#else
+	uint32_t eax, edx;
+	__asm__ volatile ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (xcr));
+	return (static_cast<uint64_t>(edx) << 32) | eax;
+#endif
+}
+
+#endif /* !COMPILER_MSVC */
+#endif /* ARCH_X86 */
+
+#ifndef _XCR_XFEATURE_ENABLED_MASK
+#define _XCR_XFEATURE_ENABLED_MASK 0
+#endif
+
+FPU*
+FPU::instance()
+{
+	if (!_instance) {
+		_instance = new FPU;
+	}
+
+	return _instance;
+}
+
+FPU::FPU ()
+	: _flags ((Flags) 0)
+{
+	if (_instance) {
+		error << _("FPU object instantiated more than once") << endmsg;
+	}
 
 #if !( (defined __x86_64__) || (defined __i386__) || (defined _M_X64) || (defined _M_IX86) ) // !ARCH_X86
+	/* Non-Intel architecture, nothing to do here */
 	return;
 #else
 
-#ifdef PLATFORM_WINDOWS
+	/* Get the CPU vendor just for kicks */
 
-	// Get CPU flags using Microsoft function
-	// It works for both 64 and 32 bit systems
-	// no need to use assembler for getting info from register, this function does this for us
-	int cpuInfo[4];
-	__cpuid (cpuInfo, 1);
-	cpuflags = cpuInfo[3];
+	// __cpuid with an InfoType argument of 0 returns the number of
+ 	// valid Ids in CPUInfo[0] and the CPU identification string in
+ 	// the other three array elements. The CPU identification string is
+ 	// not in linear order. The code below arranges the information
+ 	// in a human readable form. The human readable order is CPUInfo[1] |
+ 	// CPUInfo[3] | CPUInfo[2]. CPUInfo[2] and CPUInfo[3] are swapped
+ 	// before using memcpy to copy these three array elements to cpu_string.
 
-#else	
+	int cpu_info[4];
+	char cpu_string[48];
+	string cpu_vendor;
 
-#ifndef _LP64 /* *nix; 32 bit version. This odd macro constant is required because we need something that identifies this as a 32 bit
-                 build on Linux and on OS X. Anything that serves this purpose will do, but this is the best thing we've identified
-                 so far.
-              */
-	
-	asm volatile (
-		"mov $1, %%eax\n"
-		"pushl %%ebx\n"
-		"cpuid\n"
-		"movl %%edx, %0\n"
-		"popl %%ebx\n"
-		: "=r" (cpuflags)
-		: 
-		: "%eax", "%ecx", "%edx"
-		);
+	__cpuid (cpu_info, 0);
+
+	int num_ids = cpu_info[0];
+ 	std::swap(cpu_info[2], cpu_info[3]);
+	memcpy(cpu_string, &cpu_info[1], 3 * sizeof(cpu_info[1]));
+ 	cpu_vendor.assign(cpu_string, 3 * sizeof(cpu_info[1]));
+
+	info << string_compose (_("CPU vendor: %1"), cpu_vendor) << endmsg;
+
+	if (num_ids > 0) {
 	
-#else /* *nix; 64 bit version */
+		/* Now get CPU/FPU flags */
 	
-	/* asm notes: although we explicitly save&restore rbx, we must tell
-	   gcc that ebx,rbx is clobbered so that it doesn't try to use it as an intermediate
-	   register when storing rbx. gcc 4.3 didn't make this "mistake", but gcc 4.4
-	   does, at least on x86_64.
-	*/
-
-	asm volatile (
-		"pushq %%rbx\n"
-		"movq $1, %%rax\n"
-		"cpuid\n"
-		"movq %%rdx, %0\n"
-		"popq %%rbx\n"
-		: "=r" (cpuflags)
-		: 
-		: "%rax", "%rbx", "%rcx", "%rdx"
-		);
-
-#endif /* _LP64 */
-#endif /* PLATFORM_WINDOWS */
-
-	if (cpuflags & (1<<25)) {
-		_flags = Flags (_flags | (HasSSE|HasFlushToZero));
-	}
+		__cpuid (cpu_info, 1);
 
-	if (cpuflags & (1<<26)) {
-		_flags = Flags (_flags | HasSSE2);
-	}
+		if ((cpu_info[2] & (1<<27)) /* AVX */ &&
+		    (cpu_info[2] & (1<<28) /* (OS)XSAVE */) &&
+		    (_xgetbv (_XCR_XFEATURE_ENABLED_MASK) & 0x6)) { /* OS really supports XSAVE */
+			info << _("AVX-capable processor") << endmsg;
+			_flags = Flags (_flags | (HasAVX) );
+		}
+
+		if (cpu_info[3] & (1<<25)) {
+			_flags = Flags (_flags | (HasSSE|HasFlushToZero));
+		}
+
+		if (cpu_info[3] & (1<<26)) {
+			_flags = Flags (_flags | HasSSE2);
+		}
 
-	if (cpuflags & (1 << 24)) {
+		/* Figure out CPU/FPU denormal handling capabilities */
+	
+		if (cpu_info[3] & (1 << 24)) {
 		
-		char** fxbuf = 0;
+			char** fxbuf = 0;
 		
-		/* DAZ wasn't available in the first version of SSE. Since
-		   setting a reserved bit in MXCSR causes a general protection
-		   fault, we need to be able to check the availability of this
-		   feature without causing problems. To do this, one needs to
-		   set up a 512-byte area of memory to save the SSE state to,
-		   using fxsave, and then one needs to inspect bytes 28 through
-		   31 for the MXCSR_MASK value. If bit 6 is set, DAZ is
-		   supported, otherwise, it isn't.
-		*/
+			/* DAZ wasn't available in the first version of SSE. Since
+			   setting a reserved bit in MXCSR causes a general protection
+			   fault, we need to be able to check the availability of this
+			   feature without causing problems. To do this, one needs to
+			   set up a 512-byte area of memory to save the SSE state to,
+			   using fxsave, and then one needs to inspect bytes 28 through
+			   31 for the MXCSR_MASK value. If bit 6 is set, DAZ is
+			   supported, otherwise, it isn't.
+			*/
 
 #ifndef HAVE_POSIX_MEMALIGN
 #  ifdef PLATFORM_WINDOWS
-		fxbuf = (char **) _aligned_malloc (sizeof (char *), 16);
-		assert (fxbuf);
-		*fxbuf = (char *) _aligned_malloc (512, 16);
-		assert (*fxbuf);
+			fxbuf = (char **) _aligned_malloc (sizeof (char *), 16);
+			assert (fxbuf);
+			*fxbuf = (char *) _aligned_malloc (512, 16);
+			assert (*fxbuf);
 #  else
 #  warning using default malloc for aligned memory
-		fxbuf = (char **) malloc (sizeof (char *));
-		assert (fxbuf);
-		*fxbuf = (char *) malloc (512);
-		assert (*fxbuf);
+			fxbuf = (char **) malloc (sizeof (char *));
+			assert (fxbuf);
+			*fxbuf = (char *) malloc (512);
+			assert (*fxbuf);
 #  endif
 #else
-		(void) posix_memalign ((void **) &fxbuf, 16, sizeof (char *));
-		assert (fxbuf);
-		(void) posix_memalign ((void **) fxbuf, 16, 512);
-		assert (*fxbuf);
+			(void) posix_memalign ((void **) &fxbuf, 16, sizeof (char *));
+			assert (fxbuf);
+			(void) posix_memalign ((void **) fxbuf, 16, 512);
+			assert (*fxbuf);
 #endif			
 		
-		memset (*fxbuf, 0, 512);
+			memset (*fxbuf, 0, 512);
 		
 #ifdef COMPILER_MSVC
-		char *buf = *fxbuf;
-		__asm {
-			mov eax, buf
-			fxsave   [eax]
-		};
+			char *buf = *fxbuf;
+			__asm {
+				mov eax, buf
+					fxsave   [eax]
+					};
 #else
-		asm volatile (
-			"fxsave (%0)"
-			:
-			: "r" (*fxbuf)
-			: "memory"
-			);
+			asm volatile (
+				"fxsave (%0)"
+				:
+				: "r" (*fxbuf)
+				: "memory"
+				);
 #endif
 		
-		uint32_t mxcsr_mask = *((uint32_t*) &((*fxbuf)[28]));
+			uint32_t mxcsr_mask = *((uint32_t*) &((*fxbuf)[28]));
 		
-		/* if the mask is zero, set its default value (from intel specs) */
+			/* if the mask is zero, set its default value (from intel specs) */
 		
-		if (mxcsr_mask == 0) {
-			mxcsr_mask = 0xffbf;
-		}
+			if (mxcsr_mask == 0) {
+				mxcsr_mask = 0xffbf;
+			}
 		
-		if (mxcsr_mask & (1<<6)) {
-			_flags = Flags (_flags | HasDenormalsAreZero);
-		} 
+			if (mxcsr_mask & (1<<6)) {
+				_flags = Flags (_flags | HasDenormalsAreZero);
+			} 
 		
 #if !defined HAVE_POSIX_MEMALIGN && defined PLATFORM_WINDOWS
-		_aligned_free (*fxbuf);
-		_aligned_free (fxbuf);
+			_aligned_free (*fxbuf);
+			_aligned_free (fxbuf);
 #else
-		free (*fxbuf);
-		free (fxbuf);
+			free (*fxbuf);
+			free (fxbuf);
 #endif
+		}
+
+		/* finally get the CPU brand */
+
+		__cpuid (cpu_info, 0x80000000);
+
+		const int parameter_end = 0x80000004;
+		string cpu_brand;
+	
+		if (cpu_info[0] >= parameter_end) {
+			char* cpu_string_ptr = cpu_string;
+		
+			for (int parameter = 0x80000002; parameter <= parameter_end &&
+				     cpu_string_ptr < &cpu_string[sizeof(cpu_string)]; parameter++) {
+				__cpuid(cpu_info, parameter);
+				memcpy(cpu_string_ptr, cpu_info, sizeof(cpu_info));
+				cpu_string_ptr += sizeof(cpu_info);
+			}
+			cpu_brand.assign(cpu_string, cpu_string_ptr - cpu_string);
+			info << string_compose (_("CPU brand: %1"), cpu_brand) << endmsg;
+		} 
 	}
-#endif
+#endif /* !ARCH_X86 */
 }			
 
 FPU::~FPU ()
diff --git a/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj b/libs/pbd/macosx/pbd.xcodeproj/pbd.xcodeproj/project.pbxproj
similarity index 97%
copy from libs/pbd/macosx/pbd.xcodeproj/project.pbxproj
copy to libs/pbd/macosx/pbd.xcodeproj/pbd.xcodeproj/project.pbxproj
index 535d16b..8487e53 100644
--- a/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj
+++ b/libs/pbd/macosx/pbd.xcodeproj/pbd.xcodeproj/project.pbxproj
@@ -7,6 +7,8 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		43D8CBC91A6E6B0E00ABE168 /* signals.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43D8CBC71A6E6B0E00ABE168 /* signals.cc */; };
+		43D8CBCA1A6E6B0E00ABE168 /* signals.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D8CBC81A6E6B0E00ABE168 /* signals.h */; };
 		6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120270B8A34AB00AF661E /* base_ui.cc */; };
 		694120700B8A34AB00AF661E /* basename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120280B8A34AB00AF661E /* basename.cc */; };
 		694120710B8A34AB00AF661E /* command.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120290B8A34AB00AF661E /* command.cc */; };
@@ -95,6 +97,8 @@
 /* Begin PBXFileReference section */
 		089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pbd_Prefix.pch; sourceTree = "<group>"; };
+		43D8CBC71A6E6B0E00ABE168 /* signals.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = signals.cc; path = ../signals.cc; sourceTree = "<group>"; };
+		43D8CBC81A6E6B0E00ABE168 /* signals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = signals.h; sourceTree = "<group>"; };
 		694120270B8A34AB00AF661E /* base_ui.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = base_ui.cc; path = ../base_ui.cc; sourceTree = SOURCE_ROOT; };
 		694120280B8A34AB00AF661E /* basename.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = basename.cc; path = ../basename.cc; sourceTree = SOURCE_ROOT; };
 		694120290B8A34AB00AF661E /* command.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = command.cc; path = ../command.cc; sourceTree = SOURCE_ROOT; };
@@ -245,6 +249,7 @@
 		08FB77ACFE841707C02AAC07 /* Source */ = {
 			isa = PBXGroup;
 			children = (
+				43D8CBC71A6E6B0E00ABE168 /* signals.cc */,
 				69C63C140B9369CB00BC0BCA /* strreplace.cc */,
 				694120270B8A34AB00AF661E /* base_ui.cc */,
 				694120280B8A34AB00AF661E /* basename.cc */,
@@ -281,6 +286,7 @@
 		694120360B8A34AB00AF661E /* pbd */ = {
 			isa = PBXGroup;
 			children = (
+				43D8CBC81A6E6B0E00ABE168 /* signals.h */,
 				69C63C180B9369DE00BC0BCA /* replace_all.h */,
 				694120380B8A34AB00AF661E /* abstract_ui.cc */,
 				694120390B8A34AB00AF661E /* abstract_ui.h */,
@@ -386,6 +392,7 @@
 				694120A70B8A34AB00AF661E /* transmitter.h in Headers */,
 				694120A80B8A34AB00AF661E /* undo.h in Headers */,
 				694120A90B8A34AB00AF661E /* whitespace.h in Headers */,
+				43D8CBCA1A6E6B0E00ABE168 /* signals.h in Headers */,
 				694120AA0B8A34AB00AF661E /* xml++.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -418,8 +425,15 @@
 /* Begin PBXProject section */
 		0867D690FE84028FC02AAC07 /* Project object */ = {
 			isa = PBXProject;
+			attributes = {
+			};
 			buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "pbd" */;
+			compatibilityVersion = "Xcode 2.4";
+			developmentRegion = English;
 			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
 			mainGroup = 0867D691FE84028FC02AAC07 /* pbd */;
 			productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
 			projectDirPath = "";
@@ -456,6 +470,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				43D8CBC91A6E6B0E00ABE168 /* signals.cc in Sources */,
 				69C63C2B0B936A6E00BC0BCA /* version.cc in Sources */,
 				6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */,
 				69C63C150B9369CB00BC0BCA /* strreplace.cc in Sources */,
diff --git a/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj b/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj
index 535d16b..8487e53 100644
--- a/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj
+++ b/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj
@@ -7,6 +7,8 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		43D8CBC91A6E6B0E00ABE168 /* signals.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43D8CBC71A6E6B0E00ABE168 /* signals.cc */; };
+		43D8CBCA1A6E6B0E00ABE168 /* signals.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D8CBC81A6E6B0E00ABE168 /* signals.h */; };
 		6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120270B8A34AB00AF661E /* base_ui.cc */; };
 		694120700B8A34AB00AF661E /* basename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120280B8A34AB00AF661E /* basename.cc */; };
 		694120710B8A34AB00AF661E /* command.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120290B8A34AB00AF661E /* command.cc */; };
@@ -95,6 +97,8 @@
 /* Begin PBXFileReference section */
 		089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pbd_Prefix.pch; sourceTree = "<group>"; };
+		43D8CBC71A6E6B0E00ABE168 /* signals.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = signals.cc; path = ../signals.cc; sourceTree = "<group>"; };
+		43D8CBC81A6E6B0E00ABE168 /* signals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = signals.h; sourceTree = "<group>"; };
 		694120270B8A34AB00AF661E /* base_ui.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = base_ui.cc; path = ../base_ui.cc; sourceTree = SOURCE_ROOT; };
 		694120280B8A34AB00AF661E /* basename.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = basename.cc; path = ../basename.cc; sourceTree = SOURCE_ROOT; };
 		694120290B8A34AB00AF661E /* command.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = command.cc; path = ../command.cc; sourceTree = SOURCE_ROOT; };
@@ -245,6 +249,7 @@
 		08FB77ACFE841707C02AAC07 /* Source */ = {
 			isa = PBXGroup;
 			children = (
+				43D8CBC71A6E6B0E00ABE168 /* signals.cc */,
 				69C63C140B9369CB00BC0BCA /* strreplace.cc */,
 				694120270B8A34AB00AF661E /* base_ui.cc */,
 				694120280B8A34AB00AF661E /* basename.cc */,
@@ -281,6 +286,7 @@
 		694120360B8A34AB00AF661E /* pbd */ = {
 			isa = PBXGroup;
 			children = (
+				43D8CBC81A6E6B0E00ABE168 /* signals.h */,
 				69C63C180B9369DE00BC0BCA /* replace_all.h */,
 				694120380B8A34AB00AF661E /* abstract_ui.cc */,
 				694120390B8A34AB00AF661E /* abstract_ui.h */,
@@ -386,6 +392,7 @@
 				694120A70B8A34AB00AF661E /* transmitter.h in Headers */,
 				694120A80B8A34AB00AF661E /* undo.h in Headers */,
 				694120A90B8A34AB00AF661E /* whitespace.h in Headers */,
+				43D8CBCA1A6E6B0E00ABE168 /* signals.h in Headers */,
 				694120AA0B8A34AB00AF661E /* xml++.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -418,8 +425,15 @@
 /* Begin PBXProject section */
 		0867D690FE84028FC02AAC07 /* Project object */ = {
 			isa = PBXProject;
+			attributes = {
+			};
 			buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "pbd" */;
+			compatibilityVersion = "Xcode 2.4";
+			developmentRegion = English;
 			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
 			mainGroup = 0867D691FE84028FC02AAC07 /* pbd */;
 			productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
 			projectDirPath = "";
@@ -456,6 +470,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				43D8CBC91A6E6B0E00ABE168 /* signals.cc in Sources */,
 				69C63C2B0B936A6E00BC0BCA /* version.cc in Sources */,
 				6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */,
 				69C63C150B9369CB00BC0BCA /* strreplace.cc in Sources */,
diff --git a/libs/pbd/malign.cc b/libs/pbd/malign.cc
index a11a23f..4be9f0a 100644
--- a/libs/pbd/malign.cc
+++ b/libs/pbd/malign.cc
@@ -38,6 +38,15 @@ static const int CPU_CACHE_ALIGN = 16; /* arguably 32 on most arches, but it mat
 int cache_aligned_malloc (void** memptr, size_t size)
 {
 #ifndef HAVE_POSIX_MEMALIGN
+#ifdef PLATFORM_WINDOWS
+	if (((*memptr) = _aligned_malloc (size, CPU_CACHE_ALIGN)) == 0) {
+		fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"),
+					 CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg;
+		return errno;
+	} else {
+		return 0;
+	}
+#else
 	if (((*memptr) = malloc (size)) == 0) {
 		fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"),
 					 CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg;
@@ -45,6 +54,7 @@ int cache_aligned_malloc (void** memptr, size_t size)
 	} else {
 		return 0;
 	}
+#endif
 #else
         if (posix_memalign (memptr, CPU_CACHE_ALIGN, size)) {
 		fatal << string_compose (_("Memory allocation error: posix_memalign (%1 * %2) failed (%3)"),
@@ -54,3 +64,51 @@ int cache_aligned_malloc (void** memptr, size_t size)
 	return 0;
 #endif	
 }
+
+void cache_aligned_free (void* memptr)
+{
+#ifdef PLATFORM_WINDOWS
+	_aligned_free (memptr);
+#else
+	free (memptr);
+#endif
+}
+
+int  aligned_malloc (void** memptr, size_t size, size_t alignment)
+{
+#ifndef HAVE_POSIX_MEMALIGN
+#ifdef PLATFORM_WINDOWS
+	if (((*memptr) = _aligned_malloc (size, alignment)) == 0) {
+		fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"),
+					 alignment, size, strerror (errno)) << endmsg;
+		return errno;
+	} else {
+		return 0;
+	}
+#else
+	if (((*memptr) = malloc (size)) == 0) {
+		fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"),
+					 alignment, size, strerror (errno)) << endmsg;
+		return errno;
+	} else {
+		return 0;
+	}
+#endif
+#else
+        if (posix_memalign (memptr, alignment, size)) {
+		fatal << string_compose (_("Memory allocation error: posix_memalign (%1 * %2) failed (%3)"),
+					 alignment, size, strerror (errno)) << endmsg;
+	}
+
+	return 0;
+#endif	
+}
+
+void aligned_free (void* memptr)
+{
+#ifdef PLATFORM_WINDOWS
+	_aligned_free (memptr);
+#else
+	free (memptr);
+#endif
+}
diff --git a/libs/pbd/pbd/atomic_counter.h b/libs/pbd/pbd/atomic_counter.h
index 1e1998e..019ff85 100644
--- a/libs/pbd/pbd/atomic_counter.h
+++ b/libs/pbd/pbd/atomic_counter.h
@@ -41,7 +41,7 @@ public:
 
 	gint get() const
 	{
-		return g_atomic_int_get (&m_value);
+		return g_atomic_int_get (const_cast<gint*>(&m_value));
 	}
 
 	void set (gint new_value)
@@ -90,7 +90,7 @@ public:
 private:
 
 	// Has to be mutable when using the apple version of gcc.
-	mutable volatile gint             m_value;
+	gint m_value;
 
 };
 
diff --git a/libs/pbd/pbd/debug.h b/libs/pbd/pbd/debug.h
index e4fa525..cc3fbdc 100644
--- a/libs/pbd/pbd/debug.h
+++ b/libs/pbd/pbd/debug.h
@@ -28,9 +28,13 @@
 #include "pbd/libpbd_visibility.h"
 #include "pbd/timing.h"
 
+#if defined(COMPILER_MSVC) && !defined(PTW32_VERSION)
+#include <ardourext/pthread.h> // Gets us 'PTW32_VERSION'
+#endif
+
 namespace PBD {
 
-	typedef std::bitset<64> DebugBits;
+	typedef std::bitset<128> DebugBits;
 
 	LIBPBD_API extern DebugBits debug_bits;
 	LIBPBD_API DebugBits new_debug_bit (const char* name);
@@ -51,6 +55,16 @@ namespace PBD {
 		LIBPBD_API extern DebugBits AbstractUI;
 		LIBPBD_API extern DebugBits Configuration;
 		LIBPBD_API extern DebugBits FileUtils;
+
+		LIBPBD_API extern DebugBits BackendMIDI;
+		LIBPBD_API extern DebugBits BackendAudio;
+		LIBPBD_API extern DebugBits BackendTiming;
+		LIBPBD_API extern DebugBits BackendThreads;
+
+		/* See notes in ../debug.cc on why these are defined here */
+
+                LIBPBD_API extern DebugBits WavesMIDI;
+                LIBPBD_API extern DebugBits WavesAudio;
 	}
 }
 
diff --git a/libs/pbd/pbd/file_utils.h b/libs/pbd/pbd/file_utils.h
index 761d8d4..b55b9fd 100644
--- a/libs/pbd/pbd/file_utils.h
+++ b/libs/pbd/pbd/file_utils.h
@@ -182,6 +182,14 @@ LIBPBD_API void copy_files(const std::string & from_path, const std::string & to
 LIBPBD_API void copy_recurse(const std::string & from_path, const std::string & to_dir);
 
 /**
+ * Update the access and modification times of file at @path, creating file if it
+ * doesn't already exist.
+ * @path file path to touch
+ * @return true if file exists or was created and access time updated.
+ */
+LIBPBD_API bool touch_file (const std::string& path);
+
+/**
  * Take a (possibly) relative path and make it absolute
  * @return An absolute path
  */
diff --git a/libs/pbd/pbd/fpu.h b/libs/pbd/pbd/fpu.h
index 6627951..4ab1a83 100644
--- a/libs/pbd/pbd/fpu.h
+++ b/libs/pbd/pbd/fpu.h
@@ -30,20 +30,27 @@ class LIBPBD_API FPU {
 		HasFlushToZero = 0x1,
 		HasDenormalsAreZero = 0x2,
 		HasSSE = 0x4,
-		HasSSE2 = 0x8
+		HasSSE2 = 0x8,
+		HasAVX = 0x10
 	};
 
   public:
-	FPU ();
 	~FPU ();
 
+	static FPU* instance();
+	
 	bool has_flush_to_zero () const { return _flags & HasFlushToZero; }
 	bool has_denormals_are_zero () const { return _flags & HasDenormalsAreZero; }
 	bool has_sse () const { return _flags & HasSSE; }
 	bool has_sse2 () const { return _flags & HasSSE2; }
+	bool has_avx () const { return _flags & HasAVX; }
 	
   private:
 	Flags _flags;
+
+	static FPU* _instance;
+
+	FPU ();
 };
 
 }
diff --git a/libs/pbd/pbd/malign.h b/libs/pbd/pbd/malign.h
index 07f42f5..09d182f 100644
--- a/libs/pbd/pbd/malign.h
+++ b/libs/pbd/pbd/malign.h
@@ -24,6 +24,10 @@
 
 #include "pbd/libpbd_visibility.h"
 
-LIBPBD_API int cache_aligned_malloc (void** memptr, size_t size);
+LIBPBD_API int  cache_aligned_malloc (void** memptr, size_t size);
+LIBPBD_API void cache_aligned_free (void* memptr);
+
+LIBPBD_API int  aligned_malloc (void** memptr, size_t size, size_t alignment);
+LIBPBD_API void aligned_free (void* memptr);
 
 #endif /* __pbd_malign_h__ */
diff --git a/libs/pbd/pbd/pool.h b/libs/pbd/pbd/pool.h
index cfd782a..aff3f7e 100644
--- a/libs/pbd/pbd/pool.h
+++ b/libs/pbd/pbd/pool.h
@@ -129,7 +129,7 @@ class LIBPBD_API PerThreadPool
 
 	void  create_per_thread_pool (std::string name, unsigned long item_size, unsigned long nitems);
 	CrossThreadPool* per_thread_pool (bool must_exist = true);
-
+	bool has_per_thread_pool ();
 	void set_trash (RingBuffer<CrossThreadPool*>* t);
 	void add_to_trash (CrossThreadPool *);
 
diff --git a/libs/pbd/pool.cc b/libs/pbd/pool.cc
index 020f296..ccdb85b 100644
--- a/libs/pbd/pool.cc
+++ b/libs/pbd/pool.cc
@@ -175,6 +175,20 @@ PerThreadPool::create_per_thread_pool (string n, unsigned long isize, unsigned l
 	_key.set (new CrossThreadPool (n, isize, nitems, this));
 }
 
+/** @return True if CrossThreadPool for the current thread exists,
+ *  False otherwise
+ */
+bool
+PerThreadPool::has_per_thread_pool ()
+{
+	CrossThreadPool* p = _key.get();
+	if (p) {
+		return true;
+	}
+	return false;
+}
+
+
 /** @return CrossThreadPool for the current thread, which must previously have been created by
  *  calling create_per_thread_pool in the current thread.
  */
diff --git a/libs/pbd/stacktrace.cc b/libs/pbd/stacktrace.cc
index c74dd94..181b7d1 100644
--- a/libs/pbd/stacktrace.cc
+++ b/libs/pbd/stacktrace.cc
@@ -20,10 +20,19 @@
 #include "libpbd-config.h"
 
 #include "pbd/stacktrace.h"
+#include "pbd/debug.h"
+#include "pbd/compose.h"
+#include "pbd/pthread_utils.h"
+
 #include <cstdio>
 #include <iostream>
 #include <string>
 
+#ifdef PLATFORM_WINDOWS
+#include <windows.h>
+#include <dbghelp.h>
+#endif
+
 void
 PBD::trace_twb ()
 {
@@ -103,6 +112,69 @@ PBD::stacktrace (std::ostream& out, int levels)
 	}
 }
 
+#elif defined (PLATFORM_WINDOWS)
+
+#if defined DEBUG && !defined CaptureStackBackTrace
+#define CaptureStackBackTrace RtlCaptureStackBackTrace
+
+extern "C" {
+    __declspec(dllimport) USHORT WINAPI CaptureStackBackTrace (
+                                 ULONG  FramesToSkip,
+                                 ULONG  FramesToCapture,
+                                 PVOID  *BackTrace,
+                                 PULONG BackTraceHash
+	                      );
+}
+#endif
+
+std::string 
+PBD::demangle (std::string const & l) /* JE - !!!! 'PBD' namespace might possibly get removed (except it's still used in 'libs/canvas/item.cc') */
+{
+	return std::string();
+}
+
+void
+PBD::stacktrace( std::ostream& out, int)
+{
+#ifdef DEBUG
+	const size_t levels = 62; // does not support more then 62 levels of stacktrace
+	unsigned int   i;
+	void         * stack[ levels ];
+	unsigned short frames;
+	SYMBOL_INFO  * symbol;
+	HANDLE         process;
+
+	process = GetCurrentProcess();
+	out << "+++++Backtrace process: " <<  DEBUG_THREAD_SELF << std::endl;
+
+	SymInitialize( process, NULL, TRUE );
+
+	frames               = CaptureStackBackTrace( 0, levels, stack, NULL );
+
+	out << "+++++Backtrace frames: " <<  frames << std::endl;
+
+	symbol               = ( SYMBOL_INFO * )calloc( sizeof( SYMBOL_INFO ) + 256 * sizeof( char ), 1 );
+	symbol->MaxNameLen   = 255;
+	symbol->SizeOfStruct = sizeof( SYMBOL_INFO );
+
+	for( i = 0; i < frames; i++ )
+	{
+		SymFromAddr( process, ( DWORD64 )( stack[ i ] ), 0, symbol );
+		out << string_compose( "%1: %2 - %3\n", frames - i - 1, symbol->Name, symbol->Address );
+	}
+
+	out.flush();
+
+	free( symbol );
+#endif
+}
+
+void
+c_stacktrace ()
+{
+	PBD::stacktrace (std::cout);
+}
+
 #else
 
 std::string 
diff --git a/libs/pbd/system_exec.cc b/libs/pbd/system_exec.cc
index 721db98..abe5fd2 100644
--- a/libs/pbd/system_exec.cc
+++ b/libs/pbd/system_exec.cc
@@ -363,13 +363,10 @@ SystemExec::make_wargs(char **a) {
 	char **tmp = ++a;
 	while (tmp && *tmp) {
 		wa.append(" \"");
-		std::string arg(*tmp);
-		size_t start_pos = 0;
-		while((start_pos = arg.find("\\", start_pos)) != std::string::npos) {
-			arg.replace(start_pos, 1, "\\\\");
-			start_pos += 2;
+		wa.append(*tmp);
+		if (strlen(*tmp) > 0 && (*tmp)[strlen(*tmp) - 1] == '\\') {
+			wa.append("\\");
 		}
-		wa.append(arg);
 		wa.append("\"");
 		tmp++;
 	}
diff --git a/libs/pbd/test/filesystem_test.cc b/libs/pbd/test/filesystem_test.cc
index 2c2de94..31f6865 100644
--- a/libs/pbd/test/filesystem_test.cc
+++ b/libs/pbd/test/filesystem_test.cc
@@ -6,8 +6,11 @@
 #include <unistd.h>
 #include <stdlib.h>
 
+#include <fcntl.h>
+
 #include <glibmm/miscutils.h>
 #include <glibmm/fileutils.h>
+#include <glibmm/convert.h>
 
 #include "pbd/file_utils.h"
 #include "pbd/pathexpand.h"
@@ -105,11 +108,12 @@ FilesystemTest::testCopyFileUTF8Filename ()
 	cerr << "Copying " << i18n_files.size() << " test files from: "
 	     << i18n_path.to_string () << endl;
 
+	string output_dir = test_output_directory ("CopyFile");
+
 	for (vector<string>::iterator i = i18n_files.begin(); i != i18n_files.end(); ++i) {
 		string input_path = *i;
 		string output_file = Glib::path_get_basename(*i);
-		string output_path = test_output_directory ("CopyFile");
-		output_path = Glib::build_filename (output_path, output_file);
+		string output_path = Glib::build_filename (output_dir, output_file);
 
 		cerr << "Copying test file: " << input_path
 		     << " To " << output_path << endl;
@@ -119,6 +123,105 @@ FilesystemTest::testCopyFileUTF8Filename ()
 }
 
 void
+FilesystemTest::testOpenFileUTF8Filename ()
+{
+	vector<string> i18n_files;
+
+	Searchpath i18n_path (test_search_path ());
+	i18n_path.add_subdirectory_to_paths ("i18n_test");
+
+	PBD::find_files_matching_pattern (i18n_files, i18n_path, "*.tst");
+
+	CPPUNIT_ASSERT (i18n_files.size () == 8);
+
+	cerr << endl;
+	cerr << "Opening " << i18n_files.size ()
+	     << " test files from: " << i18n_path.to_string () << endl;
+
+	// check that g_open will successfully open all the test files
+	for (vector<string>::iterator i = i18n_files.begin (); i != i18n_files.end ();
+	     ++i) {
+		string input_path = *i;
+
+		cerr << "Opening file: " << input_path << " with g_open" << endl;
+
+		int fdgo = g_open (input_path.c_str(), O_RDONLY, 0444);
+
+		CPPUNIT_ASSERT (fdgo != -1);
+
+		if (fdgo >= 0) {
+			::close (fdgo);
+		}
+	}
+
+#ifdef PLATFORM_WINDOWS
+	// This test is here to prove and remind us that using Glib::locale_from_utf8
+	// to convert a utf-8 encoded file path for use with ::open will not work
+	// for all file paths.
+	//
+	// It may be possible to convert a string that is utf-8 encoded that will not
+	// work with ::open(on windows) to a string that will work with ::open using
+	// Glib::locale_from_utf8 string if all the characters that are contained
+	// in the utf-8 string can be found/mapped in the system code page.
+	//
+	// European locales that only have a small amount of extra characters with
+	// accents/umlauts I'm guessing will be more likely succeed but CJK locales
+	// will almost certainly fail
+
+	bool conversion_failed = false;
+
+	for (vector<string>::iterator i = i18n_files.begin (); i != i18n_files.end ();
+	     ++i) {
+		string input_path = *i;
+		cerr << "Opening file: " << input_path << " with locale_from_utf8 and ::open "
+		     << endl;
+		string converted_input_path;
+		int fdo;
+
+		try {
+			// this will fail for utf8 that contains characters that aren't
+			// representable in the system code page
+			converted_input_path = Glib::locale_from_utf8 (input_path);
+			// conversion succeeded so we expect ::open to be successful if the
+			// current C library locale is the same as the system locale, which
+			// it should be as we haven't changed it.
+			fdo = ::open (converted_input_path.c_str (), O_RDONLY, 0444);
+			CPPUNIT_ASSERT (fdo != -1);
+
+			if (converted_input_path != input_path) {
+				cerr << "Character set conversion succeeded and strings differ for input "
+				        "string: " << input_path << endl;
+				// file path must have contained non-ASCII characters that were mapped
+				// from the system code page so we would expect the original
+				// utf-8 file path to fail with ::open
+				int fd2 = ::open (input_path.c_str (), O_RDONLY, 0444);
+				CPPUNIT_ASSERT (fd2 == -1);
+			}
+
+		} catch (const Glib::ConvertError& err) {
+			cerr << "Character set conversion failed: " << err.what () << endl;
+			// I am confident that on Windows with the test data that no locale will
+			// have a system code page containing all the characters required
+			// and conversion will fail for at least one of the filenames
+			conversion_failed = true;
+			// CPPUNIT_ASSERT (err.code() == ?);
+
+			// conversion failed so we expect the original utf-8 string to fail
+			// with ::open on Windows as the file path will not exist
+			fdo = ::open (input_path.c_str (), O_RDONLY, 0444);
+			CPPUNIT_ASSERT (fdo == -1);
+		}
+
+		if (fdo >= 0) {
+			::close (fdo);
+		}
+	}
+	// we expect at least one conversion failure with the filename test data
+	CPPUNIT_ASSERT (conversion_failed);
+#endif
+}
+
+void
 FilesystemTest::testFindFilesMatchingPattern ()
 {
 	vector<string> patch_files;
diff --git a/libs/pbd/test/filesystem_test.h b/libs/pbd/test/filesystem_test.h
index 180149d..c200bb2 100644
--- a/libs/pbd/test/filesystem_test.h
+++ b/libs/pbd/test/filesystem_test.h
@@ -7,6 +7,7 @@ class FilesystemTest : public CppUnit::TestFixture
 	CPPUNIT_TEST (testPathIsWithin);
 	CPPUNIT_TEST (testCopyFileASCIIFilename);
 	CPPUNIT_TEST (testCopyFileUTF8Filename);
+	CPPUNIT_TEST (testOpenFileUTF8Filename);
 	CPPUNIT_TEST (testFindFilesMatchingPattern);
 	CPPUNIT_TEST (testClearDirectory);
 	CPPUNIT_TEST (testRemoveDirectory);
@@ -17,6 +18,7 @@ public:
 	void testPathIsWithin ();
 	void testCopyFileASCIIFilename ();
 	void testCopyFileUTF8Filename ();
+	void testOpenFileUTF8Filename ();
 	void testFindFilesMatchingPattern ();
 	void testClearDirectory ();
 	void testRemoveDirectory ();
diff --git a/libs/pbd/test/xml_test.cc b/libs/pbd/test/xml_test.cc
new file mode 100644
index 0000000..c32cf96
--- /dev/null
+++ b/libs/pbd/test/xml_test.cc
@@ -0,0 +1,79 @@
+#include "xml_test.h"
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+
+#ifdef PLATFORM_WINDOWS
+#include <fcntl.h>
+#endif
+
+#include <glibmm/miscutils.h>
+#include <glibmm/fileutils.h>
+#include <glibmm/convert.h>
+
+#include <libxml/xpath.h>
+
+#include "pbd/file_utils.h"
+
+#include "test_common.h"
+
+using namespace std;
+using namespace PBD;
+
+CPPUNIT_TEST_SUITE_REGISTRATION (XMLTest);
+
+namespace {
+
+xmlChar* xml_version = xmlCharStrdup("1.0");
+
+bool
+write_xml(const string& filename)
+{
+	xmlDocPtr doc;
+	int result;
+
+	xmlKeepBlanksDefault(0);
+	doc = xmlNewDoc(xml_version);
+
+	result = xmlSaveFormatFileEnc(filename.c_str(), doc, "UTF-8", 1);
+
+	xmlFreeDoc(doc);
+
+	if (result == -1) {
+		return false;
+	}
+	return true;
+}
+
+}
+
+void
+XMLTest::testXMLFilenameEncoding ()
+{
+	vector<string> i18n_files;
+
+	Searchpath i18n_path(test_search_path());
+	i18n_path.add_subdirectory_to_paths("i18n_test");
+
+	PBD::find_files_matching_pattern (i18n_files, i18n_path, "*.tst");
+
+	CPPUNIT_ASSERT (i18n_files.size() == 8);
+
+	string output_dir = test_output_directory ("XMLFilenameEncodingUTF8");
+
+	// This is testing that libxml expects the filename encoding to be utf-8
+	// on Windows and that writing the xml files should be successful for all
+	// the filenames in the test data set but it should also work for other
+	// platforms as well
+	for (vector<string>::iterator i = i18n_files.begin (); i != i18n_files.end ();
+	     ++i) {
+		string input_path = *i;
+		string output_filename = Glib::path_get_basename (input_path);
+		string output_path = Glib::build_filename (output_dir, output_filename);
+
+		CPPUNIT_ASSERT (write_xml (output_path));
+	}
+}
diff --git a/libs/canvas/test/xml.h b/libs/pbd/test/xml_test.h
similarity index 62%
copy from libs/canvas/test/xml.h
copy to libs/pbd/test/xml_test.h
index fbe606c..43619d3 100644
--- a/libs/canvas/test/xml.h
+++ b/libs/pbd/test/xml_test.h
@@ -4,14 +4,9 @@
 class XMLTest : public CppUnit::TestFixture
 {
 	CPPUNIT_TEST_SUITE (XMLTest);
-	CPPUNIT_TEST (get);
-	CPPUNIT_TEST (set);
+	CPPUNIT_TEST (testXMLFilenameEncoding);
 	CPPUNIT_TEST_SUITE_END ();
 
 public:
-	void get ();
-	void set ();
-
-private:	
-	void check (std::string const &);
+	void testXMLFilenameEncoding ();
 };
diff --git a/libs/pbd/wscript b/libs/pbd/wscript
index 8f947fb..b12210b 100644
--- a/libs/pbd/wscript
+++ b/libs/pbd/wscript
@@ -96,7 +96,8 @@ def configure(conf):
     conf.check(function_name='getmntent', header_name='mntent.h', define_name='HAVE_GETMNTENT',mandatory=False)
     conf.check(header_name='execinfo.h', define_name='HAVE_EXECINFO',mandatory=False)
     conf.check(header_name='unistd.h', define_name='HAVE_UNISTD',mandatory=False)
-    conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', cflags='-D_XOPEN_SOURCE=600', define_name='HAVE_POSIX_MEMALIGN', mandatory=False)
+    if not Options.options.ppc:
+        conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', cflags='-D_XOPEN_SOURCE=600', define_name='HAVE_POSIX_MEMALIGN', mandatory=False)
     conf.check(function_name='localtime_r', header_name='time.h', define_name='HAVE_LOCALTIME_R',mandatory=False)
 
     conf.write_config_header('libpbd-config.h', remove=False)
@@ -145,6 +146,7 @@ def build(bld):
     if bld.env['build_target'] == 'x86_64':
         obj.defines += [ 'USE_X86_64_ASM' ]
     if bld.env['build_target'] == 'mingw':
+        obj.defines += [ 'NO_POSIX_MEMALIGN' ]
         obj.source += [ 'windows_special_dirs.cc' ]
         obj.uselib += ' OLE'
 
@@ -160,6 +162,7 @@ def build(bld):
                 test/timer_test.cc
                 test/convert_test.cc
                 test/filesystem_test.cc
+                test/xml_test.cc
                 test/test_common.cc
         '''.split()
         testobj.target       = 'run-tests'
diff --git a/libs/ptformat/MSVCptformat/ptformat.vcproj b/libs/ptformat/MSVCptformat/ptformat.vcproj
new file mode 100644
index 0000000..55623e3
--- /dev/null
+++ b/libs/ptformat/MSVCptformat/ptformat.vcproj
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="ptformat"
+	ProjectGUID="{A0955F90-3AB8-4192-9ADB-5C4FDE6083AC}"
+	RootNamespace="ptformat"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug 32|Win32"
+			OutputDirectory="$(ProjectDir)\$(ConfigurationName)\bin"
+			IntermediateDirectory="$(ProjectDir)\$(ConfigurationName)\obj\$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="..\..\..\MSVCMixbus3\MSVCMixbus3.vsprops"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
+				Optimization="0"
+				AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include""
+				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;BUILDING_PTFORMAT;LIBPTFORMAT_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;_DEBUG;DEBUG="Debug";ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+				MinimalRebuild="true"
+				RuntimeLibrary="3"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="pthreadVCE2.lib ws2_32.lib"
+				OutputFile="$(OutDir)\$(DllPrefix)$(ProjectName)32-0D.dll"
+				AdditionalLibraryDirectories="F:\pthread-win32\Pre-built.2\lib"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /Y "$(OutDir)\$(TargetName).dll" "$(Debug32TargetFolder)\$(TargetName).dll"&#x0D;&#x0A;copy /Y "$(OutDir)\$(TargetName).dll" "$(Debug32TestSuiteFolder)\$(TargetName).dll"&#x0D;&#x0A;copy /Y "$(OutDir)\$(TargetName).lib" "$(GenericWin32LibraryFolder)\$(TargetName).lib"&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release 32|Win32"
+			OutputDirectory="$(ProjectDir)\$(ConfigurationName)\bin"
+			IntermediateDirectory="$(ProjectDir)\$(ConfigurationName)\obj\$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="..\..\..\MSVCMixbus3\MSVCMixbus3.vsprops"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include""
+				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_PTFORMAT;LIBPTFORMAT_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;NDEBUG;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+				StringPooling="false"
+				RuntimeLibrary="2"
+				EnableEnhancedInstructionSet="1"
+				WarningLevel="3"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="pthreadVCE2.lib ws2_32.lib"
+				OutputFile="$(OutDir)\$(DllPrefix)$(ProjectName)32-0.dll"
+				AdditionalLibraryDirectories="F:\pthread-win32\Pre-built.2\lib"
+				SubSystem="2"
+				OptimizeReferences="2"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /Y "$(OutDir)\$(TargetName).dll" "$(Release32TargetFolder)\$(TargetName).dll"&#x0D;&#x0A;copy /Y "$(OutDir)\$(TargetName).dll" "$(Release32TestSuiteFolder)\$(TargetName).dll"&#x0D;&#x0A;copy /Y "$(OutDir)\$(TargetName).lib" "$(GenericWin32LibraryFolder)\$(TargetName).lib"&#x0D;&#x0A;"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release 32 with Debugging Capability|Win32"
+			OutputDirectory="$(ProjectDir)\$(ConfigurationName)\bin"
+			IntermediateDirectory="$(ProjectDir)\$(ConfigurationName)\obj\$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="..\..\..\MSVCMixbus3\MSVCMixbus3.vsprops"
+			CharacterSet="2"
+			WholeProgramOptimization="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/FI$(TargetSxsFolder)\targetsxs.h"
+				Optimization="0"
+				AdditionalIncludeDirectories="..;..\..\pbd;"$(GenericIncludeFolder)\ardourext";"$(GenericLibraryFolder)\glib-2.0\include""
+				PreprocessorDefinitions="PLATFORM_WINDOWS;COMPILER_MSVC;UINTSDEFINED=1;_SECURE_SCL=0;BUILDING_PTFORMAT;LIBPTFORMAT_DLL_EXPORTS;NOMINMAX;INCLUDE_ARDOUR_MISCELLANEOUS=1;USE_CAIRO_IMAGE_SURFACE;BOOST_REGEX_DYN_LINK;BOOST_REGEX_NO_LIB;BOOST_CHRONO_NO_LIB;BOOST_SYSTEM_NO_LIB;BOOST_THREAD_NO_LIB;BOOST_DATE_TIME_NO_LIB;WIN32;_WIN32;ARCH_X86;USE_XMMINTRIN;BUILD_SSE_OPTIMIZATIONS;ENABLE_NLS;PROGRAM_NAME="\"Mixbus3\"";_REENTRANT;_USE_MATH_DEFINES;_LARGEFILE_SOURCE;_LARGEFILE64_SOURCE;LIBC_DISABLE_DEPRECATED;BOOST_SYSTEM_NO_DEPRECATED;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;INTERNAL_SHARED_LIBS=1;JACK_SESSION=1;HAVE_GLIB=1;HAVE_GTHREAD=1;HAVE_SNDFILE=1;HAVE_GIOMM=1;HAVE_CURL=1;HAVE_LO=1;HAVE_MODE_T=1;PHONE_HOME=1;FREESOUND=1;WINDOWS_KEY=\"Mod4><Super\";IS_OSX=0;HAVE_XML=1;HAVE_UUID=1;HAVE_LIBS_PBD=1;HAVE_JACK=1;HAVE_LIBS_MIDIPP2=1;HAVE_LIBS_EVORAL=1;HAVE_FFTW3=1;HAVE_FFTW3F=1;HAVE_AUBIO=1;HAVE_LIBS_VAMP_SDK=1;HAVE_LIBS_VAMP_PLUGINS=1;HAVE_LIBS_TAGLIB=1;HAVE_LIBS_LIBLTC=1;HAVE_LIBS_RUBBERBAND=1;HAVE_CONTROL_PROTOCOL=1;HAVE_FRONTIER=1;HAVE_GENERIC_MIDI=1;HAVE_MACKIE=1;HAVE_OSC=1;HAVE_TRANZPORT=1;HAVE_WIIMOTE=1;HAVE_LIBS_SURFACES=1;HAVE_2IN2OUT=1;HAVE_1IN2OUT=1;HAVE_VBAP=1;HAVE_LIBS_PANNERS=1;HAVE_LIBS_TIMECODE=1;HAVE_LRDF=1;HAVE_SAMPLERATE=1;HAVE_SERD=1;HAVE_SORD=1;HAVE_SRATOM=1;HAVE_LILV=1;HAVE_LILV_0_16_0=1;HAVE_OGG=1;HAVE_FLAC=1;HAVE_RUBBERBAND=1;USE_RUBBERBAND=1;HAVE_JACK_SESSION=1;HAVE_UNISTD=1;HAVE_JACK_ON_INFO_SHUTDOWN=1;HAVE_JACK_VIDEO_SUPPORT=1;HAVE_BOOST_SCOPED_PTR_HPP=1;HAVE_BOOST_PTR_CONTAINER_PTR_LIST_HPP=1;HAVE_LIBS_ARDOUR=1;HAVE_GTKMM=1;HAVE_GTK=1;HAVE_LIBS_GTKMM2EXT=1;HAVE_LIBS_CLEARLOOKS_NEWER=1;HAVE_BOOST_FORMAT_HPP=1;HAVE_LIBS_AUDIOGRAPHER=1;HAVE_GNOMECANVAS=0;HAVE_GNOMECANVASMM=0;HAVE_X11=0;HAVE_FONTCONFIG=1;HAVE_BOOST_SHARED_PTR_HPP=1;HAVE_BOOST_WEAK_PTR_HPP=1;HAVE_GTK2_ARDOUR=1;HAVE_EXPORT=1;HAVE_MIDI_MAPS=1;HAVE_MCP=1;HAVE_PATCHFILES=1;HAVE_TOOLS_SANITY_CHECK=1;SMF_VERSION=\"1.2\";CURRENT_SESSION_FILE_VERSION=3001"
+				StringPooling="false"
+				RuntimeLibrary="2"
+				EnableEnhancedInstructionSet="1"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="2"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="pthreadVCE2.lib ws2_32.lib"
+				OutputFile="$(OutDir)\$(DllPrefix)$(ProjectName)32-0RDC.dll"
+				AdditionalLibraryDirectories="F:\pthread-win32\Pre-built.2\lib"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /Y "$(OutDir)\$(TargetName).dll" "$(Release32TestSuiteFolder)\$(TargetName).dll"&#x0D;&#x0A;copy /Y "$(OutDir)\$(TargetName).lib" "$(GenericWin32LibraryFolder)\$(TargetName).lib"&#x0D;&#x0A;"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\ptfformat.cc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\ptfformat.h"
+				>
+			</File>
+			<File
+				RelativePath="..\ptformat\visibility.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\icons\win32\msvc_resources.rc"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/libs/ptformat/ptfformat.cc b/libs/ptformat/ptfformat.cc
new file mode 100644
index 0000000..bed4bad
--- /dev/null
+++ b/libs/ptformat/ptfformat.cc
@@ -0,0 +1,1299 @@
+/*
+    Copyright (C) 2015  Damien Zammit
+    Copyright (C) 2015  Robin Gareus
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+*/
+
+#include "ptfformat.h"
+
+#include <stdio.h>
+#include <string>
+#include <string.h>
+#include <assert.h>
+
+using namespace std;
+
+static const uint32_t baselut[16] = {
+	0xaaaaaaaa, 0xaa955555, 0xa9554aaa, 0xa552a955,
+	0xb56ad5aa, 0x95a95a95, 0x94a5294a, 0x9696b4b5,
+	0xd2d25a5a, 0xd24b6d25, 0xdb6db6da, 0xd9249b6d,
+	0xc9b64d92, 0xcd93264d, 0xccd99b32, 0xcccccccd
+};
+
+static const uint32_t xorlut[16] = {
+	0x00000000, 0x00000b00, 0x000100b0, 0x00b0b010,
+	0x010b0b01, 0x0b10b10b, 0x01bb101b, 0x0111bbbb,
+	0x1111bbbb, 0x1bbb10bb, 0x1bb0bb0b, 0xbb0b0bab,
+	0xbab0b0ba, 0xb0abaaba, 0xba0aabaa, 0xbaaaaaaa
+};
+
+static uint32_t swapbytes32 (const uint32_t v) {
+	uint32_t rv = 0;
+	rv |= ((v >>  0) & 0xf) << 28;
+	rv |= ((v >>  4) & 0xf) << 24;
+	rv |= ((v >>  8) & 0xf) << 20;
+	rv |= ((v >> 12) & 0xf) << 16;
+	rv |= ((v >> 16) & 0xf) << 12;
+	rv |= ((v >> 20) & 0xf) <<  8;
+	rv |= ((v >> 24) & 0xf) <<  4;
+	rv |= ((v >> 28) & 0xf) <<  0;
+	return rv;
+}
+
+static uint64_t gen_secret (int i) {
+	assert (i > 0 && i < 256);
+	int iwrap = i & 0x7f; // wrap at 0x80;
+	uint32_t xor_lo = 0;  // 0x40 flag
+	int idx;              // mirror at 0x40;
+
+	if (iwrap & 0x40) {
+		xor_lo = 0x1;
+		idx    = 0x80 - iwrap;
+	} else {
+		idx    = iwrap;
+	}
+
+	int i16 = (idx >> 1) & 0xf;
+	if (idx & 0x20) {
+		i16 = 15 - i16;
+	}
+
+	uint32_t lo = baselut [i16];
+	uint32_t xk = xorlut  [i16];
+
+	if (idx & 0x20) {
+		lo ^= 0xaaaaaaab;
+		xk ^= 0x10000000; 
+	}
+	uint32_t hi = swapbytes32 (lo) ^ xk;
+	return  ((uint64_t)hi << 32) | (lo ^ xor_lo);
+}
+
+PTFFormat::PTFFormat() {
+}
+
+PTFFormat::~PTFFormat() {
+	if (ptfunxored) {
+		free(ptfunxored);
+	}
+}
+
+bool
+PTFFormat::foundin(std::string haystack, std::string needle) {
+	size_t found = haystack.find(needle);
+	if (found != std::string::npos) {
+		return true;
+	} else {
+		return false;
+	}
+}
+
+/* Return values:	0            success
+			0x01 to 0xff value of missing lut
+			-1           could not open file as ptf
+*/
+int
+PTFFormat::load(std::string path, int64_t targetsr) {
+	FILE *fp;
+	unsigned char xxor[256];
+	unsigned char ct;
+	unsigned char px;
+	uint64_t key;
+	uint16_t i;
+	int j;
+	int inv;
+	unsigned char message;
+
+	if (! (fp = fopen(path.c_str(), "rb"))) {
+		return -1;
+	}
+
+	fseek(fp, 0, SEEK_END);
+	len = ftell(fp);
+	if (len < 0x40) {
+		fclose(fp);
+		return -1;
+	}
+	fseek(fp, 0x40, SEEK_SET);
+	fread(&c0, 1, 1, fp);
+	fread(&c1, 1, 1, fp);
+
+	// For version <= 7 support:
+	version = c0 & 0x0f;
+	c0 = c0 & 0xc0;
+
+	if (! (ptfunxored = (unsigned char*) malloc(len * sizeof(unsigned char)))) {
+		/* Silently fail -- out of memory*/
+		fclose(fp);
+		ptfunxored = 0;
+		return -1;
+	}
+
+	fseek(fp, 0x0, SEEK_SET);
+
+	switch (c0) {
+	case 0x00:
+		// Success! easy one
+		xxor[0] = c0;
+		xxor[1] = c1;
+		//fprintf(stderr, "%02x %02x", c0, c1);
+
+		for (i = 2; i < 64; i++) {
+			xxor[i] = (xxor[i-1] + c1 - c0) & 0xff;
+			//fprintf(stderr, "%02x ", xxor[i]);
+		}
+		px = xxor[0];
+		fread(&ct, 1, 1, fp);
+		message = px ^ ct;
+		ptfunxored[0] = message;
+		px  = xxor[1];
+		fread(&ct, 1, 1, fp);
+		message = px ^ ct;
+		ptfunxored[1] = message;
+		i = 2;
+		j = 2;
+		while (fread(&ct, 1, 1, fp) != 0) {
+			if (i%64 == 0) {
+				i = 0;
+			}
+			message = xxor[i] ^ ct;
+			ptfunxored[j] = message;
+			i++;
+			j++;
+		}
+		break;
+	case 0x80:
+		//Success! easy two
+		xxor[0] = c0;
+		xxor[1] = c1;
+		for (i = 2; i < 256; i++) {
+			if (i%64 == 0) {
+				xxor[i] = c0;
+			} else {
+				xxor[i] = ((xxor[i-1] + c1 - c0) & 0xff);
+			}
+		}
+		for (i = 0; i < 64; i++) {
+			xxor[i] ^= 0x80;
+		}
+		for (i = 128; i < 192; i++) {
+			xxor[i] ^= 0x80;
+		}
+		px = xxor[0];
+		fread(&ct, 1, 1, fp);
+		message = px ^ ct;
+		ptfunxored[0] = message;
+		px  = xxor[1];
+		fread(&ct, 1, 1, fp);
+		message = px ^ ct;
+		ptfunxored[1] = message;
+		i = 2;
+		j = 2;
+		while (fread(&ct, 1, 1, fp) != 0) {
+			if (i%256 == 0) {
+				i = 0;
+			}
+			message = xxor[i] ^ ct;
+			ptfunxored[j] = message;
+			i++;
+			j++;
+		}
+		break;
+	case 0x40:
+	case 0xc0:
+		xxor[0] = c0;
+		xxor[1] = c1;
+		for (i = 2; i < 256; i++) {
+			if (i%64 == 0) {
+				xxor[i] = c0;
+			} else {
+				xxor[i] = ((xxor[i-1] + c1 - c0) & 0xff);
+			}
+		}
+
+		key = gen_secret(c1);
+		for (i = 0; i < 64; i++) {
+			xxor[i] ^= (((key >> i) & 1) * 2 * 0x40) + 0x40;
+		}
+		for (i = 128; i < 192; i++) {
+			inv = (((key >> (i-128)) & 1) == 1) ? 1 : 3;
+			xxor[i] ^= (inv * 0x40);
+		}
+
+		for (i = 192; i < 256; i++) {
+			xxor[i] ^= 0x80;
+		}
+		px = xxor[0];
+		fread(&ct, 1, 1, fp);
+		message = px ^ ct;
+		ptfunxored[0] = message;
+		px  = xxor[1];
+		fread(&ct, 1, 1, fp);
+		message = px ^ ct;
+		ptfunxored[1] = message;
+		i = 2;
+		j = 2;
+		while (fread(&ct, 1, 1, fp) != 0) {
+			if (i%256 == 0) {
+				i = 0;
+			}
+			message = xxor[i] ^ ct;
+			ptfunxored[j] = message;
+			i++;
+			j++;
+		}
+		break;
+		break;
+	default:
+		//Should not happen, failed c[0] c[1]
+		return -1;
+		break;
+	}
+	fclose(fp);
+	targetrate = targetsr;
+	parse();
+	return 0;
+}
+
+void
+PTFFormat::unxor10(void)
+{
+	key10a = ptfunxored[0x9f];
+	key10b = ptfunxored[0x9e] - ptfunxored[0x9b];
+	int j, k, currkey;
+
+	k = 0x1000;
+	for (j = k; j < k + 0x1000 && j < len; j++) {
+		ptfunxored[j] ^= key10a;
+	}
+	k = 0x2000;
+	for (j = k; j < k + 0x1000 && j < len; j++) {
+		ptfunxored[j] ^= key10b;
+	}
+	currkey = key10b;
+	while (k < len) {
+		k += 0x1000;
+		currkey = (key10a + currkey) & 0xff;
+		for (j = k; j < k + 0x1000 && j < len; j++) {
+			ptfunxored[j] ^= currkey;
+		}
+	}
+}
+
+void
+PTFFormat::parse(void) {
+	version = (version == 0) ? ptfunxored[61] : version;
+
+	if (version == 5) {
+		parse5header();
+		setrates();
+		parseaudio5();
+		parserest5();
+	} else if (version == 7) {
+		parse7header();
+		setrates();
+		parseaudio();
+		parserest89();
+	} else if (version == 8) {
+		parse8header();
+		setrates();
+		parseaudio();
+		parserest89();
+	} else if (version == 9) {
+		parse9header();
+		setrates();
+		parseaudio();
+		parserest89();
+	} else if (version == 10) {
+		unxor10();
+		parse10header();
+		setrates();
+		parseaudio();
+		parserest10();
+	} else {
+		// Should not occur
+	}
+}
+
+void
+PTFFormat::setrates(void) {
+	ratefactor = 1.f;
+	if (sessionrate != 0) {
+		ratefactor = (float)targetrate / sessionrate;
+	}
+}
+
+void
+PTFFormat::parse5header(void) {
+	int k;
+
+	// Find session sample rate
+	k = 0x100;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5a) &&
+				(ptfunxored[k+1] == 0x00) &&
+				(ptfunxored[k+2] == 0x02)) {
+			break;
+		}
+		k++;
+	}
+
+	sessionrate = 0;
+	sessionrate |= ptfunxored[k+12] << 16;
+	sessionrate |= ptfunxored[k+13] << 8;
+	sessionrate |= ptfunxored[k+14];
+}
+
+void
+PTFFormat::parse7header(void) {
+	int k;
+
+	// Find session sample rate
+	k = 0x100;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5a) &&
+				(ptfunxored[k+1] == 0x00) &&
+				(ptfunxored[k+2] == 0x05)) {
+			break;
+		}
+		k++;
+	}
+
+	sessionrate = 0;
+	sessionrate |= ptfunxored[k+12] << 16;
+	sessionrate |= ptfunxored[k+13] << 8;
+	sessionrate |= ptfunxored[k+14];
+}
+
+void
+PTFFormat::parse8header(void) {
+	int k;
+
+	// Find session sample rate
+	k = 0;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5a) &&
+				(ptfunxored[k+1] == 0x05)) {
+			break;
+		}
+		k++;
+	}
+
+	sessionrate = 0;
+	sessionrate |= ptfunxored[k+11];
+	sessionrate |= ptfunxored[k+12] << 8;
+	sessionrate |= ptfunxored[k+13] << 16;
+}
+
+void
+PTFFormat::parse9header(void) {
+	int k;
+
+	// Find session sample rate
+	k = 0x100;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5a) &&
+				(ptfunxored[k+1] == 0x06)) {
+			break;
+		}
+		k++;
+	}
+
+	sessionrate = 0;
+	sessionrate |= ptfunxored[k+11];
+	sessionrate |= ptfunxored[k+12] << 8;
+	sessionrate |= ptfunxored[k+13] << 16;
+}
+
+void
+PTFFormat::parse10header(void) {
+	int k;
+
+	// Find session sample rate
+	k = 0;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5a) &&
+				(ptfunxored[k+1] == 0x09)) {
+			break;
+		}
+		k++;
+	}
+
+	sessionrate = 0;
+	sessionrate |= ptfunxored[k+11];
+	sessionrate |= ptfunxored[k+12] << 8;
+	sessionrate |= ptfunxored[k+13] << 16;
+}
+
+void
+PTFFormat::parserest5(void) {
+	int i, j, k;
+	int regionspertrack, lengthofname;
+	int startbytes, lengthbytes, offsetbytes;
+	uint16_t tracknumber = 0;
+	uint16_t findex;
+	uint16_t rindex;
+
+	k = 0;
+	for (i = 0; i < 5; i++) {
+		while (k < len) {
+			if (		(ptfunxored[k  ] == 0x5a) &&
+					(ptfunxored[k+1] == 0x00) &&
+					(ptfunxored[k+2] == 0x03)) {
+				break;
+			}
+			k++;
+		}
+		k++;
+	}
+	k--;
+
+	for (i = 0; i < 2; i++) {
+		while (k > 0) {
+			if (		(ptfunxored[k  ] == 0x5a) &&
+					(ptfunxored[k+1] == 0x00) &&
+					(ptfunxored[k+2] == 0x01)) {
+				break;
+			}
+			k--;
+		}
+		k--;
+	}
+	k++;
+
+	rindex = 0;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0xff) &&
+				(ptfunxored[k+1] == 0xff)) {
+			break;
+		}
+		while (k < len) {
+			if (		(ptfunxored[k  ] == 0x5a) &&
+					(ptfunxored[k+1] == 0x00) &&
+					(ptfunxored[k+2] == 0x01)) {
+				break;
+			}
+			k++;
+		}
+
+		lengthofname = ptfunxored[k+12];
+		if (ptfunxored[k+13] == 0x5a) {
+			k++;
+			break;
+		}
+		char name[256] = {0};
+		for (j = 0; j < lengthofname; j++) {
+			name[j] = ptfunxored[k+13+j];
+		}
+		name[j] = '\0';
+		regionspertrack = ptfunxored[k+13+j+3];
+		for (i = 0; i < regionspertrack; i++) {
+			while (k < len) {
+				if (		(ptfunxored[k  ] == 0x5a) &&
+						(ptfunxored[k+1] == 0x00) &&
+						(ptfunxored[k+2] == 0x03)) {
+					break;
+				}
+				k++;
+			}
+			j = k+16;
+			startbytes = (ptfunxored[j+3] & 0xf0) >> 4;
+			lengthbytes = (ptfunxored[j+2] & 0xf0) >> 4;
+			offsetbytes = (ptfunxored[j+1] & 0xf0) >> 4;
+			//somethingbytes = (ptfunxored[j+1] & 0xf);
+			findex = ptfunxored[k+14];
+			j--;
+			uint32_t start = 0;
+			switch (startbytes) {
+			case 4:
+				start |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				start |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				start |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				start |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=startbytes;
+			uint32_t length = 0;
+			switch (lengthbytes) {
+			case 4:
+				length |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				length |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				length |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				length |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=lengthbytes;
+			uint32_t sampleoffset = 0;
+			switch (offsetbytes) {
+			case 4:
+				sampleoffset |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				sampleoffset |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				sampleoffset |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				sampleoffset |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=offsetbytes;
+
+			//printf("name=`%s` start=%04x length=%04x offset=%04x findex=%d\n", name,start,length,sampleoffset,findex);
+
+			std::string filename = string(name) + extension;
+			wav_t f = { 
+				filename,
+				findex,
+				(int64_t)(start*ratefactor),
+				(int64_t)(length*ratefactor),
+			};
+
+			vector<wav_t>::iterator begin = audiofiles.begin();
+			vector<wav_t>::iterator finish = audiofiles.end();
+			vector<wav_t>::iterator found;
+			// Add file to lists
+			if ((found = std::find(begin, finish, f)) != finish) {
+				region_t r = {
+					name,
+					rindex,
+					(int64_t)(start*ratefactor),
+					(int64_t)(sampleoffset*ratefactor),
+					(int64_t)(length*ratefactor),
+					*found,
+				};
+				regions.push_back(r);
+				vector<track_t>::iterator ti;
+				vector<track_t>::iterator bt = tracks.begin();
+				vector<track_t>::iterator et = tracks.end();
+				track_t tr = { name, 0, 0, r };
+				if ((ti = std::find(bt, et, tr)) != et) {
+					tracknumber = (*ti).index;
+				} else {
+					tracknumber = tracks.size() + 1;
+				}
+				track_t t = {
+					name,
+					(uint16_t)tracknumber,
+					uint8_t(0),
+					r
+				};
+				tracks.push_back(t);
+			} else {
+				region_t r = {
+					name,
+					rindex,
+					(int64_t)(start*ratefactor),
+					(int64_t)(sampleoffset*ratefactor),
+					(int64_t)(length*ratefactor),
+					f,
+				};
+				regions.push_back(r);
+				vector<track_t>::iterator ti;
+				vector<track_t>::iterator bt = tracks.begin();
+				vector<track_t>::iterator et = tracks.end();
+				track_t tr = { name, 0, 0, r };
+				if ((ti = std::find(bt, et, tr)) != et) {
+					tracknumber = (*ti).index;
+				} else {
+					tracknumber = tracks.size() + 1;
+				}
+				track_t t = {
+					name,
+					(uint16_t)tracknumber,
+					uint8_t(0),
+					r
+				};
+				tracks.push_back(t);
+			}
+			rindex++;
+			k++;
+		}
+		k++;
+	}
+}
+
+void
+PTFFormat::parseaudio5(void) {
+	int i,k,l;
+	int lengthofname, wavnumber;
+
+	// Find end of wav file list
+	k = 0;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5f) &&
+				(ptfunxored[k+1] == 0x50) &&
+				(ptfunxored[k+2] == 0x35)) {
+			break;
+		}
+		k++;
+	}
+	k++;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5f) &&
+				(ptfunxored[k+1] == 0x50) &&
+				(ptfunxored[k+2] == 0x35)) {
+			break;
+		}
+		k++;
+	}
+
+	// Find actual wav names
+	uint16_t numberofwavs = ptfunxored[k-23];
+	char wavname[256];
+	for (i = k; i < len; i++) {
+		if (		(ptfunxored[i  ] == 'F') &&
+				(ptfunxored[i+1] == 'i') &&
+				(ptfunxored[i+2] == 'l') &&
+				(ptfunxored[i+3] == 'e') &&
+				(ptfunxored[i+4] == 's')) {
+			break;
+		}
+	}
+	
+	wavnumber = 0;
+	i+=16;
+	while (i < len && numberofwavs > 0) {
+		i++;
+		if (		(ptfunxored[i  ] == 0x5a) &&
+				(ptfunxored[i+1] == 0x00) &&
+				(ptfunxored[i+2] == 0x05)) {
+			break;
+		}
+		lengthofname = ptfunxored[i];
+		i++;
+		l = 0;
+		while (l < lengthofname) {
+			wavname[l] = ptfunxored[i+l];
+			l++;
+		}
+		i+=lengthofname + 4;
+		wavname[l] = 0;
+		if (foundin(wavname, ".wav")) {
+			extension = string(".wav");
+		} else if (foundin(wavname, ".aif")) {
+			extension = string(".aif");
+		} else {
+			extension = string("");
+		}
+
+		std::string wave = string(wavname);
+		wav_t f = { wave, (uint16_t)(wavnumber++), 0, 0 };
+
+		if (foundin(wave, string(".grp"))) {
+			continue;
+		}
+
+		actualwavs.push_back(f);
+		audiofiles.push_back(f);
+		//printf("done\n");
+		numberofwavs--;
+		i += 7;
+	}
+}
+
+void
+PTFFormat::parseaudio(void) {
+	int i,j,k,l;
+
+	// Find end of wav file list
+	k = 0;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0xff) &&
+				(ptfunxored[k+1] == 0xff) &&
+				(ptfunxored[k+2] == 0xff) &&
+				(ptfunxored[k+3] == 0xff)) {
+			break;
+		}
+		k++;
+	}
+
+	// Find actual wav names
+	bool first = true;
+	uint16_t numberofwavs;
+	char wavname[256];
+	for (i = k; i > 4; i--) {
+		if (		((ptfunxored[i  ] == 'W') || (ptfunxored[i  ] == 'A')) &&
+				((ptfunxored[i-1] == 'A') || (ptfunxored[i-1] == 'I')) &&
+				((ptfunxored[i-2] == 'V') || (ptfunxored[i-2] == 'F')) &&
+				((ptfunxored[i-3] == 'E') || (ptfunxored[i-3] == 'F'))) {
+			j = i-4;
+			l = 0;
+			while (ptfunxored[j] != '\0') {
+				wavname[l] = ptfunxored[j];
+				l++;
+				j--;
+			}
+			wavname[l] = 0;
+			if (ptfunxored[i] == 'W') {
+				extension = string(".wav");
+			} else {
+				extension = string(".aif");
+			}
+			//uint8_t playlist = ptfunxored[j-8];
+
+			if (first) {
+				first = false;
+				for (j = k; j > 4; j--) {
+					if (	(ptfunxored[j  ] == 0x01) &&
+						(ptfunxored[j-1] == 0x5a)) {
+
+						numberofwavs = 0;
+						numberofwavs |= (uint32_t)(ptfunxored[j-2] << 24);
+						numberofwavs |= (uint32_t)(ptfunxored[j-3] << 16);
+						numberofwavs |= (uint32_t)(ptfunxored[j-4] << 8);
+						numberofwavs |= (uint32_t)(ptfunxored[j-5]);
+						//printf("%d wavs\n", numberofwavs);
+						break;
+					}
+				k--;
+				}
+			}
+
+			std::string wave = string(wavname);
+			std::reverse(wave.begin(), wave.end());
+			wav_t f = { wave, (uint16_t)(numberofwavs - 1), 0, 0 };
+
+			if (foundin(wave, string(".grp"))) {
+				continue;
+			}
+
+			actualwavs.push_back(f);
+
+			numberofwavs--;
+			if (numberofwavs <= 0)
+				break;
+		}
+	}
+}
+
+void
+PTFFormat::parserest89(void) {
+	int i,j,k,l;
+	// Find Regions
+	uint8_t startbytes = 0;
+	uint8_t lengthbytes = 0;
+	uint8_t offsetbytes = 0;
+	uint8_t somethingbytes = 0;
+	uint8_t skipbytes = 0;
+
+	k = 0;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 'S') &&
+				(ptfunxored[k+1] == 'n') &&
+				(ptfunxored[k+2] == 'a') &&
+				(ptfunxored[k+3] == 'p')) {
+			break;
+		}
+		k++;
+	}
+	uint16_t rindex = 0;
+	uint32_t findex = 0;
+	for (i = k; i < len-70; i++) {
+		if (		(ptfunxored[i  ] == 0x5a) &&
+				(ptfunxored[i+1] == 0x0a)) {
+				break;
+		}
+		if (		(ptfunxored[i  ] == 0x5a) &&
+				(ptfunxored[i+1] == 0x0c)) {
+
+			uint8_t lengthofname = ptfunxored[i+9];
+
+			char name[256] = {0};
+			for (j = 0; j < lengthofname; j++) {
+				name[j] = ptfunxored[i+13+j];
+			}
+			name[j] = '\0';
+			j += i+13;
+			//uint8_t disabled = ptfunxored[j];
+
+			offsetbytes = (ptfunxored[j+1] & 0xf0) >> 4;
+			lengthbytes = (ptfunxored[j+2] & 0xf0) >> 4;
+			startbytes = (ptfunxored[j+3] & 0xf0) >> 4;
+			somethingbytes = (ptfunxored[j+3] & 0xf);
+			skipbytes = ptfunxored[j+4];
+			findex = ptfunxored[j+5
+					+startbytes
+					+lengthbytes
+					+offsetbytes
+					+somethingbytes
+					+skipbytes
+					+40];
+			/*rindex = ptfunxored[j+5
+					+startbytes
+					+lengthbytes
+					+offsetbytes
+					+somethingbytes
+					+skipbytes
+					+24];
+			*/
+			uint32_t sampleoffset = 0;
+			switch (offsetbytes) {
+			case 4:
+				sampleoffset |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				sampleoffset |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				sampleoffset |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				sampleoffset |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=offsetbytes;
+			uint32_t length = 0;
+			switch (lengthbytes) {
+			case 4:
+				length |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				length |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				length |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				length |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=lengthbytes;
+			uint32_t start = 0;
+			switch (startbytes) {
+			case 4:
+				start |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				start |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				start |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				start |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=startbytes;
+			/*
+			uint32_t something = 0;
+			switch (somethingbytes) {
+			case 4:
+				something |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				something |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				something |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				something |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=somethingbytes;
+			*/
+			std::string filename = string(name) + extension;
+			wav_t f = { 
+				filename,
+				0,
+				(int64_t)(start*ratefactor),
+				(int64_t)(length*ratefactor),
+			};
+
+			f.index = findex;
+			//printf("something=%d\n", something);
+
+			vector<wav_t>::iterator begin = actualwavs.begin();
+			vector<wav_t>::iterator finish = actualwavs.end();
+			vector<wav_t>::iterator found;
+			// Add file to list only if it is an actual wav
+			if ((found = std::find(begin, finish, f)) != finish) {
+				audiofiles.push_back(f);
+				// Also add plain wav as region
+				region_t r = {
+					name,
+					rindex,
+					(int64_t)(start*ratefactor),
+					(int64_t)(sampleoffset*ratefactor),
+					(int64_t)(length*ratefactor),
+					f
+				};
+				regions.push_back(r);
+			// Region only
+			} else {
+				if (foundin(filename, string(".grp"))) {
+					continue;
+				}
+				region_t r = {
+					name,
+					rindex,
+					(int64_t)(start*ratefactor),
+					(int64_t)(sampleoffset*ratefactor),
+					(int64_t)(length*ratefactor),
+					f
+				};
+				regions.push_back(r);
+			}
+			rindex++;
+		}
+	}
+
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5a) &&
+				(ptfunxored[k+1] == 0x03)) {
+				break;
+		}
+		k++;
+	}
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 0x5a) &&
+				(ptfunxored[k+1] == 0x02)) {
+				break;
+		}
+		k++;
+	}
+	k++;
+
+	//  Tracks
+	uint32_t offset;
+	uint32_t tracknumber = 0;
+	uint32_t regionspertrack = 0;
+	for (;k < len; k++) {
+		if (	(ptfunxored[k  ] == 0x5a) &&
+			(ptfunxored[k+1] == 0x04)) {
+			break;
+		}
+		if (	(ptfunxored[k  ] == 0x5a) &&
+			(ptfunxored[k+1] == 0x02)) {
+
+			uint8_t lengthofname = 0;
+			lengthofname = ptfunxored[k+9];
+			if (lengthofname == 0x5a) {
+				continue;
+			}
+			track_t tr;
+
+			regionspertrack = (uint8_t)(ptfunxored[k+13+lengthofname]);
+
+			//printf("regions/track=%d\n", regionspertrack);
+			char name[256] = {0};
+			for (j = 0; j < lengthofname; j++) {
+				name[j] = ptfunxored[j+k+13];
+			}
+			name[j] = '\0';
+			tr.name = string(name);
+			tr.index = tracknumber++;
+
+			for (j = k; regionspertrack > 0 && j < len; j++) {
+				for (l = j; l < len; l++) {
+					if (	(ptfunxored[l  ] == 0x5a) &&
+						(ptfunxored[l+1] == 0x07)) {
+						j = l;
+						break;
+					}
+				}
+
+
+				if (regionspertrack == 0) {
+				//	tr.reg.index = (uint8_t)ptfunxored[j+13+lengthofname+5];
+					break;
+				} else {
+
+					tr.reg.index = (uint8_t)(ptfunxored[l+11]);
+					vector<region_t>::iterator begin = regions.begin();
+					vector<region_t>::iterator finish = regions.end();
+					vector<region_t>::iterator found;
+					if ((found = std::find(begin, finish, tr.reg)) != finish) {
+						tr.reg = (*found);
+					}
+					i = l+16;
+					offset = 0;
+					offset |= (uint32_t)(ptfunxored[i+3] << 24);
+					offset |= (uint32_t)(ptfunxored[i+2] << 16);
+					offset |= (uint32_t)(ptfunxored[i+1] << 8);
+					offset |= (uint32_t)(ptfunxored[i]);
+					tr.reg.startpos = (int64_t)(offset*ratefactor);
+					if (tr.reg.length > 0) {
+						tracks.push_back(tr);
+					}
+					regionspertrack--;
+				}
+			}
+		}
+	}
+}
+
+void
+PTFFormat::parserest10(void) {
+	int i,j,k,l;
+	// Find Regions
+	uint8_t startbytes = 0;
+	uint8_t lengthbytes = 0;
+	uint8_t offsetbytes = 0;
+	uint8_t somethingbytes = 0;
+	uint8_t skipbytes = 0;
+
+	k = 0;
+	while (k < len) {
+		if (		(ptfunxored[k  ] == 'S') &&
+				(ptfunxored[k+1] == 'n') &&
+				(ptfunxored[k+2] == 'a') &&
+				(ptfunxored[k+3] == 'p')) {
+			break;
+		}
+		k++;
+	}
+	for (i = k; i < len-70; i++) {
+		if (		(ptfunxored[i  ] == 0x5a) &&
+				(ptfunxored[i+1] == 0x02)) {
+				k = i;
+				break;
+		}
+	}
+	k++;
+	for (i = k; i < len-70; i++) {
+		if (		(ptfunxored[i  ] == 0x5a) &&
+				(ptfunxored[i+1] == 0x02)) {
+				k = i;
+				break;
+		}
+	}
+	k++;
+	uint16_t rindex = 0;
+	uint32_t findex = 0;
+	for (i = k; i < len-70; i++) {
+		if (		(ptfunxored[i  ] == 0x5a) &&
+				(ptfunxored[i+1] == 0x08)) {
+				break;
+		}
+		if (		(ptfunxored[i  ] == 0x5a) &&
+				(ptfunxored[i+1] == 0x01)) {
+
+			uint8_t lengthofname = ptfunxored[i+9];
+			if (ptfunxored[i+13] == 0x5a) {
+				continue;
+			}
+			char name[256] = {0};
+			for (j = 0; j < lengthofname; j++) {
+				name[j] = ptfunxored[i+13+j];
+			}
+			name[j] = '\0';
+			j += i+13;
+			//uint8_t disabled = ptfunxored[j];
+			//printf("%s\n", name);
+
+			offsetbytes = (ptfunxored[j+1] & 0xf0) >> 4;
+			lengthbytes = (ptfunxored[j+2] & 0xf0) >> 4;
+			startbytes = (ptfunxored[j+3] & 0xf0) >> 4;
+			somethingbytes = (ptfunxored[j+3] & 0xf);
+			skipbytes = ptfunxored[j+4];
+			findex = ptfunxored[j+5
+					+startbytes
+					+lengthbytes
+					+offsetbytes
+					+somethingbytes
+					+skipbytes
+					+37];
+			/*rindex = ptfunxored[j+5
+					+startbytes
+					+lengthbytes
+					+offsetbytes
+					+somethingbytes
+					+skipbytes
+					+24];
+			*/
+			uint32_t sampleoffset = 0;
+			switch (offsetbytes) {
+			case 4:
+				sampleoffset |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				sampleoffset |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				sampleoffset |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				sampleoffset |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=offsetbytes;
+			uint32_t length = 0;
+			switch (lengthbytes) {
+			case 4:
+				length |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				length |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				length |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				length |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=lengthbytes;
+			uint32_t start = 0;
+			switch (startbytes) {
+			case 4:
+				start |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				start |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				start |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				start |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=startbytes;
+			/*
+			uint32_t something = 0;
+			switch (somethingbytes) {
+			case 4:
+				something |= (uint32_t)(ptfunxored[j+8] << 24);
+			case 3:
+				something |= (uint32_t)(ptfunxored[j+7] << 16);
+			case 2:
+				something |= (uint32_t)(ptfunxored[j+6] << 8);
+			case 1:
+				something |= (uint32_t)(ptfunxored[j+5]);
+			default:
+				break;
+			}
+			j+=somethingbytes;
+			*/
+			std::string filename = string(name) + extension;
+			wav_t f = { 
+				filename,
+				0,
+				(int64_t)(start*ratefactor),
+				(int64_t)(length*ratefactor),
+			};
+
+			if (strlen(name) == 0) {
+				continue;
+			}
+			if (length == 0) {
+				continue;
+			}
+			f.index = findex;
+			//printf("something=%d\n", something);
+
+			vector<wav_t>::iterator begin = actualwavs.begin();
+			vector<wav_t>::iterator finish = actualwavs.end();
+			vector<wav_t>::iterator found;
+			// Add file to list only if it is an actual wav
+			if ((found = std::find(begin, finish, f)) != finish) {
+				audiofiles.push_back(f);
+				// Also add plain wav as region
+				region_t r = {
+					name,
+					rindex,
+					(int64_t)(start*ratefactor),
+					(int64_t)(sampleoffset*ratefactor),
+					(int64_t)(length*ratefactor),
+					f
+				};
+				regions.push_back(r);
+			// Region only
+			} else {
+				if (foundin(filename, string(".grp"))) {
+					continue;
+				}
+				region_t r = {
+					name,
+					rindex,
+					(int64_t)(start*ratefactor),
+					(int64_t)(sampleoffset*ratefactor),
+					(int64_t)(length*ratefactor),
+					f
+				};
+				regions.push_back(r);
+			}
+			rindex++;
+			//printf("%s\n", name);
+		}
+	}
+	//  Tracks
+	uint32_t offset;
+	uint32_t tracknumber = 0;
+	uint32_t regionspertrack = 0;
+	for (;k < len; k++) {
+		if (	(ptfunxored[k  ] == 0x5a) &&
+			(ptfunxored[k+1] == 0x08)) {
+			break;
+		}
+	}
+	k++;
+	for (;k < len; k++) {
+		if (	(ptfunxored[k  ] == 0x5a) &&
+			(ptfunxored[k+1] == 0x04)) {
+			break;
+		}
+		if (	(ptfunxored[k  ] == 0x5a) &&
+			(ptfunxored[k+1] == 0x02)) {
+
+			uint8_t lengthofname = 0;
+			lengthofname = ptfunxored[k+9];
+			if (lengthofname == 0x5a) {
+				continue;
+			}
+			track_t tr;
+
+			regionspertrack = (uint8_t)(ptfunxored[k+13+lengthofname]);
+
+			//printf("regions/track=%d\n", regionspertrack);
+			char name[256] = {0};
+			for (j = 0; j < lengthofname; j++) {
+				name[j] = ptfunxored[j+k+13];
+			}
+			name[j] = '\0';
+			tr.name = string(name);
+			tr.index = tracknumber++;
+
+			for (j = k; regionspertrack > 0 && j < len; j++) {
+				for (l = j; l < len; l++) {
+					if (	(ptfunxored[l  ] == 0x5a) &&
+						(ptfunxored[l+1] == 0x08)) {
+						j = l+1;
+						break;
+					}
+				}
+
+
+				if (regionspertrack == 0) {
+				//	tr.reg.index = (uint8_t)ptfunxored[j+13+lengthofname+5];
+					break;
+				} else {
+
+					tr.reg.index = (uint8_t)(ptfunxored[l+11]);
+					vector<region_t>::iterator begin = regions.begin();
+					vector<region_t>::iterator finish = regions.end();
+					vector<region_t>::iterator found;
+					if ((found = std::find(begin, finish, tr.reg)) != finish) {
+						tr.reg = (*found);
+					}
+					i = l+16;
+					offset = 0;
+					offset |= (uint32_t)(ptfunxored[i+3] << 24);
+					offset |= (uint32_t)(ptfunxored[i+2] << 16);
+					offset |= (uint32_t)(ptfunxored[i+1] << 8);
+					offset |= (uint32_t)(ptfunxored[i]);
+					tr.reg.startpos = (int64_t)(offset*ratefactor);
+					if (tr.reg.length > 0) {
+						tracks.push_back(tr);
+					}
+					regionspertrack--;
+				}
+			}
+		}
+	}
+}
diff --git a/libs/ptformat/ptfformat.h b/libs/ptformat/ptfformat.h
new file mode 100644
index 0000000..be7076d
--- /dev/null
+++ b/libs/ptformat/ptfformat.h
@@ -0,0 +1,136 @@
+/*
+    Copyright (C) 2015  Damien Zammit
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+*/
+#ifndef PTFFORMAT_H
+#define PTFFORMAT_H
+
+#include <string>
+#include <algorithm>
+#include <vector>
+#include <stdint.h>
+
+#include "ptformat/visibility.h"
+
+class LIBPTFORMAT_API PTFFormat {
+public:
+	PTFFormat();
+	~PTFFormat();
+
+	/* Return values:	0            success
+				-1           could not open file as ptf
+	*/
+	int load(std::string path, int64_t targetsr);
+
+	typedef struct wav {
+		std::string filename;
+		uint16_t    index;
+
+		int64_t     posabsolute;
+		int64_t     length;
+
+		bool operator ==(const struct wav& other) {
+			return (this->filename == other.filename ||
+				this->index == other.index);
+		}
+
+	} wav_t;
+
+	typedef struct region {
+		std::string name;
+		uint16_t    index;
+		int64_t     startpos;
+		int64_t     sampleoffset;
+		int64_t     length;
+		wav_t       wave;
+
+		bool operator ==(const struct region& other) {
+			return (this->index == other.index);
+		}
+	} region_t;
+
+	typedef struct track {
+		std::string name;
+		uint16_t    index;
+		uint8_t     playlist;
+		region_t    reg;
+
+		bool operator ==(const struct track& other) {
+			return (this->name == other.name);
+		}
+	} track_t;
+
+	std::vector<wav_t> audiofiles;
+	std::vector<region_t> regions;
+	std::vector<track_t> tracks;
+
+	static bool regionexistsin(std::vector<region_t> reg, uint16_t index) {
+		std::vector<region_t>::iterator begin = reg.begin();
+		std::vector<region_t>::iterator finish = reg.end();
+		std::vector<region_t>::iterator found;
+
+		wav_t w = { std::string(""), 0, 0, 0 };
+		region_t r = { std::string(""), index, 0, 0, 0, w };
+
+		if ((found = std::find(begin, finish, r)) != finish) {
+			return true;
+		}
+		return false;
+	}
+
+	static bool wavexistsin(std::vector<wav_t> wv, uint16_t index) {
+		std::vector<wav_t>::iterator begin = wv.begin();
+		std::vector<wav_t>::iterator finish = wv.end();
+		std::vector<wav_t>::iterator found;
+
+		wav_t w = { std::string(""), index, 0, 0 };
+
+		if ((found = std::find(begin, finish, w)) != finish) {
+			return true;
+		}
+		return false;
+	}
+
+	int64_t sessionrate;
+	int64_t targetrate;
+	uint8_t version;
+
+	unsigned char c0;
+	unsigned char c1;
+	unsigned char *ptfunxored;
+	int len;
+
+private:
+	bool foundin(std::string haystack, std::string needle);
+	void parse(void);
+	void unxor10(void);
+	void setrates(void);
+	void parse5header(void);
+	void parse7header(void);
+	void parse8header(void);
+	void parse9header(void);
+	void parse10header(void);
+	void parserest5(void);
+	void parserest89(void);
+	void parserest10(void);
+	void parseaudio5(void);
+	void parseaudio(void);
+	std::vector<wav_t> actualwavs;
+	float ratefactor;
+	std::string extension;
+	unsigned char key10a;
+	unsigned char key10b;
+};
+
+
+#endif
diff --git a/libs/ptformat/ptformat/visibility.h b/libs/ptformat/ptformat/visibility.h
new file mode 100644
index 0000000..d1569c6
--- /dev/null
+++ b/libs/ptformat/ptformat/visibility.h
@@ -0,0 +1,45 @@
+/*
+    Copyright (C) 2013 Paul Davis
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __libptformat_visibility_h__
+#define __libptformat_visibility_h__
+
+#if defined(COMPILER_MSVC)
+  #define LIBPTFORMAT_DLL_IMPORT __declspec(dllimport)
+  #define LIBPTFORMAT_DLL_EXPORT __declspec(dllexport)
+  #define LIBPTFORMAT_DLL_LOCAL
+#else
+  #define LIBPTFORMAT_DLL_IMPORT __attribute__ ((visibility ("default")))
+  #define LIBPTFORMAT_DLL_EXPORT __attribute__ ((visibility ("default")))
+  #define LIBPTFORMAT_DLL_LOCAL  __attribute__ ((visibility ("hidden")))
+#endif
+
+#ifdef LIBPTFORMAT_STATIC // libptformat is not a DLL
+  #define LIBPTFORMAT_API
+  #define LIBPTFORMAT_LOCAL
+#else
+  #ifdef LIBPTFORMAT_DLL_EXPORTS // defined if we are building the libptformat DLL (instead of using it)
+     #define LIBPTFORMAT_API LIBPTFORMAT_DLL_EXPORT
+  #else
+     #define LIBPTFORMAT_API LIBPTFORMAT_DLL_IMPORT
+  #endif 
+  #define    LIBPTFORMAT_LOCAL LIBPTFORMAT_DLL_LOCAL
+#endif
+
+#endif /* __libptformat_visibility_h__ */
diff --git a/libs/ptformat/wscript b/libs/ptformat/wscript
new file mode 100644
index 0000000..4d38123
--- /dev/null
+++ b/libs/ptformat/wscript
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+from waflib.extras import autowaf as autowaf
+import os
+
+# Version of this package (even if built as a child)
+LIBPTFORMAT_VERSION = '0.0.0'
+
+# Library version (UNIX style major, minor, micro)
+# major increment <=> incompatible changes
+# minor increment <=> compatible changes (additions)
+# micro increment <=> no interface changes
+LIBPTFORMAT_LIB_VERSION = '0.0.0'
+
+# Variables for 'waf dist'
+APPNAME = 'libptformat'
+VERSION = LIBPTFORMAT_VERSION
+
+# Mandatory variables
+top = '.'
+out = 'build'
+
+def options(opt):
+    autowaf.set_options(opt)
+
+def configure(conf):
+    conf.load('compiler_cxx')
+    autowaf.configure(conf)
+
+def build(bld):
+    # Library
+    obj = bld(features = 'cxx cxxshlib')
+    obj.source = 'ptfformat.cc'
+    obj.export_includes = ['.']
+    obj.includes     = ['.']
+    obj.name         = 'libptformat'
+    obj.target       = 'ptformat'
+    obj.use          = 'libardour'
+    autowaf.ensure_visible_symbols (obj, True)
+    obj.vnum         = LIBPTFORMAT_LIB_VERSION
+    obj.install_path = bld.env['LIBDIR']
+    obj.defines      = [ 'LIBPTFORMAT_DLL_EXPORTS' ]
+
+def shutdown():
+    autowaf.shutdown()
diff --git a/libs/qm-dsp/dsp/onsets/PeakPicking.cpp b/libs/qm-dsp/dsp/onsets/PeakPicking.cpp
index 55f56b4..b46c54b 100644
--- a/libs/qm-dsp/dsp/onsets/PeakPicking.cpp
+++ b/libs/qm-dsp/dsp/onsets/PeakPicking.cpp
@@ -97,8 +97,6 @@ int PeakPicking::quadEval( vector<double> &src, vector<int> &idx )
     vector <double> m_poly;
     vector <double> m_err;
 
-    double p;
-
     m_poly.push_back(0);
     m_poly.push_back(0);
     m_poly.push_back(0);
@@ -128,8 +126,6 @@ int PeakPicking::quadEval( vector<double> &src, vector<int> &idx )
 	    m_maxFit.push_back(selMax);			
 	}
 
-	p = TPolyFit::PolyFit2( m_err, m_maxFit, m_poly);
-
 	double f = m_poly[0];
 	double h = m_poly[2];
 
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
index 85a8140..0ed6a90 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
@@ -30,6 +30,7 @@
 #include "pbd/failed_constructor.h"
 #include "pbd/file_utils.h"
 #include "pbd/xml++.h"
+#include "pbd/compose.h"
 
 #include "midi++/port.h"
 
@@ -40,6 +41,7 @@
 #include "ardour/midi_ui.h"
 #include "ardour/rc_configuration.h"
 #include "ardour/midiport_manager.h"
+#include "ardour/debug.h"
 
 #include "generic_midi_control_protocol.h"
 #include "midicontrollable.h"
@@ -174,6 +176,7 @@ GenericMidiControlProtocol::reload_maps ()
 void
 GenericMidiControlProtocol::drop_all ()
 {
+	DEBUG_TRACE (DEBUG::GenericMidi, "Drop all bindings\n");
 	Glib::Threads::Mutex::Lock lm (pending_lock);
 	Glib::Threads::Mutex::Lock lm2 (controllables_lock);
 
@@ -201,6 +204,7 @@ GenericMidiControlProtocol::drop_all ()
 void
 GenericMidiControlProtocol::drop_bindings ()
 {
+	DEBUG_TRACE (DEBUG::GenericMidi, "Drop bindings, leave learned\n");
 	Glib::Threads::Mutex::Lock lm2 (controllables_lock);
 
 	for (MIDIControllables::iterator i = controllables.begin(); i != controllables.end(); ) {
@@ -295,6 +299,7 @@ GenericMidiControlProtocol::start_learning (Controllable* c)
 	}
 
 	Glib::Threads::Mutex::Lock lm2 (controllables_lock);
+	DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Learn binding: Controlable number: %1\n", c));
 
 	MIDIControllables::iterator tmp;
 	for (MIDIControllables::iterator i = controllables.begin(); i != controllables.end(); ) {
@@ -346,7 +351,6 @@ GenericMidiControlProtocol::start_learning (Controllable* c)
 
 		pending_controllables.push_back (element);
 	}
-
 	mc->learn_about_external_control ();
 	return true;
 }
@@ -421,6 +425,7 @@ GenericMidiControlProtocol::delete_binding (PBD::Controllable* control)
 	}
 }
 
+// This next function seems unused
 void
 GenericMidiControlProtocol::create_binding (PBD::Controllable* control, int pos, int control_number)
 {
@@ -453,11 +458,70 @@ GenericMidiControlProtocol::create_binding (PBD::Controllable* control, int pos,
 		// Update the MIDI Controllable based on the the pos param
 		// Here is where a table lookup for user mappings could go; for now we'll just wing it...
 		mc->bind_midi(channel, MIDI::controller, value);
-
+		DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Create binding: Channel: %1 Controller: %2 Value: %3 \n", channel, MIDI::controller, value));
 		controllables.push_back (mc);
 	}
 }
 
+void
+GenericMidiControlProtocol::check_used_event (int pos, int control_number)
+{
+	Glib::Threads::Mutex::Lock lm2 (controllables_lock);
+
+	MIDI::channel_t channel = (pos & 0xf);
+	MIDI::byte value = control_number;
+
+	DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("checking for used event: Channel: %1 Controller: %2 value: %3\n", (int) channel, (pos & 0xf0), (int) value));
+
+	// Remove any old binding for this midi channel/type/value pair
+	// Note:  can't use delete_binding() here because we don't know the specific controllable we want to remove, only the midi information
+	for (MIDIControllables::iterator iter = controllables.begin(); iter != controllables.end();) {
+		MIDIControllable* existingBinding = (*iter);
+		if ( (existingBinding->get_control_type() & 0xf0 ) == (pos & 0xf0) && (existingBinding->get_control_channel() & 0xf ) == channel ) {
+			if ( ((int) existingBinding->get_control_additional() == (int) value) || ((pos & 0xf0) == MIDI::pitchbend)) {
+				DEBUG_TRACE (DEBUG::GenericMidi, "checking: found match, delete old binding.\n");
+				delete existingBinding;
+				iter = controllables.erase (iter);
+			} else {
+				++iter;
+			}
+		} else {
+			++iter;
+		}
+	}
+
+	for (MIDIFunctions::iterator iter = functions.begin(); iter != functions.end();) {
+		MIDIFunction* existingBinding = (*iter);
+		if ( (existingBinding->get_control_type() & 0xf0 ) == (pos & 0xf0) && (existingBinding->get_control_channel() & 0xf ) == channel ) {
+			if ( ((int) existingBinding->get_control_additional() == (int) value) || ((pos & 0xf0) == MIDI::pitchbend)) {
+				DEBUG_TRACE (DEBUG::GenericMidi, "checking: found match, delete old binding.\n");
+				delete existingBinding;
+				iter = functions.erase (iter);
+			} else {
+				++iter;
+			}
+		} else {
+			++iter;
+		}
+	}
+
+	for (MIDIActions::iterator iter = actions.begin(); iter != actions.end();) {
+		MIDIAction* existingBinding = (*iter);
+		if ( (existingBinding->get_control_type() & 0xf0 ) == (pos & 0xf0) && (existingBinding->get_control_channel() & 0xf ) == channel ) {
+			if ( ((int) existingBinding->get_control_additional() == (int) value) || ((pos & 0xf0) == MIDI::pitchbend)) {
+				DEBUG_TRACE (DEBUG::GenericMidi, "checking: found match, delete old binding.\n");
+				delete existingBinding;
+				iter = actions.erase (iter);
+			} else {
+				++iter;
+			}
+		} else {
+			++iter;
+		}
+	}
+
+}
+
 XMLNode&
 GenericMidiControlProtocol::get_state () 
 {
@@ -530,13 +594,22 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version)
 		pending_controllables.clear ();
 	}
 
+	// midi map has to be loaded first so learned binding can go on top
+	if ((prop = node.property ("binding")) != 0) {
+		for (list<MapInfo>::iterator x = map_info.begin(); x != map_info.end(); ++x) {
+			if (prop->value() == (*x).name) {
+				load_bindings ((*x).path);
+				break;
+			}
+		}
+	}
+
 	/* Load up specific bindings from the
 	 * <Controls><MidiControllable>...</MidiControllable><Controls> section
 	 */
 
 	{
 		Glib::Threads::Mutex::Lock lm2 (controllables_lock);
-		controllables.clear ();
 		nlist = node.children(); // "Controls"
 
 		if (!nlist.empty()) {
@@ -548,6 +621,7 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version)
 					if ((prop = (*niter)->property ("id")) != 0) {
 						
 						ID id = prop->value ();
+						DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Relearned binding for session: Control ID: %1\n", id.to_s()));
 						Controllable* c = Controllable::by_id (id);
 						
 						if (c) {
@@ -560,7 +634,7 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version)
 						} else {
 							warning << string_compose (
 								_("Generic MIDI control: controllable %1 not found in session (ignored)"),
-								id) << endmsg;
+								id.to_s()) << endmsg;
 						}
 					}
 				}
@@ -568,15 +642,6 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version)
 		}
 	}
 
-	if ((prop = node.property ("binding")) != 0) {
-		for (list<MapInfo>::iterator x = map_info.begin(); x != map_info.end(); ++x) {
-			if (prop->value() == (*x).name) {
-				load_bindings ((*x).path);
-				break;
-			}
-		}
-	}
-
 	return 0;
 }
 
@@ -597,6 +662,7 @@ GenericMidiControlProtocol::get_feedback () const
 int
 GenericMidiControlProtocol::load_bindings (const string& xmlpath)
 {
+	DEBUG_TRACE (DEBUG::GenericMidi, "Load bindings: Reading midi map\n");
 	XMLTree state_tree;
 
 	if (!state_tree.read (xmlpath.c_str())) {
@@ -632,6 +698,7 @@ GenericMidiControlProtocol::load_bindings (const string& xmlpath)
 
 	drop_all ();
 
+	DEBUG_TRACE (DEBUG::GenericMidi, "Loading bindings\n");
 	for (citer = children.begin(); citer != children.end(); ++citer) {
 		
 		if ((*citer)->name() == "DeviceInfo") {
@@ -705,6 +772,7 @@ GenericMidiControlProtocol::create_binding (const XMLNode& node)
 	MIDI::eventType ev;
 	int intval;
 	bool momentary;
+	MIDIControllable::Encoder encoder = MIDIControllable::No_enc;
 
 	if ((prop = node.property (X_("ctl"))) != 0) {
 		ev = MIDI::controller;
@@ -714,6 +782,18 @@ GenericMidiControlProtocol::create_binding (const XMLNode& node)
 		ev = MIDI::program;
 	} else if ((prop = node.property (X_("pb"))) != 0) {
 		ev = MIDI::pitchbend;
+	} else if ((prop = node.property (X_("enc-l"))) != 0) {
+		encoder = MIDIControllable::Enc_L;
+		ev = MIDI::controller;
+	} else if ((prop = node.property (X_("enc-r"))) != 0) {
+		encoder = MIDIControllable::Enc_R;
+		ev = MIDI::controller;
+	} else if ((prop = node.property (X_("enc-2"))) != 0) {
+		encoder = MIDIControllable::Enc_2;
+		ev = MIDI::controller;
+	} else if ((prop = node.property (X_("enc-b"))) != 0) {
+		encoder = MIDIControllable::Enc_B;
+		ev = MIDI::controller;
 	} else {
 		return 0;
 	}
@@ -753,6 +833,7 @@ GenericMidiControlProtocol::create_binding (const XMLNode& node)
 		return 0;
 	}
 
+	mc->set_encoder (encoder);
 	mc->bind_midi (channel, ev, detail);
 
 	return mc;
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.h b/libs/surfaces/generic_midi/generic_midi_control_protocol.h
index a4a51b7..bb38a48 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.h
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.h
@@ -71,6 +71,8 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
 
 	int load_bindings (const std::string&);
 	void drop_bindings ();
+
+	void check_used_event (int, int);
 	
 	std::string current_binding() const { return _current_binding; }
 
diff --git a/libs/surfaces/generic_midi/midiaction.cc b/libs/surfaces/generic_midi/midiaction.cc
index e537122..8dfbef9 100644
--- a/libs/surfaces/generic_midi/midiaction.cc
+++ b/libs/surfaces/generic_midi/midiaction.cc
@@ -19,11 +19,14 @@
 #include <cstring>
 
 #include "midi++/port.h"
+#include "pbd/compose.h"
+#include "ardour/debug.h"
 
 #include "midiaction.h"
 #include "generic_midi_control_protocol.h"
 
 using namespace MIDI;
+using namespace PBD;
 
 MIDIAction::MIDIAction (MIDI::Parser& p)
 	: MIDIInvokable (p)
@@ -44,6 +47,7 @@ MIDIAction::init (GenericMidiControlProtocol& ui, const std::string& invokable_n
 void
 MIDIAction::execute ()
 {
+        DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Action: '%1'\n", _invokable_name));
         _ui->access_action (_invokable_name);
 }
 
diff --git a/libs/surfaces/generic_midi/midicontrollable.cc b/libs/surfaces/generic_midi/midicontrollable.cc
index 1d96a07..21b2b96 100644
--- a/libs/surfaces/generic_midi/midicontrollable.cc
+++ b/libs/surfaces/generic_midi/midicontrollable.cc
@@ -26,6 +26,7 @@
 #include "pbd/controllable_descriptor.h"
 #include "pbd/xml++.h"
 #include "pbd/stacktrace.h"
+#include "pbd/compose.h"
 
 #include "midi++/types.h" // Added by JE - 06-01-2009. All instances of 'byte' changed to 'MIDI::byte' (for clarification)
 #include "midi++/port.h"
@@ -35,6 +36,7 @@
 #include "ardour/automation_control.h"
 #include "ardour/midi_ui.h"
 #include "ardour/utils.h"
+#include "ardour/debug.h"
 
 #include "midicontrollable.h"
 #include "generic_midi_control_protocol.h"
@@ -52,6 +54,7 @@ MIDIControllable::MIDIControllable (GenericMidiControlProtocol* s, MIDI::Parser&
 	, _momentary (m)
 {
 	_learned = false; /* from URI */
+	_encoder = No_enc;
 	setting = false;
 	last_value = 0; // got a better idea ?
 	last_controllable_value = 0.0f;
@@ -70,6 +73,7 @@ MIDIControllable::MIDIControllable (GenericMidiControlProtocol* s, MIDI::Parser&
 	set_controllable (&c);
 	
 	_learned = true; /* from controllable */
+	_encoder = No_enc;
 	setting = false;
 	last_value = 0; // got a better idea ?
 	last_controllable_value = 0.0f;
@@ -186,8 +190,9 @@ MIDIControllable::control_to_midi (float val)
 			val = actl->internal_to_interface(val);
 		}
 	}
-
-	return (val - control_min) / control_range * max_value_for_type ();
+	// fiddle value of max so value doesn't jump from 125 to 127 for 1.0
+	// otherwise decrement won't work.
+	return (val - control_min) / control_range * (max_value_for_type () - 1);
 }
 
 float
@@ -195,7 +200,7 @@ MIDIControllable::midi_to_control (int val)
 {
         /* fiddle with MIDI value so that we get an odd number of integer steps
            and can thus represent "middle" precisely as 0.5. this maps to
-           the range 0..+1.0
+           the range 0..+1.0 (0 to 126)
         */
 
         float fv = (val == 0 ? 0 : float (val - 1) / (max_value_for_type() - 1));
@@ -268,10 +273,13 @@ MIDIControllable::midi_sense_note (Parser &, EventTwoBytes *msg, bool /*is_on*/)
 	if (!controllable->is_toggle()) {
 		if (control_additional == msg->note_number) {
 			controllable->set_value (midi_to_control (msg->velocity));
+			DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Note %1 value %2  %3\n", (int) msg->note_number, (float) midi_to_control (msg->velocity), current_uri() ));
 		}
 	} else {
 		if (control_additional == msg->note_number) {
-			controllable->set_value (controllable->get_value() > 0.5f ? 0.0f : 1.0f);
+			float new_value = controllable->get_value() > 0.5f ? 0.0f : 1.0f;
+			controllable->set_value (new_value);
+			DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Note %1 Value %2  %3\n", (int) msg->note_number, (float) new_value, current_uri()));
 		}
 	}
 
@@ -296,34 +304,74 @@ MIDIControllable::midi_sense_controller (Parser &, EventTwoBytes *msg)
 	if (control_additional == msg->controller_number) {
 
 		if (!controllable->is_toggle()) {
+			if (get_encoder() == No_enc) {
+				float new_value = msg->value;
+				float max_value = max(last_controllable_value, new_value);
+				float min_value = min(last_controllable_value, new_value);
+				float range = max_value - min_value;
+				float threshold = (float) _surface->threshold ();
+
+				bool const in_sync = (
+					range < threshold &&
+					controllable->get_value() <= midi_to_control(max_value) &&
+					controllable->get_value() >= midi_to_control(min_value)
+					);
+
+				/* If the surface is not motorised, we try to prevent jumps when
+				   the MIDI controller and controllable are out of sync.
+				   There might be a better way of doing this.
+				*/
+
+				if (in_sync || _surface->motorised ()) {
+					controllable->set_value (midi_to_control (new_value));
+				}
+				DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI CC %1 value %2  %3\n", (int) msg->controller_number, (float) midi_to_control(new_value), current_uri() ));
+
+				last_controllable_value = new_value;
+			} else {
+				int offset = (msg->value & 0x3f);
+				switch (get_encoder()) {
+					case Enc_L:
+						if (msg->value > 0x40) {
+							controllable->set_value (midi_to_control (last_value - offset + 1));
+						} else {
+							controllable->set_value (midi_to_control (last_value + offset + 1));
+						}
+						break;
+					case Enc_R:
+						if (msg->value > 0x40) {
+							controllable->set_value (midi_to_control (last_value + offset + 1));
+						} else {
+							controllable->set_value (midi_to_control (last_value - offset + 1));
+						}
+						break;
+					case Enc_2:
+						if (msg->value > 0x40) {
+							controllable->set_value (midi_to_control (last_value - (0x7f - msg->value) + 1));
+						} else {
+							controllable->set_value (midi_to_control (last_value + offset + 1));
+						}
+						break;
+					case Enc_B:
+						if (msg->value > 0x40) {
+							controllable->set_value (midi_to_control (last_value + offset + 1));
+						} else {
+							controllable->set_value (midi_to_control (last_value - (0x40 - offset)));
+						}
+						break;
+					default:
+						break;
+				}
+				DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI CC %1 value %2  %3\n", (int) msg->controller_number, (int) last_value, current_uri() ));
 
-			float new_value = msg->value;
-			float max_value = max(last_controllable_value, new_value);
-			float min_value = min(last_controllable_value, new_value);
-			float range = max_value - min_value;
-			float threshold = (float) _surface->threshold ();
-
-			bool const in_sync = (
-				range < threshold &&
-				controllable->get_value() <= midi_to_control(max_value) &&
-				controllable->get_value() >= midi_to_control(min_value)
-				);
-
-			/* If the surface is not motorised, we try to prevent jumps when
-			   the MIDI controller and controllable are out of sync.
-			   There might be a better way of doing this.
-			*/
-
-			if (in_sync || _surface->motorised ()) {
-				controllable->set_value (midi_to_control (new_value));
 			}
-
-			last_controllable_value = new_value;
 		} else {
 			if (msg->value > 64.0f) {
 				controllable->set_value (1);
+				DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Midi CC %1 value 1  %2\n", (int) msg->controller_number, current_uri()));
 			} else {
 				controllable->set_value (0);
+				DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Midi CC %1 value 0  %2\n", (int) msg->controller_number, current_uri()));
 			}
 		}
 
@@ -339,11 +387,16 @@ MIDIControllable::midi_sense_program_change (Parser &, MIDI::byte msg)
 			return;
 		}
 	}
+	if (msg == control_additional) {
 
-	if (!controllable->is_toggle()) {
-		controllable->set_value (midi_to_control (msg));
-	} else if (msg == control_additional) {
-		controllable->set_value (controllable->get_value() > 0.5f ? 0.0f : 1.0f);
+		if (!controllable->is_toggle()) {
+			controllable->set_value (1.0);
+			DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI program %1 value 1.0  %3\n", (int) msg, current_uri() ));
+		} else  {
+			float new_value = controllable->get_value() > 0.5f ? 0.0f : 1.0f;
+			controllable->set_value (new_value);
+			DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI program %1 value %2  %3\n", (int) msg, (float) new_value, current_uri()));
+		}
 	}
 
 	last_value = (MIDI::byte) (controllable->get_value() * 127.0); // to prevent feedback fights
@@ -360,8 +413,15 @@ MIDIControllable::midi_sense_pitchbend (Parser &, pitchbend_t pb)
 
 	if (!controllable->is_toggle()) {
 		controllable->set_value (midi_to_control (pb));
+		DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI pitchbend %1 value %2  %3\n", (int) control_channel, (float) midi_to_control (pb), current_uri() ));
 	} else {
-		controllable->set_value (controllable->get_value() > 0.5f ? 0.0f : 1.0f);
+		if (pb > 8065.0f) {
+			controllable->set_value (1);
+			DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Midi pitchbend %1 value 1  %2\n", (int) control_channel, current_uri()));
+		} else {
+			controllable->set_value (0);
+			DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Midi pitchbend %1 value 0  %2\n", (int) control_channel, current_uri()));
+		}
 	}
 
 	last_value = control_to_midi (controllable->get_value ());
@@ -376,6 +436,7 @@ MIDIControllable::midi_receiver (Parser &, MIDI::byte *msg, size_t /*len*/)
 		return;
 	}
 
+	_surface->check_used_event(msg[0], msg[1]);
 	bind_midi ((channel_t) (msg[0] & 0xf), eventType (msg[0] & 0xF0), msg[1]);
 
 	if (controllable) {
@@ -437,6 +498,7 @@ MIDIControllable::bind_midi (channel_t chn, eventType ev, MIDI::byte additional)
 	default:
 		break;
 	}
+	DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Controlable: bind_midi: %1 on Channel %2 value %3 \n", _control_description, chn_i + 1, (int) additional));
 }
 
 MIDI::byte*
@@ -452,21 +514,28 @@ MIDIControllable::write_feedback (MIDI::byte* buf, int32_t& bufsize, bool /*forc
 		return buf;
 	}
 
+        DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Feedback: %1 %2\n", control_description(), current_uri()));
+
 	*buf++ = (0xF0 & control_type) | (0xF & control_channel);
-	
+	int ev_size = 3;
 	switch (control_type) {
 	case MIDI::pitchbend:
 		*buf++ = int (gm) & 127;
 		*buf++ = (int (gm) >> 7) & 127;
 		break;
+	case MIDI::program:
+		*buf++ = control_additional; /* program number */
+		ev_size = 2;
+		break;
 	default:
 		*buf++ = control_additional; /* controller number */
 		*buf++ = gm;
 		break;
 	}
+	DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI out: Type %1 Channel %2 Bytes %3 %4\n", (int) control_type, (int) control_channel , (int) *(buf - 2), (int) *(buf - 1)));
 
 	last_value = gm;
-	bufsize -= 3;
+	bufsize -= ev_size;
 
 	return buf;
 }
diff --git a/libs/surfaces/generic_midi/midicontrollable.h b/libs/surfaces/generic_midi/midicontrollable.h
index aeed05d..1ea13ec 100644
--- a/libs/surfaces/generic_midi/midicontrollable.h
+++ b/libs/surfaces/generic_midi/midicontrollable.h
@@ -59,6 +59,14 @@ class MIDIControllable : public PBD::Stateful
 	uint32_t rid() const { return _rid; }
 	std::string what() const { return _what; }
 
+	enum Encoder {
+		No_enc,
+		Enc_R,
+		Enc_L,
+		Enc_2,
+		Enc_B,
+	};
+
 	MIDI::byte* write_feedback (MIDI::byte* buf, int32_t& bufsize, bool force = false);
 	
 	void midi_rebind (MIDI::channel_t channel=-1);
@@ -75,7 +83,10 @@ class MIDIControllable : public PBD::Stateful
 
 	bool learned() const { return _learned; }
 
-        MIDI::Parser& get_parser() { return _parser; }
+	Encoder get_encoder() const { return _encoder; }
+	void set_encoder (Encoder val) { _encoder = val; }
+
+	MIDI::Parser& get_parser() { return _parser; }
 	PBD::Controllable* get_controllable() const { return controllable; }
 	void set_controllable (PBD::Controllable*);
 	const std::string& current_uri() const { return _current_uri; }
@@ -109,6 +120,7 @@ class MIDIControllable : public PBD::Stateful
 	bool            _momentary;
 	bool            _is_gain_controller;
 	bool            _learned;
+	Encoder			_encoder;
 	int              midi_msg_id;      /* controller ID or note number */
 	PBD::ScopedConnection midi_sense_connection[2];
 	PBD::ScopedConnection midi_learn_connection;
diff --git a/libs/surfaces/generic_midi/midifunction.cc b/libs/surfaces/generic_midi/midifunction.cc
index b0dc95e..e2fb317 100644
--- a/libs/surfaces/generic_midi/midifunction.cc
+++ b/libs/surfaces/generic_midi/midifunction.cc
@@ -23,7 +23,12 @@
 #include "midifunction.h"
 #include "generic_midi_control_protocol.h"
 
+#include "pbd/compose.h"
+
+#include "ardour/debug.h"
+
 using namespace MIDI;
+using namespace PBD;
 
 MIDIFunction::MIDIFunction (MIDI::Parser& p)
 	: MIDIInvokable (p)
@@ -94,10 +99,12 @@ MIDIFunction::execute ()
 	switch (_function) {
 	case NextBank:
 		_ui->next_bank();
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: next_bank\n");
 		break;
 
 	case PrevBank:
 		_ui->prev_bank();
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: prev_bank\n");
 		break;
 
 	case SetBank:
@@ -105,39 +112,48 @@ MIDIFunction::execute ()
 			uint32_t bank;
 			sscanf (_argument.c_str(), "%d", &bank);
 			_ui->set_current_bank (bank);
+			DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Function: set_current_bank = %1\n", (int) bank));
 		}
 		break;
 
 	case TransportStop:
 		_ui->transport_stop ();
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: transport_stop\n");
 		break;
 
 	case TransportRoll:
 		_ui->transport_play ();
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: transport_play\n");
 		break;
 
 	case TransportStart:
 		_ui->goto_start ();
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: goto_start\n");
 		break;
 
 	case TransportZero:
 		// need this in BasicUI
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: goto_zero-not implemented\n");
 		break;
 
 	case TransportEnd:
 		_ui->goto_end ();
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: goto_end\n");
 		break;
 
 	case TransportLoopToggle:
 		_ui->loop_toggle ();
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: loop_toggle\n");
 		break;
 
 	case TransportRecordEnable:
 		_ui->set_record_enable (true);
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: set_record_enable = true\n");
 		break;
 
 	case TransportRecordDisable:
 		_ui->set_record_enable (false);
+		DEBUG_TRACE (DEBUG::GenericMidi, "Function: set_record_enable = false\n");
 		break;
 
 	case Select:
@@ -145,6 +161,7 @@ MIDIFunction::execute ()
 			uint32_t rid;
 			sscanf (_argument.c_str(), "%d", &rid);
 			_ui->SetRouteSelection (rid);
+			DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Function: SetRouteSelection = %1\n", rid));
 		}
 		break;
 	case TrackSetMute:
@@ -165,6 +182,7 @@ MIDIFunction::execute ()
 XMLNode&
 MIDIFunction::get_state ()
 {
+
 	XMLNode* node = new XMLNode ("MIDIFunction");
 	return *node;
 }
diff --git a/libs/surfaces/mackie/device_info.cc b/libs/surfaces/mackie/device_info.cc
index a50d256..a4b967c 100644
--- a/libs/surfaces/mackie/device_info.cc
+++ b/libs/surfaces/mackie/device_info.cc
@@ -246,6 +246,8 @@ DeviceInfo::set_state (const XMLNode& node, int /* version */)
 		if ((prop = child->property ("value")) != 0) {
 			if ((_master_position = atoi (prop->value().c_str())) == 0) {
 				_master_position = 0;
+			} else if (_master_position > 0) {
+				_master_position --;
 			}
 		}
 	}
diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc
index b918f67..6777d8e 100644
--- a/libs/surfaces/mackie/surface.cc
+++ b/libs/surfaces/mackie/surface.cc
@@ -97,7 +97,7 @@ Surface::Surface (MackieControlProtocol& mcp, const std::string& device_name, ui
 	/* lets use master_position instead */
 	uint32_t mp = _mcp.device_info().master_position();
 	if (_number == mp) {
-		DEBUG_TRACE (DEBUG::MackieControl, "Surface is first. Might have global controls.\n");
+		DEBUG_TRACE (DEBUG::MackieControl, "Surface matches MasterPosition. Might have global controls.\n");
 		if (_mcp.device_info().has_global_controls()) {
 			init_controls ();
 			DEBUG_TRACE (DEBUG::MackieControl, "init_controls done\n");
@@ -508,6 +508,7 @@ Surface::handle_midi_controller_message (MIDI::Parser &, MIDI::EventTwoBytes* ev
 			_jog_wheel->jog_event (delta);
 			return;
 		}
+		// add external (pedal?) control here
 
 		return;
 	}
diff --git a/libs/timecode/src/time.cc b/libs/timecode/src/time.cc
index 1fd78c1..b3d6b15 100644
--- a/libs/timecode/src/time.cc
+++ b/libs/timecode/src/time.cc
@@ -770,7 +770,7 @@ sample_to_timecode (
 
 	if (!use_offset) {
 		timecode.negative = (sample < 0);
-		offset_sample = llabs(sample);
+		offset_sample = ::llabs(sample);
 	} else {
 		if (offset_is_negative) {
 			offset_sample = sample + offset_samples;
diff --git a/mcp/bcf2000.device b/mcp/bcf2000.device
index f3207d8..ebfaf39 100644
--- a/mcp/bcf2000.device
+++ b/mcp/bcf2000.device
@@ -6,6 +6,7 @@
   <TimecodeDisplay value="no"/>
   <TwoCharacterDisplay value="yes"/>
   <Extenders value="0"/>
+  <MasterPosition value="0"/>
   <GlobalControls value="yes"/>
   <JogWheel value="yes"/>
   <TouchSenseFaders value="no"/>
diff --git a/mcp/cmc.device b/mcp/cmc.device
index b23c849..2e06a0a 100644
--- a/mcp/cmc.device
+++ b/mcp/cmc.device
@@ -2,6 +2,7 @@
   <Name value="Steinberg CMC series"/>
   <Strips value="1"/>
   <Extenders value="0"/>
+  <MasterPosition value="0"/>
   <MasterFader value="yes"/>
   <TimecodeDisplay value="no"/>
   <TwoCharacterDisplay value="no"/>
diff --git a/mcp/mc.device b/mcp/mc.device
index baa0711..11dc0e8 100644
--- a/mcp/mc.device
+++ b/mcp/mc.device
@@ -6,6 +6,7 @@
   <TimecodeDisplay value="yes"/>
   <TwoCharacterDisplay value="yes"/>
   <Extenders value="0"/>
+  <MasterPosition value="0"/>
   <GlobalControls value="yes"/>
   <JogWheel value="yes"/>
   <TouchSenseFaders value="yes"/>
diff --git a/mcp/mcpro.device b/mcp/mcpro.device
index 9ac1ed0..0ace09a 100644
--- a/mcp/mcpro.device
+++ b/mcp/mcpro.device
@@ -6,6 +6,7 @@
   <TimecodeDisplay value="yes"/>
   <TwoCharacterDisplay value="yes"/>
   <Extenders value="0"/>
+  <MasterPosition value="0"/>
   <GlobalControls value="yes"/>
   <JogWheel value="yes"/>
   <TouchSenseFaders value="yes"/>
diff --git a/mcp/mcproxt.device b/mcp/mcproxt.device
index 6bddee0..41361d0 100644
--- a/mcp/mcproxt.device
+++ b/mcp/mcproxt.device
@@ -6,6 +6,7 @@
   <TimecodeDisplay value="yes"/>
   <TwoCharacterDisplay value="yes"/>
   <Extenders value="0"/>
+  <MasterPosition value="0"/>
   <GlobalControls value="no"/>
   <JogWheel value="no"/>
   <TouchSenseFaders value="yes"/>
diff --git a/mcp/nucleus.device b/mcp/nucleus.device
index 1ab96c3..d9dbba4 100644
--- a/mcp/nucleus.device
+++ b/mcp/nucleus.device
@@ -3,6 +3,7 @@
   <Name value="SSL Nucleus"/>
   <Strips value="8"/>
   <Extenders value="1"/>
+  <MasterPosition value="0"/>
   <MasterFader value="no"/>
   <TimecodeDisplay value="no"/>
   <TwoCharacterDisplay value="yes"/>
diff --git a/mcp/qcon.device b/mcp/qcon.device
index 48c5390..37d618e 100644
--- a/mcp/qcon.device
+++ b/mcp/qcon.device
@@ -2,6 +2,7 @@
   <Name value="Qcon"/>
   <Strips value="8"/>
   <Extenders value="0"/>
+  <MasterPosition value="0"/>
   <MasterFader value="yes"/>
   <TimecodeDisplay value="yes"/>
   <TwoCharacterDisplay value="no"/>
diff --git a/midi_maps/midikb_wiimote.map b/midi_maps/midikb_wiimote.map
new file mode 100644
index 0000000..61b3fd0
--- /dev/null
+++ b/midi_maps/midikb_wiimote.map
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ArdourMIDIBindings version="1.0.0" name="WiiMote via midikb">
+
+<!-- OvenWerks June 27 2015 -->
+<!-- This tries to do what the old WiiMote setup in Ardour did -->
+<!-- B + A -->
+<Binding channel="1" note="16" action="Transport/ToggleRollForgetCapture"/>
+<!-- B + left -->
+<Binding channel="1" note="17" action="Editor/playhead-to-previous-region-boundary"/>
+<!-- B + right -->
+<Binding channel="1" note="18" action="Editor/playhead-to-next-region-boundary"/>
+<!-- B + up -->
+<Binding channel="1" note="19" action="Editor/jump-forward-to-mark"/>
+<!-- B + down -->
+<Binding channel="1" note="20" action="Editor/jump-backward-to-mark"/>
+<!-- B + home -->
+<Binding channel="1" note="21" action="Editor/add-location-from-playhead"/>
+<!-- B + minus -->
+<Binding channel="1" note="22" action="Transport/GotoStart"/>
+<!-- B + plus -->
+<Binding channel="1" note="23" action="Transport/GotoEnd"/>
+<!-- B + one  Not used add as you wish -->
+<!--Binding channel="1" note="24" action=""/-->
+<!-- B + Two -->
+<Binding channel="1" note="25" function="rec-disable"/>
+
+<!-- A -->
+<Binding channel="1" note="32" action="Transport/ToggleRoll"/>
+<!-- left -->
+<Binding channel="1" note="33" action="Editor/nudge-playhead-backward"/>
+<!-- right -->
+<Binding channel="1" note="34" action="Editor/nudge-playhead-forward"/>
+<!-- up -->
+<Binding channel="1" note="35" action="Editor/select-prev-route"/>
+<!-- down -->
+<Binding channel="1" note="36" action="Editor/select-next-route"/>
+<!-- home -->
+<Binding channel="1" note="37" action="Editor/playhead-to-edit"/>
+<!-- minus -->
+<Binding channel="1" note="38" action="Editor/temporal-zoom-out"/>
+<!-- plus -->
+<Binding channel="1" note="39" action="Editor/temporal-zoom-in"/>
+<!-- one -->
+<Binding channel="1" note="40" action="Editor/track-record-enable-toggle"/>
+<!-- Two -->
+<Binding channel="1" note="41" function="rec-enable"/>
+
+
+
+
+</ArdourMIDIBindings>
diff --git a/patches/GdkQuartzWindow.patch b/patches/GdkQuartzWindow.patch
new file mode 100644
index 0000000..217c010
--- /dev/null
+++ b/patches/GdkQuartzWindow.patch
@@ -0,0 +1,44 @@
+--- old/gtk+-2.24.23/gdk/quartz/GdkQuartzWindow.c	2013-10-16 11:29:55.000000000 -0400
++++ new/gtk+-2.24.23/gdk/quartz/GdkQuartzWindow.c	2015-07-20 15:05:40.000000000 -0400
+@@ -625,6 +625,41 @@
+   event.dnd.send_event = FALSE;
+   event.dnd.context = _gdk_quartz_drag_source_context;
+ 
++  /* Check to see if the coordinates are inside a known GdkWindow */
++
++  GdkScreen* screen = gdk_window_get_screen (event.dnd.window);
++
++  if (screen) 
++    {
++       GList* windows, *list;
++       gint gx, gy;
++       
++       event.dnd.context->dest_window = NULL;
++
++       windows = gdk_screen_get_toplevel_windows (screen);
++       _gdk_quartz_window_nspoint_to_gdk_xy (aPoint, &gx, &gy);
++       
++       for (list = windows; list; list = list->next) 
++         {
++            GdkWindow* win = (GdkWindow*) list->data;
++            gint wx, wy;
++            gint ww, wh;
++            
++            gdk_window_get_root_origin (win, &wx, &wy);
++            ww = gdk_window_get_width (win);
++            wh = gdk_window_get_height (win);
++            
++            if (gx > wx && 
++                gy > wy &&
++                gx <= wx + ww && 
++                gy <= wy + wh) 
++              {
++                 /* found a toplevel GdkWindow at the drop position */
++                 event.dnd.context->dest_window = win;
++              }
++         }
++    }
++
+   (*_gdk_event_func) (&event, _gdk_event_data);
+ 
+   g_object_unref (event.dnd.window);
diff --git a/patches/gtkdnd-quartz.patch b/patches/gtkdnd-quartz.patch
new file mode 100644
index 0000000..07723ad
--- /dev/null
+++ b/patches/gtkdnd-quartz.patch
@@ -0,0 +1,55 @@
+--- old/gtk+-2.24.23/gtk/gtkdnd-quartz.c	2013-10-16 11:29:55.000000000 -0400
++++ new/gtk+-2.24.23/gtk/gtkdnd-quartz.c	2015-07-20 14:53:33.000000000 -0400
+@@ -1928,16 +1928,29 @@
+ static gboolean
+ drag_drop_finished_idle_cb (gpointer data)
+ {
+-  gtk_drag_source_info_destroy (data);
++  GtkDragSourceInfo* info = (GtkDragSourceInfo*) data;
++  if (info->success) 
++    {
++       gtk_drag_source_info_destroy (data);
++    }
+   return FALSE;
+ }
+ 
+ static void
+-gtk_drag_drop_finished (GtkDragSourceInfo *info)
++gtk_drag_drop_finished (GtkDragSourceInfo *info, GtkDragResult result)
+ {
+-  if (info->success && info->delete)
+-    g_signal_emit_by_name (info->source_widget, "drag-data-delete",
+-                           info->context);
++        gboolean success = (result == GTK_DRAG_RESULT_SUCCESS);
++
++        if (!success) {
++                g_signal_emit_by_name (info->source_widget, "drag-failed",
++                                       info->context, GTK_DRAG_RESULT_NO_TARGET, &success);
++        }
++                
++        if (success && info->delete) {
++                g_signal_emit_by_name (info->source_widget, "drag-data-delete",
++                                       info->context);
++        }
++
+ 
+   /* Workaround for the fact that the NS API blocks until the drag is
+    * over. This way the context is still valid when returning from
+@@ -1963,6 +1976,7 @@
+ {
+   GtkDragSourceInfo *info;
+   GdkDragContext *context;
++  GtkDragResult result;
+ 
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (event != NULL);
+@@ -1975,7 +1989,8 @@
+   switch (event->type)
+     {
+     case GDK_DROP_FINISHED:
+-      gtk_drag_drop_finished (info);
++      result = (gdk_drag_context_get_dest_window (context) != NULL) ? GTK_DRAG_RESULT_SUCCESS : GTK_DRAG_RESULT_NO_TARGET;
++      gtk_drag_drop_finished (info, result);
+       break;
+     default:
+       g_assert_not_reached ();
diff --git a/system_config b/system_config
index d136ab9..02e4f1e 100644
--- a/system_config
+++ b/system_config
@@ -4,6 +4,7 @@
     <Option name="auto-connect-standard-busses" value="1"/>
     <Option name="output-auto-connect" value="2"/>
     <Option name="input-auto-connect" value="1"/>
+    <Option name="tracks-auto-naming" value="1"/>
     <Option name="trace-midi-input" value="0"/>
     <Option name="trace-midi-output" value="0"/>
     <Option name="send-mtc" value="0"/>
@@ -15,7 +16,7 @@
     <Option name="mmc-send-device-id" value="0"/>
     <Option name="initial-program-change" value="-1"/>
     <Option name="display-first-midi-bank-as-zero" value="0"/>
-    <Option name="inter-scene-gap-msecs" value="1"/>
+    <Option name="inter-scene-gap-frames" value="1"/>
     <Option name="mtc-qf-speed-tolerance" value="5"/>
     <Option name="timecode-sync-frame-rate" value="1"/>
     <Option name="timecode-source-is-synced" value="0"/>
@@ -32,6 +33,7 @@
     <Option name="minimum-disk-read-bytes" value="262144"/>
     <Option name="minimum-disk-write-bytes" value="262144"/>
     <Option name="midi-readahead" value="1"/>
+    <Option name="buffering-preset" value="1"/>
     <Option name="capture-buffer-seconds" value="5"/>
     <Option name="playback-buffer-seconds" value="5"/>
     <Option name="midi-track-buffer-seconds" value="1"/>
@@ -84,9 +86,14 @@
     <Option name="shuttle-speed-threshold" value="5"/>
     <Option name="shuttle-behaviour" value="0"/>
     <Option name="shuttle-units" value="0"/>
+    <Option name="shuttle-max-speed" value="8"/>
     <Option name="locate-while-waiting-for-sync" value="0"/>
     <Option name="disable-disarm-during-roll" value="0"/>
+    <Option name="auto-return-target-list" value="15"/>
     <Option name="meter-falloff" value="13.3"/>
+    <Option name="meter-type-master" value="16"/>
+    <Option name="meter-type-track" value="4"/>
+    <Option name="meter-type-bus" value="4"/>
     <Option name="auditioner-output-left" value="default"/>
     <Option name="auditioner-output-right" value="default"/>
     <Option name="replicate-missing-region-channels" value="0"/>
@@ -104,6 +111,7 @@
     <Option name="processor-usage" value="-1"/>
     <Option name="max-gain" value="2"/>
     <Option name="max-recent-sessions" value="10"/>
+    <Option name="max-recent-templates" value="10"/>
     <Option name="automation-thinning-factor" value="20"/>
     <Option name="range-location-minimum" value="128"/>
     <Option name="edit-mode" value="0"/>
@@ -112,6 +120,7 @@
     <Option name="use-windows-vst" value="1"/>
     <Option name="use-lxvst" value="1"/>
     <Option name="discover-vst-on-start" value="0"/>
+    <Option name="verbose-plugin-scan" value="1"/>
     <Option name="vst-scan-timeout" value="600"/>
     <Option name="discover-audio-units" value="0"/>
     <Option name="plugin-path-vst" value="@default@"/>
@@ -119,10 +128,11 @@
     <Option name="denormal-protection" value="0"/>
     <Option name="denormal-model" value="3"/>
     <Option name="osx-pingback-url" value="http://community.ardour.org/pingback/osx/"/>
-    <Option name="tutorial-manual-url" value="http://ardour.org/flossmanual"/>
+    <Option name="windows-pingback-url" value="http://community.ardour.org/pingback/windows/"/>
+    <Option name="tutorial-manual-url" value="http://ardour.org/tutorial"/>
     <Option name="reference-manual-url" value="http://manual.ardour.org/"/>
     <Option name="video-advanced-setup" value="0"/>
-    <Option name="video-server-url" value="http://localhost:1554"/>
+    <Option name="video-server-url" value="http://127.0.0.1:1554"/>
     <Option name="video-server-docroot" value="/"/>
     <Option name="show-video-export-info" value="1"/>
     <Option name="show-video-server-dialog" value="0"/>
diff --git a/tools/CrashReporter/CrashReporter.xcodeproj/TemplateIcon.icns b/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/TemplateIcon.icns
similarity index 100%
copy from tools/CrashReporter/CrashReporter.xcodeproj/TemplateIcon.icns
copy to tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/TemplateIcon.icns
diff --git a/tools/CrashReporter/CrashReporter.xcodeproj/project.pbxproj b/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/project.pbxproj
similarity index 100%
copy from tools/CrashReporter/CrashReporter.xcodeproj/project.pbxproj
copy to tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/project.pbxproj
diff --git a/tools/define_versions.sh b/tools/define_versions.sh
index 9acf95a..a0642ce 100644
--- a/tools/define_versions.sh
+++ b/tools/define_versions.sh
@@ -12,8 +12,26 @@ GIT_REV_REGEXP='([0-9][0-9]*)\.([0-9][0-9]*)\-?(rc[0-9]*)?-?([0-9][0-9]*)?(-g([a
 
 major_version=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\1/"`
 minor_version=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\2/"`
+
+# Tracks tags with "MAJOR.MINOR.MICRO"
+# Ardour doesn't use this
+
+micro_version=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\3/"`
+
+#
+# RC e.g. 8.1-rc3 (optional)
+# Tracks does not use -rcN based tagging
+#
 rc=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\3/"`
+
+#
+# revision count since tag
+#
 r=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\4/"`
+
+#
+# git short sha1 commit ID
+#
 commit=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\6/"`
 
 if [ "x$rc" != "x" ] ; then
diff --git a/tools/linux_packaging/ardour.sh.in b/tools/linux_packaging/ardour.sh.in
index aa84f08..21068da 100644
--- a/tools/linux_packaging/ardour.sh.in
+++ b/tools/linux_packaging/ardour.sh.in
@@ -25,11 +25,6 @@ BIN_DIR=$(dirname $(readlink -f $0))
 INSTALL_DIR=$(dirname $BIN_DIR)
 LIB_DIR=$INSTALL_DIR/lib
 ETC_DIR=$INSTALL_DIR/etc
-USER_ARDOUR_DIR=$HOME/.config/ardour3
-
-if [ ! -d $USER_ARDOUR_DIR ] ; then
-    mkdir -p $USER_ARDOUR_DIR || exit 1
-fi
 
 # this triggers code in main() that will reset runtime environment variables
 # to point to directories inside the ardour package
@@ -51,9 +46,9 @@ export LD_LIBRARY_PATH=$INSTALL_DIR/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
 
 if [ "T" = "$DEBUG" ]; then
 	export ARDOUR_INSIDE_GDB=1
-	exec gdb $INSTALL_DIR/bin/ardour-%VER%
+	exec gdb $INSTALL_DIR/bin/%EXENAME%-%VER%
 else
-	exec $INSTALL_DIR/bin/ardour-%VER% $ARGS
+	exec $INSTALL_DIR/bin/%EXENAME%-%VER% $ARGS
 fi
 
 
diff --git a/tools/linux_packaging/build b/tools/linux_packaging/build
index d0f9a90..0915beb 100755
--- a/tools/linux_packaging/build
+++ b/tools/linux_packaging/build
@@ -22,6 +22,8 @@ if test -z "$CACHEDIR" -o ! -d "$CACHEDIR"; then
 fi
 
 MIXBUS=
+WITH_HARRISON_LV2=
+WITH_X42_LV2=
 WITH_LADSPA=0
 WITH_HARVID=
 STRIP=all
@@ -29,6 +31,7 @@ PRINT_SYSDEPS=
 WITH_NLS=
 EXTERNAL_JACK=
 VENDOR=Ardour ;
+EXENAME=ardour
 BUILDTYPE=""
 
 
@@ -51,11 +54,14 @@ while [ $# -gt 0 ] ; do
 
 	--mixbus)
 		MIXBUS=1; 
+		WITH_HARRISON_LV2=1 ;
+		WITH_X42_LV2=1 ;
 		WITH_NLS=1 ; 
 		WITH_LADSPA=; 
 		STRIP=all
 		APPNAME=Mixbus ;
-                VENDOR=Harrison ;
+		VENDOR=Harrison ;
+		EXENAME=mixbus ;
 		shift ;;
 	--public)
 		WITH_NLS=1 ; 
@@ -113,6 +119,7 @@ case `uname -m` in
 		echo "Architecture is x86"
 		ARCH='x86'
 		WARCH='i386'
+		HARCH='linux32'
 		ARCH_BITS='32-bit'
 		MULTIARCH='i386-linux-gnu'
 		;;
@@ -120,6 +127,7 @@ case `uname -m` in
 		echo "Architecture is x86_64"
 		ARCH='x86_64'
 		WARCH='x86_64'
+		HARCH='linux64'
 		ARCH_BITS='64-bit'
 		MULTIARCH='x86_64-linux-gnu'
 		;;
@@ -235,14 +243,13 @@ echo export 'PATH=/usr/local/bin:/opt/bin:$PATH' >> $ENVIRONMENT
 
 # create startup helper script
 
-sed -e "/^%ENV%/r $ENVIRONMENT" -e '/^%ENV%/d' -e 's/%VER%/'"${release_version}"'/' < ardour.sh.in > $APPBIN/ardour${major_version}
-rm $ENVIRONMENT && chmod 775 $APPBIN/ardour${major_version}
-MAIN_EXECUTABLE=ardour-${release_version}
+sed -e "/^%ENV%/r $ENVIRONMENT" -e '/^%ENV%/d' -e 's/%VER%/'"${release_version}"'/;s/%EXENAME%/'"${EXENAME}"'/' < ardour.sh.in > $APPBIN/${EXENAME}${major_version}
+rm $ENVIRONMENT && chmod 775 $APPBIN/${EXENAME}${major_version}
 
 echo "Copying ardour executable ...."
-cp $BUILD_ROOT/gtk2_ardour/$MAIN_EXECUTABLE $APPBIN
+cp -v $BUILD_ROOT/gtk2_ardour/ardour-${release_version} $APPBIN/${EXENAME}-${release_version}
 if test x$STRIP = xall ; then
-	strip $APPBIN/$MAIN_EXECUTABLE
+	strip $APPBIN/${EXENAME}-${release_version}
 fi
 
 # copy locale files
@@ -414,7 +421,7 @@ if test -f $BUILD_ROOT/libs/ardouralsautil/ardour-request-device; then
 fi
 
 OURLIBDIR=$BUILD_ROOT/libs
-OURLIBS=$OURLIBDIR/vamp-sdk:$OURLIBDIR/surfaces/control_protocol:$OURLIBDIR/ardour:$OURLIBDIR/midi++2:$OURLIBDIR/pbd:$OURLIBDIR/rubberband:$OURLIBDIR/soundtouch:$OURLIBDIR/gtkmm2ext:$OURLIBDIR/sigc++2:$OURLIBDIR/glibmm2:$OURLIBDIR/gtkmm2/atk:$OURLIBDIR/gtkmm2/pango:$OURLIBDIR/gtkmm2/gdk:$OURLIBDIR/gtkmm2/gtk:$OURLIBDIR/canvas:$OURLIBDIR/libsndfile:$OURLIBDIR/evoral:$OURLIBDIR/evoral/src/libsmf:$OURLIBDIR/audiographer:$OURLIBDIR/timecode:$OURLIBDIR/taglib:$OURLIBDIR/libltc:$OURLIBDIR/qm-dsp:$OURLIBDIR/ardouralsautil
+OURLIBS=$OURLIBDIR/vamp-sdk:$OURLIBDIR/surfaces/control_protocol:$OURLIBDIR/ardour:$OURLIBDIR/midi++2:$OURLIBDIR/pbd:$OURLIBDIR/rubberband:$OURLIBDIR/soundtouch:$OURLIBDIR/gtkmm2ext:$OURLIBDIR/sigc++2:$OURLIBDIR/glibmm2:$OURLIBDIR/gtkmm2/atk:$OURLIBDIR/gtkmm2/pango:$OURLIBDIR/gtkmm2/gdk:$OURLIBDIR/gtkmm2/gtk:$OURLIBDIR/canvas:$OURLIBDIR/libsndfile:$OURLIBDIR/evoral:$OURLIBDIR/evoral/src/libsmf:$OURLIBDIR/audiographer:$OURLIBDIR/timecode:$OURLIBDIR/taglib:$OURLIBDIR/libltc:$OURLIBDIR/qm-dsp:$OURLIBDIR/ardouralsautil:$OURLIBDIR/ptformat
 
 echo $OURLIBS${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
 
@@ -424,7 +431,7 @@ deplibs=
 while [ true ] ; do 
 	missing=false
 	filelist=`find $APPLIB/ -type f`
-	filelist="$APPBIN/$MAIN_EXECUTABLE $filelist"
+	filelist="$APPBIN/${EXENAME}-${release_version} $filelist"
 
 	for file in $filelist  ; do 
 		if ! file $file | grep -qs ELF ; then
@@ -572,26 +579,49 @@ done
 
 ################################################################################
 ### Mixbus plugins, etc
+if test x$WITH_HARRISON_LV2 != x ; then
+	echo "Adding Harrison LV2s"
+	mkdir -p $APPLIB/LV2
+
+	curl -s -S --fail -# \
+		-z "${CACHEDIR}/harrison_lv2s.${HARCH}.zip" \
+		-o "${CACHEDIR}/harrison_lv2s.${HARCH}.zip" \
+		http://www.harrisonconsoles.com/mixbus/mb3/${HARCH}/harrison_lv2s.zip 
+	unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/harrison_lv2s.${HARCH}.zip"
+fi
+
 if test -n "$MIXBUS"; then
+	echo "Adding Mixbus Channelstrip"
 
-	mkdir -p $APPLIB/LV2
-	METERS_VERSION=$(curl -s -S http://gareus.org/x42/linux/x42-meters.latest.txt)
+	mkdir -p $APPLIB/ladspa/strip/
+	curl -s -S --fail -# \
+		-z "${CACHEDIR}/harrison_channelstrip.${HARCH}.so" \
+		-o "${CACHEDIR}/harrison_channelstrip.${HARCH}.so" \
+		http://www.harrisonconsoles.com/mixbus/mb3/${HARCH}/harrison_channelstrip.so
+
+	cp "${CACHEDIR}/harrison_channelstrip.${HARCH}.so" \
+		$APPLIB/ladspa/strip/harrison_channelstrip.so
+	chmod +x $APPLIB/ladspa/strip/harrison_channelstrip.so
+fi
+
+if test x$WITH_X42_LV2 != x ; then
+	METERS_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/x42-meters.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/linux/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip \
-		"${SRCDIR}/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip"
-	unzip -d "$APPLIB/LV2/" "${SRCDIR}/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip"
+		rsync://x42-plugins.com/x42/linux/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip \
+		"${CACHEDIR}/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip"
+	unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip"
 
-	SETBFREE_VERSION=$(curl -s -S http://gareus.org/x42/linux/setBfree.latest.txt)
+	SETBFREE_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/setBfree.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/linux/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip \
-		"${SRCDIR}/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip"
-	unzip -d "$APPLIB/LV2/" "${SRCDIR}/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip"
+		rsync://x42-plugins.com/x42/linux/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip \
+		"${CACHEDIR}/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip"
+	unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip"
 
-	MIDIFILTER_VERSION=$(curl -s -S http://gareus.org/x42/linux/x42-midifilter.latest.txt)
+	MIDIFILTER_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/x42-midifilter.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/linux/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip \
-		"${SRCDIR}/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip"
-	unzip -d "$APPLIB/LV2/" "${SRCDIR}/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip"
+		rsync://x42-plugins.com/x42/linux/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip \
+		"${CACHEDIR}/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip"
+	unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip"
 
 fi
 ################################################################################
@@ -630,7 +660,7 @@ chmod a+x $APPBIN/${APP_VER_NAME}.uninstall.sh
 #
 # Add the stage2.run script
 #
-sed -e "s/%REPLACE_MAJOR_VERSION%/${major_version}/" < stage2.run.in > stage2.run
+sed -e "s/%REPLACE_MAJOR_VERSION%/${major_version}/;s/%REPLACE_PGM%/${APPNAME}/;s/%REPLACE_VENDOR%/${VENDOR}/;s/%REPLACE_EXE%/${EXENAME}/" < stage2.run.in > stage2.run
 chmod a+x stage2.run
 
 
diff --git a/tools/linux_packaging/stage2.run.in b/tools/linux_packaging/stage2.run.in
index 87f2401..f3ea842 100755
--- a/tools/linux_packaging/stage2.run.in
+++ b/tools/linux_packaging/stage2.run.in
@@ -10,9 +10,9 @@
 
 MAJOR_VERSION="%REPLACE_MAJOR_VERSION%"
 
-PGM_NAME="Ardour"
-PGM_VENDOR="Ardour"
-PGM_EXEC_FILE="ardour${MAJOR_VERSION}"
+PGM_NAME="%REPLACE_PGM%"
+PGM_VENDOR="%REPLACE_VENDOR%"
+PGM_EXEC_FILE="%REPLACE_EXE%${MAJOR_VERSION}"
 
 THE_SHELL="/bin/sh"
 
@@ -351,7 +351,7 @@ LIB_ERROR="F"
 LD_PATH=`pwd`/${BUNDLE_DIR}/lib
 
 # check the main App
-LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd ${BUNDLE_DIR}/bin/${PGM_NAME_LOWER}-* 2>&1 > /dev/null)
+LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd ${BUNDLE_DIR}/bin/${PGM_NAME_LOWER}-* 2>&1 > /dev/null | grep -v "no version information")
 
 if [ -n "$LDD_RESULT" ];
 then
@@ -364,7 +364,7 @@ LIB_FILES=$(find ${BUNDLE_DIR}/lib -name "*.so")
 
 for path in $LIB_FILES
 do
-	LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd $path 2>&1 > /dev/null)
+	LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd $path 2>&1 > /dev/null | grep -v "no version information")
 	if [ -n "$LDD_RESULT" ];
 	then
 		echo "$LDD_RESULT"
diff --git a/tools/osx_packaging/osx_build b/tools/osx_packaging/osx_build
index 757835b..75d0c18 100755
--- a/tools/osx_packaging/osx_build
+++ b/tools/osx_packaging/osx_build
@@ -18,6 +18,7 @@ SAE=
 MIXBUS=
 WITH_HARVID=1
 WITH_HARRISON_LV2=
+WITH_X42_LV2=
 WITH_LADSPA=1
 STRIP=1
 PRINT_SYSDEPS=
@@ -39,11 +40,13 @@ while [ $# -gt 0 ] ; do
 	       APPNAME=Ardour ;
 	       shift ;;
 	--mixbus) MIXBUS=1; 
+	          WITH_HARRISON_LV2=1 ;
+	          WITH_X42_LV2=1 ;
 	          WITH_NLS=1 ; 
                   SAE= ; 
                   WITH_LADSPA=; 
                   STRIP= ; 
-		  PRODUCT_PKG_DIR=MixBus;
+		  PRODUCT_PKG_DIR=Mixbus;
 		  APPNAME=Mixbus ;
                   shift ;;
 	--public) WITH_NLS= ; 
@@ -400,6 +403,12 @@ if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
     cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $Frameworks/
 fi
 
+# TODO check if this is still needed, even when building on 10.5
+if file $BUILD_ROOT/gtk2_ardour/ardour-$release_version | grep -q ppc; then
+STDCPP='|libstdc\+\+'
+else
+STDCPP=
+fi
 
 while [ true ] ; do 
     missing=false
@@ -407,12 +416,16 @@ while [ true ] ; do
 	if ! file $file | grep -qs Mach-O ; then
 	    continue
 	fi
+	# libffi contains "S" (other section symbols) that should not be stripped.
+	if [[ $file == *"libffi"* ]] ; then
+	    continue
+	fi
 
 	if test x$STRIP != x ; then
 		strip -u -r -arch all $file &>/dev/null
 	fi
 
-	deps=`otool -L $file | awk '{print $1}' | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/)" | grep -v 'libjack\.' | grep -v "$(basename $file)"`
+	deps=`otool -L $file | awk '{print $1}' | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | grep -v 'libjack\.' | grep -v "$(basename $file)"`
 	# echo -n "."
 	for dep in $deps ; do
 	    base=`basename $dep`
@@ -481,7 +494,7 @@ fi
 for exe in $executables; do
     EXE=$APPROOT/MacOS/$exe
     changes=""
-    for lib in `otool -L $EXE | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
+    for lib in `otool -L $EXE | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
       base=`basename $lib`
       changes="$changes -change $lib @executable_path/../lib/$base"
     done
@@ -507,7 +520,7 @@ for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners $Backends ; do
         # change all the dependencies
 	
 	changes=""
-	for lib in `otool -L $dylib | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
+	for lib in `otool -L $dylib | egrep "($GTKSTACK_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/$STDCPP)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
 	    base=`basename $lib`
 	    if echo $lib | grep -s libbase; then
 		changes="$changes -change $lib @executable_path/../$libbase/$base"
@@ -565,14 +578,26 @@ else
 
 fi
 
+if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
+	OSX_ARCH=x86_64
+	OSX_BENSID=osx64
+elif file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q ppc; then
+	OSX_ARCH=ppc
+	OSX_BENSID=ppc
+else
+	OSX_ARCH=i386
+	OSX_BENSID=osx32
+fi
+
 if test x$WITH_HARRISON_LV2 != x ; then
-	if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
-		OSX_ARCH=osx64
-	else 
-		OSX_ARCH=osx32
-	fi
-	curl -s http://www.harrisonconsoles.com/mixbus/mb3/${OSX_ARCH}/harrison_lv2s.zip \
-		| bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf -
+	curl -s -S --fail -#  \
+		-z "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
+		-o "${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip" \
+		http://www.harrisonconsoles.com/mixbus/mb3/${OSX_BENSID}/harrison_lv2s.zip
+
+	mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
+	bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
+		"${CACHEDIR}/harrison_lv2s.${OSX_BENSID}.zip"
 fi
 
 if test x$WITH_HARVID != x ; then
@@ -598,6 +623,14 @@ if test x$WITH_HARVID != x ; then
 	cp -r "${JADEO}/Jadeo.app" "$PRODUCT_PKG_DIR/"
 	hdiutil detach "${JADEO}"
 
+	XJCONTENT=${PRODUCT_PKG_DIR}/Jadeo.app/Contents
+	HVLIBS=${PRODUCT_PKG_DIR}/$APPROOT/lib/harvid
+
+	for file in ${XJCONTENT}/MacOS/Jadeo-bin ${XJCONTENT}/Frameworks/*.dylib ${HVLIBS}/*.dylib ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/*harvid* ; do
+		lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin && \
+		mv ${file}.thin ${file}
+	done
+
 	DMGWINBOTTOM=580
 	YPOS=$[ $DMGWINBOTTOM - 300 ]
 	XJADEOPOS="set position of item \"Jadeo.app\" of container window to {310, ${YPOS}}"
@@ -605,44 +638,51 @@ if test x$WITH_HARVID != x ; then
 	DMGBACKGROUND=${DMGBACKGROUND}xj
 fi
 
-###################################################################
+################################################################################
 ### Mixbus plugins, etc
-if test -n "$MIXBUS"; then
+if test x$WITH_X42_LV2 != x ; then
 	echo "bundling x42 plugins"
-	if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then
-		OSX_ARCH=x86_64
-	else
-		OSX_ARCH=i386
-	fi
-
 	mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2"
 
-	METERS_VERSION=$(curl -s -S http://gareus.org/x42/osx/x42-meters.latest.txt)
+	METERS_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-meters.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/osx/x42-meters-lv2-osx-${METERS_VERSION}.zip \
+		rsync://x42-plugins.com/x42/osx/x42-meters-lv2-osx-${METERS_VERSION}.zip \
 		"$CACHEDIR/x42-meters-lv2-osx-${METERS_VERSION}.zip"
 	bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
 		"$CACHEDIR/x42-meters-lv2-osx-${METERS_VERSION}.zip"
 
-	SETBFREE_VERSION=$(curl -s -S http://gareus.org/x42/osx/setBfree.latest.txt)
+	SETBFREE_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/setBfree.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/osx/setBfree-lv2-osx-${SETBFREE_VERSION}.zip \
+		rsync://x42-plugins.com/x42/osx/setBfree-lv2-osx-${SETBFREE_VERSION}.zip \
 		"$CACHEDIR/setBfree-lv2-osx-${SETBFREE_VERSION}.zip"
 	bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
 		"$CACHEDIR/setBfree-lv2-osx-${SETBFREE_VERSION}.zip"
 
-	MIDIFILTER_VERSION=$(curl -s -S http://gareus.org/x42/osx/x42-midifilter.latest.txt)
+	MIDIFILTER_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-midifilter.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/osx/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip \
+		rsync://x42-plugins.com/x42/osx/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip \
 		"$CACHEDIR/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip"
 	bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \
 		"$CACHEDIR/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip"
 
 	for file in ${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/*/*.dylib ; do
-		lipo -thin ${OSX_ARCH} ${file} -output ${file}.thin
+		lipo -extract_family ${OSX_ARCH} ${file} -output ${file}.thin
 		mv ${file}.thin ${file}
 	done
+fi
 
+if test -n "$MIXBUS"; then
+	echo "deploying harrison tools for $OSX_BENSID"
+
+	mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip"
+
+	curl -s -S --fail -#  \
+		-z "${CACHEDIR}/harrison_channelstrip.${OSX_BENSID}.so" \
+		-o "${CACHEDIR}/harrison_channelstrip.${OSX_BENSID}.so" \
+		http://www.harrisonconsoles.com/mixbus/mb3/${OSX_BENSID}/harrison_channelstrip.so
+
+	cp "${CACHEDIR}/harrison_channelstrip.${OSX_BENSID}.so" \
+		"${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip/harrison_channelstrip.so"
 fi
 ################################################################################
 
@@ -676,9 +716,8 @@ TMPDMG="${TMPDMG}.dmg"
 
 trap "rm -rf $MNTPATH $TMPDMG ${TMPDMG}.dmg $ICNSTMP" EXIT
 
-hdiutil create -megabytes $DMGMEGABYTES "$TMPDMG"
+hdiutil create -megabytes $DMGMEGABYTES -fs HFS+ -volname "${VOLNAME}" "$TMPDMG"
 DiskDevice=$(hdid -nomount "$TMPDMG" | grep Apple_HFS | cut -f 1 -d ' ')
-newfs_hfs -v "${VOLNAME}" "${DiskDevice}"
 mount -t hfs -o nobrowse "${DiskDevice}" "${MNTPATH}"
 
 cp -r ${PRODUCT_PKG_DIR}/* "${MNTPATH}" || exit
@@ -700,6 +739,7 @@ osascript << EOF
     activate
     tell disk "${DISKNAME}"
       open
+      delay 2
       set current view of container window to icon view
       set toolbar visible of container window to false
       set statusbar visible of container window to false
@@ -735,6 +775,7 @@ hdiutil eject "${DiskDevice}" || true
 # Create a read-only version, use zlib compression
 hdiutil convert -format UDZO "${TMPDMG}" -imagekey zlib-level=9 -o "${UC_DMG}"
 
+if test $(sw_vers -productVersion | cut -d '.' -f 2) -gt 5; then
 echo "setting file icon ..."
 
 cp ${PRODUCT_PKG_DIR}/$Resources/appIcon.icns ${ICNSTMP}.icns
@@ -744,6 +785,8 @@ Rez -append ${ICNSTMP}.rsrc -o "$UC_DMG"
 SetFile -a C "$UC_DMG"
 
 rm ${ICNSTMP}.icns ${ICNSTMP}.rsrc
+fi
+
 rm -rf ${PRODUCT_PKG_DIR}
 
 echo
diff --git a/tools/x-win/package.sh b/tools/x-win/package.sh
index 8a1da07..6575ced 100755
--- a/tools/x-win/package.sh
+++ b/tools/x-win/package.sh
@@ -115,6 +115,7 @@ cp build/libs/timecode/timecode.dll $DESTDIR/bin/
 cp build/libs/qm-dsp/qmdsp-*.dll $DESTDIR/bin/
 cp build/libs/canvas/canvas-*.dll $DESTDIR/bin/
 cp build/libs/pbd/pbd-*.dll $DESTDIR/bin/
+cp build/libs/ptformat/ptformat-*.dll $DESTDIR/bin/
 cp build/libs/audiographer/audiographer-*.dll $DESTDIR/bin/
 cp build/libs/fst/ardour-vst-scanner.exe $DESTDIR/bin/ || true
 cp `ls -t build/gtk2_ardour/ardour-*.exe | head -n1` $DESTDIR/bin/${PRODUCT_EXE}
@@ -124,6 +125,8 @@ cp build/libs/clearlooks-newer/clearlooks.dll $DESTDIR/lib/gtk-2.0/engines/libcl
 
 cp $PREFIX/bin/*dll $DESTDIR/bin/
 cp $PREFIX/lib/*dll $DESTDIR/bin/
+# special case libportaudio (wasapi), old stack has no wasapi and hence no .xp
+cp $PREFIX/bin/libportaudio-2.xp $DESTDIR/bin/ || cp $PREFIX/bin/libportaudio-2.dll $DESTDIR/bin/libportaudio-2.xp
 rm -rf $DESTDIR/bin/libjack*.dll
 
 cp `find build/libs/surfaces/ -iname "*.dll"` $ALIBDIR/surfaces/
@@ -174,8 +177,6 @@ echo " === bundle completed, cleaning up"
 echo " === complete"
 du -sh $DESTDIR
 
-( cd $DESTDIR ; find . ) > ${TMPDIR}/file_list.txt
-
 ################################################################################
 ### get video tools
 if test -z "$NOVIDEOTOOLS"; then
@@ -225,29 +226,57 @@ fi
 
 ################################################################################
 ### Mixbus plugins, etc
-if test -n "$MIXBUS"; then
-
+if test -n "$MIXBUS"; then # TODO use separate variable
 	mkdir -p $ALIBDIR/LV2
-	METERS_VERSION=$(curl -s -S http://gareus.org/x42/win/x42-meters.latest.txt)
+
+	echo "Adding x42 Plugins"
+
+	METERS_VERSION=$(curl -s -S http://x42-plugins.com/x42/win/x42-meters.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/win/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip \
+		rsync://x42-plugins.com/x42/win/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip \
 		"${SRCDIR}/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip"
-	unzip -d "$ALIBDIR/LV2/" "${SRCDIR}/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip"
+	unzip -q -d "$ALIBDIR/LV2/" "${SRCDIR}/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip"
 
-	SETBFREE_VERSION=$(curl -s -S http://gareus.org/x42/win/setBfree.latest.txt)
+	SETBFREE_VERSION=$(curl -s -S http://x42-plugins.com/x42/win/setBfree.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/win/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip \
+		rsync://x42-plugins.com/x42/win/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip \
 		"${SRCDIR}/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip"
-	unzip -d "$ALIBDIR/LV2/" "${SRCDIR}/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip"
+	unzip -q -d "$ALIBDIR/LV2/" "${SRCDIR}/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip"
 
-	MIDIFILTER_VERSION=$(curl -s -S http://gareus.org/x42/win/x42-midifilter.latest.txt)
+	MIDIFILTER_VERSION=$(curl -s -S http://x42-plugins.com/x42/win/x42-midifilter.latest.txt)
 	rsync -a -q --partial \
-		rsync://gareus.org/x42/win/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip \
+		rsync://x42-plugins.com/x42/win/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip \
 		"${SRCDIR}/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip"
-	unzip -d "$ALIBDIR/LV2/" "${SRCDIR}/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip"
+	unzip -q -d "$ALIBDIR/LV2/" "${SRCDIR}/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip"
+fi
+
+if test -n "$MIXBUS"; then # TODO use separate variable
+	mkdir -p $ALIBDIR/LV2
 
+	echo "Including Harrison LV2s"
+
+	curl -s -S --fail -# \
+		-z "${SRCDIR}/harrison_lv2s.${WARCH}.zip" \
+		-o "${SRCDIR}/harrison_lv2s.${WARCH}.zip" \
+		http://www.harrisonconsoles.com/mixbus/mb3/${WARCH}/harrison_lv2s.zip
+	unzip -q -d "$ALIBDIR/LV2/" "${SRCDIR}/harrison_lv2s.${WARCH}.zip"
+fi
+
+if test -n "$MIXBUS"; then
+	echo "Deploying Harrison Mixbus Channelstrip"
+
+	mkdir -p $ALIBDIR/ladspa/strip
+	curl -s -S --fail -# \
+		-z "${SRCDIR}/harrison_channelstrip.${WARCH}.dll" \
+		-o "${SRCDIR}/harrison_channelstrip.${WARCH}.dll" \
+		http://www.harrisonconsoles.com/mixbus/mb3/${WARCH}/harrison_channelstrip.dll
+
+	cp "${SRCDIR}/harrison_channelstrip.${WARCH}.dll" \
+		"$ALIBDIR/ladspa/strip/harrison_channelstrip.dll"
 fi
 
+( cd $DESTDIR ; find . ) > ${TMPDIR}/file_list.txt
+
 ################################################################################
 echo " === Preparing Windows Installer"
 NSISFILE=$DESTDIR/a3.nsis
@@ -276,6 +305,7 @@ cat >> $NSISFILE << EOF
 !addincludedir "${this_script_dir}\\nsis"
 !include MUI2.nsh
 !include FileAssociation.nsh
+!include WinVer.nsh
 
 Name "${PROGRAM_NAME}${PROGRAM_VERSION}"
 OutFile "${OUTFILE}"
@@ -290,10 +320,10 @@ if test -n "$MIXBUS"; then
 
 # TODO: proper welcome/finish text.
 	cat >> $NSISFILE << EOF
-!define MUI_FINISHPAGE_TITLE "Welcome to Mixbus"
-!define MUI_FINISHPAGE_TEXT "Thank you for choosing Harrison Mixbus."
-!define MUI_FINISHPAGE_LINK "Harrison Consoles Website"
-!define MUI_FINISHPAGE_LINK_LOCATION "http://harrisonconsoles.com"
+!define MUI_FINISHPAGE_TITLE "Welcome to Harrison Mixbus"
+!define MUI_FINISHPAGE_TEXT "Thanks for your purchase of Mixbus!\$\\r\$\\nYou will find the Mixbus application in the Start Menu (or the All Apps panel for Windows 8) \$\\r\$\\nClick the link below to view the Mixbus manual, and learn ways to get involved with the Mixbus community."
+!define MUI_FINISHPAGE_LINK "Mixbus Manual"
+!define MUI_FINISHPAGE_LINK_LOCATION "http://www.harrisonconsoles.com/mixbus/mixbus3-live-manual"
 !define MUI_FINISHPAGE_NOREBOOTSUPPORT
 EOF
 
@@ -375,6 +405,12 @@ Section "${PROGRAM_NAME}${PROGRAM_VERSION} (required)" SecMainProg
   WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${PRODUCT_ID}-${WARCH}" "NoRepair" 1
   WriteUninstaller "\$INSTDIR\uninstall.exe"
   CreateShortCut "\$INSTDIR\\${PROGRAM_NAME}${PROGRAM_VERSION}.lnk" "\$INSTDIR\\bin\\${PRODUCT_EXE}" "" "\$INSTDIR\\bin\\${PRODUCT_EXE}" 0
+  \${If} \${AtMostWinXP}
+    Delete "\$INSTDIR\\bin\\libportaudio-2.dll"
+    Rename "\$INSTDIR\\bin\\libportaudio-2.xp" "\$INSTDIR\\bin\\libportaudio-2.dll"
+  \${Else}
+    Delete "\$INSTDIR\\bin\\libportaudio-2.xp"
+  \${EndIf}
   \${registerExtension} "\$INSTDIR\\bin\\${STATEFILE_SUFFIX}" ".${PRODUCT_NAME}" "${PROGRAM_NAME} Session"
 SectionEnd
 EOF
diff --git a/wscript b/wscript
index 1626f84..3e72fbc 100644
--- a/wscript
+++ b/wscript
@@ -8,8 +8,9 @@ import subprocess
 import sys
 import platform as PLATFORM
 from waflib.Tools import winres
-
+from waflib.Build import Context
 from waflib.Build import BuildContext
+
 class i18n(BuildContext):
         cmd = 'i18n'
         fun = 'i18n'
@@ -26,6 +27,10 @@ class i18n_mo(BuildContext):
         cmd = 'i18n_mo'
         fun = 'i18n_mo'
 
+def is_tracks_build(self, *k, **kw):
+        return self.env['PROGRAM_NAME'] == 'Tracks Live'
+
+Context.Context.is_tracks_build = is_tracks_build
 
 compiler_flags_dictionaries= {
     'gcc' : {
@@ -73,6 +78,12 @@ compiler_flags_dictionaries= {
         'c99': '-std=c99',
         # Flag to enable AT&T assembler syntax
         'attasm': '-masm=att',
+        # Flags to make AVX instructions/intrinsics available
+        'avx': '-mavx',
+        # Flags to generate position independent code, when needed to build a shared object
+        'pic': '-fPIC',
+        # Flags required to compile C code with anonymous unions (only part of C11)
+        'c-anonymous-union': '-fms-extensions',
     },
     'msvc' : {
         'debuggable' : ['/DDEBUG', '/Od', '/Zi', '/MDd', '/Gd', '/EHsc'],
@@ -100,6 +111,10 @@ compiler_flags_dictionaries= {
         'cxx-strict' : '',
         'strict' : '',
         'c99': '/TP',
+        'attasm': '',
+        'avx': '',
+        'pic': '',
+        'c-anonymous-union': '',
     },
 }
 
@@ -164,8 +179,12 @@ else:
     MICRO = '0'
 
 V = MAJOR + '.' + MINOR + '.' + MICRO
-VERSION = V
-PROGRAM_VERSION = MAJOR
+# Ensure that these are not unicode, which
+# can cause odd problems elsewhere. Note that
+# in python3, encode and decode do not return
+# strings, so we have to force the type.
+VERSION = str (V.encode ('ascii', 'ignore'))
+PROGRAM_VERSION = str (MAJOR.encode ('ascii', 'ignore'))
 
 # Mandatory variables
 top = '.'
@@ -176,6 +195,7 @@ children = [
         'libs/qm-dsp',
         'libs/vamp-plugins',
         'libs/libltc',
+        'libs/ptformat',
         # core ardour libraries
         'libs/pbd',
         'libs/midi++2',
@@ -291,8 +311,12 @@ int main() { return 0; }''',
         else:
             compiler_name = 'gcc'
 
-    flags_dict = compiler_flags_dictionaries[compiler_name]
-            
+    flags_dict = compiler_flags_dictionaries[compiler_name] 
+    # Save the compiler flags because we need them at build time
+    # when we need to add compiler specific flags in certain
+    # libraries
+    conf.env['compiler_flags_dict'] = flags_dict;
+    
     autowaf.set_basic_compiler_flags (conf,flags_dict)
     
     if conf.options.asan:
@@ -412,12 +436,12 @@ int main() { return 0; }''',
             if (re.search ("(x86_64|AMD64)", cpu) != None):
                 # on Windows sse is supported by 64 bit platforms only
                 build_host_supports_sse = True
-                
+
                 # mingw GCC compiler to uses at&t (Unix specific) assembler dialect by default
                 # compiler_flags.append (["--mmnemonic=att", "msyntax=att")
                 
                 compiler_flags.extend ([ flags_dict['sse'], flags_dict['fpmath-sse'], flags_dict['xmmintrinsics'], flags_dict['attasm'] ])
-                
+
     # end of processor-specific section
 
     # optimization section
@@ -426,13 +450,13 @@ int main() { return 0; }''',
             compiler_flags.append("-DBUILD_VECLIB_OPTIMIZATIONS");
             conf.env.append_value('LINKFLAGS_OSX', ['-framework', 'Accelerate'])
         elif conf.env['build_target'] == 'i686' or conf.env['build_target'] == 'x86_64':
-	        compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
+                compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
         elif conf.env['build_target'] == 'mingw':
-	        # usability of the 64 bit windows assembler depends on the compiler target,
-	        # not the build host, which in turn can only be inferred from the name
-	        # of the compiler. 
-	        if re.search ('/^x86_64/', str(conf.env['CC'])):
-		        compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
+                # usability of the 64 bit windows assembler depends on the compiler target,
+                # not the build host, which in turn can only be inferred from the name
+                # of the compiler. 
+                if re.search ('x86_64-w64', str(conf.env['CC'])) != None:
+                        compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
         if not build_host_supports_sse:
             print("\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)")
 
@@ -558,6 +582,8 @@ int main() { return 0; }''',
     compiler_flags.append ('-DPROGRAM_NAME="' + Options.options.program_name + '"')
     compiler_flags.append ('-DPROGRAM_VERSION="' + PROGRAM_VERSION + '"')
 
+    conf.env['PROGRAM_NAME'] = Options.options.program_name
+    
     if opt.debug:
         conf.env.append_value('CFLAGS', debug_flags)
         conf.env.append_value('CXXFLAGS', debug_flags)
@@ -575,6 +601,9 @@ int main() { return 0; }''',
     conf.env.append_value('CXXFLAGS', cxx_flags)
     conf.env.append_value('LINKFLAGS', linker_flags)
 
+def is_tracks_build (conf):
+        return conf.env['PROGRAM_NAME'] == 'Tracks Live'
+    
 #----------------------------------------------------------------
 
 # Waf stages
@@ -585,8 +614,6 @@ def options(opt):
     autowaf.set_options(opt, debug_by_default=True)
     opt.add_option('--program-name', type='string', action='store', default='Ardour', dest='program_name',
                     help='The user-visible name of the program being built')
-    opt.add_option ('--trx', action='store_true', default=False, dest='trx_build',
-                    help='Whether to build for TRX')
     opt.add_option('--arch', type='string', action='store', dest='arch',
                     help='Architecture-specific compiler FLAGS')
     opt.add_option('--with-backends', type='string', action='store', default='jack', dest='with_backends',
@@ -680,6 +707,9 @@ def options(opt):
                     help='Turn on c++11 compiler flags (-std=c++11)')
     opt.add_option('--address-sanitizer', action='store_true', default=False, dest='asan',
                     help='Turn on AddressSanitizer (requires GCC >= 4.8 or clang >= 3.1)')
+    opt.add_option('--ptformat', action='store_true', default=False, dest='ptformat',
+                    help='Turn on PT session import option')
+
     for i in children:
         opt.recurse(i)
 
@@ -706,6 +736,7 @@ def configure(conf):
     conf.env['VERSION'] = VERSION
     conf.env['MAJOR'] = MAJOR
     conf.env['MINOR'] = MINOR
+    conf.env['MICRO'] = MICRO
     conf.line_just = 52
     autowaf.set_recursive()
     autowaf.configure(conf)
@@ -759,9 +790,6 @@ def configure(conf):
         conf.env.append_value ('CXXFLAGS', '-DSILENCE_AFTER')
         conf.define ('FREEBIE', 1)
 
-    if Options.options.trx_build:
-        conf.define ('TRX_BUILD', 1)
-
     if Options.options.lv2dir:
         conf.env['LV2DIR'] = Options.options.lv2dir
     else:
@@ -889,7 +917,9 @@ def configure(conf):
                       lib='regex', uselib_store="REGEX", define_name='HAVE_REGEX_H')
         # TODO put this only where it is needed
         conf.env.append_value('LIB', 'regex')
-
+        # TODO this should only be necessary for a debug build
+        conf.env.append_value('LIB', 'dbghelp')
+        
         # work around GdkDrawable BitBlt performance issue on windows
         # see http://gareus.org/wiki/ardour_windows_gdk_and_cairo
         conf.env.append_value('CFLAGS', '-DUSE_CAIRO_IMAGE_SURFACE')
@@ -972,12 +1002,21 @@ def configure(conf):
         conf.env['DEBUG_DENORMAL_EXCEPTION'] = True
     if opts.build_tests:
         autowaf.check_pkg(conf, 'cppunit', uselib_store='CPPUNIT', atleast_version='1.12.0', mandatory=True)
+    if opts.ptformat:
+        conf.define('PTFORMAT', 1)
+        conf.env['PTFORMAT'] = True
 
     backends = opts.with_backends.split(',')
+
     if not backends:
         print("Must configure and build at least one backend")
         sys.exit(1)
 
+    if conf.is_tracks_build():
+        # For Tracks, override backends on OS X or Windows    
+        if sys.platform == 'darwin' or sys.platform == 'mingw' or sys.platform == 'msvc':
+            backends = [ 'wavesaudio' ]
+
     conf.env['BACKENDS'] = backends
     conf.env['BUILD_JACKBACKEND'] = any('jack' in b for b in backends)
     conf.env['BUILD_ALSABACKEND'] = any('alsa' in b for b in backends)
@@ -1001,7 +1040,6 @@ def configure(conf):
         print("ALSA Backend is only available on Linux")
         sys.exit(1)
 
-
     set_compiler_flags (conf, Options.options)
 
     if sys.platform == 'darwin':
@@ -1065,6 +1103,7 @@ const char* const ardour_config_info = "\\n\\
     write_config_text('Phone home',            conf.is_defined('PHONE_HOME'))
     write_config_text('Program name',          opts.program_name)
     write_config_text('Samplerate',            conf.is_defined('HAVE_SAMPLERATE'))
+    write_config_text('PT format',            conf.is_defined('PTFORMAT'))
 #    write_config_text('Soundtouch',            conf.is_defined('HAVE_SOUNDTOUCH'))
     write_config_text('Translation',           opts.nls)
 #    write_config_text('Tranzport',             opts.tranzport)
@@ -1101,9 +1140,11 @@ def build(bld):
     # set up target directories
     lwrcase_dirname = 'ardour' + bld.env['MAJOR']
 
-    if bld.is_defined ('TRX_BUILD'):
+    if bld.is_tracks_build():
+        bld.env.append_value ('CXXFLAGS', '-DUSE_TRACKS_CODE_FEATURES')
+        bld.env.append_value ('CFLAGS', '-DUSE_TRACKS_CODE_FEATURES')
         lwrcase_dirname = 'trx'
-
+        
     # configuration files go here
     bld.env['CONFDIR'] = os.path.join(bld.env['SYSCONFDIR'], lwrcase_dirname)
     # data files loaded at run time go here

-- 
ardour Debian packaging



More information about the pkg-multimedia-commits mailing list