diff --git a/polkadot/parachain/src/primitives.rs b/polkadot/parachain/src/primitives.rs
index f90dfaa5d651f3df93b8a6c3b42d29dd76c2a010..e3c97620bfd6625c4157a9947465b9bf1e302b26 100644
--- a/polkadot/parachain/src/primitives.rs
+++ b/polkadot/parachain/src/primitives.rs
@@ -135,6 +135,45 @@ impl sp_std::ops::Add<u32> for Id {
 	}
 }
 
+#[derive(Clone, Copy, Default, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, RuntimeDebug)]
+pub struct Sibling(pub Id);
+
+impl From<Id> for Sibling {
+	fn from(i: Id) -> Self {
+		Self(i)
+	}
+}
+
+impl From<Sibling> for Id {
+	fn from(i: Sibling) -> Self {
+		i.0
+	}
+}
+
+impl AsRef<Id> for Sibling {
+	fn as_ref(&self) -> &Id {
+		&self.0
+	}
+}
+
+impl TypeId for Sibling {
+	const TYPE_ID: [u8; 4] = *b"sibl";
+}
+
+impl From<Sibling> for u32 {
+	fn from(x: Sibling) -> Self { x.0.into() }
+}
+
+impl From<u32> for Sibling {
+	fn from(x: u32) -> Self { Sibling(x.into()) }
+}
+
+impl IsSystem for Sibling {
+	fn is_system(&self) -> bool {
+		IsSystem::is_system(&self.0)
+	}
+}
+
 /// This type can be converted into and possibly from an AccountId (which itself is generic).
 pub trait AccountIdConversion<AccountId>: Sized {
 	/// Convert into an account ID. This is infallible.
diff --git a/polkadot/runtime/parachains/src/origin.rs b/polkadot/runtime/parachains/src/origin.rs
index 95204e40a7cc98815466078d8d7bda0ce0117ec8..b8444181de582dc9d0dbfe065c595df47204dc56 100644
--- a/polkadot/runtime/parachains/src/origin.rs
+++ b/polkadot/runtime/parachains/src/origin.rs
@@ -51,3 +51,9 @@ frame_support::decl_module! {
 	// ideally, though, the `construct_runtime` should support a free-standing origin.
 	pub struct Module<T: Trait> for enum Call where origin: <T as frame_system::Trait>::Origin {}
 }
+
+impl From<u32> for Origin {
+	fn from(id: u32) -> Origin {
+		Origin::Parachain(id.into())
+	}
+}
diff --git a/polkadot/xcm/xcm-builder/src/currency_adapter.rs b/polkadot/xcm/xcm-builder/src/currency_adapter.rs
index d7f6b4d4c274804149326ae56bf06a1a16d69268..09b61ab6bb57b3e15ffa14e4e580e1f34104c144 100644
--- a/polkadot/xcm/xcm-builder/src/currency_adapter.rs
+++ b/polkadot/xcm/xcm-builder/src/currency_adapter.rs
@@ -36,7 +36,7 @@ impl<
 
 	fn deposit_asset(what: &MultiAsset, who: &MultiLocation) -> Result {
 		// Check we handle this asset.
-		let amount = Matcher::matches_fungible(&what).ok_or(())?.saturated_into();
+		let amount: u128 = Matcher::matches_fungible(&what).ok_or(())?.saturated_into();
 		let who = AccountIdConverter::from_location(who).ok_or(())?;
 		let balance_amount = amount.try_into().map_err(|_| ())?;
 		let _imbalance = Currency::deposit_creating(&who, balance_amount);
@@ -45,7 +45,7 @@ impl<
 
 	fn withdraw_asset(what: &MultiAsset, who: &MultiLocation) -> result::Result<MultiAsset, Error> {
 		// Check we handle this asset.
-		let amount = Matcher::matches_fungible(&what).ok_or(())?.saturated_into();
+		let amount: u128 = Matcher::matches_fungible(&what).ok_or(())?.saturated_into();
 		let who = AccountIdConverter::from_location(who).ok_or(())?;
 		let balance_amount = amount.try_into().map_err(|_| ())?;
 		Currency::withdraw(&who, balance_amount, WithdrawReasons::TRANSFER, AllowDeath).map_err(|_| ())?;