     }
 
 
+    /// 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(fromParagraph paragraph: NSAttributedString) -> [Node] {
+    private func createNodes(from paragraph: NSAttributedString) -> [Node] {
         guard paragraph.length > 0 else {
             return []
         }

        var nodes = [Node]()
        var previous: [Node]?

        attrString.enumerateParagraphRanges(spanning: attrString.rangeOfEntireString) { (paragraphRange, _) in
            let paragraph = attrString.attributedSubstring(from: paragraphRange)
            let children = createNodes(fromParagraph: paragraph)

            if let previous = previous {
                let left = rightmostParagraphStyleElements(from: previous)

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

        return createParagraphNodes(from: style)
    }


    /// Extracts the ElementNodes contained within a Paragraph's AttributedString.
    ///
    /// - Parameters:
    ///     - attributes: Paragraph's Attributes from which we intend to extract the ElementNode
    ///
    /// - Returns: ElementNode representing the specified Paragraph.
    ///
    func createParagraphNodes(from attributes: [String: Any]) -> [ElementNode] {
        guard let style = attributes[NSParagraphStyleAttributeName] as? ParagraphStyle else {
            return []
        }

        return createParagraphNodes(from: style)
    }


    /// Extracts the ElementNodes contained within a ParagraphStyle Instance.
    ///
    /// - Parameters:
    ///     - paragraphStyle: ParagraphStyle from which we intend to extract the ElementNode
    ///
    /// - Returns: ElementNode representing the specified Paragraph.
    ///
    private func createParagraphNodes(from paragraphStyle: ParagraphStyle) -> [ElementNode] {
        var paragraphNodes = [ElementNode]()

        for property in paragraphStyle.properties.reversed() {
