diff --git a/src/ipa/simple/algorithms/blc.cpp b/src/ipa/simple/algorithms/blc.cpp
index 82c89dbb..9025cb3a 100644
--- a/src/ipa/simple/algorithms/blc.cpp
+++ b/src/ipa/simple/algorithms/blc.cpp
@@ -32,11 +32,13 @@ int BlackLevel::init(IPAContext &context,
 
 void BlackLevel::process(IPAContext &context,
 			 [[maybe_unused]] const uint32_t frame,
-			 [[maybe_unused]] IPAFrameContext &frameContext,
+			 IPAFrameContext &frameContext,
 			 const SwIspStats *stats,
 			 [[maybe_unused]] ControlList &metadata)
 {
-	if (context.configuration.black.set) {
+	if (context.configuration.black.set &&
+	    frameContext.sensor.exposure == exposure_ &&
+	    frameContext.sensor.gain == gain_) {
 		context.configuration.black.changed = false;
 		return;
 	}
@@ -61,7 +63,10 @@ void BlackLevel::process(IPAContext &context,
 		if (seen >= pixelThreshold) {
 			context.configuration.black.level =
 				static_cast<double>(i) / SwIspStats::kYHistogramSize;
+			context.configuration.black.set = true;
 			context.configuration.black.changed = true;
+			exposure_ = frameContext.sensor.exposure;
+			gain_ = frameContext.sensor.gain;
 			LOG(IPASoftBL, Debug)
 				<< "Auto-set black level: "
 				<< i << "/" << SwIspStats::kYHistogramSize
diff --git a/src/ipa/simple/algorithms/blc.h b/src/ipa/simple/algorithms/blc.h
index c8b8d92d..4ddd2c94 100644
--- a/src/ipa/simple/algorithms/blc.h
+++ b/src/ipa/simple/algorithms/blc.h
@@ -30,6 +30,10 @@ public:
 		     IPAFrameContext &frameContext,
 		     const SwIspStats *stats,
 		     ControlList &metadata) override;
+
+private:
+	uint32_t exposure_;
+	double gain_;
 };
 
 } /* namespace ipa::soft::algorithms */
