Index: gtk2_ardour/editor_timefx.cc
===================================================================
--- gtk2_ardour/editor_timefx.cc	(revision 1608)
+++ gtk2_ardour/editor_timefx.cc	(working copy)
@@ -26,6 +26,8 @@
 #include <pbd/pthread_utils.h>
 #include <pbd/memento_command.h>
 
+#include <gtkmm2ext/window_title.h>
+
 #include "editor.h"
 #include "audio_time_axis.h"
 #include "audio_region_view.h"
@@ -44,6 +46,7 @@
 using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
+using namespace Gtkmm2ext;
 
 Editor::TimeStretchDialog::TimeStretchDialog (Editor& e)
 	: ArdourDialog ("time stretch dialog"),
@@ -53,9 +56,12 @@
 {
 	set_modal (true);
 	set_position (Gtk::WIN_POS_MOUSE);
-	set_title (_("ardour: timestretch"));
 	set_name (N_("TimeStretchDialog"));
 
+	WindowTitle title(Glib::get_application_name());
+	title += _("Timestretch");
+	set_title(title.get_string());
+
 	get_vbox()->set_spacing (5);
 	get_vbox()->set_border_width (5);
 	get_vbox()->pack_start (upper_button_box);
Index: gtk2_ardour/editor_ops.cc
===================================================================
--- gtk2_ardour/editor_ops.cc	(revision 1608)
+++ gtk2_ardour/editor_ops.cc	(working copy)
@@ -31,6 +31,7 @@
 
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/choice.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <ardour/audioengine.h>
 #include <ardour/session.h>
@@ -67,6 +68,7 @@
 using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
+using namespace Gtkmm2ext;
 using namespace Editing;
 
 /***********************************************************************
@@ -1763,7 +1765,10 @@
 		return;
 	}
 
-	dialog.set_title (_("ardour: rename region"));
+	WindowTitle title(Glib::get_application_name());
+	title += _("Rename Region");
+
+	dialog.set_title (title.get_string());
 	dialog.set_name ("RegionRenameWindow");
 	dialog.set_size_request (300, -1);
 	dialog.set_position (Gtk::WIN_POS_MOUSE);
@@ -2526,8 +2531,10 @@
 	if (interthread_progress_window == 0) {
 		build_interthread_progress_window ();
 	}
-	
-	interthread_progress_window->set_title (_("ardour: freeze"));
+
+	WindowTitle title(Glib::get_application_name());
+	title += _("Freeze");
+	interthread_progress_window->set_title (title.get_string());
 	interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
 	interthread_progress_window->show_all ();
 	interthread_progress_bar.set_fraction (0.0f);
Index: gtk2_ardour/editor_audio_import.cc
===================================================================
--- gtk2_ardour/editor_audio_import.cc	(revision 1608)
+++ gtk2_ardour/editor_audio_import.cc	(working copy)
@@ -21,6 +21,7 @@
 #include <pbd/basename.h>
 
 #include <gtkmm2ext/choice.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <ardour/session.h>
 #include <ardour/audioplaylist.h>
@@ -48,6 +49,7 @@
 using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
+using namespace Gtkmm2ext;
 using namespace Editing;
 using Glib::ustring;
 
@@ -169,7 +171,7 @@
 							   to_embed.size() > 2 ? _("multichannel") : _("stereo")));
 			choices.push_back (_("Import as multiple regions"));
 			
-			Gtkmm2ext::Choice chooser (string_compose (_("Paired files detected (%1, %2 ...).\nDo you want to:"),
+			Choice chooser (string_compose (_("Paired files detected (%1, %2 ...).\nDo you want to:"),
 								   to_embed[0],
 								   to_embed[1]),
 						   choices);
@@ -215,7 +217,9 @@
 int
 Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* track, nframes_t& pos)
 {
-	interthread_progress_window->set_title (string_compose (_("ardour: importing %1"), paths.front()));
+	WindowTitle title = string_compose (_("importing %1"), paths.front());
+
+	interthread_progress_window->set_title (title.get_string());
 	interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
 	interthread_progress_window->show_all ();
 	interthread_progress_bar.set_fraction (0.0f);
Index: gtk2_ardour/editor_mixer.cc
===================================================================
--- gtk2_ardour/editor_mixer.cc	(revision 1608)
+++ gtk2_ardour/editor_mixer.cc	(working copy)
@@ -17,7 +17,9 @@
 
 */
 
+#include <glibmm/miscutils.h>
 #include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/window_title.h>
 #include <ardour/audioengine.h>
 
 #include "editor.h"
@@ -29,6 +31,8 @@
 
 #include "i18n.h"
 
+using namespace Gtkmm2ext;
+
 void
 Editor::editor_mixer_button_toggled ()
 {
@@ -344,7 +348,10 @@
 
 	current_mixer_strip = 0;
 
-	set_title (_("ardour: editor"));
+	WindowTitle title(Glib::get_application_name());
+	title += _("Editor");
 
+	set_title (title.get_string());
+
 	session = 0;
 }
Index: gtk2_ardour/export_dialog.cc
===================================================================
--- gtk2_ardour/export_dialog.cc	(revision 1608)
+++ gtk2_ardour/export_dialog.cc	(working copy)
@@ -29,6 +29,8 @@
 #include <pbd/xml++.h>
 
 #include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/window_title.h>
+
 #include <ardour/export.h>
 #include <ardour/sndfile_helpers.h>
 #include <ardour/audio_track.h>
@@ -51,6 +53,7 @@
 using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
+using namespace Gtkmm2ext;
 
 static const gchar *sample_rates[] = {
 	N_("22.05kHz"),
@@ -117,8 +120,11 @@
 	track_and_master_selection_allowed = true;
 	channel_count_selection_allowed = true;
 	export_cd_markers_allowed = true;
+
+	WindowTitle title(Glib::get_application_name());
+	title += _("Export");
 	
-	set_title (_("ardour: export"));
+	set_title (title.get_string());
 	set_wmclass (X_("ardour_export"), "Ardour");
 	set_name ("ExportWindow");
 	add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
Index: gtk2_ardour/new_session_dialog.cc
===================================================================
--- gtk2_ardour/new_session_dialog.cc	(revision 1608)
+++ gtk2_ardour/new_session_dialog.cc	(working copy)
@@ -32,12 +32,16 @@
 #include <gtkmm/stock.h>
 #include <gdkmm/cursor.h>
 
+#include <gtkmm2ext/window_title.h>
+
+using namespace Gtkmm2ext;
+
 #include "opts.h"
 
 NewSessionDialog::NewSessionDialog()
 	: ArdourDialog ("session control")
 {
-        session_name_label = Gtk::manage(new class Gtk::Label(_("Name :")));
+	session_name_label = Gtk::manage(new class Gtk::Label(_("Name :")));
 	m_name = Gtk::manage(new class Gtk::Entry());
 	m_name->set_text(GTK_ARDOUR::session_name);
 
@@ -338,7 +342,11 @@
 	get_vbox()->set_homogeneous(false);
 	get_vbox()->set_spacing(0);
 	get_vbox()->pack_start(*m_notebook, Gtk::PACK_SHRINK, 0);
-	set_title(_("ardour: session control"));
+
+	WindowTitle title(Glib::get_application_name());
+	title += _("Session Control");
+	set_title(title.get_string());
+
 	//set_modal(false);
 	//property_window_position().set_value(Gtk::WIN_POS_NONE);
 	set_resizable(false);
Index: gtk2_ardour/ardour_ui.cc
===================================================================
--- gtk2_ardour/ardour_ui.cc	(revision 1608)
+++ gtk2_ardour/ardour_ui.cc	(working copy)
@@ -44,6 +44,7 @@
 #include <gtkmm2ext/fastmeter.h>
 #include <gtkmm2ext/stop_signal.h>
 #include <gtkmm2ext/popup.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <midi++/port.h>
 #include <midi++/mmc.h>
@@ -93,7 +94,7 @@
 
 ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
 
-	: Gtkmm2ext::UI ("ardour", argcp, argvp, rcfile),
+	: Gtkmm2ext::UI (X_("Ardour"), argcp, argvp, rcfile),
 	  
 	  primary_clock (X_("primary"), false, X_("TransportClockDisplay"), true, false, true),
 	  secondary_clock (X_("secondary"), false, X_("SecondaryClockDisplay"), true, false, true),
Index: gtk2_ardour/location_ui.cc
===================================================================
--- gtk2_ardour/location_ui.cc	(revision 1608)
+++ gtk2_ardour/location_ui.cc	(working copy)
@@ -22,6 +22,7 @@
 
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/stop_signal.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <ardour/utils.h>
 #include <ardour/configuration.h>
@@ -566,13 +567,16 @@
 }
 
 LocationUI::LocationUI ()
-	: ArdourDialog ("location dialog"),
+	: ArdourDialog ("locations dialog"),
 	  add_location_button (_("Add New Location")),
 	  add_range_button (_("Add New Range"))
 {
 	i_am_the_modifier = 0;
+	
+	WindowTitle title(Glib::get_application_name());
+	title += _("Locations");
 
-	set_title(_("ardour: locations"));
+	set_title(title.get_string());
 	set_wmclass(X_("ardour_locations"), "Ardour");
 
 	set_name ("LocationWindow");
Index: gtk2_ardour/editor_markers.cc
===================================================================
--- gtk2_ardour/editor_markers.cc	(revision 1608)
+++ gtk2_ardour/editor_markers.cc	(working copy)
@@ -23,6 +23,7 @@
 
 #include <libgnomecanvas/libgnomecanvas.h>
 #include <gtkmm2ext/gtk_ui.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <ardour/location.h>
 #include <pbd/memento_command.h>
@@ -43,6 +44,7 @@
 using namespace ARDOUR;
 using namespace PBD;
 using namespace Gtk;
+using namespace Gtkmm2ext;
 
 void
 Editor::clear_marker_display ()
@@ -856,13 +858,16 @@
 	string txt;
 
 	dialog.set_prompt (_("New Name:"));
-	
+
+	WindowTitle title(Glib::get_application_name());
 	if (loc->is_mark()) {
-		dialog.set_title (_("ardour: rename mark"));
+		title += _("Rename Mark");
 	} else {
-		dialog.set_title (_("ardour: rename range"));
+		title += _("Rename Range");
 	}
 
+	dialog.set_title(title.get_string());
+
 	dialog.set_name ("MarkRenameWindow");
 	dialog.set_size_request (250, -1);
 	dialog.set_position (Gtk::WIN_POS_MOUSE);
Index: gtk2_ardour/editor.cc
===================================================================
--- gtk2_ardour/editor.cc	(revision 1608)
+++ gtk2_ardour/editor.cc	(working copy)
@@ -30,6 +30,7 @@
 #include <pbd/stacktrace.h>
 #include <pbd/memento_command.h>
 
+#include <glibmm/miscutils.h>
 #include <gtkmm/image.h>
 #include <gdkmm/color.h>
 #include <gdkmm/bitmap.h>
@@ -38,6 +39,7 @@
 #include <gtkmm2ext/gtk_ui.h>
 #include <gtkmm2ext/tearoff.h>
 #include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <ardour/audio_track.h>
 #include <ardour/audio_diskstream.h>
@@ -708,7 +710,10 @@
 		set_icon_list (window_icons);
 		set_default_icon_list (window_icons);
 	}
-	set_title (_("ardour: editor"));
+
+	WindowTitle title(Glib::get_application_name());
+	title += _("Editor");
+	set_title (title.get_string());
 	set_wmclass (X_("ardour_editor"), "Ardour");
 
 	add (vpacker);
@@ -1006,24 +1011,21 @@
 	if (session) {
 		bool dirty = session->dirty();
 
-		string wintitle = _("ardour: editor: ");
+		string session_name;
 
-		if (dirty) {
-			wintitle += '[';
-		}
-
-		wintitle += session->name();
-
 		if (session->snap_name() != session->name()) {
-			wintitle += ':';
-			wintitle += session->snap_name();
+			session_name = session->snap_name();
+		} else {
+			session_name = session->name();
 		}
 
 		if (dirty) {
-			wintitle += ']';
+			session_name = "*" + session_name;
 		}
 
-		set_title (wintitle);
+		WindowTitle title(session_name);
+		title += Glib::get_application_name();
+		set_title (title.get_string());
 	}
 }
 
Index: gtk2_ardour/ardour_ui_ed.cc
===================================================================
--- gtk2_ardour/ardour_ui_ed.cc	(revision 1608)
+++ gtk2_ardour/ardour_ui_ed.cc	(working copy)
@@ -25,7 +25,10 @@
 
 #include <pbd/pathscanner.h>
 
+#include <glibmm/miscutils.h>
+
 #include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/window_title.h>
 
 #include "ardour_ui.h"
 #include "public_editor.h"
@@ -714,7 +717,10 @@
 	
 	big_clock_window->set_border_width (0);
 	big_clock_window->add  (big_clock);
-	big_clock_window->set_title (_("ardour: clock"));
+
+	WindowTitle title(Glib::get_application_name());
+	title += _("Clock");
+	big_clock_window->set_title (title.get_string());
 	big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
 	big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window,  (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
 	big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
Index: gtk2_ardour/redirect_box.cc
===================================================================
--- gtk2_ardour/redirect_box.cc	(revision 1608)
+++ gtk2_ardour/redirect_box.cc	(working copy)
@@ -24,6 +24,8 @@
 
 #include <pbd/convert.h>
 
+#include <glibmm/miscutils.h>
+
 #include <gtkmm/messagedialog.h>
 
 #include <gtkmm2ext/gtk_ui.h>
@@ -32,6 +34,7 @@
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/stop_signal.h>
 #include <gtkmm2ext/doi.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <ardour/ardour.h>
 #include <ardour/session.h>
@@ -1007,11 +1010,12 @@
 		
 		if (send->get_gui() == 0) {
 			
-			string title;
-			title = string_compose(_("ardour: %1"), send->name());	
-			
 			send_ui = new SendUIWindow (send, _session);
-			send_ui->set_title (title);
+
+			WindowTitle title(Glib::get_application_name());
+			title += send->name();
+			send_ui->set_title (title.get_string());
+
 			send->set_gui (send_ui);
 			
 		} else {
@@ -1048,7 +1052,10 @@
 						ARDOUR_UI::instance()->the_editor().ensure_float (*plugin_ui);
 					}
 
-					plugin_ui->set_title (generate_redirect_title (plugin_insert));
+					WindowTitle title(Glib::get_application_name());
+					title += generate_redirect_title (plugin_insert);
+					plugin_ui->set_title (title.get_string());
+
 					plugin_insert->set_gui (plugin_ui);
 					
 					// change window title when route name is changed
@@ -1315,8 +1322,12 @@
 {
 	ENSURE_GUI_THREAD(bind (mem_fun (*this, &RedirectBox::route_name_changed), src, plugin_ui, wpi));
 	boost::shared_ptr<PluginInsert> pi (wpi.lock());
+	
+
 	if (pi) {
-		plugin_ui->set_title (generate_redirect_title (pi));
+		WindowTitle title(Glib::get_application_name());
+		title += generate_redirect_title (pi);
+		plugin_ui->set_title (title.get_string());
 	}
 }
 
@@ -1335,6 +1346,6 @@
 		maker += " ...";
 	}
 
-	return string_compose(_("ardour: %1: %2 (by %3)"), _route->name(), pi->name(), maker);	
+	return string_compose(_("%1: %2 (by %3)"), _route->name(), pi->name(), maker);	
 }
 
