     ///
     /// - Returns: the requested font.
     ///
-    private func font(forNode node: ElementNode) -> UIFont {
-        let traits = symbolicTraits(fromNode: node)
-        let newFontDescriptor = defaultFontDescriptor.fontDescriptorWithSymbolicTraits(traits)
+    private func font(forNode node: ElementNode, withBaseFontDescriptor baseFontDescriptor: UIFontDescriptor) -> UIFont {
+
+        let newFontDescriptor = fontDescriptor(forNode: node, withBaseFontDescriptor: baseFontDescriptor)
 
         return UIFont(descriptor: newFontDescriptor, size: newFontDescriptor.pointSize)
     }
 
+    private func fontDescriptor(forNode node: ElementNode, withBaseFontDescriptor fontDescriptor: UIFontDescriptor) -> UIFontDescriptor {
+        let traits = symbolicTraits(forNode: node, withBaseSymbolicTraits: fontDescriptor.symbolicTraits)
+
+        return fontDescriptor.fontDescriptorWithSymbolicTraits(traits)
+    }
+
     /// Gets a list of symbolic traits representing the specified node.
     ///
     /// - Parameters:

    /// - Returns: the attributed string representing the specified element node.
    ///
    ///
    private func stringForNode(elementNode: ElementNode) -> NSAttributedString {
        assert(elementNode.children.count > 0)

        let content = NSMutableAttributedString()

        for child in elementNode.children {
            let childContent = convert(child)

            content.appendAttributedString(childContent)
        }

        addAttributes(toString: content, fromNode: elementNode)

        return content
    }

        }
    }

    // MARK: - Node Styling

    /// Returns an attributed string representing the specified non-empty node.  Non-empty means
    /// the received node has children.
    ///
