         super.touchesEnded(touches, withEvent: event)
     }
     
-    override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
+    public override func touchesCancelled(touches: NSSet, withEvent event: UIEvent!) {
         addLinkAttributesToLinkRangeResultWithTouches(touches, highlighted: false)
-        
         super.touchesCancelled(touches, withEvent: event)
     }
     
-    // MARK : Functions - Attribute Helpers
-    
-    func attributesFromProperties() -> [NSObject : AnyObject] {
+    
+    // MARK: Functions
+    
+    public func setContextLabelDataWithText(text: String?) {
+        var text = text
+        
+        if text == nil {
+            text = self.text
+        }
+        
+        if let text = text {
+            self.contextLabelData = contextLabelDataWithText(text)
+        }
+    }
+    
+    public func contextLabelDataWithText(text: String?) -> ContextLabelData? {
+        if let text = text {
+            var mutableAttributedString = NSMutableAttributedString(string: text, attributes: attributesFromProperties())
+            var linkRangeResults = getRangesForLinksInAttributedString(mutableAttributedString)
+            
+            // Addd attributes to link ranges
+            let attributedString = addLinkAttributesToAttributedString(mutableAttributedString, withLinkRangeResults: linkRangeResults)
+            
+            return ContextLabelData(attributedString: attributedString, linkRangeResults: linkRangeResults)
+        }
+        
+        return nil
+    }
+    
+    public func setText(text:String, withTextLinks textLinks: [TextLink]) {
+        self.textLinks = textLinks
+        
+        self.contextLabelData = contextLabelDataWithText(text)
+    }
+    
+    // TEST testAttributesFromProperties()
+    public func attributesFromProperties() -> [NSObject : AnyObject] {
         
         // Shadow attributes
         let shadow = NSShadow()


                    if textCheckingResult.resultType == .Link {
                        if let matchString = realURL as? String {
                            rangesForURLs.append(LinkRangeResult(linkDetectionType: LinkDetectionType.URL, linkRange: matchRange, linkString: matchString))
                        }
                    }
                }

        if self.enabled == false {
            color = UIColor.lightGrayColor()
        } else if self.highlighted {
            if self.highlightedTextColor != nil {
                color = self.highlightedTextColor!
            }
        }
        
        // Paragraph attributes
        var mutableParagraphStyle = NSMutableParagraphStyle()
        mutableParagraphStyle.alignment = self.textAlignment
        
        // LineSpacing
        if let lineSpacing = lineSpacing {
            mutableParagraphStyle.lineSpacing = lineSpacing
        }
        
        // Attributes dictionary
        let attributes = [NSFontAttributeName: self.font,
