diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp
index c5085f71..b2f4d308 100644
--- a/src/ipa/simple/soft_simple.cpp
+++ b/src/ipa/simple/soft_simple.cpp
@@ -247,6 +247,16 @@ void IPASoftSimple::stop()
 
 void IPASoftSimple::processStats(const ControlList &sensorControls)
 {
+	/*
+	 * Here black level subtraction, color gains and gamma correction are
+	 * combined into a single operation (table lookup) to save CPU cycles.
+	 * This works because black level subtraction and color gains are currently
+	 * linear operations and we average only same-color pixels in debayering.
+	 * If we change anything on this or introduce other operations in between,
+	 * it may be needed to split the operations and perform black and gain
+	 * corrections before debayering and gamma correction after debayering.
+	 */
+
 	SwIspStats::Histogram histogram = stats_->yHistogram;
 	if (ignoreUpdates_ > 0)
 		blackLevel_.update(histogram);
diff --git a/src/libcamera/software_isp/TODO b/src/libcamera/software_isp/TODO
index 4fcee39b..fcb02588 100644
--- a/src/libcamera/software_isp/TODO
+++ b/src/libcamera/software_isp/TODO
@@ -267,13 +267,3 @@ This could be handled better with DelayedControls.
 > 						    V4L2_CID_EXPOSURE }));
 
 You should use the DelayedControls class.
-
----
-
-13. Improve black level and colour gains application
-
-I think the black level should eventually be moved before debayering, and
-ideally the colour gains as well. I understand the need for optimizations to
-lower the CPU consumption, but at the same time I don't feel comfortable
-building up on top of an implementation that may work a bit more by chance than
-by correctness, as that's not very maintainable.
