                     var newSet = scope.indexSet
                     indexSet -= newSet
                     deletions += NSIndexSetDelta(oldSet, newSet).deletions
-                    println("Deletions: \(deletions)")
                 }
             } else {
                 scope.perform(attributedString, parentIndexSet: indexSet)

    // Will change indexSet
    func performSubscopes(attributedString: NSMutableAttributedString, indexSet: NSMutableIndexSet) {
        
        // In advance, see if we have to calculate deltas
        // If a scope is lazily evaluated with a editedIndexSet, it needs to listed
        var calculateDelta = false
        for scope in subscopes {
            if scope.editedIndexSet {
                calculateDelta = true
                break
            }
        }
        
        var deletions = NSMutableIndexSet()
        
        for (index, scope) in enumerate(subscopes) {
            scope.colorDictionary = colorDictionary
            if calculateDelta {
                if let editedIndexSet = scope.editedIndexSet {
                    let set = indexSet.intersectionWithSet(editedIndexSet) + deletions
                    println("set: \(set)")
                    scope.perform(attributedString, parentIndexSet: set)
                    indexSet -= scope.indexSet
                } else {

        }
    }
    
    var containsSubscopeWithEditedIndexSet: Bool {
        for scope in subscopes {
            if scope.editedIndexSet {
                return true
            }
        }
        return false
    }
    
    // Printable
    override var description: String {
    return "JLScope"
