diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h
index 7704ab5add21..80f79c6ba2d3 100644
--- a/include/libcamera/geometry.h
+++ b/include/libcamera/geometry.h
@@ -38,21 +38,17 @@ struct Size {
 
 struct SizeRange {
 	SizeRange()
-		: SizeRange(0, 0, 0, 0)
 	{
 	}
 
 	SizeRange(unsigned int minW, unsigned int minH,
 		  unsigned int maxW, unsigned int maxH)
-		: minWidth(minW), minHeight(minH), maxWidth(maxW),
-		  maxHeight(maxH)
+		: min(minW, minH), max(maxW, maxH)
 	{
 	}
 
-	unsigned int minWidth;
-	unsigned int minHeight;
-	unsigned int maxWidth;
-	unsigned int maxHeight;
+	Size min;
+	Size max;
 };
 
 } /* namespace libcamera */
diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp
index 1f875bbe5f48..c1c7daed7259 100644
--- a/src/libcamera/geometry.cpp
+++ b/src/libcamera/geometry.cpp
@@ -93,11 +93,11 @@ const std::string Rectangle::toString() const
 
 /**
  * \struct SizeRange
- * \brief Describe a range of image sizes
+ * \brief Describe a range of sizes
  *
- * SizeRange describes a range of image sizes included in the (minWidth,
- * minHeight) - (maxWidth, maxHeight) interval. If the minimum and
- * maximum sizes are identical it represents a single image resolution.
+ * SizeRange describes a range of sizes included in the [min, max]
+ * interval for both the width and the height. If the minimum and
+ * maximum sizes are identical it represents a single size.
  */
 
 /**
@@ -115,23 +115,13 @@ const std::string Rectangle::toString() const
  */
 
 /**
- * \var SizeRange::minWidth
- * \brief The minimum image width
+ * \var SizeRange::min
+ * \brief The minimum size
  */
 
 /**
- * \var SizeRange::minHeight
- * \brief The minimum image height
- */
-
-/**
- * \var SizeRange::maxWidth
- * \brief The maximum image width
- */
-
-/**
- * \var SizeRange::maxHeight
- * \brief The maximum image height
+ * \var SizeRange::max
+ * \brief The maximum size
  */
 
 } /* namespace libcamera */
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index f2306efba3bf..fb9ee0af6c3a 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -1058,10 +1058,9 @@ int CIO2Device::init(const MediaDevice *media, unsigned int index)
 			continue;
 
 		for (const SizeRange &size : it.second) {
-			if (maxSize_.width < size.maxWidth &&
-			    maxSize_.height < size.maxHeight) {
-				maxSize_.width = size.maxWidth;
-				maxSize_.height = size.maxHeight;
+			if (maxSize_.width < size.max.width &&
+			    maxSize_.height < size.max.height) {
+				maxSize_ = size.max;
 				mbusCode_ = mbusCode;
 			}
 		}
@@ -1116,19 +1115,19 @@ int CIO2Device::configure(const StreamConfiguration &config,
 			 * as possible. This will need to be revisited when
 			 * implementing the scaling policy.
 			 */
-			if (size.maxWidth < config.width ||
-			    size.maxHeight < config.height)
+			if (size.max.width < config.width ||
+			    size.max.height < config.height)
 				continue;
 
-			unsigned int diff = size.maxWidth * size.maxHeight
+			unsigned int diff = size.max.width * size.max.height
 					  - imageSize;
 			if (diff >= best)
 				continue;
 
 			best = diff;
 
-			sensorFormat.width = size.maxWidth;
-			sensorFormat.height = size.maxHeight;
+			sensorFormat.width = size.max.width;
+			sensorFormat.height = size.max.height;
 			sensorFormat.mbus_code = it.first;
 		}
 	}
diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp
index 47ae3a1c1a28..09dec9abe854 100644
--- a/test/v4l2_subdevice/list_formats.cpp
+++ b/test/v4l2_subdevice/list_formats.cpp
@@ -37,10 +37,10 @@ void ListFormatsTest::printFormats(unsigned int pad,
 	for (SizeRange &size : sizes) {
 		cout << "	mbus code: 0x" << setfill('0') << setw(4)
 		     << hex << code << endl;
-		cout << "	min width: " << dec << size.minWidth << endl;
-		cout << "	min height: " << dec << size.minHeight << endl;
-		cout << "	max width: " << dec << size.maxWidth << endl;
-		cout << "	max height: " << dec << size.maxHeight << endl;
+		cout << "	min width: " << dec << size.min.width << endl;
+		cout << "	min height: " << dec << size.min.height << endl;
+		cout << "	max width: " << dec << size.max.width << endl;
+		cout << "	max height: " << dec << size.max.height << endl;
 	}
 }
 
