diff --git a/src/ipa/libipa/algorithms/af_hill_climbing.cpp b/src/ipa/libipa/algorithms/af_hill_climbing.cpp
index f666c6c2..28d09176 100644
--- a/src/ipa/libipa/algorithms/af_hill_climbing.cpp
+++ b/src/ipa/libipa/algorithms/af_hill_climbing.cpp
@@ -84,6 +84,14 @@ namespace ipa::common::algorithms {
  * \return New lens position calculated by AF algorithm
  */
 
+/**
+ * \fn AfHillClimbing::setFramesToSkip()
+ * \brief Request AF to skip n frames
+ * \param[in] n Number of frames to be skipped
+ *
+ * Requested number of frames will not be used for AF calculation.
+ */
+
 } /* namespace ipa::common::algorithms */
 
 } /* namespace libcamera */
diff --git a/src/ipa/libipa/algorithms/af_hill_climbing.h b/src/ipa/libipa/algorithms/af_hill_climbing.h
index db9fc058..e251f3eb 100644
--- a/src/ipa/libipa/algorithms/af_hill_climbing.h
+++ b/src/ipa/libipa/algorithms/af_hill_climbing.h
@@ -29,7 +29,7 @@ public:
 		  lensPosition_(0), bestPosition_(0), currentContrast_(0.0),
 		  previousContrast_(0.0), maxContrast_(0.0), maxStep_(0),
 		  coarseCompleted_(false), fineCompleted_(false),
-		  lowStep_(0), highStep_(kMaxFocusSteps)
+		  lowStep_(0), highStep_(kMaxFocusSteps), framesToSkip_(0)
 	{
 	}
 
@@ -92,6 +92,9 @@ protected:
 	{
 		currentContrast_ = currentContrast;
 
+		if (shouldSkipFrame())
+			return lensPosition_;
+
 		/* If we are in a paused state, we won't process the stats */
 		if (pauseState_ == libcamera::controls::AfPauseStatePaused)
 			return lensPosition_;
@@ -113,6 +116,12 @@ protected:
 		return lensPosition_;
 	}
 
+	void setFramesToSkip(uint32_t n)
+	{
+		if (n > framesToSkip_)
+			framesToSkip_ = n;
+	}
+
 private:
 	void afCoarseScan()
 	{
@@ -191,6 +200,7 @@ private:
 		coarseCompleted_ = false;
 		fineCompleted_ = false;
 		maxContrast_ = 0.0;
+		setFramesToSkip(1);
 	}
 
 	bool afIsOutOfFocus()
@@ -206,6 +216,16 @@ private:
 			return false;
 	}
 
+	bool shouldSkipFrame()
+	{
+		if (framesToSkip_ > 0) {
+			framesToSkip_--;
+			return true;
+		}
+
+		return false;
+	}
+
 	controls::AfModeEnum mode_;
 	controls::AfStateEnum state_;
 	controls::AfPauseStateEnum pauseState_;
@@ -229,6 +249,7 @@ private:
 
 	uint32_t lowStep_;
 	uint32_t highStep_;
+	uint32_t framesToSkip_;
 
 	/*
 	* Maximum focus steps of the VCM control
