anchor.diff:          ///Take archival snap shot of all current watches using the given label.
           member this.Archive(label: string) =
               Control.update this <| fun () ->
  -                let nodesToArchiveCloned = 
  -                    [| for tn in this.Nodes do
  -                        if tn.Tag :? Watch then yield tn.Clone() :?> TreeNode |]
  +                let nodesToArchiveCloned = [| 
  +                    for tn in this.Nodes do
  +                        if tn |> isWatch then
  +                            yield tn.Clone() :?> TreeNode |]
               
  -                this.ClearAll(fun tn -> tn.Tag :? Watch)
  +                this.ClearAll isWatch
   
                   let archiveNode = TreeNode(Text = label)
                   archiveNode.Nodes.AddRange(nodesToArchiveCloned)
  
positive.code:             if args.Button = MouseButtons.Right then
                  this.SelectedNode <- this.GetNodeAt(args.X, args.Y)
  
          this.AfterSelect.Add <| fun args ->
              afterSelect args.Node
  
          this.AfterExpand.Add <| fun args -> 
              afterExpand args.Node
      with
          member private this.UpdateWatch(tn:TreeNode, value, ty) =
              Control.update this <| fun () ->
  
negative.code:         match tn.Tag with
          | :? Watch as w -> Watch(w)
          | _ -> Archive
  
      static let isWatch (tn:TreeNode) =
          match tn with
          | Watch _ -> true
          | _ -> false
  
      static let isArchive (tn:TreeNode) =
          match tn with
          | Archive -> true
          | _ -> false
  
      ///The text used for constructing "dummy" TreeNodes used as a place-holder until childnodes are 
      ///loaded lazily.
  