diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index dc9c470..ea461b5 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -1133,13 +1133,7 @@ class Session : public PBD::StatefulDestructible
 		}
 	}
 
-	bool maybe_stop (nframes_t limit) {
-		if ((_transport_speed > 0.0f && _transport_frame >= limit) || (_transport_speed < 0.0f && _transport_frame == 0)) {
-			stop_transport ();
-			return true;
-		}
-		return false;
-	}
+	bool maybe_stop (nframes_t limit);
 
 	bool maybe_sync_start (nframes_t&);
 
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 3e370b1..a586a43 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -1349,3 +1349,17 @@ Session::reset_jack_connection (jack_client_t* jack)
 		js->reset_client (jack);
 	}
 }
+
+bool
+Session::maybe_stop (nframes_t limit)
+{
+	if ((_transport_speed > 0.0f && _transport_frame >= limit) || (_transport_speed < 0.0f && _transport_frame == 0)) {
+		if (synced_to_jack () && Config->get_jack_time_master ()) {
+			_engine.transport_stop ();
+		} else if (!synced_to_jack ()) {
+			stop_transport ();
+		}
+		return true;
+	}
+	return false;
+}
