             return result ^ attribute.hashValue
         }
 
-        return name.hashValue ^ attributesHash
+        let childrenHash = children.reduce(0) { (result, child) in
+            return result ^ child.hashValue
+        }
+
+        return name.hashValue ^ attributesHash ^ childrenHash
     }
 
     

        }
    }

    // MARK: - Editing behavior

    func isSupportedByEditor() -> Bool {


        return ElementNode.knownElements.contains(standardName)
    }


    // MARK: - ElementNode Equatable

    static func ==(lhs: ElementNode, rhs: ElementNode) -> Bool {
        return lhs.name == rhs.name && lhs.attributes == rhs.attributes && lhs.children == rhs.children
    }
}


// MARK: - RootNode

class RootNode: ElementNode {

