diff --git a/Cargo.lock b/Cargo.lock
index a424738685e7565bee8fb2858168abf3dcf4d475..6c837a051ce4dfe59037867589db171b2124fa1d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3258,6 +3258,36 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "coretime-rococo-emulated-chain"
+version = "0.0.0"
+dependencies = [
+ "coretime-rococo-runtime",
+ "cumulus-primitives-core",
+ "emulated-integration-tests-common",
+ "frame-support",
+ "parachains-common",
+ "sp-core",
+ "testnet-parachains-constants",
+]
+
+[[package]]
+name = "coretime-rococo-integration-tests"
+version = "0.1.0"
+dependencies = [
+ "emulated-integration-tests-common",
+ "frame-support",
+ "pallet-balances",
+ "pallet-identity",
+ "pallet-message-queue",
+ "polkadot-runtime-common",
+ "rococo-runtime-constants",
+ "rococo-system-emulated-network",
+ "sp-runtime",
+ "staging-xcm",
+ "staging-xcm-executor",
+]
+
 [[package]]
 name = "coretime-rococo-runtime"
 version = "0.1.0"
@@ -3324,6 +3354,36 @@ dependencies = [
  "xcm-runtime-apis",
 ]
 
+[[package]]
+name = "coretime-westend-emulated-chain"
+version = "0.0.0"
+dependencies = [
+ "coretime-westend-runtime",
+ "cumulus-primitives-core",
+ "emulated-integration-tests-common",
+ "frame-support",
+ "parachains-common",
+ "sp-core",
+ "testnet-parachains-constants",
+]
+
+[[package]]
+name = "coretime-westend-integration-tests"
+version = "0.1.0"
+dependencies = [
+ "emulated-integration-tests-common",
+ "frame-support",
+ "pallet-balances",
+ "pallet-identity",
+ "pallet-message-queue",
+ "polkadot-runtime-common",
+ "sp-runtime",
+ "staging-xcm",
+ "staging-xcm-executor",
+ "westend-runtime-constants",
+ "westend-system-emulated-network",
+]
+
 [[package]]
 name = "coretime-westend-runtime"
 version = "0.1.0"
