     let chapter: UInt8
     let verse: UInt8
     var positions: [UInt8]
+    var wordPositions: WordPositions!
     
     init(reference: String) {
         let parts = reference.components(separatedBy: WordRef.delims)

        }
        return finalResult
    }
    
    private func matchToEachReference(wordPositions: WordPositions) -> WordPositions {
        var updatedPositions = WordPositions(numWords: wordPositions.numWords)
        let firstWordPositions: [UInt8] = wordPositions.positions[0]

    * This method searches for all verses that contain all of the words entered.
    * It does not consider the position of the words, but it keeps track of each occurrance.
    */
    func search1(bible: Bible, words: [String]) -> [WordRef] {
        var result = [WordRef]()
        let measure = Measurement()
        if words.count == 0 {
            return result
        }
        let refLists: [[WordRef]] = BibleDB.shared.selectRefList3(bible: bible, words: words)
        if refLists.count != words.count {
            return result
        }
        measure.duration(location: "database select complete")
        // Prepare second to nth word
        var mapList = [[WordRef: [UInt8]]]()
        for index in 1..<refLists.count {
            var map = [WordRef: [UInt8]]()
            for wordRef in refLists[index] {
                map[wordRef] = wordRef.positions
            }
            mapList.append(map)
        }
        measure.duration(location: "build hashtables")
        let firstList = refLists[0]
        for index in 0..<firstList.count {
            var wordRef: WordRef = firstList[index]
            let wordPos = presentInAllSets(mapList: mapList, wordRef: wordRef)
            if wordPos != nil {
                wordRef.wordPositions = wordPos
                result.append(wordRef)
            }
        }
        measure.final(location: "search1")
        return result
    }
    
    private func presentInAllSets(mapList: [[WordRef: [UInt8]]], wordRef: WordRef) -> WordPositions? {
        var result = WordPositions(numWords: (mapList.count + 1))
        result.addWord(word: 0, positions: wordRef.positions)
        for index in 0..<mapList.count {
            let map = mapList[index]
            let found: [UInt8]? = map[wordRef]
            if found != nil {
                result.addWord(word: (index + 1), positions: found!)
            } else {
                return nil
            }
        }
        return result
