anchor.diff:    | NotEntity of XmlNode * XmlNode * RetrieveEntityResponse
     | UnhandledEntity
   
  -let NodeIsNotEntity (proxy: IOrganizationService) diffSolutionUniqueName output (devEntity: XmlNode) (prod_node: XmlNode) = 
  +let NodeIsNotEntity (diffSolutionInfo: DiffSolutionInfo) output (devEntity: XmlNode) (prod_node: XmlNode) = 
  +  let { proxy = proxy; solutionUniqueName = diffSolutionUniqueName; } = diffSolutionInfo
     let entityNode = devEntity.SelectSingleNode("EntityInfo/entity")
     if entityNode <> null then
       let name = entityNode.Attributes.GetNamedItem("Name").Value
  
positive.code:   | SolutionComponentCallback comp-> 
        createSolutionComponent proxy diffSolutionUniqueName (Guid.Parse id) comp
  
  let elim_elem ((proxy, devExtractedPath, prodExtractedPath): (IOrganizationService * string * string)) 
                output diffSolutionUniqueName (devNode: XmlNode) (prodNode: XmlNode) (resp: RetrieveEntityResponse option)
                type_ devNodePath devId (devReadable: ReadableName) (extraCheck: ExtraChecks) (callbackKind: CallbackKind) =
    let devElements = selectNodes devNode devNodePath
    devElements
    |> Seq.iter (fun devElement ->
      let id = getId devElement devId
      let name = GetReadableName devElement devReadable
      let prodElement = prodNode.SelectSingleNode(append_selector devNodePath id devId)
      let extraCheckfunction = GetExtraCheck (devExtractedPath, prodExtractedPath) devElement prodElement extraCheck
      let callback = callbackFun proxy diffSolutionUniqueName resp
      // remove_useless dev_elem prod_elem;
      if prodElement = null then
  
negative.code:   | WebResourceByteDiff
    | WorkflowGuidReplace
  
  let extraCheckFun (dev_path, prod_path) (dev_elem: XmlNode) (prod_elem: XmlNode) = function
    | NoExtra -> true
    | WorkflowGuidReplace -> workflowGuidReplace (dev_path, prod_path) dev_elem prod_elem
    | WebResourceByteDiff -> webResourceByteDiff (dev_path, prod_path) dev_elem prod_elem
  