         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:

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

                })
            self.matches += array
            if let (start, end) = surroundingTokenPair(range) {
                println("Inside pair: \(start) - \(end)")
                self.process(start, decrementingToken: end, attributedString: attributedString)
            }
        }
        
        matches.sort { $0.range.location < $1.range.location }
        
        //println("Tokens: \(matches)")
        
        var incrementingTokens = [Int: Token]()
        var depth = 0