@@ -16460,6 +16520,7 @@ version = "0.0.0"
 dependencies = [
  "asset-hub-rococo-emulated-chain",
  "bridge-hub-rococo-emulated-chain",
+ "coretime-rococo-emulated-chain",
  "emulated-integration-tests-common",
  "penpal-emulated-chain",
  "people-rococo-emulated-chain",
@@ -23527,6 +23588,7 @@ dependencies = [
  "asset-hub-westend-emulated-chain",
  "bridge-hub-westend-emulated-chain",
  "collectives-westend-emulated-chain",
+ "coretime-westend-emulated-chain",
  "emulated-integration-tests-common",
  "penpal-emulated-chain",
  "people-westend-emulated-chain",
diff --git a/Cargo.toml b/Cargo.toml
index 759780ce4a4c1db9df3f5d96e265e1700cc94d28..ed32ba0a24f3952609ad482a6c06cbd691ac8273 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -90,6 +90,8 @@ members = [
 	"cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo",
 	"cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend",
 	"cumulus/parachains/integration-tests/emulated/chains/parachains/collectives/collectives-westend",
+	"cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo",
+	"cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend",
 	"cumulus/parachains/integration-tests/emulated/chains/parachains/people/people-rococo",
 	"cumulus/parachains/integration-tests/emulated/chains/parachains/people/people-westend",
 	"cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal",
@@ -104,6 +106,8 @@ members = [
 	"cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo",
 	"cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend",
 	"cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend",
+	"cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo",
+	"cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend",
 	"cumulus/parachains/integration-tests/emulated/tests/people/people-rococo",
 	"cumulus/parachains/integration-tests/emulated/tests/people/people-westend",
 	"cumulus/parachains/pallets/collective-content",
@@ -667,7 +671,9 @@ colored = { version = "2.0.4" }
 comfy-table = { version = "7.1.0", default-features = false }
 console = { version = "0.15.8" }
 contracts-rococo-runtime = { path = "cumulus/parachains/runtimes/contracts/contracts-rococo" }
+coretime-rococo-emulated-chain = { path = "cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo" }
 coretime-rococo-runtime = { path = "cumulus/parachains/runtimes/coretime/coretime-rococo" }
+coretime-westend-emulated-chain = { path = "cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend" }
 coretime-westend-runtime = { path = "cumulus/parachains/runtimes/coretime/coretime-westend" }
 cpu-time = { version = "1.0.0" }
 criterion = { version = "0.5.1", default-features = false }
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/lib.rs
index d8b8edaf2409ba1da0aef01874792d6ef21e6a8a..5ef0993f70a1ce33daa68ec23b474716e6bee956 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/lib.rs
@@ -17,6 +17,7 @@ pub mod genesis;
 
 pub use bridge_hub_rococo_runtime::{
 	xcm_config::XcmConfig as BridgeHubRococoXcmConfig, EthereumBeaconClient, EthereumInboundQueue,
+	ExistentialDeposit as BridgeHubRococoExistentialDeposit,
 	RuntimeOrigin as BridgeHubRococoRuntimeOrigin,
 };
 
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/lib.rs
index f701b3096994a3da7bd59726bedb0802e1b14276..feb59c411c8df488c748fe79e3fd485757fd0de0 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/lib.rs
@@ -15,7 +15,10 @@
 
 pub mod genesis;
 
-pub use bridge_hub_westend_runtime::xcm_config::XcmConfig as BridgeHubWestendXcmConfig;
+pub use bridge_hub_westend_runtime::{
+	xcm_config::XcmConfig as BridgeHubWestendXcmConfig,
+	ExistentialDeposit as BridgeHubWestendExistentialDeposit,
+};
 
 // Substrate
 use frame_support::traits::OnInitialize;
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..6af3f270a905f504b471374d0b29687f766409e4
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "coretime-rococo-emulated-chain"
+version = "0.0.0"
+authors.workspace = true
+edition.workspace = true
+license = "Apache-2.0"
+description = "Coretime Rococo emulated chain"
+publish = false
+
+[lints]
+workspace = true
+
+[dependencies]
+
+# Substrate
+sp-core = { workspace = true }
+frame-support = { workspace = true }
+
+# Cumulus
+parachains-common = { workspace = true, default-features = true }
+cumulus-primitives-core = { workspace = true }
+coretime-rococo-runtime = { workspace = true, default-features = true }
+emulated-integration-tests-common = { workspace = true }
+testnet-parachains-constants = { features = ["rococo"], workspace = true, default-features = true }
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/src/genesis.rs
new file mode 100644
index 0000000000000000000000000000000000000000..f72de52c4932474243f1bb06b775145df11779b6
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/src/genesis.rs
@@ -0,0 +1,66 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Substrate
+use sp_core::storage::Storage;
+
+// Cumulus
+use emulated_integration_tests_common::{
+	accounts, build_genesis_storage, collators, SAFE_XCM_VERSION,
+};
+use parachains_common::Balance;
+
+pub const PARA_ID: u32 = 1005;
+pub const ED: Balance = testnet_parachains_constants::rococo::currency::EXISTENTIAL_DEPOSIT;
+
+pub fn genesis() -> Storage {
+	let genesis_config = coretime_rococo_runtime::RuntimeGenesisConfig {
+		system: coretime_rococo_runtime::SystemConfig::default(),
+		balances: coretime_rococo_runtime::BalancesConfig {
+			balances: accounts::init_balances().iter().cloned().map(|k| (k, ED * 4096)).collect(),
+		},
+		parachain_info: coretime_rococo_runtime::ParachainInfoConfig {
+			parachain_id: PARA_ID.into(),
+			..Default::default()
+		},
+		collator_selection: coretime_rococo_runtime::CollatorSelectionConfig {
+			invulnerables: collators::invulnerables().iter().cloned().map(|(acc, _)| acc).collect(),
+			candidacy_bond: ED * 16,
+			..Default::default()
+		},
+		session: coretime_rococo_runtime::SessionConfig {
+			keys: collators::invulnerables()
+				.into_iter()
+				.map(|(acc, aura)| {
+					(
+						acc.clone(),                                   // account id
+						acc,                                           // validator id
+						coretime_rococo_runtime::SessionKeys { aura }, // session keys
+					)
+				})
+				.collect(),
+		},
+		polkadot_xcm: coretime_rococo_runtime::PolkadotXcmConfig {
+			safe_xcm_version: Some(SAFE_XCM_VERSION),
+			..Default::default()
+		},
+		..Default::default()
+	};
+
+	build_genesis_storage(
+		&genesis_config,
+		coretime_rococo_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"),
+	)
+}
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/src/lib.rs
new file mode 100644
index 0000000000000000000000000000000000000000..a15303a22e12d44020364fe173000ad4ded467d8
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-rococo/src/lib.rs
@@ -0,0 +1,53 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+pub use coretime_rococo_runtime;
+
+pub mod genesis;
+
+// Substrate
+use frame_support::traits::OnInitialize;
+
+// Cumulus
+use emulated_integration_tests_common::{
+	impl_accounts_helpers_for_parachain, impl_assert_events_helpers_for_parachain,
+	impls::Parachain, xcm_emulator::decl_test_parachains,
+};
+
+// CoretimeRococo Parachain declaration
+decl_test_parachains! {
+	pub struct CoretimeRococo {
+		genesis = genesis::genesis(),
+		on_init = {
+			coretime_rococo_runtime::AuraExt::on_initialize(1);
+		},
+		runtime = coretime_rococo_runtime,
+		core = {
+			XcmpMessageHandler: coretime_rococo_runtime::XcmpQueue,
+			LocationToAccountId: coretime_rococo_runtime::xcm_config::LocationToAccountId,
+			ParachainInfo: coretime_rococo_runtime::ParachainInfo,
+			MessageOrigin: cumulus_primitives_core::AggregateMessageOrigin,
+		},
+		pallets = {
+			PolkadotXcm: coretime_rococo_runtime::PolkadotXcm,
+			Balances: coretime_rococo_runtime::Balances,
+			Broker: coretime_rococo_runtime::Broker,
+		}
+	},
+}
+
+// CoretimeRococo implementation
+impl_accounts_helpers_for_parachain!(CoretimeRococo);
+impl_assert_events_helpers_for_parachain!(CoretimeRococo);
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..895a984eccb2d049d849f8cf65b44cc667990e4f
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "coretime-westend-emulated-chain"
+version = "0.0.0"
+authors.workspace = true
+edition.workspace = true
+license = "Apache-2.0"
+description = "Coretime Westend emulated chain"
+publish = false
+
+[lints]
+workspace = true
+
+[dependencies]
+
+# Substrate
+sp-core = { workspace = true }
+frame-support = { workspace = true }
+
+# Cumulus
+parachains-common = { workspace = true, default-features = true }
+cumulus-primitives-core = { workspace = true }
+coretime-westend-runtime = { workspace = true, default-features = true }
+emulated-integration-tests-common = { workspace = true }
+testnet-parachains-constants = { features = ["westend"], workspace = true, default-features = true }
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/src/genesis.rs
new file mode 100644
index 0000000000000000000000000000000000000000..222ffe7a63ab48d007496db31114b769a335b7bb
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/src/genesis.rs
@@ -0,0 +1,66 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Substrate
+use sp_core::storage::Storage;
+
+// Cumulus
+use emulated_integration_tests_common::{
+	accounts, build_genesis_storage, collators, SAFE_XCM_VERSION,
+};
+use parachains_common::Balance;
+
+pub const PARA_ID: u32 = 1005;
+pub const ED: Balance = testnet_parachains_constants::westend::currency::EXISTENTIAL_DEPOSIT;
+
+pub fn genesis() -> Storage {
+	let genesis_config = coretime_westend_runtime::RuntimeGenesisConfig {
+		system: coretime_westend_runtime::SystemConfig::default(),
+		balances: coretime_westend_runtime::BalancesConfig {
+			balances: accounts::init_balances().iter().cloned().map(|k| (k, ED * 4096)).collect(),
+		},
+		parachain_info: coretime_westend_runtime::ParachainInfoConfig {
+			parachain_id: PARA_ID.into(),
+			..Default::default()
+		},
+		collator_selection: coretime_westend_runtime::CollatorSelectionConfig {
+			invulnerables: collators::invulnerables().iter().cloned().map(|(acc, _)| acc).collect(),
+			candidacy_bond: ED * 16,
+			..Default::default()
+		},
+		session: coretime_westend_runtime::SessionConfig {
+			keys: collators::invulnerables()
+				.into_iter()
+				.map(|(acc, aura)| {
+					(
+						acc.clone(),                                    // account id
+						acc,                                            // validator id
+						coretime_westend_runtime::SessionKeys { aura }, // session keys
+					)
+				})
+				.collect(),
+		},
+		polkadot_xcm: coretime_westend_runtime::PolkadotXcmConfig {
+			safe_xcm_version: Some(SAFE_XCM_VERSION),
+			..Default::default()
+		},
+		..Default::default()
+	};
+
+	build_genesis_storage(
+		&genesis_config,
+		coretime_westend_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"),
+	)
+}
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/src/lib.rs
new file mode 100644
index 0000000000000000000000000000000000000000..41949843b02be666c7c95a404ed89326f2e59983
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/coretime/coretime-westend/src/lib.rs
@@ -0,0 +1,53 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+pub use coretime_westend_runtime;
+
+pub mod genesis;
+
+// Substrate
+use frame_support::traits::OnInitialize;
+
+// Cumulus
+use emulated_integration_tests_common::{
+	impl_accounts_helpers_for_parachain, impl_assert_events_helpers_for_parachain,
+	impls::Parachain, xcm_emulator::decl_test_parachains,
+};
+
+// CoretimeWestend Parachain declaration
+decl_test_parachains! {
+	pub struct CoretimeWestend {
+		genesis = genesis::genesis(),
+		on_init = {
+			coretime_westend_runtime::AuraExt::on_initialize(1);
+		},
+		runtime = coretime_westend_runtime,
+		core = {
+			XcmpMessageHandler: coretime_westend_runtime::XcmpQueue,
+			LocationToAccountId: coretime_westend_runtime::xcm_config::LocationToAccountId,
+			ParachainInfo: coretime_westend_runtime::ParachainInfo,
+			MessageOrigin: cumulus_primitives_core::AggregateMessageOrigin,
+		},
+		pallets = {
+			PolkadotXcm: coretime_westend_runtime::PolkadotXcm,
+			Balances: coretime_westend_runtime::Balances,
+			Broker: coretime_westend_runtime::Broker,
+		}
+	},
+}
+
+// CoretimeWestend implementation
+impl_accounts_helpers_for_parachain!(CoretimeWestend);
+impl_assert_events_helpers_for_parachain!(CoretimeWestend);
diff --git a/cumulus/parachains/integration-tests/emulated/common/src/macros.rs b/cumulus/parachains/integration-tests/emulated/common/src/macros.rs
index 6f6bbe41e01bd208ee6d40a9f3b4ba8f98f7975b..b11adacbde5cb6ddfbdf7cf9a1c192aa20ef7584 100644
--- a/cumulus/parachains/integration-tests/emulated/common/src/macros.rs
+++ b/cumulus/parachains/integration-tests/emulated/common/src/macros.rs
@@ -27,7 +27,7 @@ pub use xcm::{
 	prelude::{
 		AccountId32, All, Asset, AssetId, BuyExecution, DepositAsset, ExpectTransactStatus,
 		Fungible, Here, Location, MaybeErrorCode, OriginKind, RefundSurplus, Transact, Unlimited,
-		VersionedXcm, WeightLimit, WithdrawAsset, Xcm,
+		VersionedAssets, VersionedXcm, WeightLimit, WithdrawAsset, Xcm,
 	},
 	v3::Location as V3Location,
 };
@@ -130,3 +130,279 @@ macro_rules! test_parachain_is_trusted_teleporter {
 		}
 	};
 }
+
+#[macro_export]
+macro_rules! test_relay_is_trusted_teleporter {
+	( $sender_relay:ty, $sender_xcm_config:ty, vec![$( $receiver_para:ty ),+], ($assets:expr, $amount:expr) ) => {
+		$crate::macros::paste::paste! {
+			// init Origin variables
+			let sender = [<$sender_relay Sender>]::get();
+			let mut relay_sender_balance_before =
+				<$sender_relay as $crate::macros::Chain>::account_data_of(sender.clone()).free;
+			let origin = <$sender_relay as $crate::macros::Chain>::RuntimeOrigin::signed(sender.clone());
+			let fee_asset_item = 0;
+			let weight_limit = $crate::macros::WeightLimit::Unlimited;
+
+			$(
+				{
+					// init Destination variables
+					let receiver = [<$receiver_para Receiver>]::get();
+					let para_receiver_balance_before =
+						<$receiver_para as $crate::macros::Chain>::account_data_of(receiver.clone()).free;
+					let para_destination =
+						<$sender_relay>::child_location_of(<$receiver_para>::para_id());
+					let beneficiary: Location =
+						$crate::macros::AccountId32 { network: None, id: receiver.clone().into() }.into();
+
+					// Send XCM message from Relay
+					<$sender_relay>::execute_with(|| {
+						assert_ok!(<$sender_relay as [<$sender_relay Pallet>]>::XcmPallet::limited_teleport_assets(
+							origin.clone(),
+							bx!(para_destination.clone().into()),
+							bx!(beneficiary.clone().into()),
+							bx!($assets.clone().into()),
+							fee_asset_item,
+							weight_limit.clone(),
+						));
+
+						type RuntimeEvent = <$sender_relay as $crate::macros::Chain>::RuntimeEvent;
+
+						assert_expected_events!(
+							$sender_relay,
+							vec![
+								RuntimeEvent::XcmPallet(
+									$crate::macros::pallet_xcm::Event::Attempted { outcome: Outcome::Complete { .. } }
+								) => {},
+								RuntimeEvent::Balances(
+									$crate::macros::pallet_balances::Event::Burned { who: sender, amount }
+								) => {},
+								RuntimeEvent::XcmPallet(
+									$crate::macros::pallet_xcm::Event::Sent { .. }
+								) => {},
+							]
+						);
+					});
+
+					// Receive XCM message in Destination Parachain
+					<$receiver_para>::execute_with(|| {
+						type RuntimeEvent = <$receiver_para as $crate::macros::Chain>::RuntimeEvent;
+
+						assert_expected_events!(
+							$receiver_para,
+							vec![
+								RuntimeEvent::Balances(
+									$crate::macros::pallet_balances::Event::Minted { who: receiver, .. }
+								) => {},
+								RuntimeEvent::MessageQueue(
+									$crate::macros::pallet_message_queue::Event::Processed { success: true, .. }
+								) => {},
+							]
+						);
+					});
+
+					// Check if balances are updated accordingly in Origin and Parachain
+					let relay_sender_balance_after =
+						<$sender_relay as $crate::macros::Chain>::account_data_of(sender.clone()).free;
+					let para_receiver_balance_after =
+						<$receiver_para as $crate::macros::Chain>::account_data_of(receiver.clone()).free;
+					let delivery_fees = <$sender_relay>::execute_with(|| {
+						$crate::macros::asset_test_utils::xcm_helpers::teleport_assets_delivery_fees::<
+							<$sender_xcm_config as xcm_executor::Config>::XcmSender,
+						>($assets.clone(), fee_asset_item, weight_limit.clone(), beneficiary, para_destination)
+					});
+
+					assert_eq!(relay_sender_balance_before - $amount - delivery_fees, relay_sender_balance_after);
+					assert!(para_receiver_balance_after > para_receiver_balance_before);
+
+					// Update sender balance
+					relay_sender_balance_before = <$sender_relay as $crate::macros::Chain>::account_data_of(sender.clone()).free;
+				}
+			)+
+		}
+	};
+}
+
+#[macro_export]
+macro_rules! test_parachain_is_trusted_teleporter_for_relay {
+	( $sender_para:ty, $sender_xcm_config:ty, $receiver_relay:ty, $amount:expr ) => {
+		$crate::macros::paste::paste! {
+			// init Origin variables
+			let sender = [<$sender_para Sender>]::get();
+			let mut para_sender_balance_before =
+				<$sender_para as $crate::macros::Chain>::account_data_of(sender.clone()).free;
+			let origin = <$sender_para as $crate::macros::Chain>::RuntimeOrigin::signed(sender.clone());
+			let assets: Assets = (Parent, $amount).into();
+			let fee_asset_item = 0;
+			let weight_limit = $crate::macros::WeightLimit::Unlimited;
+
+			// init Destination variables
+			let receiver = [<$receiver_relay Receiver>]::get();
+			let relay_receiver_balance_before =
+				<$receiver_relay as $crate::macros::Chain>::account_data_of(receiver.clone()).free;
+			let relay_destination: Location = Parent.into();
+			let beneficiary: Location =
+				$crate::macros::AccountId32 { network: None, id: receiver.clone().into() }.into();
+
+			// Send XCM message from Parachain
+			<$sender_para>::execute_with(|| {
+				assert_ok!(<$sender_para as [<$sender_para Pallet>]>::PolkadotXcm::limited_teleport_assets(
+					origin.clone(),
+					bx!(relay_destination.clone().into()),
+					bx!(beneficiary.clone().into()),
+					bx!(assets.clone().into()),
+					fee_asset_item,
+					weight_limit.clone(),
+				));
+
+				type RuntimeEvent = <$sender_para as $crate::macros::Chain>::RuntimeEvent;
+
+				assert_expected_events!(
+					$sender_para,
+					vec![
+						RuntimeEvent::PolkadotXcm(
+							$crate::macros::pallet_xcm::Event::Attempted { outcome: Outcome::Complete { .. } }
+						) => {},
+						RuntimeEvent::Balances(
+							$crate::macros::pallet_balances::Event::Burned { who: sender, amount }
+						) => {},
+						RuntimeEvent::PolkadotXcm(
+							$crate::macros::pallet_xcm::Event::Sent { .. }
+						) => {},
+					]
+				);
+			});
+
+			// Receive XCM message in Destination Parachain
+			<$receiver_relay>::execute_with(|| {
+				type RuntimeEvent = <$receiver_relay as $crate::macros::Chain>::RuntimeEvent;
+
+				assert_expected_events!(
+					$receiver_relay,
+					vec![
+						RuntimeEvent::Balances(
+							$crate::macros::pallet_balances::Event::Minted { who: receiver, .. }
+						) => {},
+						RuntimeEvent::MessageQueue(
+							$crate::macros::pallet_message_queue::Event::Processed { success: true, .. }
+						) => {},
+					]
+				);
+			});
+
+			// Check if balances are updated accordingly in Origin and Relay Chain
+			let para_sender_balance_after =
+				<$sender_para as $crate::macros::Chain>::account_data_of(sender.clone()).free;
+			let relay_receiver_balance_after =
+				<$receiver_relay as $crate::macros::Chain>::account_data_of(receiver.clone()).free;
+			let delivery_fees = <$sender_para>::execute_with(|| {
+				$crate::macros::asset_test_utils::xcm_helpers::teleport_assets_delivery_fees::<
+					<$sender_xcm_config as xcm_executor::Config>::XcmSender,
+				>(assets, fee_asset_item, weight_limit.clone(), beneficiary, relay_destination)
+			});
+
+			assert_eq!(para_sender_balance_before - $amount - delivery_fees, para_sender_balance_after);
+			assert!(relay_receiver_balance_after > relay_receiver_balance_before);
+
+			// Update sender balance
+			para_sender_balance_before = <$sender_para as $crate::macros::Chain>::account_data_of(sender.clone()).free;
+		}
+	};
+}
+
+#[macro_export]
+macro_rules! test_chain_can_claim_assets {
+	( $sender_para:ty, $runtime_call:ty, $network_id:expr, $assets:expr, $amount:expr ) => {
+		$crate::macros::paste::paste! {
+			let sender = [<$sender_para Sender>]::get();
+			let origin = <$sender_para as $crate::macros::Chain>::RuntimeOrigin::signed(sender.clone());
+			// Receiver is the same as sender
+			let beneficiary: Location =
+				$crate::macros::AccountId32 { network: Some($network_id), id: sender.clone().into() }.into();
+			let versioned_assets: $crate::macros::VersionedAssets = $assets.clone().into();
+
+			<$sender_para>::execute_with(|| {
+				// Assets are trapped for whatever reason.
+				// The possible reasons for this might differ from runtime to runtime, so here we just drop them directly.
+				<$sender_para as [<$sender_para Pallet>]>::PolkadotXcm::drop_assets(
+					&beneficiary,
+					$assets.clone().into(),
+					&XcmContext { origin: None, message_id: [0u8; 32], topic: None },
+				);
+
+				type RuntimeEvent = <$sender_para as $crate::macros::Chain>::RuntimeEvent;
+				assert_expected_events!(
+					$sender_para,
+					vec![
+						RuntimeEvent::PolkadotXcm(
+							$crate::macros::pallet_xcm::Event::AssetsTrapped { origin: beneficiary, assets: versioned_assets, .. }
+						) => {},
+					]
+				);
+
+				let balance_before = <$sender_para as [<$sender_para Pallet>]>::Balances::free_balance(&sender);
+
+				// Different origin or different assets won't work.
+				let other_origin = <$sender_para as $crate::macros::Chain>::RuntimeOrigin::signed([<$sender_para Receiver>]::get());
+				assert!(<$sender_para as [<$sender_para Pallet>]>::PolkadotXcm::claim_assets(
+					other_origin,
+					bx!(versioned_assets.clone().into()),
+					bx!(beneficiary.clone().into()),
+				).is_err());
+				let other_versioned_assets: $crate::macros::VersionedAssets = Assets::new().into();
+				assert!(<$sender_para as [<$sender_para Pallet>]>::PolkadotXcm::claim_assets(
+					origin.clone(),
+					bx!(other_versioned_assets.into()),
+					bx!(beneficiary.clone().into()),
+				).is_err());
+
+				// Assets will be claimed to `beneficiary`, which is the same as `sender`.
+				assert_ok!(<$sender_para as [<$sender_para Pallet>]>::PolkadotXcm::claim_assets(
+					origin.clone(),
+					bx!(versioned_assets.clone().into()),
+					bx!(beneficiary.clone().into()),
+				));
+
+				assert_expected_events!(
+					$sender_para,
+					vec![
+						RuntimeEvent::PolkadotXcm(
+							$crate::macros::pallet_xcm::Event::AssetsClaimed { origin: beneficiary, assets: versioned_assets, .. }
+						) => {},
+					]
+				);
+
+				// After claiming the assets, the balance has increased.
+				let balance_after = <$sender_para as [<$sender_para Pallet>]>::Balances::free_balance(&sender);
+				assert_eq!(balance_after, balance_before + $amount);
+
+				// Claiming the assets again doesn't work.
+				assert!(<$sender_para as [<$sender_para Pallet>]>::PolkadotXcm::claim_assets(
+					origin.clone(),
+					bx!(versioned_assets.clone().into()),
+					bx!(beneficiary.clone().into()),
+				).is_err());
+
+				let balance = <$sender_para as [<$sender_para Pallet>]>::Balances::free_balance(&sender);
+				assert_eq!(balance, balance_after);
+
+				// You can also claim assets and send them to a different account.
+				<$sender_para as [<$sender_para Pallet>]>::PolkadotXcm::drop_assets(
+					&beneficiary,
+					$assets.clone().into(),
+					&XcmContext { origin: None, message_id: [0u8; 32], topic: None },
+				);
+				let receiver = [<$sender_para Receiver>]::get();
+				let other_beneficiary: Location =
+					$crate::macros::AccountId32 { network: Some($network_id), id: receiver.clone().into() }.into();
+				let balance_before = <$sender_para as [<$sender_para Pallet>]>::Balances::free_balance(&receiver);
+				assert_ok!(<$sender_para as [<$sender_para Pallet>]>::PolkadotXcm::claim_assets(
+					origin.clone(),
+					bx!(versioned_assets.clone().into()),
+					bx!(other_beneficiary.clone().into()),
+				));
+				let balance_after = <$sender_para as [<$sender_para Pallet>]>::Balances::free_balance(&receiver);
+				assert_eq!(balance_after, balance_before + $amount);
+			});
+		}
+	};
+}
diff --git a/cumulus/parachains/integration-tests/emulated/networks/rococo-system/Cargo.toml b/cumulus/parachains/integration-tests/emulated/networks/rococo-system/Cargo.toml
index 298be7362ec3a4e63bb4139b1050d1b0223c9382..864f3c6edd7e3f91566666c65c509d2494009d4d 100644
--- a/cumulus/parachains/integration-tests/emulated/networks/rococo-system/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/networks/rococo-system/Cargo.toml
@@ -18,3 +18,4 @@ asset-hub-rococo-emulated-chain = { workspace = true }
 bridge-hub-rococo-emulated-chain = { workspace = true }
 people-rococo-emulated-chain = { workspace = true }
 penpal-emulated-chain = { workspace = true }
+coretime-rococo-emulated-chain = { workspace = true }
diff --git a/cumulus/parachains/integration-tests/emulated/networks/rococo-system/src/lib.rs b/cumulus/parachains/integration-tests/emulated/networks/rococo-system/src/lib.rs
index 70f23ef8260ca408e55079e5797b09cc817872cd..53808bc5a8010128c6e490361127eadda56fecbb 100644
--- a/cumulus/parachains/integration-tests/emulated/networks/rococo-system/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/networks/rococo-system/src/lib.rs
@@ -15,12 +15,14 @@
 
 pub use asset_hub_rococo_emulated_chain;
 pub use bridge_hub_rococo_emulated_chain;
+pub use coretime_rococo_emulated_chain;
 pub use penpal_emulated_chain;
 pub use people_rococo_emulated_chain;
 pub use rococo_emulated_chain;
 
 use asset_hub_rococo_emulated_chain::AssetHubRococo;
 use bridge_hub_rococo_emulated_chain::BridgeHubRococo;
+use coretime_rococo_emulated_chain::CoretimeRococo;
 use penpal_emulated_chain::{PenpalA, PenpalB};
 use people_rococo_emulated_chain::PeopleRococo;
 use rococo_emulated_chain::Rococo;
@@ -37,6 +39,7 @@ decl_test_networks! {
 		parachains = vec![
 			AssetHubRococo,
 			BridgeHubRococo,
+			CoretimeRococo,
 			PenpalA,
 			PenpalB,
 			PeopleRococo,
@@ -49,6 +52,7 @@ decl_test_sender_receiver_accounts_parameter_types! {
 	RococoRelay { sender: ALICE, receiver: BOB },
 	AssetHubRococoPara { sender: ALICE, receiver: BOB },
 	BridgeHubRococoPara { sender: ALICE, receiver: BOB },
+	CoretimeRococoPara { sender: ALICE, receiver: BOB },
 	PenpalAPara { sender: ALICE, receiver: BOB },
 	PenpalBPara { sender: ALICE, receiver: BOB },
 	PeopleRococoPara { sender: ALICE, receiver: BOB }
diff --git a/cumulus/parachains/integration-tests/emulated/networks/westend-system/Cargo.toml b/cumulus/parachains/integration-tests/emulated/networks/westend-system/Cargo.toml
index 37c14aa30352922b6f9f44ab89c6501484c3212d..cec2e3733b2a0fbe83608f75981e5c288c70ea7f 100644
--- a/cumulus/parachains/integration-tests/emulated/networks/westend-system/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/networks/westend-system/Cargo.toml
@@ -19,3 +19,4 @@ bridge-hub-westend-emulated-chain = { workspace = true }
 collectives-westend-emulated-chain = { workspace = true }
 penpal-emulated-chain = { workspace = true }
 people-westend-emulated-chain = { workspace = true }
+coretime-westend-emulated-chain = { workspace = true }
diff --git a/cumulus/parachains/integration-tests/emulated/networks/westend-system/src/lib.rs b/cumulus/parachains/integration-tests/emulated/networks/westend-system/src/lib.rs
index 9fbc773bc50e136af3272e851f826d7cf63bc0b6..6949a985629d9cce5b774d3dce5a93e76d6e46c9 100644
--- a/cumulus/parachains/integration-tests/emulated/networks/westend-system/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/networks/westend-system/src/lib.rs
@@ -16,6 +16,7 @@
 pub use asset_hub_westend_emulated_chain;
 pub use bridge_hub_westend_emulated_chain;
 pub use collectives_westend_emulated_chain;
+pub use coretime_westend_emulated_chain;
 pub use penpal_emulated_chain;
 pub use people_westend_emulated_chain;
 pub use westend_emulated_chain;
@@ -23,6 +24,7 @@ pub use westend_emulated_chain;
 use asset_hub_westend_emulated_chain::AssetHubWestend;
 use bridge_hub_westend_emulated_chain::BridgeHubWestend;
 use collectives_westend_emulated_chain::CollectivesWestend;
+use coretime_westend_emulated_chain::CoretimeWestend;
 use penpal_emulated_chain::{PenpalA, PenpalB};
 use people_westend_emulated_chain::PeopleWestend;
 use westend_emulated_chain::Westend;
@@ -40,6 +42,7 @@ decl_test_networks! {
 			AssetHubWestend,
 			BridgeHubWestend,
 			CollectivesWestend,
+			CoretimeWestend,
 			PeopleWestend,
 			PenpalA,
 			PenpalB,
@@ -53,6 +56,7 @@ decl_test_sender_receiver_accounts_parameter_types! {
 	AssetHubWestendPara { sender: ALICE, receiver: BOB },
 	BridgeHubWestendPara { sender: ALICE, receiver: BOB },
 	CollectivesWestendPara { sender: ALICE, receiver: BOB },
+	CoretimeWestendPara { sender: ALICE, receiver: BOB },
 	PeopleWestendPara { sender: ALICE, receiver: BOB },
 	PenpalAPara { sender: ALICE, receiver: BOB },
 	PenpalBPara { sender: ALICE, receiver: BOB }
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/lib.rs
index f00945926963cb562c627eba90171f7ad58c70a5..eca35831705493c1ab7961b62f75ed26cde38c6c 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/lib.rs
@@ -52,6 +52,7 @@ mod imports {
 					XcmConfig as AssetHubRococoXcmConfig,
 				},
 				AssetConversionOrigin as AssetHubRococoAssetConversionOrigin,
+				ExistentialDeposit as AssetHubRococoExistentialDeposit,
 			},
 			genesis::{AssetHubRococoAssetOwner, ED as ASSET_HUB_ROCOCO_ED},
 			AssetHubRococoParaPallet as AssetHubRococoPallet,
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/claim_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/claim_assets.rs
new file mode 100644
index 0000000000000000000000000000000000000000..99b31aba4be010f48f0551cc1115b97caa63f409
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/claim_assets.rs
@@ -0,0 +1,29 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests related to claiming assets trapped during XCM execution.
+
+use crate::imports::*;
+
+use emulated_integration_tests_common::test_chain_can_claim_assets;
+use xcm_executor::traits::DropAssets;
+
+#[test]
+fn assets_can_be_claimed() {
+	let amount = AssetHubRococoExistentialDeposit::get();
+	let assets: Assets = (Parent, amount).into();
+
+	test_chain_can_claim_assets!(AssetHubRococo, RuntimeCall, NetworkId::Rococo, assets, amount);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/mod.rs
index 138ce419757b98b03d4e9a6b26259d81ca779d69..8fffec23d73a58efc51a433ae2eb66c4028aca95 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/mod.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/mod.rs
@@ -13,6 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+mod claim_assets;
 mod hybrid_transfers;
 mod reserve_transfer;
 mod send;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
index db8ada3f4ea281a61e9daaf3fa2cc2ba19747090..9401621c5ba371b516cbda874d9a729f6f7d1808 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
@@ -52,6 +52,7 @@ mod imports {
 					XcmConfig as AssetHubWestendXcmConfig,
 				},
 				AssetConversionOrigin as AssetHubWestendAssetConversionOrigin,
+				ExistentialDeposit as AssetHubWestendExistentialDeposit,
 			},
 			genesis::{AssetHubWestendAssetOwner, ED as ASSET_HUB_WESTEND_ED},
 			AssetHubWestendParaPallet as AssetHubWestendPallet,
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/claim_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/claim_assets.rs
new file mode 100644
index 0000000000000000000000000000000000000000..de58839634f1b438c50d369bb025fc8750bda396
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/claim_assets.rs
@@ -0,0 +1,29 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests related to claiming assets trapped during XCM execution.
+
+use crate::imports::*;
+
+use emulated_integration_tests_common::test_chain_can_claim_assets;
+use xcm_executor::traits::DropAssets;
+
+#[test]
+fn assets_can_be_claimed() {
+	let amount = AssetHubWestendExistentialDeposit::get();
+	let assets: Assets = (Parent, amount).into();
+
+	test_chain_can_claim_assets!(AssetHubWestend, RuntimeCall, NetworkId::Westend, assets, amount);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/mod.rs
index 61eb70524fc9ae2a23e5061400c57ca719bae4e1..73b73b239a1bb54e818cad575084ae775c6f9db1 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/mod.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/mod.rs
@@ -13,6 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+mod claim_assets;
 mod fellowship_treasury;
 mod hybrid_transfers;
 mod reserve_transfer;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/lib.rs
index 04466a611c71318280d135324ba3de418f9348d9..3ee509389c67ccb5105f249667815aa587b1d29d 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/lib.rs
@@ -48,7 +48,7 @@ mod imports {
 			genesis::ED as ASSET_HUB_WESTEND_ED, AssetHubWestendParaPallet as AssetHubWestendPallet,
 		},
 		bridge_hub_rococo_emulated_chain::{
-			genesis::ED as BRIDGE_HUB_ROCOCO_ED,
+			genesis::ED as BRIDGE_HUB_ROCOCO_ED, BridgeHubRococoExistentialDeposit,
 			BridgeHubRococoParaPallet as BridgeHubRococoPallet, BridgeHubRococoRuntimeOrigin,
 			BridgeHubRococoXcmConfig, EthereumBeaconClient, EthereumInboundQueue,
 		},
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/claim_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/claim_assets.rs
new file mode 100644
index 0000000000000000000000000000000000000000..e61dc35bdf8a3cecbaa1cb42582582b1b7c1183f
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/claim_assets.rs
@@ -0,0 +1,29 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests related to claiming assets trapped during XCM execution.
+
+use crate::imports::*;
+
+use emulated_integration_tests_common::test_chain_can_claim_assets;
+use xcm_executor::traits::DropAssets;
+
+#[test]
+fn assets_can_be_claimed() {
+	let amount = BridgeHubRococoExistentialDeposit::get();
+	let assets: Assets = (Parent, amount).into();
+
+	test_chain_can_claim_assets!(AssetHubRococo, RuntimeCall, NetworkId::Rococo, assets, amount);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/mod.rs
index 58c52e1328c81f60c9a60d3fd9677a1bf8f66e95..ceccf98a0240dade42b8a00372e1ee8737cf1e03 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/mod.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/mod.rs
@@ -16,6 +16,7 @@
 use crate::imports::*;
 
 mod asset_transfers;
+mod claim_assets;
 mod send_xcm;
 mod snowbridge;
 mod teleport;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/lib.rs
index 3b0fcea57a26f3e06080c28e9d6495f1b71e3680..782b83bac4754ba6888b8d513a13887d5cb7ecf3 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/lib.rs
@@ -48,7 +48,7 @@ mod imports {
 			genesis::ED as ASSET_HUB_WESTEND_ED, AssetHubWestendParaPallet as AssetHubWestendPallet,
 		},
 		bridge_hub_westend_emulated_chain::{
-			genesis::ED as BRIDGE_HUB_WESTEND_ED,
+			genesis::ED as BRIDGE_HUB_WESTEND_ED, BridgeHubWestendExistentialDeposit,
 			BridgeHubWestendParaPallet as BridgeHubWestendPallet, BridgeHubWestendXcmConfig,
 		},
 		penpal_emulated_chain::{
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/claim_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/claim_assets.rs
new file mode 100644
index 0000000000000000000000000000000000000000..e62ce6843258e641ddd1e86dc0c5b006db31e4df
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/claim_assets.rs
@@ -0,0 +1,29 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests related to claiming assets trapped during XCM execution.
+
+use crate::imports::*;
+
+use emulated_integration_tests_common::test_chain_can_claim_assets;
+use xcm_executor::traits::DropAssets;
+
+#[test]
+fn assets_can_be_claimed() {
+	let amount = BridgeHubWestendExistentialDeposit::get();
+	let assets: Assets = (Parent, amount).into();
+
+	test_chain_can_claim_assets!(AssetHubWestend, RuntimeCall, NetworkId::Westend, assets, amount);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/mod.rs
index 92e864229a9cd605fbe0f8ca843deef6d74d30c2..768b647a13fc19fae244a6ede2f8d527726e9963 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/mod.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/mod.rs
@@ -16,6 +16,7 @@
 use crate::imports::*;
 
 mod asset_transfers;
+mod claim_assets;
 mod send_xcm;
 mod teleport;
 
diff --git a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/lib.rs
index 8af93a62f4a17e7f134b9d2f3d53ef7e267370de..e2048b62c311254ab474172ee49494aa87166c85 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/lib.rs
@@ -15,24 +15,42 @@
 
 pub use xcm::{prelude::*, v3};
 
-pub use emulated_integration_tests_common::xcm_emulator::{
-	assert_expected_events, bx, Chain, RelayChain as Relay, TestExt,
+pub use emulated_integration_tests_common::{
+	accounts::ALICE,
+	test_parachain_is_trusted_teleporter,
+	xcm_emulator::{assert_expected_events, bx, Chain, Parachain, RelayChain as Relay, TestExt},
 };
 pub use westend_system_emulated_network::{
 	asset_hub_westend_emulated_chain::{
-		asset_hub_westend_runtime::xcm_config::LocationToAccountId as AssetHubLocationToAccountId,
+		asset_hub_westend_runtime::xcm_config::{
+			LocationToAccountId as AssetHubLocationToAccountId,
+			XcmConfig as AssetHubWestendXcmConfig,
+		},
+		genesis::ED as ASSET_HUB_WESTEND_ED,
 		AssetHubWestendParaPallet as AssetHubWestendPallet,
 	},
 	collectives_westend_emulated_chain::{
-		collectives_westend_runtime::fellowship as collectives_fellowship,
+		collectives_westend_runtime::{
+			fellowship as collectives_fellowship,
+			xcm_config::XcmConfig as CollectivesWestendXcmConfig,
+		},
+		genesis::ED as COLLECTIVES_WESTEND_ED,
 		CollectivesWestendParaPallet as CollectivesWestendPallet,
 	},
 	westend_emulated_chain::{
-		westend_runtime::{governance as westend_governance, OriginCaller as WestendOriginCaller},
+		genesis::ED as WESTEND_ED,
+		westend_runtime::{
+			governance as westend_governance, xcm_config::XcmConfig as WestendXcmConfig,
+			OriginCaller as WestendOriginCaller,
+		},
 		WestendRelayPallet as WestendPallet,
 	},
-	AssetHubWestendPara as AssetHubWestend, CollectivesWestendPara as CollectivesWestend,
-	WestendRelay as Westend,
+	AssetHubWestendPara as AssetHubWestend, AssetHubWestendParaReceiver as AssetHubWestendReceiver,
+	AssetHubWestendParaSender as AssetHubWestendSender,
+	CollectivesWestendPara as CollectivesWestend,
+	CollectivesWestendParaReceiver as CollectivesWestendReceiver,
+	CollectivesWestendParaSender as CollectivesWestendSender, WestendRelay as Westend,
+	WestendRelayReceiver as WestendReceiver, WestendRelaySender as WestendSender,
 };
 
 #[cfg(test)]
diff --git a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship_treasury.rs b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship_treasury.rs
index abd9a982c8ed5e5407776d3bb6d84686009f59f4..943f8965540d5cb0c17c7a0b1aac8797cbd3ed42 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship_treasury.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship_treasury.rs
@@ -14,7 +14,6 @@
 // limitations under the License.
 
 use crate::*;
-use emulated_integration_tests_common::accounts::ALICE;
 use frame_support::{
 	assert_ok, dispatch::RawOrigin, instances::Instance1, sp_runtime::traits::Dispatchable,
 	traits::fungible::Inspect,
diff --git a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/mod.rs
index a9f65df34b647835b4ce5585be6b53b0489de578..40e98a8b68694b48d9554e98555770a97c3e6b46 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/mod.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/mod.rs
@@ -14,3 +14,4 @@
 // limitations under the License.
 
 mod fellowship_treasury;
+mod teleport;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/teleport.rs b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/teleport.rs
new file mode 100644
index 0000000000000000000000000000000000000000..32f543406d759da1a5f0d06de851930f8ae2b00f
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/teleport.rs
@@ -0,0 +1,66 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crate::*;
+use emulated_integration_tests_common::{
+	test_parachain_is_trusted_teleporter_for_relay, test_relay_is_trusted_teleporter,
+};
+use frame_support::assert_ok;
+
+#[test]
+fn teleport_from_and_to_relay() {
+	let amount = WESTEND_ED * 10;
+	let native_asset: Assets = (Here, amount).into();
+
+	test_relay_is_trusted_teleporter!(
+		Westend,                  // Origin
+		WestendXcmConfig,         // XCM Configuration
+		vec![CollectivesWestend], // Destinations
+		(native_asset, amount)
+	);
+
+	test_parachain_is_trusted_teleporter_for_relay!(
+		CollectivesWestend,          // Origin
+		CollectivesWestendXcmConfig, // XCM Configuration
+		Westend,                     // Destination
+		amount
+	);
+}
+
+#[test]
+fn teleport_from_collectives_to_asset_hub() {
+	let amount = ASSET_HUB_WESTEND_ED * 100;
+	let native_asset: Assets = (Parent, amount).into();
+
+	test_parachain_is_trusted_teleporter!(
+		CollectivesWestend,          // Origin
+		CollectivesWestendXcmConfig, // XCM Configuration
+		vec![AssetHubWestend],       // Destinations
+		(native_asset, amount)
+	);
+}
+
+#[test]
+fn teleport_from_asset_hub_to_collectives() {
+	let amount = COLLECTIVES_WESTEND_ED * 100;
+	let native_asset: Assets = (Parent, amount).into();
+
+	test_parachain_is_trusted_teleporter!(
+		AssetHubWestend,          // Origin
+		AssetHubWestendXcmConfig, // XCM Configuration
+		vec![CollectivesWestend], // Destinations
+		(native_asset, amount)
+	);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/Cargo.toml b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..259be790c3e5f789b8ee180fef068e596b2c1fdd
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/Cargo.toml
@@ -0,0 +1,27 @@
+[package]
+name = "coretime-rococo-integration-tests"
+version = "0.1.0"
+authors.workspace = true
+edition.workspace = true
+license = "Apache-2.0"
+description = "Coretime Rococo runtime integration tests with xcm-emulator"
+publish = false
+
+[dependencies]
+
+# Substrate
+frame-support = { workspace = true }
+pallet-balances = { workspace = true }
+pallet-message-queue = { workspace = true }
+pallet-identity = { workspace = true }
+sp-runtime = { workspace = true }
+
+# Polkadot
+polkadot-runtime-common = { workspace = true, default-features = true }
+rococo-runtime-constants = { workspace = true, default-features = true }
+xcm = { workspace = true }
+xcm-executor = { workspace = true }
+
+# Cumulus
+emulated-integration-tests-common = { workspace = true }
+rococo-system-emulated-network = { workspace = true }
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/lib.rs
new file mode 100644
index 0000000000000000000000000000000000000000..ad3c4fd58da991af243db4b611fd1e6279429f5d
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/lib.rs
@@ -0,0 +1,40 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#[cfg(test)]
+mod imports {
+
+	// Substrate
+	pub use frame_support::assert_ok;
+
+	// Polkadot
+	pub use xcm::prelude::*;
+
+	// Cumulus
+	pub use emulated_integration_tests_common::xcm_emulator::{
+		assert_expected_events, bx, TestExt,
+	};
+	pub use rococo_system_emulated_network::{
+		coretime_rococo_emulated_chain::{
+			coretime_rococo_runtime::ExistentialDeposit as CoretimeRococoExistentialDeposit,
+			CoretimeRococoParaPallet as CoretimeRococoPallet,
+		},
+		CoretimeRococoPara as CoretimeRococo, CoretimeRococoParaReceiver as CoretimeRococoReceiver,
+		CoretimeRococoParaSender as CoretimeRococoSender,
+	};
+}
+
+#[cfg(test)]
+mod tests;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/claim_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/claim_assets.rs
new file mode 100644
index 0000000000000000000000000000000000000000..e37b915174d36d33d86ce0ff2c7fbef2b3c91024
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/claim_assets.rs
@@ -0,0 +1,29 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests related to claiming assets trapped during XCM execution.
+
+use crate::imports::*;
+
+use emulated_integration_tests_common::test_chain_can_claim_assets;
+use xcm_executor::traits::DropAssets;
+
+#[test]
+fn assets_can_be_claimed() {
+	let amount = CoretimeRococoExistentialDeposit::get();
+	let assets: Assets = (Parent, amount).into();
+
+	test_chain_can_claim_assets!(CoretimeRococo, RuntimeCall, NetworkId::Rococo, assets, amount);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/mod.rs
new file mode 100644
index 0000000000000000000000000000000000000000..0e78351bce03110a3722cf699c7c70fa9b9a5341
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/mod.rs
@@ -0,0 +1,16 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+mod claim_assets;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/Cargo.toml b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..a8fa905d2e5ee4f1905bcf420fa135f8612c7796
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/Cargo.toml
@@ -0,0 +1,27 @@
+[package]
+name = "coretime-westend-integration-tests"
+version = "0.1.0"
+authors.workspace = true
+edition.workspace = true
+license = "Apache-2.0"
+description = "Coretime Westend runtime integration tests with xcm-emulator"
+publish = false
+
+[dependencies]
+
+# Substrate
+frame-support = { workspace = true }
+pallet-balances = { workspace = true }
+pallet-message-queue = { workspace = true }
+pallet-identity = { workspace = true }
+sp-runtime = { workspace = true }
+
+# Polkadot
+polkadot-runtime-common = { workspace = true, default-features = true }
+westend-runtime-constants = { workspace = true, default-features = true }
+xcm = { workspace = true }
+xcm-executor = { workspace = true }
+
+# Cumulus
+emulated-integration-tests-common = { workspace = true }
+westend-system-emulated-network = { workspace = true }
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/lib.rs
new file mode 100644
index 0000000000000000000000000000000000000000..838ca6eeafb67db1c78159f78877a35a207c2a41
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/lib.rs
@@ -0,0 +1,41 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#[cfg(test)]
+mod imports {
+
+	// Substrate
+	pub use frame_support::assert_ok;
+
+	// Polkadot
+	pub use xcm::prelude::*;
+
+	// Cumulus
+	pub use emulated_integration_tests_common::xcm_emulator::{
+		assert_expected_events, bx, TestExt,
+	};
+	pub use westend_system_emulated_network::{
+		coretime_westend_emulated_chain::{
+			coretime_westend_runtime::ExistentialDeposit as CoretimeWestendExistentialDeposit,
+			CoretimeWestendParaPallet as CoretimeWestendPallet,
+		},
+		CoretimeWestendPara as CoretimeWestend,
+		CoretimeWestendParaReceiver as CoretimeWestendReceiver,
+		CoretimeWestendParaSender as CoretimeWestendSender,
+	};
+}
+
+#[cfg(test)]
+mod tests;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/claim_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/claim_assets.rs
new file mode 100644
index 0000000000000000000000000000000000000000..c8d853698444c3dfc047ae1b860eee742efca004
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/claim_assets.rs
@@ -0,0 +1,29 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests related to claiming assets trapped during XCM execution.
+
+use crate::imports::*;
+
+use emulated_integration_tests_common::test_chain_can_claim_assets;
+use xcm_executor::traits::DropAssets;
+
+#[test]
+fn assets_can_be_claimed() {
+	let amount = CoretimeWestendExistentialDeposit::get();
+	let assets: Assets = (Parent, amount).into();
+
+	test_chain_can_claim_assets!(CoretimeWestend, RuntimeCall, NetworkId::Westend, assets, amount);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/mod.rs
new file mode 100644
index 0000000000000000000000000000000000000000..0e78351bce03110a3722cf699c7c70fa9b9a5341
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/mod.rs
@@ -0,0 +1,16 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+mod claim_assets;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/lib.rs
index 6c23c2f1f292e9f8235b1f862e2ac934877609d8..43cd5bb85d3dd9a953698478bf5de2bd9ac17804 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/lib.rs
@@ -38,7 +38,10 @@ mod imports {
 	pub use rococo_system_emulated_network::{
 		people_rococo_emulated_chain::{
 			genesis::ED as PEOPLE_ROCOCO_ED,
-			people_rococo_runtime::{people, xcm_config::XcmConfig as PeopleRococoXcmConfig},
+			people_rococo_runtime::{
+				people, xcm_config::XcmConfig as PeopleRococoXcmConfig,
+				ExistentialDeposit as PeopleRococoExistentialDeposit,
+			},
 			PeopleRococoParaPallet as PeopleRococoPallet,
 		},
 		rococo_emulated_chain::{
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/tests/claim_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/tests/claim_assets.rs
new file mode 100644
index 0000000000000000000000000000000000000000..793200e1d06b870327942229252d56bcb46405f9
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/tests/claim_assets.rs
@@ -0,0 +1,29 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests related to claiming assets trapped during XCM execution.
+
+use crate::imports::*;
+
+use emulated_integration_tests_common::test_chain_can_claim_assets;
+use xcm_executor::traits::DropAssets;
+
+#[test]
+fn assets_can_be_claimed() {
+	let amount = PeopleRococoExistentialDeposit::get();
+	let assets: Assets = (Parent, amount).into();
+
+	test_chain_can_claim_assets!(PeopleRococo, RuntimeCall, NetworkId::Rococo, assets, amount);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/tests/mod.rs
index 80c00021ca53db3850d6d32c1584ae7ae924933f..3f18621224acabcbb5a2df4de4344db6b2408999 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/tests/mod.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-rococo/src/tests/mod.rs
@@ -13,5 +13,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+mod claim_assets;
 mod reap_identity;
 mod teleport;
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/lib.rs
index ce1ed9751a2e68ab1cb087983dbb01e21d34bcc8..92f5d291ac849b3c4404fc122abe24afc49a4828 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/lib.rs
@@ -38,7 +38,10 @@ mod imports {
 		self,
 		people_westend_emulated_chain::{
 			genesis::ED as PEOPLE_WESTEND_ED,
-			people_westend_runtime::{people, xcm_config::XcmConfig as PeopleWestendXcmConfig},
+			people_westend_runtime::{
+				people, xcm_config::XcmConfig as PeopleWestendXcmConfig,
+				ExistentialDeposit as PeopleWestendExistentialDeposit,
+			},
 			PeopleWestendParaPallet as PeopleWestendPallet,
 		},
 		westend_emulated_chain::{
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/claim_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/claim_assets.rs
new file mode 100644
index 0000000000000000000000000000000000000000..42ccc459286a2dde06c0fc96dc125a527e649973
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/claim_assets.rs
@@ -0,0 +1,29 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests related to claiming assets trapped during XCM execution.
+
+use crate::imports::*;
+
+use emulated_integration_tests_common::test_chain_can_claim_assets;
+use xcm_executor::traits::DropAssets;
+
+#[test]
+fn assets_can_be_claimed() {
+	let amount = PeopleWestendExistentialDeposit::get();
+	let assets: Assets = (Parent, amount).into();
+
+	test_chain_can_claim_assets!(PeopleWestend, RuntimeCall, NetworkId::Westend, assets, amount);
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/mod.rs
index 80c00021ca53db3850d6d32c1584ae7ae924933f..3f18621224acabcbb5a2df4de4344db6b2408999 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/mod.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/mod.rs
@@ -13,5 +13,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+mod claim_assets;
 mod reap_identity;
 mod teleport;
diff --git a/prdoc/pr_4930.prdoc b/prdoc/pr_4930.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..a7c9a302b11852815b6665370da72097074bedea
--- /dev/null
+++ b/prdoc/pr_4930.prdoc
@@ -0,0 +1,15 @@
+# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0
+# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json
+
+title: Add test macro to emulated chains
+
+doc:
+  - audience: Runtime Dev
+    description: |
+      This PR adds a portable test macro that can be used to test trapped assets can be
+      claimed in an emulated chain.
+
+
+crates:
+- name: emulated-integration-tests-common
+  bump: minor