diff --git a/src/ipa/simple/algorithms/agc.cpp b/src/ipa/simple/algorithms/agc.cpp
index df92edd7..72aade14 100644
--- a/src/ipa/simple/algorithms/agc.cpp
+++ b/src/ipa/simple/algorithms/agc.cpp
@@ -39,7 +39,7 @@ Agc::Agc()
 {
 }
 
-void Agc::updateExposure(IPAContext &context, double exposureMSV)
+void Agc::updateExposure(IPAContext &context, IPAFrameContext &frameContext, double exposureMSV)
 {
 	/*
 	 * kExpDenominator of 10 gives ~10% increment/decrement;
@@ -50,8 +50,8 @@ void Agc::updateExposure(IPAContext &context, double exposureMSV)
 	static constexpr uint8_t kExpNumeratorDown = kExpDenominator - 1;
 
 	double next;
-	int32_t &exposure = context.activeState.agc.exposure;
-	double &again = context.activeState.agc.again;
+	int32_t &exposure = frameContext.sensor.exposure;
+	double &again = frameContext.sensor.gain;
 
 	if (exposureMSV < kExposureOptimal - kExposureSatisfactory) {
 		next = exposure * kExpNumeratorUp / kExpDenominator;
@@ -129,7 +129,7 @@ void Agc::process(IPAContext &context,
 	}
 
 	float exposureMSV = (denom == 0 ? 0 : static_cast<float>(num) / denom);
-	updateExposure(context, exposureMSV);
+	updateExposure(context, frameContext, exposureMSV);
 }
 
 REGISTER_IPA_ALGORITHM(Agc, "Agc")
diff --git a/src/ipa/simple/algorithms/agc.h b/src/ipa/simple/algorithms/agc.h
index ad5fca9f..112d9f5a 100644
--- a/src/ipa/simple/algorithms/agc.h
+++ b/src/ipa/simple/algorithms/agc.h
@@ -25,7 +25,7 @@ public:
 		     ControlList &metadata) override;
 
 private:
-	void updateExposure(IPAContext &context, double exposureMSV);
+	void updateExposure(IPAContext &context, IPAFrameContext &frameContext, double exposureMSV);
 };
 
 } /* namespace ipa::soft::algorithms */
diff --git a/src/ipa/simple/algorithms/blc.h b/src/ipa/simple/algorithms/blc.h
index 2cf2a877..67c688ae 100644
--- a/src/ipa/simple/algorithms/blc.h
+++ b/src/ipa/simple/algorithms/blc.h
@@ -27,7 +27,7 @@ public:
 		     ControlList &metadata) override;
 
 private:
-	uint32_t exposure_;
+	int32_t exposure_;
 	double gain_;
 };
 
diff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h
index fd121eeb..c510c436 100644
--- a/src/ipa/simple/ipa_context.h
+++ b/src/ipa/simple/ipa_context.h
@@ -53,7 +53,7 @@ struct IPAActiveState {
 
 struct IPAFrameContext : public FrameContext {
 	struct {
-		uint32_t exposure;
+		int32_t exposure;
 		double gain;
 	} sensor;
 };
diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp
index c8ad55a2..dfacd6aa 100644
--- a/src/ipa/simple/soft_simple.cpp
+++ b/src/ipa/simple/soft_simple.cpp
@@ -310,8 +310,8 @@ void IPASoftSimple::processStats(const uint32_t frame,
 
 	ControlList ctrls(sensorInfoMap_);
 
-	auto &againNew = context_.activeState.agc.again;
-	ctrls.set(V4L2_CID_EXPOSURE, context_.activeState.agc.exposure);
+	auto &againNew = frameContext.sensor.gain;
+	ctrls.set(V4L2_CID_EXPOSURE, frameContext.sensor.exposure);
 	ctrls.set(V4L2_CID_ANALOGUE_GAIN,
 		  static_cast<int32_t>(camHelper_ ? camHelper_->gainCode(againNew) : againNew));
 
