             LOG.error("Failed to save words in memory: \(ex)")
         }
 
+    }
+    
+    fileprivate func startLoadingFromWeb()
+    {
+        guard !initializing , !initialized else { return }
+        initializing = true
+        
+        async.addOperation
+        {
+            defer
+            {
+                self.initialized = true
+                self.initializing = false
+            }
+            
+            let start = Date()
+            let words = self.web.getAllWords()
+            let latency = start.timeIntervalSinceNow
+            
+            LOG.debug("Loaded \(words.count) words from the Web in \(latency)s. Saving them in memory.")
+            AromaClient.sendMediumPriorityMessage(withTitle: "Web Request Complete", withBody: "Operation to load all words took \(latency)s")
+            
+            self.memory.removeAll()
+            try? self.memory.save(words: words)
+        }
     }
     
     private func waitUntilInitialized()

        }
    }
    
    fileprivate func saveWordsInMemory(words: [LexisWord])
    {
        var memoryWords = memory.getAllWords()
        
        for word in words
        {
            if !memoryWords.contains(word)
            {
                memoryWords.append(word)
            }
        }
        
        try? memory.save(words: memoryWords)
    }
}



    
    private init()
    {
        AromaClient.TOKEN_ID = "8186834c-9140-4323-b678-c780b0fc1600"
    }
    
    public func initialize()
    {
        LOG.debug("Ignoring depracated initialize() call")
    }

    public var anyWord: LexisWord
    {
        if let word = memory.getAnyWord()
        {
            return word
        }
        else
        {
            startLoadingFromWeb()
            
            let startTime = Date()
            if let word = web.getAnyWord()
            {
                let latency = startTime.timeIntervalSinceNow
                LOG.debug("Operation to load any word from web took \(latency)s")
                AromaClient.sendLowPriorityMessage(withTitle: "Web Request Complete", withBody: "Operation took \(latency)s")
                
                return word
            }
            else
            {
                AromaClient.sendHighPriorityMessage(withTitle: "Operation Failed", withBody: "Coult not load any word")
                return LexisWord.emptyWord
            }
        }
