diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 543f5f9..1084040 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -1611,10 +1611,14 @@ Session::set_default_fade (float steepness, float fade_msecs)
 }
 
 struct RouteSorter {
+    /** @return true to run r1 before r2, otherwise false */
     bool operator() (boost::shared_ptr<Route> r1, boost::shared_ptr<Route> r2) {
+	    bool interesting = false;
 	    if (r1->fed_by.find (r2) != r1->fed_by.end()) {
+		    /* r1 fed by r2; run r2 early */
 		    return false;
 	    } else if (r2->fed_by.find (r1) != r2->fed_by.end()) {
+		    /* r2 fed by r1; run r1 early */
 		    return true;
 	    } else {
 		    if (r1->fed_by.empty()) {
@@ -1626,7 +1630,13 @@ struct RouteSorter {
 				    return true;
 			    }
 		    } else {
-			    return r1->order_key(N_("signal")) < r2->order_key(N_("signal"));
+			    if (r2->fed_by.empty()) {
+				    /* r1 has connections, r2 does not; run r2 early */
+				    return false;
+			    } else {
+				    /* both r1 and r2 have connections, but not to each other. just use signal order */
+				    return r1->order_key(N_("signal")) < r2->order_key(N_("signal"));
+			    }
 		    }
 	    }
     }
@@ -1749,7 +1759,7 @@ Session::resort_routes_using (shared_ptr<RouteList> r)
 	}
 	cerr << endl;
 #endif
-	
+
 }
 
 list<boost::shared_ptr<AudioTrack> >
