diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp
index e05647c9..9b22c783 100644
--- a/src/ipa/ipu3/algorithms/awb.cpp
+++ b/src/ipa/ipu3/algorithms/awb.cpp
@@ -21,26 +21,70 @@ static constexpr uint32_t kMinZonesCounted = 16;
 static constexpr uint32_t kMinGreenLevelInZone = 32;
 
 /**
- * \struct IspStatsRegion
- * \brief RGB statistics for a given region
+ * \struct Accumulator
+ * \brief RGB statistics for a given zone
  *
- * The IspStatsRegion structure is intended to abstract the ISP specific
- * statistics and use an agnostic algorithm to compute AWB.
+ * - Cells are defined in Pixels
+ * - Zones are defined in Cells
+ * - The total zones may overlap the image width and height to meet hardware
+ *   constraints
  *
- * \var IspStatsRegion::counted
- * \brief Number of pixels used to calculate the sums
+ *                    81 cells
+ *    /───────────── 1280 pixels ───────────\
+ *                     16 zones
+ *     16
+ *   ┌────┬────┬────┬────┬────┬─  ──────┬────┐   \
+ *   │Cell│    │    │    │    │    |    │    │   │
+ *16 │ px │    │    │    │    │    |    │    │   │
+ *   ├────┼────┼────┼────┼────┼─  ──────┼────┤   │
+ *   │    │    │    │    │    │    |    │    │
+ *   │    │    │    │    │    │    |    │    │   7
+ *   │ ── │ ── │ ── │ ── │ ── │ ──  ── ─┤ ── │ 1 2 4
+ *   │    │    │    │    │    │    |    │    │ 2 0 5
  *
- * \var IspStatsRegion::uncounted
- * \brief Remaining number of pixels in the region
+ *   │    │    │    │    │    │    |    │    │ z p c
+ *   ├────┼────┼────┼────┼────┼─  ──────┼────┤ o i e
+ *   │    │    │    │    │    │    |    │    │ n x l
+ *   │                        │    |    │    │ e e l
+ *   ├───                  ───┼─  ──────┼────┤ s l s
+ *   │                        │    |    │    │   s
+ *   │                        │    |    │    │
+ *   ├───   Zone of Cells  ───┼─  ──────┼────┤   │
+ *   │        (5 x 4)         │    |    │    │   │
+ *   │                        │    |    │    │   │
+ *   ├──                   ───┼─  ──────┼────┤   │
+ *   │                   │    │    |    │    │   │
+ *   │    │    │    │    │    │    |    │    │   │
+ *   └────┴────┴────┴────┴────┴─  ──────┴────┘   /
  *
- * \var IspStatsRegion::rSum
- * \brief Sum of the red values in the region
+ * The algorithm works with a fixed number of zones \a kAwbStatsSizeX x
+ * \a kAwbStatsSizeY. For example, a frame of 1280x720 is divided into 81x45
+ * cells of [16x16] pixels with a BDS output size of 1296x720 to account for the
+ * 16x16 pixel alignment restrictions. In the case of \a kAwbStatsSizeX=16 and
+ * \a kAwbStatsSizeY=12 the zones are made of [5x4] cells. The cells are
+ * left-aligned and calculated by IPAIPU3::calculateBdsGrid().
  *
- * \var IspStatsRegion::gSum
- * \brief Sum of the green values in the region
+ * Each statistics cell represents the average value of the pixels in that cell
+ * split by colour components.
  *
- * \var IspStatsRegion::bSum
- * \brief Sum of the blue values in the region
+ * The Accumulator structure stores the sum of the average of each cell in a
+ * zone of the image, as well as the number of cells which were unsaturated and
+ * therefore included in the average.
+ *
+ * Cells which are saturated beyond the threshold defined in
+ * ipu3_uapi_awb_config_s are not included in the average.
+ *
+ * \var Accumulator::counted
+ * \brief Number of unsaturated cells used to calculate the sums
+ *
+ * \var Accumulator::rSum
+ * \brief Sum of the average red values of each cell in the zone
+ *
+ * \var Accumulator::gSum
+ * \brief Sum of the average green values of each cell in the zone
+ *
+ * \var Accumulator::bSum
+ * \brief Sum of the average blue values of each cell in the zone
  */
 
 /**
@@ -157,7 +201,7 @@ uint32_t Awb::estimateCCT(double red, double green, double blue)
 	return 449 * n * n * n + 3525 * n * n + 6823.3 * n + 5520.33;
 }
 
-/* Generate an RGB vector with the average values for each region */
+/* Generate an RGB vector with the average values for each zone */
 void Awb::generateZones(std::vector<RGB> &zones)
 {
 	for (unsigned int i = 0; i < kAwbStatsSizeX * kAwbStatsSizeY; i++) {
@@ -174,7 +218,7 @@ void Awb::generateZones(std::vector<RGB> &zones)
 	}
 }
 
-/* Translate the IPU3 statistics into the default statistics region array */
+/* Translate the IPU3 statistics into the default statistics zone array */
 void Awb::generateAwbStats(const ipu3_uapi_stats_3a *stats,
 			   const ipu3_uapi_grid_config &grid)
 {
@@ -215,7 +259,6 @@ void Awb::clearAwbStats()
 		awbStats_[i].rSum = 0;
 		awbStats_[i].gSum = 0;
 		awbStats_[i].counted = 0;
-		awbStats_[i].uncounted = 0;
 	}
 }
 
@@ -304,7 +347,7 @@ void Awb::prepare(IPAContext &context, ipu3_uapi_params *params)
 
 	/*
 	 * Optical center is column start (respectively row start) of the
-	 * region of interest minus its X center (respectively Y center).
+	 * cell of interest minus its X center (respectively Y center).
 	 *
 	 * For the moment use BDS as a first approximation, but it should
 	 * be calculated based on Shading (SHD) parameters.
diff --git a/src/ipa/ipu3/algorithms/awb.h b/src/ipa/ipu3/algorithms/awb.h
index cc848060..ac8ccc84 100644
--- a/src/ipa/ipu3/algorithms/awb.h
+++ b/src/ipa/ipu3/algorithms/awb.h
@@ -33,9 +33,8 @@ struct Ipu3AwbCell {
 	unsigned char padding[3];
 } __attribute__((packed));
 
-struct IspStatsRegion {
+struct Accumulator {
 	unsigned int counted;
-	unsigned int uncounted;
 	unsigned long long rSum;
 	unsigned long long gSum;
 	unsigned long long bSum;
@@ -82,7 +81,7 @@ private:
 	uint32_t estimateCCT(double red, double green, double blue);
 
 	std::vector<RGB> zones_;
-	IspStatsRegion awbStats_[kAwbStatsSizeX * kAwbStatsSizeY];
+	Accumulator awbStats_[kAwbStatsSizeX * kAwbStatsSizeY];
 	AwbStatus asyncResults_;
 };
 
