     
     let isUpdate = Storage.active.userDefaults.userLexicalModels?.contains { $0.id == lexicalModel.id } ?? false
     
-    // TODO:  Fix this section.
-    downloadQueue = HTTPDownloader(self)
-    let commonUserData: [String: Any] = [
-      Key.lexicalModelInfo: installableLexicalModels,
-      Key.update: isUpdate
-    ]
-    downloadQueue!.userInfo = commonUserData
-    
-    let request = HTTPDownloadRequest(url: lexicalModelURL, userInfo: commonUserData)
-    request.destinationFile = Storage.active.lexicalModelURL(forID: lexicalModel.id, version: lexicalModel.version ?? InstallableConstants.defaultVersion).path
-    request.tag = 0
-    
-    downloadQueue!.addRequest(request)
-    downloadQueue!.run()
+    if let batch = buildLexicalModelDownloadBatch(for: installableLexicalModels[0], fromPath: lexicalModelURL, asActivity: isUpdate ? .update : .download) {
+      if !checkCanExecute(batch) {
+        return
+      }
+
+      queueDownloadBatch(batch)
+    }
   }
   
   /// - Returns: The current state for a lexical model

                                    value: notification)
  }

  
  
  
  
  
  //MARK: - HTTPDownloadDelegate methods
  
  func downloadQueueFinished(_ queue: HTTPDownloader) {

      downloadLexicalModel(withID: lmID, languageID: langID, isUpdate: true)
    }
  }
  
  // MARK: - Common functionality
  