Index: gtk2_ardour/option_editor.cc
===================================================================
--- gtk2_ardour/option_editor.cc	(revision 1608)
+++ gtk2_ardour/option_editor.cc	(working copy)
@@ -28,6 +28,7 @@
 #include <midi++/manager.h>
 #include <gtkmm2ext/stop_signal.h>
 #include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/window_title.h>
 
 #include "public_editor.h"
 #include "keyboard.h"
@@ -52,7 +53,7 @@
 static vector<string> positional_sync_strings;
 
 OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
-	: Dialog ("option editor"),
+	: Dialog ("options editor"),
 	  ui (uip),
 	  editor (ed),
 	  mixer (mixui),
@@ -97,9 +98,12 @@
 	click_io_selector = 0;
 	auditioner_io_selector = 0;
 	session = 0;
+	
+	WindowTitle title(Glib::get_application_name());
+	title += _("Options Editor");
+	set_title(title.get_string());
 
 	set_default_size (300, 300);
-	set_title (_("ardour: options editor"));
 	set_wmclass (X_("ardour_option_editor"), "Ardour");
 
 	set_name ("OptionsWindow");
Index: gtk2_ardour/playlist_selector.cc
===================================================================
--- gtk2_ardour/playlist_selector.cc	(revision 1608)
+++ gtk2_ardour/playlist_selector.cc	(working copy)
@@ -28,6 +28,7 @@
 #include <ardour/configuration.h>
 
 #include <gtkmm2ext/gtk_ui.h>
