anchor.diff:          | 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)) 
  +          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 ->
  -      use p = ServiceProxy.getOrganizationServiceProxy client.IServiceM client.authCred
  -      x, CrmData.CRUD.delete p x.LogicalName x.Id)
  +      proxyContext client (fun p -> 
  +        x, CrmData.CRUD.delete p x.LogicalName x.Id) )
       |> Array.iter(
         fun (x,_) -> 
           log.WriteLine(LogLevel.Verbose,
  
positive.code:   let deletePluginTypes (solution, client, (log:ConsoleLogger.ConsoleLogger), sourcePlugins) = 
      log.WriteLine(LogLevel.Info, "Deleting types")
  
      use p = ServiceProxy.getOrganizationServiceProxy client.IServiceM client.authCred
      
      log.WriteLine(LogLevel.Debug, "Retrieving types")
      let types = CrmData.Entities.retrievePluginTypes p solution.assemblyId
      log.WriteLine(LogLevel.Debug, 
        sprintf "Retrieved %d types" (Seq.length types))
  
      let sourceTypes = 
        sourcePlugins
        |> Seq.map(fun pl -> pl.step.className)
        |> Set.ofSeq
      let targetTypes = 
        types
        |> Seq.map getName
        |> Set.ofSeq
  
      let newTypes  = sourceTypes - targetTypes
      let obsoleteTypes  = targetTypes - sourceTypes
              
      deleteTypes log client (obsoleteTypes,types) 
  
      solution, client, log, sourcePlugins, newTypes
  
    let updateAssembly (solution, client, (log:ConsoleLogger.ConsoleLogger), sourcePlugins, newTypes) =
      log.WriteLine(LogLevel.Verbose, "Retrieving assemblies from CRM")
  
      use p = ServiceProxy.getOrganizationServiceProxy client.IServiceM client.authCred
      let dlls = CrmData.Entities.retrievePluginAssemblies p solution.entity.Id
  
      dlls
      |> Seq.filter(fun x -> solution.dllName = getName x)
      |> Seq.iter(fun x ->
        match solution.hash = (getAttribute "sourcehash" x :?> string) with
        | true -> ()
        | false -> 
          log.WriteLine(LogLevel.Info, "Updating Assembly")
          CrmData.CRUD.update
              p (updateAssembly' x.Id solution.dllPath solution.assembly hash) |> ignore
  
          log.WriteLine(LogLevel.Verbose,
            sprintf "%s: %s was updated" x.LogicalName (getName x)))
      
      solution, client, log, sourcePlugins, newTypes
    
  
negative.code:     entitySet ||> subset
      |> Seq.toArray
      |> Array.Parallel.map(fun y -> 
        proxyContext client (fun p -> 
          y, CrmData.CRUD.delete p y.LogicalName y.Id) )
      |> Array.iter(
        fun (x,_) -> 
        log.WriteLine(LogLevel.Verbose,
  