diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index d0922db7..a2484fdd 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -343,7 +343,8 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor()
 
 CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera)
 	: id_(id), running_(false), camera_(camera), staticMetadata_(nullptr),
-	  facing_(CAMERA_FACING_FRONT), orientation_(0)
+	  facing_(CAMERA_FACING_FRONT), orientation_(0),
+	  lastSettings_(CameraMetadata(0, 0))
 {
 	camera_->requestCompleted.connect(this, &CameraDevice::requestComplete);
 
@@ -1688,10 +1689,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
 	 * The descriptor and the associated memory reserved here are freed
 	 * at request complete time.
 	 */
-	/* \todo Handle null request settings */
-	CameraMetadata settings(camera3Request->settings);
 	Camera3RequestDescriptor *descriptor =
 		new Camera3RequestDescriptor(camera_.get(), camera3Request);
+	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 058a3f9a..fa4fb544 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__ */
