anchor.diff:          log.WriteLine(LogLevel.Debug, sprintf "Updating Images for: %s" key)
           updatePluginImages log client (updateImages,images) plugin) )
   
  +  // Function that chains the previous functions into one larger function 
  +  // and provide each function with a commone parameters and a value that can
  +  // be carried over from the previous function in the chain.
     let syncPlugins x = 
   
       deletePluginImages x
  
positive.code:           log.WriteLine(LogLevel.Verbose, sprintf "%s: %s was updated" x.LogicalName (getName x)) ) )
      newTypes
    
    let syncTypes (solution, client, (log:ConsoleLogger.ConsoleLogger), sourcePlugins) newTypes =
      // Create Plugin Types
      log.WriteLine(LogLevel.Info, "Creating types")
      createTypes log client newTypes solution.assemblyId
  
    let syncSteps (solution, client, (log:ConsoleLogger.ConsoleLogger), sourcePlugins) _ =
      log.WriteLine(LogLevel.Info, sprintf "Creating and updating steps")
  
      // Create and update Plugin Steps
      sourcePlugins
      |> Seq.groupBy(fun pl -> pl.step.className)
      |> Seq.toArray
  
negative.code:         guid
        | Some id -> 
          id
  
  
    // The following functions are used to find the difference between the plugins 
    // in the assembly and the plugins in CRM by using source and target. 
    // Where sources is the items in the provided assembly and targets are the items
    // in CRM.
    // Items existing only in target will be deleted.
    // Items existing in both will be updated if there are changes to them
    // Items existing only in source will be created
  
    let deletePluginImages (solution, client, (log:ConsoleLogger.ConsoleLogger), sourcePlugins) _ = 
      log.WriteLine(LogLevel.Info, "Retrieving Steps")
  