diff --git a/cloud/bmaas/bmdb/model/queries_workflows.sql b/cloud/bmaas/bmdb/model/queries_workflows.sql
index 8400d4e..49622d8 100644
--- a/cloud/bmaas/bmdb/model/queries_workflows.sql
+++ b/cloud/bmaas/bmdb/model/queries_workflows.sql
@@ -27,6 +27,7 @@
   )
   AND work.machine_id IS NULL
   AND work_backoff.machine_id IS NULL
+  AND machine_provided.provider = $2
 LIMIT $1;
 
 -- name: GetMachineForAgentRecovery :many
@@ -66,6 +67,7 @@
   )
   AND work.machine_id IS NULL
   AND work_backoff.machine_id IS NULL
+  AND machine_provided.provider = $2
 LIMIT $1;
 
 -- name: AuthenticateAgentConnection :many
diff --git a/cloud/bmaas/bmdb/queries_test.go b/cloud/bmaas/bmdb/queries_test.go
index 96e8dbe..7ceae89 100644
--- a/cloud/bmaas/bmdb/queries_test.go
+++ b/cloud/bmaas/bmdb/queries_test.go
@@ -42,7 +42,10 @@
 	expectCandidates := func(want int) {
 		t.Helper()
 		if err := session.Transact(ctx, func(q *model.Queries) error {
-			candidates, err := q.GetMachinesForAgentStart(ctx, 1)
+			candidates, err := q.GetMachinesForAgentStart(ctx, model.GetMachinesForAgentStartParams{
+				Limit:    1,
+				Provider: model.ProviderEquinix,
+			})
 			if err != nil {
 				t.Fatalf("Could not retrieve machines for agent start: %v", err)
 			}
@@ -246,7 +249,10 @@
 
 		found := false
 		if err := session.Transact(ctx, func(q *model.Queries) error {
-			candidates, err := q.GetMachineForAgentRecovery(ctx, 100)
+			candidates, err := q.GetMachineForAgentRecovery(ctx, model.GetMachineForAgentRecoveryParams{
+				Limit:    100,
+				Provider: model.ProviderEquinix,
+			})
 			if err != nil {
 				return fmt.Errorf("GetMachinesForAgentRecovery: %w", err)
 			}
diff --git a/cloud/bmaas/bmdb/sessions_test.go b/cloud/bmaas/bmdb/sessions_test.go
index b8625a9..d3c80bd 100644
--- a/cloud/bmaas/bmdb/sessions_test.go
+++ b/cloud/bmaas/bmdb/sessions_test.go
@@ -202,7 +202,10 @@
 				t.Fatalf("Deadline expired")
 			}
 			work, err := session.Work(ctx, model.ProcessShepherdAgentStart, func(q *model.Queries) ([]uuid.UUID, error) {
-				machines, err := q.GetMachinesForAgentStart(ctx, 1)
+				machines, err := q.GetMachinesForAgentStart(ctx, model.GetMachinesForAgentStartParams{
+					Limit:    1,
+					Provider: model.ProviderEquinix,
+				})
 				if err != nil {
 					return nil, err
 				}
@@ -238,7 +241,10 @@
 		var machines []model.MachineProvided
 		var err error
 		err = session.Transact(ctx, func(q *model.Queries) error {
-			machines, err = q.GetMachinesForAgentStart(ctx, 1)
+			machines, err = q.GetMachinesForAgentStart(ctx, model.GetMachinesForAgentStartParams{
+				Limit:    1,
+				Provider: model.ProviderEquinix,
+			})
 			if err != nil {
 				return err
 			}
@@ -351,7 +357,10 @@
 	errC := make(chan error)
 	go func() {
 		work, err := session.Work(ctx, model.ProcessShepherdAgentStart, func(q *model.Queries) ([]uuid.UUID, error) {
-			machines, err := q.GetMachinesForAgentStart(ctx, 1)
+			machines, err := q.GetMachinesForAgentStart(ctx, model.GetMachinesForAgentStartParams{
+				Limit:    1,
+				Provider: model.ProviderEquinix,
+			})
 			if err != nil {
 				return nil, err
 			}
@@ -390,7 +399,10 @@
 
 	// Mutual exclusion with AgentStart:
 	err = session.Transact(ctx, func(q *model.Queries) error {
-		machines, err := q.GetMachinesForAgentStart(ctx, 1)
+		machines, err := q.GetMachinesForAgentStart(ctx, model.GetMachinesForAgentStartParams{
+			Limit:    1,
+			Provider: model.ProviderEquinix,
+		})
 		if err != nil {
 			return err
 		}
@@ -405,7 +417,10 @@
 
 	// Mutual exclusion with Recovery:
 	err = session.Transact(ctx, func(q *model.Queries) error {
-		machines, err := q.GetMachineForAgentRecovery(ctx, 1)
+		machines, err := q.GetMachineForAgentRecovery(ctx, model.GetMachineForAgentRecoveryParams{
+			Limit:    1,
+			Provider: model.ProviderEquinix,
+		})
 		if err != nil {
 			return err
 		}
@@ -427,7 +442,10 @@
 	// That machine has its agent started, so we still expect no work to have to be
 	// done.
 	err = session.Transact(ctx, func(q *model.Queries) error {
-		machines, err := q.GetMachinesForAgentStart(ctx, 1)
+		machines, err := q.GetMachinesForAgentStart(ctx, model.GetMachinesForAgentStartParams{
+			Limit:    1,
+			Provider: model.ProviderEquinix,
+		})
 		if err != nil {
 			return err
 		}
@@ -518,7 +536,10 @@
 
 	workOnce := func(ctx context.Context, workerID int, session *Session) error {
 		work, err := session.Work(ctx, model.ProcessShepherdAgentStart, func(q *model.Queries) ([]uuid.UUID, error) {
-			machines, err := q.GetMachinesForAgentStart(ctx, 1)
+			machines, err := q.GetMachinesForAgentStart(ctx, model.GetMachinesForAgentStartParams{
+				Limit:    1,
+				Provider: model.ProviderEquinix,
+			})
 			if err != nil {
 				return nil, err
 			}
