          candidates)]
     (if job
       (if-let [task (select-task replica job (:id args))]
-        (-> replica
-            (common/remove-peers args)
-            (update-in [:allocations job task] conj (:id args))
-            (update-in [:allocations job task] vec)
-            (assoc-in [:peer-state (:id args)] :warming-up)
-            (offer-acker job task args))
+        (if (or (not= task (:task allocation))
+                (not= job (:job allocation)))
+          (-> replica
+              (common/remove-peers args)
+              (update-in [:allocations job task] conj (:id args))
+              (update-in [:allocations job task] vec)
+              (assoc-in [:peer-state (:id args)] :warming-up)
+              (offer-acker job task args))
+          replica)
         replica)
       replica)))
 

  [{:keys [args]} replica]
  (let [candidates (universally-executable-jobs replica)
        balanced (common/percentage-balanced-workload replica)
        job
        (reduce
         (fn [_ job]

              (assoc-in [:peer-state (:id args)] :warming-up)
              (offer-acker job task args))
          replica)
        replica)
      replica)))

(defmethod select-job :onyx.job-scheduler/round-robin
  [{:keys [args]} replica]
  (if-not (common/saturated-cluster? replica)
    (let [candidates (universally-executable-jobs replica)
          allocation (common/peer->allocated-job (:allocations replica) (:id args))
          job (or (common/find-job-needing-peers replica candidates)
                  (common/round-robin-next-job replica candidates))]
      (if job
        (if-let [task (select-task replica job (:id args))]
          (if (or (not= task (:task allocation))
                  (not= job (:job allocation)))
            (-> replica
                (common/remove-peers args)
                (update-in [:allocations job task] conj (:id args))
                (update-in [:allocations job task] vec)
                (assoc-in [:peer-state (:id args)] :warming-up)
                (offer-acker job task args))
            replica)
          replica)
        replica))
    replica))

