diff --git a/polkadot/node/core/dispute-coordinator/src/participation/mod.rs b/polkadot/node/core/dispute-coordinator/src/participation/mod.rs
index e366adc5facbb4f62c8586a03a89f9c2120932cd..a4000e626ab8a9a79ec563fe8caa94e9b7b3d093 100644
--- a/polkadot/node/core/dispute-coordinator/src/participation/mod.rs
+++ b/polkadot/node/core/dispute-coordinator/src/participation/mod.rs
@@ -160,10 +160,11 @@ impl Participation {
 		&mut self,
 		ctx: &mut Context,
 		priority: ParticipationPriority,
-		req: ParticipationRequest,
+		mut req: ParticipationRequest,
 	) -> Result<()> {
-		// Participation already running - we can ignore that request:
+		// Participation already running - we can ignore that request, discarding its timer:
 		if self.running_participations.contains(req.candidate_hash()) {
+			req.discard_timer();
 			return Ok(())
 		}
 		// Available capacity - participate right away (if we already have a recent block):
diff --git a/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs b/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs
index a5a5ab962f5a441e4e30619a5ef1cc438aa70314..01950973e054b260eb2461e465e6120048387f5c 100644
--- a/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs
+++ b/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs
@@ -134,6 +134,11 @@ impl ParticipationRequest {
 	pub fn session(&self) -> SessionIndex {
 		self.session
 	}
+	pub fn discard_timer(&mut self) {
+		if let Some(timer) = self.request_timer.take() {
+			timer.stop_and_discard();
+		}
+	}
 	pub fn into_candidate_info(self) -> (CandidateHash, CandidateReceipt) {
 		let Self { candidate_hash, candidate_receipt, .. } = self;
 		(candidate_hash, candidate_receipt)
@@ -246,17 +251,12 @@ impl Queues {
 			// Remove any best effort entry, using it to replace our new
 			// request.
 			if let Some(older_request) = self.best_effort.remove(&comparator) {
-				if let Some(timer) = req.request_timer {
-					timer.stop_and_discard();
-				}
+				req.discard_timer();
 				req = older_request;
 			}
 			// Keeping old request if any.
 			match self.priority.entry(comparator) {
-				Entry::Occupied(_) =>
-					if let Some(timer) = req.request_timer {
-						timer.stop_and_discard();
-					},
+				Entry::Occupied(_) => req.discard_timer(),
 				Entry::Vacant(vac) => {
 					vac.insert(req);
 				},
@@ -274,10 +274,7 @@ impl Queues {
 			}
 			// Keeping old request if any.
 			match self.best_effort.entry(comparator) {
-				Entry::Occupied(_) =>
-					if let Some(timer) = req.request_timer {
-						timer.stop_and_discard();
-					},
+				Entry::Occupied(_) => req.discard_timer(),
 				Entry::Vacant(vac) => {
 					vac.insert(req);
 				},