      Runs your FMTool.
      
      */
-    private func executeOnThread() -> Void {
+    private func executeOnThread(onNodes:[FMNode]) -> Void {
         // time how long the entire execution takes
         executionTimer.start()
 

            }
        }

        // process your own work
        self.FMLog("Processing self work.")
        dispatch_sync(self.lock) {
            self.nodeToRoundTripTimer[sessionUUID]![self.getSelfNode()]?.start()
        }
        let selfResult:FMResult = self.fmTool.processWork(getSelfNode(), fromNode: getSelfNode(), work: selfWork!)

        // store the result and merge results if needed
        dispatch_sync(self.lock) {
            let selfTimeToFinish:Double = (self.nodeToRoundTripTimer[sessionUUID]![self.getSelfNode()]?.stop())!
            self.FMLog(self.getSelfNode().description + " process work time: " + String(format: "%.3f", selfTimeToFinish) + " seconds.")
            self.FMLog("Storing self work result.")
            self.nodeToResult[sessionUUID]![self.getSelfNode()] = selfResult
            let status = self.finishAndMerge(self.getSelfNode(), sessionUUID: sessionUUID)
            // schedule the reprocessing stuff
            if(status == false) {

        nodeToResult[sessionUUID] = [FMNode:FMResult]()
        nodeToRoundTripTimer[sessionUUID] = [FMNode:FMTimer]()

        for node in onNodes {
            mcPeerIDToNode[sessionUUID]![node.mcPeerID] = node
        }

