diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h
index fe5195327b540f5c..2dd5bcf3b49c4ee8 100644
--- a/include/libcamera/buffer.h
+++ b/include/libcamera/buffer.h
@@ -101,11 +101,11 @@ private:
 class BufferMemory final
 {
 public:
-	const std::vector<Plane> &planes() const { return planes_; }
-	std::vector<Plane> &planes() { return planes_; }
+	const std::vector<Dmabuf> &planes() const { return planes_; }
+	std::vector<Dmabuf> &planes() { return planes_; }
 
 private:
-	std::vector<Plane> planes_;
+	std::vector<Dmabuf> planes_;
 };
 
 class BufferPool final
diff --git a/src/cam/buffer_writer.cpp b/src/cam/buffer_writer.cpp
index c33e99c5f8173db8..5967efca07254666 100644
--- a/src/cam/buffer_writer.cpp
+++ b/src/cam/buffer_writer.cpp
@@ -43,9 +43,9 @@ int BufferWriter::write(Buffer *buffer, const std::string &streamName)
 		return -errno;
 
 	BufferMemory *mem = buffer->mem();
-	for (Plane &plane : mem->planes()) {
-		void *data = plane.mem();
-		unsigned int length = plane.length();
+	for (Dmabuf &dmabuf : mem->planes()) {
+		void *data = dmabuf.mem();
+		unsigned int length = dmabuf.length();
 
 		ret = ::write(fd, data, length);
 		if (ret < 0) {
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 00fa4d4f19cb4aa4..e8b6a278e97b0ba0 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -689,7 +689,7 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera,
 	for (unsigned int i = 0; i < stream->configuration().bufferCount + 1; i++) {
 		std::vector<FrameBuffer::Plane> planes;
 		planes.push_back({
-			.fd = paramPool_.buffers()[i].planes()[0].dmabuf(),
+			.fd = paramPool_.buffers()[i].planes()[0].fd(),
 			.length = paramPool_.buffers()[i].planes()[0].length(),
 		});
 
@@ -701,7 +701,7 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera,
 	for (unsigned int i = 0; i < stream->configuration().bufferCount + 1; i++) {
 		std::vector<FrameBuffer::Plane> planes;
 		planes.push_back({
-			.fd = statPool_.buffers()[i].planes()[0].dmabuf(),
+			.fd = statPool_.buffers()[i].planes()[0].fd(),
 			.length = statPool_.buffers()[i].planes()[0].length(),
 		});
 
diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp
index 45f31ae1e2daeb53..e70a1e307ecaa5ba 100644
--- a/src/libcamera/stream.cpp
+++ b/src/libcamera/stream.cpp
@@ -577,8 +577,7 @@ int Stream::mapBuffer(const Buffer *buffer)
 		if (dmabufs[i] == -1)
 			break;
 
-		mem->planes().emplace_back();
-		mem->planes().back().setDmabuf(dmabufs[i], 0);
+		mem->planes().emplace_back(dmabufs[i], 0);
 	}
 
 	/* Remove the buffer from the cache and return its index. */
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index dbb5c3982334e243..166b0abc1b101f88 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -921,9 +921,7 @@ int V4L2VideoDevice::createPlane(BufferMemory *buffer, unsigned int index,
 		return ret;
 	}
 
-	buffer->planes().emplace_back();
-	Plane &plane = buffer->planes().back();
-	plane.setDmabuf(expbuf.fd, length);
+	buffer->planes().emplace_back(expbuf.fd, length);
 	::close(expbuf.fd);
 
 	return 0;
@@ -986,19 +984,19 @@ int V4L2VideoDevice::queueBuffer(Buffer *buffer)
 
 	bool multiPlanar = V4L2_TYPE_IS_MULTIPLANAR(buf.type);
 	BufferMemory *mem = &bufferPool_->buffers()[buf.index];
-	const std::vector<Plane> &planes = mem->planes();
+	const std::vector<Dmabuf> &dmabufs = mem->planes();
 
 	if (buf.memory == V4L2_MEMORY_DMABUF) {
 		if (multiPlanar) {
-			for (unsigned int p = 0; p < planes.size(); ++p)
-				v4l2Planes[p].m.fd = planes[p].dmabuf();
+			for (unsigned int p = 0; p < dmabufs.size(); ++p)
+				v4l2Planes[p].m.fd = dmabufs[p].fd();
 		} else {
-			buf.m.fd = planes[0].dmabuf();
+			buf.m.fd = dmabufs[0].fd();
 		}
 	}
 
 	if (multiPlanar) {
-		buf.length = planes.size();
+		buf.length = dmabufs.size();
 		buf.m.planes = v4l2Planes;
 	}
 
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 0c7ca61ac12ec41c..a828a176cbbf4854 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -300,8 +300,8 @@ int MainWindow::display(Buffer *buffer)
 	if (mem->planes().size() != 1)
 		return -EINVAL;
 
-	Plane &plane = mem->planes().front();
-	unsigned char *raw = static_cast<unsigned char *>(plane.mem());
+	Dmabuf &dmabuf = mem->planes().front();
+	unsigned char *raw = static_cast<unsigned char *>(dmabuf.mem());
 	viewfinder_->display(raw, buffer->bytesused());
 
 	return 0;
diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp
index 3efe02704c02f691..8b0d1c167bd2bbe8 100644
--- a/test/camera/buffer_import.cpp
+++ b/test/camera/buffer_import.cpp
@@ -178,7 +178,7 @@ private:
 
 		uint64_t cookie = index;
 		BufferMemory &mem = pool_.buffers()[index];
-		int dmabuf = mem.planes()[0].dmabuf();
+		int dmabuf = mem.planes()[0].fd();
 
 		requestReady.emit(cookie, dmabuf);
 