+#include <gtkmm2ext/window_title.h>
 
 #include "playlist_selector.h"
 #include "route_ui.h"
@@ -38,6 +39,7 @@
 using namespace std;
 using namespace sigc;
 using namespace Gtk;
+using namespace Gtkmm2ext;
 using namespace ARDOUR;
 using namespace PBD;
 
@@ -48,11 +50,14 @@
 	
 	set_position (WIN_POS_MOUSE);
 	set_name ("PlaylistSelectorWindow");
-	set_title (_("ardour: playlists"));
 	set_modal(true);
 	add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
 	set_size_request (300, 200);
 
+	WindowTitle title(Glib::get_application_name());
+	title += _("Playlists");
+	set_title(title.get_string());
+
 	model = TreeStore::create (columns);
 	tree.set_model (model);
 	tree.append_column (_("Playlists grouped by track"), columns.text);
@@ -103,11 +108,10 @@
 
 	rui = ruix;
 
-	str = _("ardour: playlist for ");
-	str += rui->route()->name();
+	WindowTitle title(Glib::get_application_name());
+	title += string_compose (_("Playlist for %1"), rui->route()->name());
+	set_title (title.get_string());
 
-	set_title (str);
-
 	clear_map ();
 	select_connection.disconnect ();
 
Index: gtk2_ardour/mixer_ui.cc
===================================================================
--- gtk2_ardour/mixer_ui.cc	(revision 1608)
+++ gtk2_ardour/mixer_ui.cc	(working copy)
@@ -28,6 +28,7 @@
 #include <gtkmm2ext/gtk_ui.h>
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/stop_signal.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <ardour/session.h>
 #include <ardour/audio_track.h>
