     /// - returns: A mutually exclusive (content, error) pair.
     ///
     private func getObjectsSync(withIDs objectIDs: [String]) -> APIResponse {
-        let searchResults = self.localIndex.getObjects(withIDs: objectIDs, parameters: nil)
+        return getObjectsSync(withIDs: objectIDs, attributesToRetrieve: nil)
+    }
+
+    /// Get several objects from this index, optionally restricting the retrieved content.
+    ///
+    /// - parameter objectIDs: Identifiers of objects to retrieve.
+    /// - parameter attributesToRetrieve: List of attributes to retrieve.
+    ///                                   If `nil`, all (retrievable) attributes will be retrieved.
+    /// - parameter completionHandler: Completion handler to be notified of the request's outcome.
+    /// - returns: A cancellable operation.
+    ///
+    @discardableResult
+    @objc public func getObjects(withIDs objectIDs: [String], attributesToRetrieve: [String]?, completionHandler: @escaping CompletionHandler) -> Operation {
+        let operation = BlockOperation() {
+            let (content, error) = self.getObjectsSync(withIDs: objectIDs, attributesToRetrieve: attributesToRetrieve)
+            self.callCompletionHandler(completionHandler, content: content, error: error)
+        }
+        client.searchQueue.addOperation(operation)
+        return operation
+    }
+    
+    /// Get several objects from this index, optionally restricting the retrieved content (synchronous version).
+    ///
+    /// - parameter objectIDs: Identifiers of objects to retrieve.
+    /// - parameter attributesToRetrieve: List of attributes to retrieve.
+    ///                                   If `nil`, all (retrievable) attributes will be retrieved.
+    /// - returns: A mutually exclusive (content, error) pair.
+    ///
+    private func getObjectsSync(withIDs objectIDs: [String], attributesToRetrieve: [String]?) -> APIResponse {
+        let query = Query()
+        query.attributesToRetrieve = attributesToRetrieve
+        let searchResults = self.localIndex.getObjects(withIDs: objectIDs, parameters: query.build())
         return OfflineClient.parseResponse(searchResults)
     }
-    
+
     /// Search this index.
     ///
     /// - parameter query: Search parameters.

    ///
    @discardableResult
    @objc public func getObjects(withIDs objectIDs: [String], completionHandler: @escaping CompletionHandler) -> Operation {
        let operation = BlockOperation() {
            let (content, error) = self.getObjectsSync(withIDs: objectIDs)
            self.callCompletionHandler(completionHandler, content: content, error: error)
        }
        client.searchQueue.addOperation(operation)
        return operation
    }
    
    /// Get several objects from this index (synchronous version).

    ///
    /// - parameter objectID: Identifier of the object to retrieve.
    /// - parameter attributesToRetrieve: List of attributes to retrieve.
    ///                                   If `nil`, all (retrievable) attributes will be retrieved.
    /// - parameter completionHandler: Completion handler to be notified of the request's outcome.
    /// - returns: A cancellable operation.
    ///
