                 let nodeCount:Int = self.nodeToRoundTripTimer[sessionUUID]!.count
                 let averageTimeToFinish:Double = totalTimeToFinish/Double(nodeCount)
 
-                // give peers 50% more time to finish that the current average time. min time to wait is 8 seconds. max time to wait is 5 minutes.
-                let waitTime:Double = min(max((averageTimeToFinish * 0.5) - self.reprocessingScheduleWaitTimeInSeconds, 8), 60*5)
+                // 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]!


    // 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

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