         let processedBranches = process(branches: branches)
 
         return reduce(nodes: paragraphNodes, leaves: processedBranches)
+    }
+
+
+    /// Converts a collection of Attributes into their Node(s) representation.
+    ///
+    /// - Parameter attributes: Attributes to be mapped into nodes
+    ///
+    /// - Returns: Array of Node instances.
+    ///
+    private func createNodes(from attributes: [String: Any]) -> [Node] {
+        let nodes = createParagraphNodes(from: attributes) + createStyleNodes(from: attributes)
+
+        return nodes.reversed().reduce([]) { (result, node) in
+            node.children = result
+            return [node]
+        }
     }
 }
 

    ///
    /// - Returns: ElementNode representing the specified Paragraph.
    ///
    func createParagraphNodes(from attrString: NSAttributedString) -> [ElementNode] {
        guard let paragraphStyle = attrString.attribute(NSParagraphStyleAttributeName, at: 0, effectiveRange: nil) as? ParagraphStyle else {
            return []
        }

        var paragraphNodes = [ElementNode]()

        for property in paragraphStyle.properties.reversed() {

    }


    /// Converts a Substring, defined by it's paragraphRange and enclosingRange, into a collection of Nodes,
    /// representing the internal HTML Entities.
    ///
    /// Note:
    /// Whenever the paragraph defined by the paragraphRange is zero, we'll proceed extracting all of the attributes
    /// present in the Enclosing Range. Otherwise, we might loose data!
    ///
    /// - Parameter:
    ///     - attrString: Reference to the document to be converted.
    ///     - paragraphRange: Defines the Paragraph Range to be converted into Nodes.
    ///     - enclosingRange: Defines the Paragraph's Enclosing Range (containing newline characters).
    ///
    /// - Returns: Array of Node instances.
    ///
    private func createNodes(from attrString: NSAttributedString, paragraphRange: NSRange, enclosingRange: NSRange) -> [Node] {
        guard paragraphRange.length > 0 else {
            let attributes = attrString.attributes(at: enclosingRange.location, longestEffectiveRange: nil, in: enclosingRange)
            return createNodes(from: attributes)
        }

        let paragraph = attrString.attributedSubstring(from: paragraphRange)
        return createNodes(from: paragraph)
    }


    /// Converts a *Paragraph* into a collection of Nodes, representing the internal HTML Entities.
    ///
    /// - Parameter paragraph: Paragraph's Attributed String that should be converted.
    ///
    /// - Returns: Array of Node instances.
    ///
    private func createNodes(from paragraph: NSAttributedString) -> [Node] {
        guard paragraph.length > 0 else {
            return []
        }
