     ///
     func textListAttribute(atIndex index: Int) -> TextList? {
         return attribute(TextList.attributeName, atIndex: index, effectiveRange: nil) as? TextList
+    }
+
+
+    /// Returns the TextList attribute, assuming that there is one, spanning the specified Range.
+    ///
+    /// - Parameter range: Range to check for TextLists
+    ///
+    /// - Returns: A TextList optional.
+    ///
+    func textListAttribute(spanningRange range: NSRange) -> TextList? {
+// TODO: Unit Test!
+        var effectiveRange = NSRange()
+        guard let list = attribute(TextList.attributeName, atIndex: range.location, effectiveRange: &effectiveRange) as? TextList else {
+            return nil
+        }
+
+        guard NSEqualRanges(range, NSIntersectionRange(range, effectiveRange)) else {
+            return nil
+        }
+
+        return list
     }
 
 

    /// Returns a new Attributed String, with the TextListItem formatting removed.
    ///
    func attributedStringByRemovingTextListItemAtributes() -> NSAttributedString {
        let clean = NSMutableAttributedString(attributedString: self)

        let range = clean.rangeOfEntireString

    /// - Return: An NSAttributedString.
    ///
    func attributedStringByAddingTextListItemAtributes(kind: TextList.Kind, number: Int) -> NSAttributedString {
// TODO: Unit Test!
        let output = NSMutableAttributedString(attributedString: self)

        // Remove any existing list marker.
