diff --git a/runtime/bifrost-kusama/src/xcm_config.rs b/runtime/bifrost-kusama/src/xcm_config.rs
index 20dceca6eb..ea178b2d89 100644
--- a/runtime/bifrost-kusama/src/xcm_config.rs
+++ b/runtime/bifrost-kusama/src/xcm_config.rs
@@ -51,7 +51,9 @@ use pallet_xcm::XcmPassthrough;
 use parachains_common::message_queue::{NarrowOriginToSibling, ParaIdToSibling};
 use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery;
 use xcm::v4::{prelude::*, Location};
-use xcm_builder::{FrameTransactionalProcessor, TrailingSetTopicAsId, WithComputedOrigin};
+use xcm_builder::{
+	FrameTransactionalProcessor, TrailingSetTopicAsId, WithComputedOrigin, WithUniqueTopic,
+};
 
 parameter_types! {
 	pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into();
@@ -290,12 +292,12 @@ pub type LocalOriginToLocation = SignedToAccountId32<RuntimeOrigin, AccountId, K
 
 /// The means for routing XCM messages which are not for local execution into the right message
 /// queues.
-pub type XcmRouter = (
+pub type XcmRouter = WithUniqueTopic<(
 	// Two routers - use UMP to communicate with the relay chain:
 	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, PolkadotXcm, ()>,
 	// ..and XCMP to communicate with the sibling chains.
 	XcmpQueue,
-);
+)>;
 
 #[cfg(feature = "runtime-benchmarks")]
 parameter_types! {
diff --git a/runtime/bifrost-polkadot/src/xcm_config.rs b/runtime/bifrost-polkadot/src/xcm_config.rs
index a21cd93cd1..853885d280 100644
--- a/runtime/bifrost-polkadot/src/xcm_config.rs
+++ b/runtime/bifrost-polkadot/src/xcm_config.rs
@@ -50,7 +50,7 @@ pub use xcm_builder::{
 };
 use xcm_builder::{
 	DescribeAllTerminal, DescribeFamily, FrameTransactionalProcessor, HashedDescription,
-	TrailingSetTopicAsId, WithComputedOrigin,
+	TrailingSetTopicAsId, WithComputedOrigin, WithUniqueTopic,
 };
 
 parameter_types! {
@@ -289,12 +289,12 @@ pub type LocalOriginToLocation = SignedToAccountId32<RuntimeOrigin, AccountId, P
 
 /// The means for routing XCM messages which are not for local execution into the right message
 /// queues.
-pub type XcmRouter = (
+pub type XcmRouter = WithUniqueTopic<(
 	// Two routers - use UMP to communicate with the relay chain:
 	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, PolkadotXcm, ()>,
 	// ..and XCMP to communicate with the sibling chains.
 	XcmpQueue,
-);
+)>;
 
 #[cfg(feature = "runtime-benchmarks")]
 parameter_types! {