         case .All:
             return NSRange(start.location ..< end.location + end.length)
         case .Incrementing(let captureGroup):
-            return incrementingToken.result.rangeAtIndex(captureGroup)
+            return incrementingToken.ranges[captureGroup]
         case .Decrementing(let captureGroup):
-            println("Decrementing[0]: \(decrementingToken.result.range)")
-            return decrementingToken.result.rangeAtIndex(captureGroup)
+            return decrementingToken.ranges[captureGroup]
         case .Between:
             return NSRange(start.end ..< end.start)
         default:

    override func attributedStringDidChange(range: NSRange, delta: Int)  {
        for (index, token) in enumerate(matches.reverse()) {
            if token.range.location < range.end { break }
            token.range = NSMakeRange(token.range.location + delta, range.length)
            
        }
        super.attributedStringDidChange(range, delta: delta)
    }
    
    
    class Token: Printable {
        var range: NSRange
        var delta: Int // Set to +1 to increment by one level, or -1 to decrement
        var result: NSTextCheckingResult
        
        init(delta:Int, result: NSTextCheckingResult) {
            self.range = result.range
            self.delta = delta
            self.result = result
        }
        
        var description: String { return "∆\(delta) \(range)"}

            let range = rangeForScope(scope, incrementingToken: incrementingToken, decrementingToken: decrementingToken)
            if let color = self.theme?[type] {
                attributedString.addAttribute(NSForegroundColorAttributeName, value: color, range: range)
                indexSet.addIndexesInRange(range)
            }
        }
    }
