anchor.diff:        el
         (dom:owner-document el)))
   
  -(defun add-children (elem &rest kids)
  +(defun add-children (elem &rest kids
  +                          &aux
  +                          (list? (listp elem))
  +                          (doc (document-of (if list? (first elem) elem)))
  +                          (elem-list (alexandria:ensure-list elem)))
     "adds some kids to an element and return that element
       alias for append-nodes"
  -  (iter (for kid in (flatten-children kids (document-of elem)))
  -	(dom:append-child elem kid))
  +  (iter (for kid in (flatten-children kids doc))
  +    (when list?
  +      (setf kid (dom:clone-node kid T)))
  +    (iter (for e in elem-list)
  +      (dom:append-child e kid)))
     elem)
   
   (defun insert-children (elem idx &rest kids)
  
positive.code: 
  (defun set-attribute (elem attribute value)
    "Sets an attribute and passes the elem through, returns the elem"
    (dom:set-attribute-ns
     elem
     (attribute-uri attribute)
     (prepare-attribute-name attribute)
     (prepare-attribute-value value))
    elem)
  
  (defun remove-attribute (elem attribute)
  
negative.code:   "
    ;; throws errors to remove attributes that dont exist
    ;; dont care about that
    (iter (for e in (alexandria:ensure-list elem))
      (let ((uri (attribute-uri attribute))
            (name (prepare-attribute-name attribute)))
        (when (dom:has-attribute-ns e uri name)
          (dom:remove-attribute-ns e uri name))))
    elem)
  
  (defun remove-attributes (elem &rest attributes)
  