         /// Converts a Node into it's HTML String Representation
         ///
         func convert(_ rawNode: Node) -> String {
-            return print(node: rawNode)
+            return convert(node: rawNode)
                 .replacingOccurrences(of: "<\(RootNode.name)>", with: "")
                 .replacingOccurrences(of: "</\(RootNode.name)>", with: "")
                 .trimmingCharacters(in: CharacterSet.newlines)


    /// Serializes an Attribute into it's corresponding String Value, depending on the actual Attribute subclass.
    ///
    func print(attribute: Attribute) -> String {
        switch attribute {
        case let stringAttribute as StringAttribute where !isBooleanAttribute(name: attribute.name):
            return print(stringAttribute: stringAttribute)
        default:
            return print(rawAttribute: attribute)
        }
    }

    /// Serializes a given StringAttribute.
    ///
    private func print(stringAttribute attribute: StringAttribute) -> String {
        return attribute.name + "=\"" + attribute.value + "\""
    }

    /// Serializes a given Attribute
    ///
    private func print(rawAttribute: Attribute) -> String {
        return rawAttribute.name
    }



    /// Serializes a Node into it's HTML String Representation
    ///
    func convert(node: Node, level: Int = 0) -> String {
        switch node {
        case let node as CommentNode:
            return convert(comment: node)
        case let node as ElementNode:
            return convert(element: node, level: level)
        case let node as TextNode:
            return convert(text: node)
        default:
            fatalError("We're missing support for a node type.  This should not happen.")
        }
