diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index f0a24514..d297bdf4 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1694,6 +1694,16 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
 	 */
 	Camera3RequestDescriptor *descriptor =
 		new Camera3RequestDescriptor(camera_.get(), camera3Request);
+	/*
+	 * \todo The Android request model is incremental, settings passed in
+	 * previous requests are to be effective until overridden explicitly in
+	 * a new request. Do we need to cache settings incrementally here, or is
+	 * it handled by the Android camera service ?
+	 */
+	if (camera3Request->settings)
+		lastSettings_ = camera3Request->settings;
+	else
+		descriptor->settings_ = lastSettings_;
 
 	LOG(HAL, Debug) << "Queueing Request to libcamera with "
 			<< descriptor->numBuffers_ << " HAL streams";
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 4b0d8575..9cbfcad3 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -134,6 +134,8 @@ private:
 	int orientation_;
 
 	unsigned int maxJpegBufferSize_;
+
+	CameraMetadata lastSettings_;
 };
 
 #endif /* __ANDROID_CAMERA_DEVICE_H__ */
