anchor.diff:          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.
  
positive.code:         ///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 |]
              
                  this.ClearAll(fun tn -> tn.Tag :? Watch)
  
                  let archiveNode = TreeNode(Text = label)
                  archiveNode.Nodes.AddRange(nodesToArchiveCloned)
  
negative.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 () ->
  