anchor.diff:          let merge () = 
               // TODO this is silly if segs has only one item in it
               let h = header
  +            // TODO worry about race here.
               let clist = List.map (fun g -> getCursor h.segments g (Some checkForGoneSegment)) segs
               use mc = MultiCursor.Create clist
               let pairs = CursorUtils.ToSortedSequenceOfKeyValuePairs mc
  
positive.code:         )
          //printfn "segmentsBeingReplaced: %A" segmentsBeingReplaced
          // don't free blocks from any segment which still has a cursor
          let segmentsToBeFreed = Map.filter (fun g _ -> not (Map.containsKey g cursors)) segmentsBeingReplaced
          //printfn "segmentsToBeFreed: %A" segmentsToBeFreed
          let blocksToBeFreed = Seq.fold (fun acc info -> info.blocks @ acc) List.empty (Map.values segmentsToBeFreed)
  
negative.code:             backgroundMergeJobs
  
          member this.OpenSegment(g:Guid) =
              // TODO worry about race here.
              getCursor header.segments g (Some checkForGoneSegment)
  
          member this.OpenCursor() =
              // TODO we also need a way to open a cursor on segments in waiting
              let h = header
              // TODO worry about race here.
              let clist = List.map (fun g -> getCursor h.segments g (Some checkForGoneSegment)) h.currentState
              let mc = MultiCursor.Create clist
              LivingCursor.Create mc
  