    - Parameter requestOptions: Configure request locally with RequestOptions
    - Returns: ObjectRevision object
    */
-  @discardableResult func replaceObjects<T: Codable>(replacements: [(objectID: ObjectID, object: T)], requestOptions: RequestOptions? = nil) throws -> ObjectRevision {
+  @discardableResult func replaceObjects<T: Codable>(replacements: [(objectID: ObjectID, object: T)], requestOptions: RequestOptions? = nil) throws -> BatchResponse {
     let operations: [BatchOperation] = replacements.map { (objectID, object) in .update(objectID: objectID, object) }
-    let command = Command.Index.Batch(indexName: name, batchOperations: operations, requestOptions: requestOptions)
-    return try performSyncRequest(for: command)
+    return try perform(batchOperations: operations, requestOptions: requestOptions)
   }
 
   //MARK: - Delete object

   */
  @discardableResult func saveObjects<T: Codable>(records: [T], requestOptions: RequestOptions? = nil, completion: @escaping ResultCallback<BatchResponse>) -> Operation {
    let operations = records.map { BatchOperation.add($0) }
    let command = Command.Index.Batch(indexName: name, batchOperations: operations, requestOptions: requestOptions)
    return performRequest(for: command, completion: completion)
  }
    
  /**

   - Parameter completion: Result completion
   - Returns: Launched asynchronous operation
   */
  @discardableResult func replaceObjects<T: Codable>(replacements: [(objectID: ObjectID, object: T)], requestOptions: RequestOptions? = nil, completion: @escaping ResultCallback<BatchResponse>) -> Operation {
    let operations: [BatchOperation] = replacements.map { (objectID, object) in .update(objectID: objectID, object) }
    return perform(batchOperations: operations, requestOptions: requestOptions, completion: completion)
  }
  
  /**
