Index: libs/ardour/session.cc
===================================================================
--- libs/ardour/session.cc	(revision 11605)
+++ libs/ardour/session.cc	(working copy)
@@ -673,7 +673,7 @@
 	}
 
 	rl.push_back (r);
-	add_routes (rl, false, false);
+	add_routes (rl, false, false, false);
 	
 	assert (_monitor_out);
 
@@ -1646,7 +1646,7 @@
 
   failed:
 	if (!new_routes.empty()) {
-		add_routes (new_routes, true, true);
+		add_routes (new_routes, true, true, true);
 
 		if (instrument) {
 			for (RouteList::iterator r = new_routes.begin(); r != new_routes.end(); ++r) {
@@ -1889,7 +1889,7 @@
 
   failed:
 	if (!new_routes.empty()) {
-		add_routes (new_routes, true, true);
+		add_routes (new_routes, true, true, true);
 	}
 
 	return ret;
@@ -2001,7 +2001,7 @@
 
   failure:
 	if (!ret.empty()) {
-		add_routes (ret, false, true);
+		add_routes (ret, false, true, true); // autoconnect outputs only
 	}
 
 	return ret;
@@ -2100,7 +2100,7 @@
 
   out:
 	if (!ret.empty()) {
-		add_routes (ret, true, true);
+		add_routes (ret, true, true, true);
 		IO::enable_connecting ();
 	}
 
@@ -2108,7 +2108,7 @@
 }
 
 void
-Session::add_routes (RouteList& new_routes, bool auto_connect, bool save)
+Session::add_routes (RouteList& new_routes, bool input_auto_connect, bool output_auto_connect, bool save)
 {
         ChanCount existing_inputs;
         ChanCount existing_outputs;
@@ -2165,8 +2165,8 @@
 			}
 		}
 
-		if (auto_connect) {
-			auto_connect_route (r, existing_inputs, existing_outputs, true);
+		if (input_auto_connect || output_auto_connect) {
+			auto_connect_route (r, existing_inputs, existing_outputs, true, input_auto_connect);
 		}
 	}
 
Index: libs/ardour/session_state.cc
===================================================================
--- libs/ardour/session_state.cc	(revision 11605)
+++ libs/ardour/session_state.cc	(working copy)
@@ -605,7 +605,7 @@
 		}
 
 		if (!rl.empty()) {
-			add_routes (rl, false, false);
+			add_routes (rl, false, false, false);
 		}
 
                 /* this allows the user to override settings with an environment variable.
@@ -1473,7 +1473,7 @@
 		new_routes.push_back (route);
 	}
 
-	add_routes (new_routes, false, false);
+	add_routes (new_routes, false, false, false);
 
 	return 0;
 }

Index: libs/ardour/ardour/session.h
===================================================================
--- libs/ardour/ardour/session.h	(revision 11605)
+++ libs/ardour/ardour/session.h	(working copy)
@@ -1224,7 +1224,7 @@
 
 	SerializedRCUManager<RouteList>  routes;
 
-	void add_routes (RouteList&, bool auto_connect, bool save);
+	void add_routes (RouteList&, bool input_auto_connect, bool output_auto_connect, bool save);
 	uint32_t destructive_index;
 
 	boost::shared_ptr<Route> XMLRouteFactory (const XMLNode&, int);