@@ -201,7 +202,11 @@
 
 	add (global_vpacker);
 	set_name ("MixerWindow");
-	set_title (_("ardour: mixer"));
+	
+	WindowTitle title(Glib::get_application_name());
+	title += _("Mixer");
+	set_title (title.get_string());
+
 	set_wmclass (X_("ardour_mixer"), "Ardour");
 
 	add_accel_group (ActionManager::ui_manager->get_accel_group());
@@ -353,10 +358,12 @@
 	XMLNode* node = ARDOUR_UI::instance()->mixer_settings();
 	set_state (*node);
 
-	string wintitle = _("ardour: mixer: ");
-	wintitle += session->name();
-	set_title (wintitle);
+	WindowTitle title(session->name());
+	title += _("Mixer");
+	title += Glib::get_application_name();
 
+	set_title (title.get_string());
+
 	initial_track_display ();
 
 	session->GoingAway.connect (mem_fun(*this, &Mixer_UI::disconnect_from_session));
@@ -382,7 +389,11 @@
 	
 	group_model->clear ();
 	_selection.clear ();
-	set_title (_("ardour: mixer"));
+
+	WindowTitle title(Glib::get_application_name());
+	title += _("Mixer");
+	set_title (title.get_string());
+	
 	stop_updating ();
 }
 
