diff --git a/frame/support/src/traits/tokens.rs b/frame/support/src/traits/tokens.rs
index f8dcf68159f1a..6befcc42803ce 100644
--- a/frame/support/src/traits/tokens.rs
+++ b/frame/support/src/traits/tokens.rs
@@ -28,7 +28,7 @@ pub mod nonfungibles;
 pub mod nonfungibles_v2;
 pub use imbalance::Imbalance;
 pub use misc::{
-	AssetId, AttributeNamespace, Balance, BalanceConversion, BalanceStatus, ConvertRank,
-	DepositConsequence, ExistenceRequirement, GetSalary, Locker, WithdrawConsequence,
-	WithdrawReasons,
+	AssetId, AttributeNamespace, Balance, BalanceConversion, BalanceStatus,
+	CollectionId, ConvertRank, DepositConsequence, DestroyWitness, ExistenceRequirement,
+	GetSalary, ItemId, Locker, WithdrawConsequence, WithdrawReasons,
 };
diff --git a/frame/support/src/traits/tokens/misc.rs b/frame/support/src/traits/tokens/misc.rs
index eff65f3620a32..bc94ceb5fe0d3 100644
--- a/frame/support/src/traits/tokens/misc.rs
+++ b/frame/support/src/traits/tokens/misc.rs
@@ -210,6 +210,36 @@ pub trait BalanceConversion<InBalance, AssetId, OutBalance> {
 	fn to_asset_balance(balance: InBalance, asset_id: AssetId) -> Result<OutBalance, Self::Error>;
 }
 
+/// Simple amalgamation trait to collect together properties for a CollectionId under one roof.
+pub trait CollectionId:
+FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen
+{
+}
+impl<T: FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen> CollectionId
+for T
+{
+}
+
+/// Simple amalgamation trait to collect together properties for an ItemId under one roof.
+pub trait ItemId:
+FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen
+{
+}
+impl<T: FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen> ItemId
+for T
+{
+}
+
+/// Simple amalgamation trait to collect together properties for a DestroyWitness under one roof.
+pub trait DestroyWitness:
+FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen
+{
+}
+impl<T: FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen> DestroyWitness
+for T
+{
+}
+
 /// Trait to handle asset locking mechanism to ensure interactions with the asset can be implemented
 /// downstream to extend logic of Uniques current functionality.
 pub trait Locker<CollectionId, ItemId> {
diff --git a/frame/support/src/traits/tokens/nonfungible_v2.rs b/frame/support/src/traits/tokens/nonfungible_v2.rs
index 175d94324aaa4..a5288c84479e6 100644
--- a/frame/support/src/traits/tokens/nonfungible_v2.rs
+++ b/frame/support/src/traits/tokens/nonfungible_v2.rs
@@ -25,7 +25,10 @@
 //! use.
 
 use super::nonfungibles_v2 as nonfungibles;
-use crate::{dispatch::DispatchResult, traits::Get};
+use crate::{
+	dispatch::DispatchResult,
+	traits::{tokens::ItemId, Get}
+};
 use codec::{Decode, Encode};
 use sp_runtime::TokenError;
 use sp_std::prelude::*;
@@ -33,7 +36,7 @@ use sp_std::prelude::*;
 /// Trait for providing an interface to a read-only NFT-like item.
 pub trait Inspect<AccountId> {
 	/// Type for identifying an item.
-	type ItemId;
+	type ItemId: ItemId;
 
 	/// Returns the owner of `item`, or `None` if the item doesn't exist or has no
 	/// owner.
diff --git a/frame/support/src/traits/tokens/nonfungibles_v2.rs b/frame/support/src/traits/tokens/nonfungibles_v2.rs
index 5deb0c568f431..d73a847591bc5 100644
--- a/frame/support/src/traits/tokens/nonfungibles_v2.rs
+++ b/frame/support/src/traits/tokens/nonfungibles_v2.rs
@@ -27,6 +27,7 @@
 //! Implementations of these traits may be converted to implementations of corresponding
 //! `nonfungible` traits by using the `nonfungible::ItemOf` type adapter.
 
+use crate::traits::tokens::{CollectionId, ItemId, DestroyWitness};
 use crate::dispatch::{DispatchError, DispatchResult};
 use codec::{Decode, Encode};
 use sp_runtime::TokenError;
@@ -35,11 +36,11 @@ use sp_std::prelude::*;
 /// Trait for providing an interface to many read-only NFT-like sets of items.
 pub trait Inspect<AccountId> {
 	/// Type for identifying an item.
-	type ItemId;
+	type ItemId: ItemId;
 
 	/// Type for identifying a collection (an identifier for an independent collection of
 	/// items).
-	type CollectionId;
+	type CollectionId: CollectionId;
 
 	/// Returns the owner of `item` of `collection`, or `None` if the item doesn't exist
 	/// (or somehow has no owner).
@@ -193,7 +194,7 @@ pub trait Create<AccountId, CollectionConfig>: Inspect<AccountId> {
 /// Trait for providing the ability to destroy collections of nonfungible items.
 pub trait Destroy<AccountId>: Inspect<AccountId> {
 	/// The witness data needed to destroy an item.
-	type DestroyWitness;
+	type DestroyWitness: DestroyWitness;
 
 	/// Provide the appropriate witness data needed to destroy an item.
 	fn get_destroy_witness(collection: &Self::CollectionId) -> Option<Self::DestroyWitness>;