anchor.diff:              | Collect(_) :: _ -> failwith "Cannot collect on simple types" 
               | Default(_) :: _ -> failwith "Cannot default on simple types"   
               | Add(_) :: _ -> failwith "Cannot add on simple types"   
  -            | Compare(compfun) :: rest -> let instance = compfun |> applyCompare path instance in applyTransforms rest instance
  +            | Compare(compfun) :: rest -> let instance = compfun |> applyCompare vtype path origInstance instance in applyTransforms rest instance
           match funcs |> Map.tryFind path with
  -        | Some transforms -> applyTransforms transforms instance
  -        | None -> instance
  -
  -    and genOptionCopy rcs (itype: Type) (funcs: FieldUpdaters) (path: string list) (instance: Expr) : Expr = 
  +        | Some transforms -> applyTransforms transforms origInstance
  +        | None -> origInstance
  +
  +    and genOptionCopy rcs (itype: Type) (funcs: FieldUpdaters) (path: string list) (origInstance: Expr) : Expr = 
           let etype = itype.GetGenericArguments().[0]
   
           let rec applyTransforms (funcs: FieldAction list) (instance: Expr) =
  
positive.code: module ExprHelpers = 
      /// Shortcut for Expr.Application
      let inline application prms expr = Expr.Application(expr, prms)
      /// Compare Application
      let inline applyCompare (name: string list) prm expr = 
          let inputs = Expr.NewTuple [Expr.Value name; prm; prm]
          Expr.Sequential(Expr.Application(expr, inputs), Expr.Value prm)
  
      // Example of applyCompare
      //   let testCompareFun (name: string list, oldv: int, newv: int) = let dispName = String.concat "." name in printfn "%s %i %i" dispName oldv newv
      //   let applied = applyCompare ["Hello"; "World"] (Expr.Value 10) <@@ testCompareFun @@>
  
negative.code:         let pval = Expr.PropertyGet(recordInstance, field) 
          makeCopyExpr rcs field.PropertyType funcs path pval
           
      and genSimpleValueCopy _ (vtype: Type) (funcs: FieldUpdaters) (path: string list) (origInstance: Expr) : Expr = 
          let rec applyTransforms (funcs: FieldAction list) (instance: Expr) =
              match funcs with   
              | [] -> instance
  