Index: gtk2_ardour/route_params_ui.cc
===================================================================
--- gtk2_ardour/route_params_ui.cc	(revision 1608)
+++ gtk2_ardour/route_params_ui.cc	(working copy)
@@ -22,6 +22,7 @@
 #include <glibmm/thread.h>
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/stop_signal.h>
+#include <gtkmm2ext/window_title.h>
 
 #include <ardour/session.h>
 #include <ardour/session_route.h>
@@ -53,6 +54,7 @@
 using namespace ARDOUR;
 using namespace PBD;
 using namespace Gtk;
+using namespace Gtkmm2ext;
 using namespace sigc;
 
 RouteParams_UI::RouteParams_UI ()
@@ -135,9 +137,12 @@
 	
 	set_name ("RouteParamsWindow");
 	set_default_size (620,370);
-	set_title (_("ardour: track/bus inspector"));
 	set_wmclass (X_("ardour_route_parameters"), "Ardour");
 
+	WindowTitle title(Glib::get_application_name());
+	title += _("Track/Bus Inspector"); 
+	set_title (title.get_string());
+
 	// events
 	route_display.get_selection()->signal_changed().connect(mem_fun(*this, &RouteParams_UI::route_selected));
 	route_display.get_column(0)->signal_clicked().connect(mem_fun(*this, &RouteParams_UI::show_track_menu));
