diff --git a/substrate/frame/assets/src/impl_fungibles.rs b/substrate/frame/assets/src/impl_fungibles.rs
index 6b263bc0c7befe520a829bc91071c3e3258cf161..842ee5c102c1d6a0d1d6ab617dec60bf3146291d 100644
--- a/substrate/frame/assets/src/impl_fungibles.rs
+++ b/substrate/frame/assets/src/impl_fungibles.rs
@@ -263,3 +263,23 @@ impl<T: Config<I>, I: 'static> fungibles::approvals::Mutate<<T as SystemConfig>:
 		Self::do_transfer_approved(asset, owner, delegate, dest, amount)
 	}
 }
+
+impl<T: Config<I>, I: 'static> fungibles::roles::Inspect<<T as SystemConfig>::AccountId>
+	for Pallet<T, I>
+{
+	fn owner(asset: T::AssetId) -> Option<<T as SystemConfig>::AccountId> {
+		Asset::<T, I>::get(asset).map(|x| x.owner)
+	}
+
+	fn issuer(asset: T::AssetId) -> Option<<T as SystemConfig>::AccountId> {
+		Asset::<T, I>::get(asset).map(|x| x.issuer)
+	}
+
+	fn admin(asset: T::AssetId) -> Option<<T as SystemConfig>::AccountId> {
+		Asset::<T, I>::get(asset).map(|x| x.admin)
+	}
+
+	fn freezer(asset: T::AssetId) -> Option<<T as SystemConfig>::AccountId> {
+		Asset::<T, I>::get(asset).map(|x| x.freezer)
+	}
+}
diff --git a/substrate/frame/assets/src/tests.rs b/substrate/frame/assets/src/tests.rs
index 50ab04111edfff05bde0bdf714555a070ec44f09..598b6049b3d571f12bdbda066b2b51b53ab1ea71 100644
--- a/substrate/frame/assets/src/tests.rs
+++ b/substrate/frame/assets/src/tests.rs
@@ -977,3 +977,25 @@ fn transfer_large_asset() {
 		assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, amount - 1));
 	})
 }
+
+#[test]
+fn querying_roles_should_work() {
+	new_test_ext().execute_with(|| {
+		use frame_support::traits::tokens::fungibles::roles::Inspect;
+		assert_ok!(Assets::force_create(Origin::root(), 0, 1, true, 1));
+		assert_ok!(Assets::set_team(
+			Origin::signed(1),
+			0,
+			// Issuer
+			2,
+			// Admin
+			3,
+			// Freezer
+			4,
+		));
+		assert_eq!(Assets::owner(0), Some(1));
+		assert_eq!(Assets::issuer(0), Some(2));
+		assert_eq!(Assets::admin(0), Some(3));
+		assert_eq!(Assets::freezer(0), Some(4));
+	});
+}
diff --git a/substrate/frame/support/src/traits/tokens/fungibles.rs b/substrate/frame/support/src/traits/tokens/fungibles.rs
index dab50d56962f6322334b1f472e7e265edf64324c..e4108b7f80a989e4d883ff59b74c2e71a371cf18 100644
--- a/substrate/frame/support/src/traits/tokens/fungibles.rs
+++ b/substrate/frame/support/src/traits/tokens/fungibles.rs
@@ -31,6 +31,7 @@ pub mod metadata;
 pub use balanced::{Balanced, Unbalanced};
 mod imbalance;
 pub use imbalance::{CreditOf, DebtOf, HandleImbalanceDrop, Imbalance};
+pub mod roles;
 
 /// Trait for providing balance-inspection access to a set of named fungible assets.
 pub trait Inspect<AccountId> {
diff --git a/substrate/frame/support/src/traits/tokens/fungibles/roles.rs b/substrate/frame/support/src/traits/tokens/fungibles/roles.rs
new file mode 100644
index 0000000000000000000000000000000000000000..18fd1cc801210cef2545a950d65b01a5f2cf6829
--- /dev/null
+++ b/substrate/frame/support/src/traits/tokens/fungibles/roles.rs
@@ -0,0 +1,29 @@
+// This file is part of Substrate.
+
+// Copyright (C) 2019-2022 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.
+
+//! Inspect traits for Asset roles
+
+pub trait Inspect<AccountId>: super::Inspect<AccountId> {
+	// Get owner for an AssetId.
+	fn owner(asset: Self::AssetId) -> Option<AccountId>;
+	// Get issuer for an AssetId.
+	fn issuer(asset: Self::AssetId) -> Option<AccountId>;
+	// Get admin for an AssetId.
+	fn admin(asset: Self::AssetId) -> Option<AccountId>;
+	// Get freezer for an AssetId.
+	fn freezer(asset: Self::AssetId) -> Option<AccountId>;
+}