             return nil
         }
         
-        // Collect characters that are filled, return if word is longer than the one we are currently trying to check
-        guard let characters = charactersAt(x, y: y, length: length, horizontal: horizontal) where characters.count == length else {
+        // Collect characters that are filled
+        guard let fixedLetters = charactersAt(x, y: y, length: length, horizontal: horizontal) else {
             return nil
         }
         
-        // Convert to be accepted by anagram method
-        var fixedLetters = [Int: Character]()
-        characters.filter({ $1.value != nil }).forEach({ fixedLetters[$1.index] = $1.value! })
-        guard let firstOffset = characters.keys.sort().first else {
-            return nil
-        }
-        
+        let firstOffset = boardState[horizontal][y][x]
         let currentX = horizontal ? firstOffset : x
         let currentY = horizontal ? y : firstOffset
         

        let combinations = Set(anagramLetters.combinations(length).map({ String($0.sort()) }))
        let words = combinations.flatMap({ anagramDictionary[$0, fixedLetters] }).flatten()
        
        var solves = [Solution]()
        for word in words {
            var valid = true

        self.anagramDictionary = anagramDictionary
    }
    
    private func charactersAt(x: Int, y: Int, length: Int, horizontal: Bool) -> [Int: Character]? {
        let size = board.config.size
        var fixedLetters = [Int: Character]()
        var index = 0
        var offset = boardState[horizontal][y][x]
       
        func addCharacter(mustExist: Bool, incrementAlways: Bool) -> Bool {
            if offset >= size { return false }
            var didExist = false
            if let value = board.letterAt(horizontal ? offset : x, horizontal ? y : offset) {
                fixedLetters[index] = value
                didExist = true
            }
            if incrementAlways || didExist {
                index += 1
                offset += 1
            }
            return mustExist == true ? didExist : true
        }

        while addCharacter(true, incrementAlways: false) { }
        for _ in 0..<length { addCharacter(false, incrementAlways: true) }
        while addCharacter(true, incrementAlways: false) { }
        
        return length != index ? nil : fixedLetters
    }
    
    private func wordAt(x: Int, y: Int, string: String, horizontal: Bool) -> (word: Word, valid: Bool)? {