@@ -650,29 +655,33 @@
 void
 RouteParams_UI::update_title ()
 {
-     	if (_route) {
-		string title;
-		title += _route->name();
-// 		title += ": ";
+	WindowTitle title(Glib::get_application_name());
+	title += _("Track/Bus Inspector");
 
-// 		if (_redirect && (_current_view == PLUGIN_CONFIG_VIEW || _current_view == SEND_CONFIG_VIEW)) {
-// 			title += _redirect->name();
-// 		}
-// 		else if (_current_view == INPUT_CONFIG_VIEW) {
-// 			title += _("INPUT");
-// 		}
-// 		else if (_current_view == OUTPUT_CONFIG_VIEW) {
-// 			title += _("OUTPUT");
-// 		}
+	if (_route) {
+
+		// 		title += ": ";
+
+		// 		if (_redirect && (_current_view == PLUGIN_CONFIG_VIEW || _current_view == SEND_CONFIG_VIEW)) {
+		// 			title += _redirect->name();
+		// 		}
+		// 		else if (_current_view == INPUT_CONFIG_VIEW) {
+		// 			title += _("INPUT");
+		// 		}
+		// 		else if (_current_view == OUTPUT_CONFIG_VIEW) {
+		// 			title += _("OUTPUT");
+		// 		}
+
+		title_label.set_text(_route->name());
 		
-		title_label.set_text(title);
+		title += _route->name();
 
-		title = _("ardour: track/bus inspector: ") + title;
-		set_title(title);
+		set_title(title.get_string());
 	}
 	else {
 		title_label.set_text(_("No Route Selected"));
-		set_title(_("ardour: track/bus/inspector: no route selected"));
+		title += _("No Route Selected");
+		set_title(title.get_string());
 	}	
 }
 
Index: gtk2_ardour/audio_region_editor.cc
===================================================================
--- gtk2_ardour/audio_region_editor.cc	(revision 1608)
+++ gtk2_ardour/audio_region_editor.cc	(working copy)
@@ -24,6 +24,7 @@
 #include <ardour/utils.h>
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/stop_signal.h>
+#include <gtkmm2ext/window_title.h>
 #include <cmath>
 
 #include "audio_region_editor.h"
@@ -38,6 +39,7 @@
 using namespace PBD;
 using namespace sigc;
 using namespace std;
+using namespace Gtkmm2ext;
 
 AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion> r, AudioRegionView& rv)
 	: RegionEditor (s),
