Index: gtk2_ardour/ardour_ui.cc
===================================================================
--- gtk2_ardour/ardour_ui.cc	(revision 8483)
+++ gtk2_ardour/ardour_ui.cc	(working copy)
@@ -1687,22 +1687,31 @@
 void
 ARDOUR_UI::toggle_session_auto_loop ()
 {
-	if (_session) {
-		if (_session->get_play_loop()) {
-			if (_session->transport_rolling()) {
-				Location * looploc = _session->locations()->auto_loop_location();
-				if (looploc) {
-					_session->request_locate (looploc->start(), true);
-				}
-			} else {
+	if (!_session) {
+		return;
+	}
+	
+	if (_session->get_play_loop()) {
+
+		if (_session->transport_rolling()) {
+		  
+			Location * looploc = _session->locations()->auto_loop_location();
+			
+			if (looploc) {
+				_session->request_locate (looploc->start(), true);
 				_session->request_play_loop (false);
 			}
+			
 		} else {
-			Location * looploc = _session->locations()->auto_loop_location();
-			if (looploc) {
-				_session->request_play_loop (true);
-			}
+			_session->request_play_loop (false);
 		}
+	} else {
+		
+	  Location * looploc = _session->locations()->auto_loop_location();
+		
+		if (looploc) {
+			_session->request_play_loop (true);
+		}
 	}
 }
 
Index: libs/ardour/session_transport.cc
===================================================================
--- libs/ardour/session_transport.cc	(revision 8483)
+++ libs/ardour/session_transport.cc	(working copy)
@@ -944,6 +944,7 @@
 		if (Config->get_monitoring_model() == HardwareMonitoring)
 		{
 			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->record_enabled ()) {
@@ -965,6 +966,8 @@
 		} else {
 			stop_transport (abort);
 		}
+		
+		unset_play_loop ();
 
 	} else if (transport_stopped() && speed == 1.0) {
 
