diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h
index 8a2e9ed589..be3e5ff97e 100644
--- a/include/libcamera/internal/camera.h
+++ b/include/libcamera/internal/camera.h
@@ -8,9 +8,8 @@
 #pragma once
 
 #include <atomic>
-#include <list>
+#include <deque>
 #include <memory>
-#include <queue>
 #include <set>
 #include <stdint.h>
 #include <string>
@@ -36,8 +35,8 @@ public:
 	PipelineHandler *pipe() { return pipe_.get(); }
 	const PipelineHandler *pipe() const { return pipe_.get(); }
 
-	std::list<Request *> queuedRequests_;
-	std::queue<Request *> waitingRequests_;
+	std::deque<Request *> queuedRequests_;
+	std::deque<Request *> waitingRequests_;
 	ControlInfoMap controlInfo_;
 	ControlList properties_;
 
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 99f35d1e42..5376fee299 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -372,7 +372,7 @@ void PipelineHandler::stop(Camera *camera)
 	 * after the device to keep them in order.
 	 */
 	Camera::Private *data = camera->_d();
-	std::queue<Request *> waitingRequests;
+	std::deque<Request *> waitingRequests;
 	waitingRequests.swap(data->waitingRequests_);
 
 	/* Stop the pipeline handler and let the queued requests complete. */
@@ -381,7 +381,7 @@ void PipelineHandler::stop(Camera *camera)
 	/* Cancel and signal as complete all waiting requests. */
 	while (!waitingRequests.empty()) {
 		Request *request = waitingRequests.front();
-		waitingRequests.pop();
+		waitingRequests.pop_front();
 
 		/*
 		 * Cancel all requests by marking them as cancelled and calling
@@ -472,7 +472,7 @@ void PipelineHandler::queueRequest(Request *request)
 
 	Camera *camera = request->_d()->camera();
 	Camera::Private *data = camera->_d();
-	data->waitingRequests_.push(request);
+	data->waitingRequests_.push_back(request);
 
 	request->_d()->prepare(300ms);
 }
@@ -521,7 +521,7 @@ void PipelineHandler::doQueueRequests(Camera *camera)
 		 * Pop the request first, in case doQueueRequests() is called
 		 * recursively from within doQueueRequest()
 		 */
-		data->waitingRequests_.pop();
+		data->waitingRequests_.pop_front();
 		doQueueRequest(request);
 	}
 }
