         /// - Parameters:
         ///     - children: the nodes to prepend.
         ///
-        func prepend(_ children: [Node]) {
+        func prepend(_ children: [Node], tryToMergeWithSiblings: Bool = true) {
             for index in stride(from: (children.count - 1), through: 0, by: -1) {
-                prepend(children[index])
+                prepend(children[index], tryToMergeWithSiblings: tryToMergeWithSiblings)
             }
         }
         

        /// - Parameters:
        ///     - child: the node to append.
        ///
        func append(_ child: Node) {
            child.removeFromParent()

            if let lastChild = children.last as? TextNode,
                let newChildTextNode = child as? TextNode {

                lastChild.append(newChildTextNode.text())
            } else {
                children.append(child)
                child.parent = self
            }
        }
        
        /// Appends a node to the list of children for this element.

            var wrapperElement: ElementNode?
            
            if let sibling = rightSibling {
                sibling.prepend(childrenToWrap, tryToMergeWithSiblings: false)
                childrenToWrap = sibling.children
                
                wrapperElement = sibling
            }
            
            if let sibling = leftSibling {
                sibling.append(childrenToWrap, tryToMergeWithSiblings: false)
                childrenToWrap = sibling.children
                
                wrapperElement = sibling
