             if(status == false) {
                 let data:[String:NSObject] = ["SessionID": sessionUUID, "SelfTimeToFinish":selfTimeToFinish]
                 dispatch_async(dispatch_get_main_queue()) {
-                    NSTimer.scheduledTimerWithTimeInterval(self.reprocessingScheduleWaitTimeInSeconds, target: self, selector: #selector(FogMachine.scheduleReprocessWork(_:)), userInfo: data, repeats: false)
+                    // wait the minTime before startinf to reprocess
+                    NSTimer.scheduledTimerWithTimeInterval(self.minWaitTimeToStartReprocessingWorkInSeconds, target: self, selector: #selector(FogMachine.scheduleReprocessWork(_:)), userInfo: data, repeats: false)
                 }
             }
         }


    // used to time stuff
    private let executionTimer:FMTimer = FMTimer()

    // how long should the initiator wait after completing it's work to start resechduling work
    private let reprocessingScheduleWaitTimeInSeconds:Double = 5.0

    // all the data structures below are session dependant!
    // used to control concurrency.  It synchronizes many of the data structures below

                let nodeCount:Int = self.nodeToRoundTripTimer[sessionUUID]!.count
                let averageTimeToFinish:Double = totalTimeToFinish/Double(nodeCount)

                // give peers 40% more time to finish that the current average time.
                let waitTime:Double = min(max(((averageTimeToFinish * 1.4) - selfTimeToFinish) - self.minWaitTimeToStartReprocessingWorkInSeconds, 0), self.maxWaitTimeToStartReprocessingWorkInSeconds)
                var i:Int = 0
                for node in pendingNodes {
                    let work:FMWork = self.nodeToWork[sessionUUID]![node]!
