anchor.diff:      |> Array.Parallel.iter(
         fun (key,values) -> 
   
  -      use p = ServiceProxy.getOrganizationServiceProxy client.IServiceM client.authCred
  -
  -      log.WriteLine(LogLevel.Debug, 
  -        sprintf "Retrieving plugin type: %s" key)
  -      let pt = CrmData.Entities.retrievePluginType p key
  -
  -      log.WriteLine(LogLevel.Debug, 
  -        sprintf "Retrieving steps for type : %s" key)
  -      let steps =
  -        CrmData.Entities.retrievePluginProcessingSteps
  -            p pt.Id
  -        |> Seq.map(fun x -> 
  -          let stage = getAttribute "stage" x :?> OptionSetValue
  -          stage.Value, x)
  -      log.WriteLine(LogLevel.Debug, 
  -        sprintf "Found %d images" (Seq.length steps))
  -
  -      let sourceStep =
  -        values
  -        |> Seq.map(fun pl -> pl.step.executionStage,messageName pl.step)
  -        |> Set.ofSeq
  -      let targetStep = 
  -        steps
  -        |> Seq.map(fun (x,y) ->
  -          let name  = getName y
  -          x,name)
  -        |> Set.ofSeq
  -
  -      let newSteps = sourceStep - targetStep
  -      let updateSteps = Set.intersect sourceStep targetStep
  +      proxyContext client (fun p -> 
  +        log.WriteLine(LogLevel.Debug, sprintf "Retrieving plugin type: %s" key)
  +        let pt = CrmData.Entities.retrievePluginType p key
  +
  +        log.WriteLine(LogLevel.Debug, 
  +          sprintf "Retrieving steps for type : %s" key)
  +        let steps =
  +          CrmData.Entities.retrievePluginProcessingSteps p pt.Id
  +          |> Seq.map(fun x -> 
  +            let stage = getAttribute "stage" x :?> OptionSetValue
  +            stage.Value, x)
  +        log.WriteLine(LogLevel.Debug, sprintf "Found %d images" (Seq.length steps))
  +
  +        let sourceStep =
  +          values
  +          |> Seq.map(fun pl -> pl.step.executionStage,messageName pl.step)
  +          |> Set.ofSeq
  +        let targetStep = 
  +          steps
  +          |> Seq.map(fun (x,y) -> x,getName y)
  +          |> Set.ofSeq
  +
  +        let newSteps = sourceStep - targetStep
  +        let updateSteps = Set.intersect sourceStep targetStep
                   
  -      log.WriteLine(LogLevel.Debug, sprintf "Creating steps for: %s" key)
  -      createPluginSteps log solution.entity client newSteps values pt
  -
  -      log.WriteLine(LogLevel.Debug, sprintf "Updating steps for: %s" key)
  -      updatePluginSteps log client (updateSteps,steps) values)
  +        log.WriteLine(LogLevel.Debug, sprintf "Creating steps for: %s" key)
  +        createPluginSteps log solution.entity client newSteps values pt
  +
  +        log.WriteLine(LogLevel.Debug, sprintf "Updating steps for: %s" key)
  +        updatePluginSteps log client (updateSteps,steps) values) )
   
       solution, client, log, sourcePlugins
   
  
positive.code:     entitySet ||> subset'
      |> Seq.toArray
      |> Array.Parallel.map(fun (_,y) -> 
        use p = ServiceProxy.getOrganizationServiceProxy client.IServiceM client.authCred
        y, CrmData.CRUD.delete p y.LogicalName y.Id)
      |> Array.iter(
        fun (x,_) -> 
        log.WriteLine(LogLevel.Verbose,
  
negative.code:         | false ->
            let psi = updateImage y.Id updates
            CrmData.CRUD.update p psi |> ignore
            Some y) )
  
      |> Array.choose(id)
      |> Array.iter(
        fun x -> 
          log.WriteLine(LogLevel.Verbose,
            sprintf "%s: (%O) was updated" x.LogicalName x.Id)) 
  
    // Delete plugin functions
    let deleteTypes (log:ConsoleLogger.ConsoleLogger) client entitySet = 
      entitySet ||> subset
      |> Seq.toArray
      |> Array.Parallel.map(fun x ->
        proxyContext client (fun p -> 
          x, CrmData.CRUD.delete p x.LogicalName x.Id) )
      |> Array.iter(
        fun (x,_) -> 
          log.WriteLine(LogLevel.Verbose,
  