anchor.diff:  open MBrace.Core.Internals
   open MBrace.Runtime.Utils
   open MBrace.Runtime.Utils.PrettyPrinters
  +
  +[<NoEquality; NoComparison>]
  +type private CloudProcessData =
  +    {
  +        Id : string
  +        Info : CloudProcessInfo
  +        State : CloudProcessState
  +        StartTime : DateTimeOffset option
  +        ExecutionTime : TimeSpan option
  +        CompletionTime : DateTimeOffset option
  +    }
  +with
  +    static member OfCloudProcessEntry(entry : ICloudProcessEntry) = async {
  +        let! state = entry.GetState()
  +        return {
  +            Id = entry.Id
  +            Info = entry.Info
  +            State = state
  +            StartTime =
  +                match state.ExecutionTime with
  +                | NotStarted -> None
  +                | Started(st,_) -> Some (st.ToLocalTime())
  +                | Finished(st,_) -> Some (st.ToLocalTime())
  +
  +            ExecutionTime =
  +                match state.ExecutionTime with
  +                | NotStarted -> None
  +                | Started(_,et) -> Some et
  +                | Finished(_,et) -> Some et
  +
  +            CompletionTime =
  +                match state.ExecutionTime with
  +                | Finished(st,et) -> Some (st.ToLocalTime() + et)
  +                | _ -> None
  +        }
  +    }
   
   /// Represents a cloud computation that is being executed in the cluster.
   [<AbstractClass>]
  
positive.code:     }
  
      /// Gets a printed report of all currently executing processes
      member pm.FormatProcesses() : string =
          let procs = pm.GetAllProcesses() |> Async.RunSync
          CloudProcessReporter.Report(procs, "Processes", borders = false)
  
      /// Prints a report of all currently executing processes to stdout.
      member pm.ShowProcesses() : unit =
  
negative.code:         member __.Dispose() = clients.TryRemove runtime.Id |> ignore
          
           
  and private CloudProcessReporter private () = 
      static let template : Field<CloudProcessData> list = 
          [ Field.create "Name" Left (fun p -> match p.Info.Name with Some n -> n | None -> "")
            Field.create "Process Id" Right (fun p -> p.Id)
            Field.create "Status" Right (fun p -> sprintf "%A" p.State.Status)
            Field.create "Execution Time" Left (fun p -> Option.toNullable p.ExecutionTime)
            Field.create "Work items" Center (fun p -> sprintf "%3d / %3d / %3d / %3d"  p.State.ActiveWorkItemCount p.State.FaultedWorkItemCount p.State.CompletedWorkItemCount p.State.TotalWorkItemCount)
            Field.create "Result Type" Left (fun p -> p.Info.ReturnTypeName) 
            Field.create "Start Time" Left (fun p -> p.StartTime |> Option.map (fun d -> d.LocalDateTime) |> Option.toNullable)
            Field.create "Completion Time" Left (fun p -> p.CompletionTime |> Option.map (fun d -> d.LocalDateTime) |> Option.toNullable)
          ]
      
      static member Report(processes : seq<CloudProcessData>, title : string, borders : bool) = 
          let ps = processes 
                   |> Seq.sortBy (fun p -> p.StartTime)
                   |> Seq.toList
  