@@ -118,10 +120,11 @@
 
 	signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (this)));
 
-	string title = _("ardour: region ");
-	title += _region->name();
-	set_title (title);
+	WindowTitle title(string_compose (_("Region %1"), _region->name()));
+	title += Glib::get_application_name();
 
+	set_title (title.get_string());
+
 	show_all();
 
 	name_changed ();
Index: libs/gtkmm2ext/gtkmm2ext/window_title.h
===================================================================
--- libs/gtkmm2ext/gtkmm2ext/window_title.h	(revision 0)
+++ libs/gtkmm2ext/gtkmm2ext/window_title.h	(revision 0)
@@ -0,0 +1,44 @@
+#ifndef WINDOW_TITLE_INCLUDED
+#define WINDOW_TITLE_INCLUDED
+
+#include <string>
+
+namespace Gtkmm2ext {
+
+using std::string;
+
+/**
+ * \class The WindowTitle class can be used to maintain the 
+ * consistancy of window titles between windows and dialogs.
+ *
+ * Each string element that is added to the window title will
+ * be separated by a hyphen.
+ */
+class WindowTitle
+{
+public:
+
+	/**
+	 * \param title The first string/element of the window title 
+	 * which will may be the application name or the document 
+	 * name in a document based application.
+	 */
+	WindowTitle(const string& title);
+
+	/**
+	 * Add an string element to the window title.
+	 */
+	void operator+= (const string&);
+
+	/// @return The window title string.
+	const string& get_string () { return m_title;}
+
+private:
+
+	string                         m_title;
+
+};
+
+} // Gtkmm2ext
+
+#endif // WINDOW_TITLE_INCLUDED
Index: libs/gtkmm2ext/window_title.cc
===================================================================
--- libs/gtkmm2ext/window_title.cc	(revision 0)
+++ libs/gtkmm2ext/window_title.cc	(revision 0)
@@ -0,0 +1,26 @@
+#include "gtkmm2ext/window_title.h"
+
+#include "i18n.h"
+
+namespace {
+	
+// I don't know if this should be translated.
+const char* const title_separator = X_(" - ");
+
+} // anonymous namespace
+
+namespace Gtkmm2ext {
+
+WindowTitle::WindowTitle(const string& title)
+	: m_title(title)
+{
+
+}
+
+void
+WindowTitle::operator+= (const string& element)
+{
+	m_title = m_title + title_separator + element;
+}
+
+}
Index: libs/gtkmm2ext/gtk_ui.cc
===================================================================
--- libs/gtkmm2ext/gtk_ui.cc	(revision 1608)
+++ libs/gtkmm2ext/gtk_ui.cc	(working copy)
@@ -37,6 +37,7 @@
 #include <gtkmm2ext/textviewer.h>
 #include <gtkmm2ext/popup.h>
 #include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/window_title.h>
 
 #include "i18n.h"
 
@@ -87,11 +88,12 @@
 	errors->text().set_editable (false); 
 	errors->text().set_name ("ErrorText");
 
-	string title;
-	title = namestr;
-	title += ": Log";
-	errors->set_title (title);
+	Glib::set_application_name(namestr);
 
+	WindowTitle title(Glib::get_application_name());
+	title += _("Log");
+	errors->set_title (title.get_string());
+
 	errors->dismiss_button().set_name ("ErrorLogCloseButton");
 	errors->signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), (Window *) errors));
 
Index: libs/gtkmm2ext/SConscript
===================================================================
--- libs/gtkmm2ext/SConscript	(revision 1608)
+++ libs/gtkmm2ext/SConscript	(working copy)
@@ -56,6 +56,7 @@
 textviewer.cc
 utils.cc
 version.cc
+window_title.cc
 """)
 
 gtkmm2ext.VersionBuild(['version.cc','gtkmm2ext/version.h'], [])
