                 for x in range {
                     for y in range {
                         // Horizontal
-                        if let solves = solutionsAt(x: x, y: y, length: length, horizontal: true) {
+                        if let solves = solutionsAt(x: x, y: y, letters: solutionLetters, rackLetters: letters, length: length, horizontal: true) {
                             solutions += solves
                         }
                         // Vertical
                         if y < size - length - 1 {
-                            if let solves = solutionsAt(x: x, y: y, length: length, horizontal: false) {
+                            if let solves = solutionsAt(x: x, y: y, letters: solutionLetters, rackLetters: letters, length: length, horizontal: false) {
                                 solutions += solves
                             }
                         }
                     }
                 }
             } else {
+                let currentQueue = NSOperationQueue.currentQueue()
                 operationQueue.addOperationWithBlock({
                     var innerSolutions = [Solution]()
                     for x in range {
                         for y in range {
                             // Horizontal
-                            if let solves = solutionsAt(x: x, y: y, length: length, horizontal: true) {
+                            if let solves = self.solutionsAt(x: x, y: y, letters: solutionLetters, rackLetters: letters, length: length, horizontal: true) {
                                 innerSolutions += solves
                             }
                             // Vertical
                             if y < size - length - 1 {
-                                if let solves = solutionsAt(x: x, y: y, length: length, horizontal: false) {
+                                if let solves = self.solutionsAt(x: x, y: y, letters: solutionLetters, rackLetters: letters, length: length, horizontal: false) {
                                     innerSolutions += solves
                                 }
                             }

        return filled.count == 0 ? nil : filled
    }
    
    private func wordAt(x: Int, y: Int, string: String, horizontal: Bool) -> Word {
        assert(!string.isEmpty)
        
        if horizontal && x > 0 && board.isFilledAt(x - 1, y) {

            end += 1
            collect()
        }
        if chars.count < 2 {
            return nil
        }
        let word = horizontal ? Word(word: String(chars), x: start, y: y, horizontal: horizontal)
            : Word(word: String(chars), x: x, y: start, horizontal: horizontal)
        return (word, dictionary.lookup(word.word))
    }
    
    private func calculateScore(word: WordRepresentation, blanks: [(x: Int, y: Int)]) -> Int {
