From 878c562cd48dd30f412dc493e250ccf46d9773cf Mon Sep 17 00:00:00 2001
From: Juan <juangirini@gmail.com>
Date: Wed, 23 Aug 2023 14:30:12 +0200
Subject: [PATCH] Restructure `frame_support` macro related exports (#14745)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* make reexports private

* make reexports private 2

* make reexports private for runtime-benchmarking

* make reexports private for try-runtime

* fix for try-runtime

* make reexports private for tests

* fmt

* make reexports private for tests

* make reexports private for experimental

* fix beefy

* fix ui test

* fix ui test

* fix benches

* ".git/.scripts/commands/fmt/fmt.sh"

* fix contracts use

* wip

* wip

* do not reexport sp_api::metadata_ir

* fix CI checks

* fix support tests

* ".git/.scripts/commands/fmt/fmt.sh"

* Update frame/support/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* import codec directly

* fmt

* fix node-cli tests

---------

Co-authored-by: command-bot <>
Co-authored-by: Bastian Köcher <git@kchr.de>
---
 substrate/Cargo.lock                          | 12 +++
 substrate/bin/node/runtime/src/lib.rs         |  3 +-
 substrate/frame/alliance/src/lib.rs           |  4 +-
 .../frame/asset-rate/src/benchmarking.rs      |  1 +
 substrate/frame/assets/Cargo.toml             |  2 +
 substrate/frame/assets/src/migration.rs       |  3 +-
 substrate/frame/aura/Cargo.toml               |  2 +
 substrate/frame/aura/src/lib.rs               |  2 +-
 substrate/frame/balances/src/tests/mod.rs     |  4 +-
 substrate/frame/balances/src/types.rs         |  7 +-
 substrate/frame/beefy-mmr/Cargo.toml          |  4 +-
 substrate/frame/beefy-mmr/src/mock.rs         |  4 +-
 substrate/frame/beefy/Cargo.toml              |  6 +-
 substrate/frame/beefy/src/equivocation.rs     |  5 +-
 substrate/frame/beefy/src/lib.rs              |  2 +-
 substrate/frame/beefy/src/mock.rs             |  4 +-
 substrate/frame/benchmarking/src/v1.rs        |  4 +-
 substrate/frame/collective/src/lib.rs         |  2 +-
 substrate/frame/contracts/src/lib.rs          |  7 +-
 substrate/frame/contracts/src/migration.rs    |  1 -
 .../frame/contracts/src/migration/v09.rs      |  2 +-
 .../frame/contracts/src/migration/v10.rs      |  1 -
 .../frame/contracts/src/migration/v11.rs      |  2 +-
 .../frame/contracts/src/migration/v12.rs      |  2 +-
 .../frame/contracts/src/migration/v13.rs      |  2 +-
 .../frame/contracts/src/migration/v14.rs      |  1 -
 substrate/frame/contracts/src/wasm/runtime.rs |  7 +-
 substrate/frame/core-fellowship/src/lib.rs    |  3 +-
 .../frame/democracy/src/migrations/v1.rs      |  2 +-
 .../election-provider-multi-phase/src/mock.rs |  3 +-
 .../src/unsigned.rs                           |  5 +-
 .../election-provider-support/src/lib.rs      |  9 +-
 .../election-provider-support/src/onchain.rs  |  3 +-
 substrate/frame/elections-phragmen/src/lib.rs |  3 +-
 .../elections-phragmen/src/migrations/v3.rs   |  3 +-
 substrate/frame/executive/Cargo.toml          |  2 +
 substrate/frame/executive/src/lib.rs          | 10 +-
 substrate/frame/lottery/src/lib.rs            |  4 +-
 substrate/frame/membership/src/lib.rs         |  3 +-
 .../frame/merkle-mountain-range/Cargo.toml    |  2 +
 .../frame/merkle-mountain-range/src/lib.rs    |  3 +-
 .../merkle-mountain-range/src/mmr/storage.rs  |  2 +-
 substrate/frame/multisig/src/lib.rs           |  4 +-
 substrate/frame/nfts/src/migration.rs         |  3 +-
 substrate/frame/nomination-pools/src/tests.rs |  6 +-
 .../nomination-pools/test-staking/src/lib.rs  |  4 +-
 substrate/frame/paged-list/Cargo.toml         | 18 +++-
 substrate/frame/paged-list/src/paged_list.rs  |  2 +-
 substrate/frame/preimage/src/migration.rs     |  2 +-
 substrate/frame/preimage/src/tests.rs         |  3 +-
 substrate/frame/proxy/src/lib.rs              |  3 +-
 substrate/frame/proxy/src/tests.rs            |  3 +-
 substrate/frame/ranked-collective/src/lib.rs  |  2 +-
 substrate/frame/recovery/src/lib.rs           |  7 +-
 substrate/frame/recovery/src/tests.rs         |  4 +-
 substrate/frame/salary/src/lib.rs             |  3 +-
 substrate/frame/scored-pool/src/mock.rs       |  3 +-
 substrate/frame/session/Cargo.toml            |  2 +
 .../frame/session/benchmarking/Cargo.toml     |  1 +
 .../frame/session/benchmarking/src/lib.rs     |  6 +-
 substrate/frame/session/src/historical/mod.rs |  6 +-
 .../frame/session/src/historical/offchain.rs  |  6 +-
 substrate/frame/session/src/lib.rs            |  2 +-
 substrate/frame/session/src/mock.rs           |  2 +-
 substrate/frame/staking/src/migrations.rs     |  2 +-
 substrate/frame/staking/src/tests.rs          |  4 +-
 .../frame/state-trie-migration/src/lib.rs     |  4 +-
 substrate/frame/support/Cargo.toml            |  4 +-
 .../frame/support/procedural/src/benchmark.rs |  2 +-
 .../src/construct_runtime/expand/call.rs      | 10 +-
 .../src/construct_runtime/expand/config.rs    |  6 +-
 .../construct_runtime/expand/freeze_reason.rs |  6 +-
 .../construct_runtime/expand/hold_reason.rs   |  6 +-
 .../src/construct_runtime/expand/inherent.rs  |  8 +-
 .../src/construct_runtime/expand/lock_id.rs   |  6 +-
 .../src/construct_runtime/expand/metadata.rs  | 50 +++++-----
 .../src/construct_runtime/expand/origin.rs    | 38 ++++----
 .../construct_runtime/expand/outer_enums.rs   | 14 +--
 .../construct_runtime/expand/slash_reason.rs  |  6 +-
 .../procedural/src/construct_runtime/mod.rs   | 32 +++----
 .../procedural/src/pallet/expand/call.rs      | 16 ++--
 .../procedural/src/pallet/expand/constants.rs | 14 +--
 .../src/pallet/expand/documentation.rs        |  4 +-
 .../procedural/src/pallet/expand/error.rs     | 20 ++--
 .../procedural/src/pallet/expand/event.rs     |  8 +-
 .../src/pallet/expand/genesis_build.rs        |  2 +-
 .../src/pallet/expand/genesis_config.rs       |  2 +-
 .../procedural/src/pallet/expand/hooks.rs     | 28 +++---
 .../src/pallet/expand/pallet_struct.rs        | 22 ++---
 .../procedural/src/pallet/expand/storage.rs   | 16 ++--
 .../src/pallet/expand/tt_default_parts.rs     |  4 +-
 .../procedural/src/pallet/parse/composite.rs  |  6 +-
 .../support/procedural/src/pallet_error.rs    |  2 +-
 .../support/procedural/src/storage_alias.rs   |  4 +-
 .../frame/support/procedural/src/tt_macro.rs  | 10 +-
 substrate/frame/support/src/dispatch.rs       | 35 ++++---
 substrate/frame/support/src/hash.rs           |  2 +-
 substrate/frame/support/src/lib.rs            | 92 +++++++++----------
 .../frame/support/src/storage/bounded_vec.rs  |  3 +-
 substrate/frame/support/src/storage/child.rs  |  4 +-
 .../support/src/storage/storage_noop_guard.rs |  4 +-
 .../support/src/storage/types/counted_map.rs  |  4 +-
 .../support/src/storage/types/counted_nmap.rs |  4 +-
 .../support/src/storage/types/double_map.rs   |  9 +-
 .../frame/support/src/storage/types/key.rs    |  6 +-
 .../frame/support/src/storage/types/map.rs    |  4 +-
 .../frame/support/src/storage/types/mod.rs    |  2 +-
 .../frame/support/src/storage/types/nmap.rs   |  4 +-
 .../frame/support/src/storage/types/value.rs  |  5 +-
 substrate/frame/support/src/tests/mod.rs      |  4 +-
 substrate/frame/support/src/traits/filter.rs  |  2 +-
 substrate/frame/support/src/traits/misc.rs    |  6 +-
 .../frame/support/src/traits/preimages.rs     |  3 +-
 substrate/frame/support/src/traits/storage.rs |  7 +-
 .../frame/support/src/traits/try_runtime.rs   |  2 +-
 .../frame/support/src/traits/validation.rs    |  4 +-
 substrate/frame/support/test/Cargo.toml       |  6 +-
 .../support/test/tests/construct_runtime.rs   |  2 +-
 .../deprecated_where_block.stderr             |  4 +-
 .../frame/support/test/tests/instance.rs      |  8 +-
 substrate/frame/support/test/tests/pallet.rs  |  4 +-
 .../support/test/tests/pallet_instance.rs     |  2 +-
 .../support/test/tests/runtime_metadata.rs    | 10 +-
 substrate/frame/system/src/migrations/mod.rs  |  2 +-
 substrate/frame/system/src/offchain.rs        |  2 +-
 125 files changed, 449 insertions(+), 398 deletions(-)

diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock
index 98e8242b337..cb06fd157e0 100644
--- a/substrate/Cargo.lock
+++ b/substrate/Cargo.lock
@@ -2915,6 +2915,7 @@ dependencies = [
  "frame-support",
  "frame-system",
  "frame-try-runtime",
+ "log",
  "pallet-balances",
  "pallet-transaction-payment",
  "parity-scale-codec",
@@ -2994,6 +2995,7 @@ dependencies = [
  "sp-genesis-builder",
  "sp-inherents",
  "sp-io",
+ "sp-metadata-ir",
  "sp-runtime",
  "sp-staking",
  "sp-state-machine",
@@ -3046,6 +3048,7 @@ version = "3.0.0"
 dependencies = [
  "frame-benchmarking",
  "frame-executive",
+ "frame-metadata",
  "frame-support",
  "frame-support-test-pallet",
  "frame-system",
@@ -3058,6 +3061,7 @@ dependencies = [
  "sp-arithmetic",
  "sp-core",
  "sp-io",
+ "sp-metadata-ir",
  "sp-runtime",
  "sp-state-machine",
  "sp-std",
@@ -6203,6 +6207,7 @@ dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
+ "log",
  "pallet-balances",
  "parity-scale-codec",
  "scale-info",
@@ -6233,6 +6238,7 @@ version = "4.0.0-dev"
 dependencies = [
  "frame-support",
  "frame-system",
+ "log",
  "pallet-timestamp",
  "parity-scale-codec",
  "scale-info",
@@ -6378,6 +6384,7 @@ dependencies = [
  "frame-election-provider-support",
  "frame-support",
  "frame-system",
+ "log",
  "pallet-authorship",
  "pallet-balances",
  "pallet-offences",
@@ -6394,6 +6401,7 @@ dependencies = [
  "sp-runtime",
  "sp-session",
  "sp-staking",
+ "sp-state-machine",
  "sp-std",
 ]
 
@@ -6418,6 +6426,7 @@ dependencies = [
  "sp-io",
  "sp-runtime",
  "sp-staking",
+ "sp-state-machine",
  "sp-std",
 ]
 
@@ -6989,6 +6998,7 @@ dependencies = [
  "frame-support",
  "frame-system",
  "itertools",
+ "log",
  "parity-scale-codec",
  "scale-info",
  "sp-core",
@@ -7257,6 +7267,7 @@ dependencies = [
  "scale-info",
  "sp-core",
  "sp-io",
+ "sp-metadata-ir",
  "sp-runtime",
  "sp-std",
 ]
@@ -7480,6 +7491,7 @@ dependencies = [
  "sp-runtime",
  "sp-session",
  "sp-staking",
+ "sp-state-machine",
  "sp-std",
  "sp-trie",
 ]
diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs
index 87ec467dca9..b536b9547b7 100644
--- a/substrate/bin/node/runtime/src/lib.rs
+++ b/substrate/bin/node/runtime/src/lib.rs
@@ -47,7 +47,7 @@ use frame_support::{
 		},
 		ConstantMultiplier, IdentityFee, Weight,
 	},
-	BoundedVec, PalletId, RuntimeDebug,
+	BoundedVec, PalletId,
 };
 use frame_system::{
 	limits::{BlockLength, BlockWeights},
@@ -78,6 +78,7 @@ use sp_runtime::{
 	},
 	transaction_validity::{TransactionPriority, TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult, FixedPointNumber, FixedU128, Perbill, Percent, Permill, Perquintill,
+	RuntimeDebug,
 };
 use sp_std::prelude::*;
 #[cfg(any(feature = "std", test))]
diff --git a/substrate/frame/alliance/src/lib.rs b/substrate/frame/alliance/src/lib.rs
index c103f975f23..1986354a094 100644
--- a/substrate/frame/alliance/src/lib.rs
+++ b/substrate/frame/alliance/src/lib.rs
@@ -94,6 +94,7 @@ pub mod migration;
 mod types;
 pub mod weights;
 
+use codec::{Decode, Encode, MaxEncodedLen};
 use frame_support::pallet_prelude::*;
 use frame_system::pallet_prelude::*;
 use sp_runtime::{
@@ -103,13 +104,11 @@ use sp_runtime::{
 use sp_std::{convert::TryInto, prelude::*};
 
 use frame_support::{
-	codec::{Decode, Encode, MaxEncodedLen},
 	dispatch::{
 		DispatchError, DispatchResult, DispatchResultWithPostInfo, Dispatchable, GetDispatchInfo,
 		PostDispatchInfo,
 	},
 	ensure,
-	scale_info::TypeInfo,
 	traits::{
 		ChangeMembers, Currency, Get, InitializeMembers, IsSubType, OnUnbalanced,
 		ReservableCurrency,
@@ -117,6 +116,7 @@ use frame_support::{
 	weights::Weight,
 };
 use pallet_identity::IdentityField;
+use scale_info::TypeInfo;
 
 pub use pallet::*;
 pub use types::*;
diff --git a/substrate/frame/asset-rate/src/benchmarking.rs b/substrate/frame/asset-rate/src/benchmarking.rs
index 0e136978060..12edcf5aee0 100644
--- a/substrate/frame/asset-rate/src/benchmarking.rs
+++ b/substrate/frame/asset-rate/src/benchmarking.rs
@@ -25,6 +25,7 @@ use frame_benchmarking::v2::*;
 use frame_support::assert_ok;
 use frame_system::RawOrigin;
 use sp_core::crypto::FromEntropy;
+use sp_std::vec;
 
 /// Trait describing the factory function for the `AssetKind` parameter.
 pub trait AssetKindFactory<AssetKind> {
diff --git a/substrate/frame/assets/Cargo.toml b/substrate/frame/assets/Cargo.toml
index 4bef7195958..adf78b118a0 100644
--- a/substrate/frame/assets/Cargo.toml
+++ b/substrate/frame/assets/Cargo.toml
@@ -14,6 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
+log = { version = "0.4.17", default-features = false }
 scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
 sp-std = { version = "8.0.0", default-features = false, path = "../../primitives/std" }
 # Needed for various traits. In our case, `OnFinalize`.
@@ -34,6 +35,7 @@ pallet-balances = { version = "4.0.0-dev", path = "../balances" }
 default = ["std"]
 std = [
 	"codec/std",
+	"log/std",
 	"scale-info/std",
 	"sp-core/std",
 	"sp-std/std",
diff --git a/substrate/frame/assets/src/migration.rs b/substrate/frame/assets/src/migration.rs
index d854a64afb5..efe77714c52 100644
--- a/substrate/frame/assets/src/migration.rs
+++ b/substrate/frame/assets/src/migration.rs
@@ -16,7 +16,8 @@
 // limitations under the License.
 
 use super::*;
-use frame_support::{log, traits::OnRuntimeUpgrade};
+use frame_support::traits::OnRuntimeUpgrade;
+use log;
 
 #[cfg(feature = "try-runtime")]
 use sp_runtime::TryRuntimeError;
diff --git a/substrate/frame/aura/Cargo.toml b/substrate/frame/aura/Cargo.toml
index 99c8c2fb497..0c2b812c43d 100644
--- a/substrate/frame/aura/Cargo.toml
+++ b/substrate/frame/aura/Cargo.toml
@@ -14,6 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive", "max-encoded-len"] }
+log = { version = "0.4.17", default-features = false }
 scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
 frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" }
 frame-system = { version = "4.0.0-dev", default-features = false, path = "../system" }
@@ -31,6 +32,7 @@ sp-io = { version = "23.0.0", path = "../../primitives/io" }
 default = ["std"]
 std = [
 	"codec/std",
+	"log/std",
 	"frame-support/std",
 	"frame-system/std",
 	"pallet-timestamp/std",
diff --git a/substrate/frame/aura/src/lib.rs b/substrate/frame/aura/src/lib.rs
index 641d5fc47e9..b314a3601e1 100644
--- a/substrate/frame/aura/src/lib.rs
+++ b/substrate/frame/aura/src/lib.rs
@@ -40,10 +40,10 @@
 
 use codec::{Decode, Encode, MaxEncodedLen};
 use frame_support::{
-	log,
 	traits::{DisabledValidators, FindAuthor, Get, OnTimestampSet, OneSessionHandler},
 	BoundedSlice, BoundedVec, ConsensusEngineId, Parameter,
 };
+use log;
 use sp_consensus_aura::{AuthorityIndex, ConsensusLog, Slot, AURA_ENGINE_ID};
 use sp_runtime::{
 	generic::DigestItem,
diff --git a/substrate/frame/balances/src/tests/mod.rs b/substrate/frame/balances/src/tests/mod.rs
index 45f34110a6e..cefc6e9e8f5 100644
--- a/substrate/frame/balances/src/tests/mod.rs
+++ b/substrate/frame/balances/src/tests/mod.rs
@@ -30,7 +30,6 @@ use frame_support::{
 		StorageMapShim, StoredMap, WhitelistedStorageKeys,
 	},
 	weights::{IdentityFee, Weight},
-	RuntimeDebug,
 };
 use frame_system::{self as system, RawOrigin};
 use pallet_transaction_payment::{ChargeTransactionPayment, CurrencyAdapter, Multiplier};
@@ -39,7 +38,8 @@ use sp_core::{hexdisplay::HexDisplay, H256};
 use sp_io;
 use sp_runtime::{
 	traits::{BadOrigin, IdentityLookup, SignedExtension, Zero},
-	ArithmeticError, BuildStorage, DispatchError, DispatchResult, FixedPointNumber, TokenError,
+	ArithmeticError, BuildStorage, DispatchError, DispatchResult, FixedPointNumber, RuntimeDebug,
+	TokenError,
 };
 use std::collections::BTreeSet;
 
diff --git a/substrate/frame/balances/src/types.rs b/substrate/frame/balances/src/types.rs
index 389124402a8..cd100d0df6c 100644
--- a/substrate/frame/balances/src/types.rs
+++ b/substrate/frame/balances/src/types.rs
@@ -20,12 +20,9 @@
 use crate::{Config, CreditOf, Event, Pallet};
 use codec::{Decode, Encode, MaxEncodedLen};
 use core::ops::BitOr;
-use frame_support::{
-	traits::{Imbalance, LockIdentifier, OnUnbalanced, WithdrawReasons},
-	RuntimeDebug,
-};
+use frame_support::traits::{Imbalance, LockIdentifier, OnUnbalanced, WithdrawReasons};
 use scale_info::TypeInfo;
-use sp_runtime::Saturating;
+use sp_runtime::{RuntimeDebug, Saturating};
 
 /// Simplified reasons for withdrawing balance.
 #[derive(Encode, Decode, Clone, Copy, PartialEq, Eq, RuntimeDebug, MaxEncodedLen, TypeInfo)]
diff --git a/substrate/frame/beefy-mmr/Cargo.toml b/substrate/frame/beefy-mmr/Cargo.toml
index 5691a5d7352..97ad80fa7ac 100644
--- a/substrate/frame/beefy-mmr/Cargo.toml
+++ b/substrate/frame/beefy-mmr/Cargo.toml
@@ -26,6 +26,7 @@ sp-io = { version = "23.0.0", default-features = false, path = "../../primitives
 sp-runtime = { version = "24.0.0", default-features = false, path = "../../primitives/runtime" }
 sp-std = { version = "8.0.0", default-features = false, path = "../../primitives/std" }
 sp-api = { version = "4.0.0-dev", default-features = false, path = "../../primitives/api" }
+sp-state-machine = { version = "0.28.0", default-features = false, path = "../../primitives/state-machine" }
 
 [dev-dependencies]
 array-bytes = "6.1"
@@ -51,7 +52,8 @@ std = [
 	"sp-runtime/std",
 	"sp-std/std",
 	"sp-api/std",
-	"sp-staking/std"
+	"sp-staking/std",
+	"sp-state-machine/std"
 ]
 try-runtime = [
 	"frame-support/try-runtime",
diff --git a/substrate/frame/beefy-mmr/src/mock.rs b/substrate/frame/beefy-mmr/src/mock.rs
index 2c37ad4483f..b2d8758a04b 100644
--- a/substrate/frame/beefy-mmr/src/mock.rs
+++ b/substrate/frame/beefy-mmr/src/mock.rs
@@ -20,18 +20,18 @@ use std::vec;
 use codec::Encode;
 use frame_support::{
 	construct_runtime, parameter_types,
-	sp_io::TestExternalities,
 	traits::{ConstU16, ConstU32, ConstU64},
-	BasicExternalities,
 };
 use sp_consensus_beefy::mmr::MmrLeafVersion;
 use sp_core::H256;
+use sp_io::TestExternalities;
 use sp_runtime::{
 	app_crypto::ecdsa::Public,
 	impl_opaque_keys,
 	traits::{BlakeTwo256, ConvertInto, IdentityLookup, Keccak256, OpaqueKeys},
 	BuildStorage,
 };
+use sp_state_machine::BasicExternalities;
 
 use crate as pallet_beefy_mmr;
 
diff --git a/substrate/frame/beefy/Cargo.toml b/substrate/frame/beefy/Cargo.toml
index 9f331f74f77..91cb8e072ca 100644
--- a/substrate/frame/beefy/Cargo.toml
+++ b/substrate/frame/beefy/Cargo.toml
@@ -10,6 +10,7 @@ homepage = "https://substrate.io"
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
+log = { version = "0.4.17", default-features = false }
 scale-info = { version = "2.5.0", default-features = false, features = ["derive", "serde"] }
 serde = { version = "1.0.163", optional = true }
 frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" }
@@ -32,11 +33,13 @@ pallet-timestamp = { version = "4.0.0-dev", path = "../timestamp" }
 sp-core = { version = "21.0.0", path = "../../primitives/core" }
 sp-io = { version = "23.0.0", path = "../../primitives/io" }
 sp-staking = { version = "4.0.0-dev", path = "../../primitives/staking" }
+sp-state-machine = { version = "0.28.0", default-features = false, path = "../../primitives/state-machine" }
 
 [features]
 default = ["std"]
 std = [
 	"codec/std",
+	"log/std",
 	"frame-support/std",
 	"frame-system/std",
 	"pallet-authorship/std",
@@ -54,7 +57,8 @@ std = [
 	"pallet-staking/std",
 	"pallet-timestamp/std",
 	"sp-core/std",
-	"sp-io/std"
+	"sp-io/std",
+	"sp-state-machine/std"
 ]
 try-runtime = [
 	"frame-support/try-runtime",
diff --git a/substrate/frame/beefy/src/equivocation.rs b/substrate/frame/beefy/src/equivocation.rs
index 84c62fc47f5..0a7ede327c9 100644
--- a/substrate/frame/beefy/src/equivocation.rs
+++ b/substrate/frame/beefy/src/equivocation.rs
@@ -35,10 +35,7 @@
 //! definition.
 
 use codec::{self as codec, Decode, Encode};
-use frame_support::{
-	log,
-	traits::{Get, KeyOwnerProofSystem},
-};
+use frame_support::traits::{Get, KeyOwnerProofSystem};
 use frame_system::pallet_prelude::BlockNumberFor;
 use log::{error, info};
 use sp_consensus_beefy::{EquivocationProof, ValidatorSetId, KEY_TYPE as BEEFY_KEY_TYPE};
diff --git a/substrate/frame/beefy/src/lib.rs b/substrate/frame/beefy/src/lib.rs
index 35d3273e1ef..77e74436dd6 100644
--- a/substrate/frame/beefy/src/lib.rs
+++ b/substrate/frame/beefy/src/lib.rs
@@ -21,7 +21,6 @@ use codec::{Encode, MaxEncodedLen};
 
 use frame_support::{
 	dispatch::{DispatchResultWithPostInfo, Pays},
-	log,
 	pallet_prelude::*,
 	traits::{Get, OneSessionHandler},
 	weights::Weight,
@@ -31,6 +30,7 @@ use frame_system::{
 	ensure_none, ensure_signed,
 	pallet_prelude::{BlockNumberFor, OriginFor},
 };
+use log;
 use sp_runtime::{
 	generic::DigestItem,
 	traits::{IsMember, Member},
diff --git a/substrate/frame/beefy/src/mock.rs b/substrate/frame/beefy/src/mock.rs
index f2d8415bc01..b55a65dbd73 100644
--- a/substrate/frame/beefy/src/mock.rs
+++ b/substrate/frame/beefy/src/mock.rs
@@ -23,12 +23,11 @@ use frame_election_provider_support::{
 };
 use frame_support::{
 	construct_runtime, parameter_types,
-	sp_io::TestExternalities,
 	traits::{ConstU16, ConstU32, ConstU64, KeyOwnerProofSystem, OnFinalize, OnInitialize},
-	BasicExternalities,
 };
 use pallet_session::historical as pallet_session_historical;
 use sp_core::{crypto::KeyTypeId, ConstU128, H256};
+use sp_io::TestExternalities;
 use sp_runtime::{
 	app_crypto::ecdsa::Public,
 	curve::PiecewiseLinear,
@@ -38,6 +37,7 @@ use sp_runtime::{
 	BuildStorage, Perbill,
 };
 use sp_staking::{EraIndex, SessionIndex};
+use sp_state_machine::BasicExternalities;
 
 use crate as pallet_beefy;
 
diff --git a/substrate/frame/benchmarking/src/v1.rs b/substrate/frame/benchmarking/src/v1.rs
index d9f1c7dde00..c8c50515c0a 100644
--- a/substrate/frame/benchmarking/src/v1.rs
+++ b/substrate/frame/benchmarking/src/v1.rs
@@ -446,13 +446,13 @@ macro_rules! benchmarks_iter {
 					>:: [< new_call_variant_ $dispatch >] (
 						$($arg),*
 					);
-					let __benchmarked_call_encoded = $crate::frame_support::codec::Encode::encode(
+					let __benchmarked_call_encoded = $crate::frame_support::__private::codec::Encode::encode(
 						&__call
 					);
 				}: {
 					let __call_decoded = <
 						Call<T $(, $instance )?>
-						as $crate::frame_support::codec::Decode
+						as $crate::frame_support::__private::codec::Decode
 					>::decode(&mut &__benchmarked_call_encoded[..])
 						.expect("call is encoded above, encoding must be correct");
 					let __origin = $crate::to_origin!($origin $(, $origin_type)?);
diff --git a/substrate/frame/collective/src/lib.rs b/substrate/frame/collective/src/lib.rs
index 10840911739..ac6ad39eac5 100644
--- a/substrate/frame/collective/src/lib.rs
+++ b/substrate/frame/collective/src/lib.rs
@@ -42,13 +42,13 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 #![recursion_limit = "128"]
 
+use codec::{Decode, Encode, MaxEncodedLen};
 use scale_info::TypeInfo;
 use sp_io::storage;
 use sp_runtime::{traits::Hash, RuntimeDebug};
 use sp_std::{marker::PhantomData, prelude::*, result};
 
 use frame_support::{
-	codec::{Decode, Encode, MaxEncodedLen},
 	dispatch::{
 		DispatchError, DispatchResult, DispatchResultWithPostInfo, Dispatchable, GetDispatchInfo,
 		Pays, PostDispatchInfo,
diff --git a/substrate/frame/contracts/src/lib.rs b/substrate/frame/contracts/src/lib.rs
index c6a43779ada..f67e4d7035e 100644
--- a/substrate/frame/contracts/src/lib.rs
+++ b/substrate/frame/contracts/src/lib.rs
@@ -122,7 +122,7 @@ use frame_support::{
 		ConstU32, Contains, Get, Randomness, Time,
 	},
 	weights::Weight,
-	BoundedVec, DefaultNoBound, RuntimeDebug, RuntimeDebugNoBound,
+	BoundedVec, DefaultNoBound, RuntimeDebugNoBound,
 };
 use frame_system::{
 	ensure_signed,
@@ -136,7 +136,10 @@ use pallet_contracts_primitives::{
 };
 use scale_info::TypeInfo;
 use smallvec::Array;
-use sp_runtime::traits::{Convert, Hash, Saturating, StaticLookup, Zero};
+use sp_runtime::{
+	traits::{Convert, Hash, Saturating, StaticLookup, Zero},
+	RuntimeDebug,
+};
 use sp_std::{fmt::Debug, prelude::*};
 
 pub use crate::{
diff --git a/substrate/frame/contracts/src/migration.rs b/substrate/frame/contracts/src/migration.rs
index d8ebc25ed9a..3e3d6f37884 100644
--- a/substrate/frame/contracts/src/migration.rs
+++ b/substrate/frame/contracts/src/migration.rs
@@ -69,7 +69,6 @@ include!(concat!(env!("OUT_DIR"), "/migration_codegen.rs"));
 use crate::{weights::WeightInfo, Config, Error, MigrationInProgress, Pallet, Weight, LOG_TARGET};
 use codec::{Codec, Decode};
 use frame_support::{
-	codec,
 	pallet_prelude::*,
 	traits::{ConstU32, OnRuntimeUpgrade},
 };
diff --git a/substrate/frame/contracts/src/migration/v09.rs b/substrate/frame/contracts/src/migration/v09.rs
index e6c66429556..98fcccc2c0b 100644
--- a/substrate/frame/contracts/src/migration/v09.rs
+++ b/substrate/frame/contracts/src/migration/v09.rs
@@ -23,7 +23,7 @@ use crate::{
 	CodeHash, Config, Determinism, Pallet, Weight, LOG_TARGET,
 };
 use codec::{Decode, Encode};
-use frame_support::{codec, pallet_prelude::*, storage_alias, DefaultNoBound, Identity};
+use frame_support::{pallet_prelude::*, storage_alias, DefaultNoBound, Identity};
 #[cfg(feature = "try-runtime")]
 use sp_runtime::TryRuntimeError;
 use sp_std::prelude::*;
diff --git a/substrate/frame/contracts/src/migration/v10.rs b/substrate/frame/contracts/src/migration/v10.rs
index e33c8d080ad..f02e28f6fde 100644
--- a/substrate/frame/contracts/src/migration/v10.rs
+++ b/substrate/frame/contracts/src/migration/v10.rs
@@ -27,7 +27,6 @@ use crate::{
 use codec::{Decode, Encode};
 use core::cmp::{max, min};
 use frame_support::{
-	codec,
 	pallet_prelude::*,
 	storage_alias,
 	traits::{
diff --git a/substrate/frame/contracts/src/migration/v11.rs b/substrate/frame/contracts/src/migration/v11.rs
index 8123d73aee5..a5b11f6e089 100644
--- a/substrate/frame/contracts/src/migration/v11.rs
+++ b/substrate/frame/contracts/src/migration/v11.rs
@@ -27,7 +27,7 @@ use crate::{
 use sp_runtime::TryRuntimeError;
 
 use codec::{Decode, Encode};
-use frame_support::{codec, pallet_prelude::*, storage_alias, DefaultNoBound};
+use frame_support::{pallet_prelude::*, storage_alias, DefaultNoBound};
 use sp_std::{marker::PhantomData, prelude::*};
 mod old {
 	use super::*;
diff --git a/substrate/frame/contracts/src/migration/v12.rs b/substrate/frame/contracts/src/migration/v12.rs
index 75018f943d1..eb045aa42e9 100644
--- a/substrate/frame/contracts/src/migration/v12.rs
+++ b/substrate/frame/contracts/src/migration/v12.rs
@@ -25,7 +25,7 @@ use crate::{
 };
 use codec::{Decode, Encode};
 use frame_support::{
-	codec, pallet_prelude::*, storage_alias, traits::ReservableCurrency, DefaultNoBound, Identity,
+	pallet_prelude::*, storage_alias, traits::ReservableCurrency, DefaultNoBound, Identity,
 };
 use scale_info::prelude::format;
 use sp_core::hexdisplay::HexDisplay;
diff --git a/substrate/frame/contracts/src/migration/v13.rs b/substrate/frame/contracts/src/migration/v13.rs
index 774b04a9c65..dd2eb12eb62 100644
--- a/substrate/frame/contracts/src/migration/v13.rs
+++ b/substrate/frame/contracts/src/migration/v13.rs
@@ -24,7 +24,7 @@ use crate::{
 	AccountIdOf, BalanceOf, CodeHash, Config, Pallet, TrieId, Weight, LOG_TARGET,
 };
 use codec::{Decode, Encode};
-use frame_support::{codec, pallet_prelude::*, storage_alias, DefaultNoBound};
+use frame_support::{pallet_prelude::*, storage_alias, DefaultNoBound};
 use sp_runtime::BoundedBTreeMap;
 use sp_std::prelude::*;
 
diff --git a/substrate/frame/contracts/src/migration/v14.rs b/substrate/frame/contracts/src/migration/v14.rs
index 0daa0ceb554..efb49dff4f1 100644
--- a/substrate/frame/contracts/src/migration/v14.rs
+++ b/substrate/frame/contracts/src/migration/v14.rs
@@ -32,7 +32,6 @@ use environmental::Vec;
 #[cfg(feature = "try-runtime")]
 use frame_support::traits::fungible::{Inspect, InspectHold};
 use frame_support::{
-	codec,
 	pallet_prelude::*,
 	storage_alias,
 	traits::{fungible::MutateHold, ReservableCurrency},
diff --git a/substrate/frame/contracts/src/wasm/runtime.rs b/substrate/frame/contracts/src/wasm/runtime.rs
index 9d29da70a87..ca23ab9fe5d 100644
--- a/substrate/frame/contracts/src/wasm/runtime.rs
+++ b/substrate/frame/contracts/src/wasm/runtime.rs
@@ -26,11 +26,14 @@ use crate::{
 
 use bitflags::bitflags;
 use codec::{Decode, DecodeLimit, Encode, MaxEncodedLen};
-use frame_support::{dispatch::DispatchError, ensure, traits::Get, weights::Weight, RuntimeDebug};
+use frame_support::{dispatch::DispatchError, ensure, traits::Get, weights::Weight};
 use pallet_contracts_primitives::{ExecReturnValue, ReturnFlags};
 use pallet_contracts_proc_macro::define_env;
 use sp_io::hashing::{blake2_128, blake2_256, keccak_256, sha2_256};
-use sp_runtime::traits::{Bounded, Zero};
+use sp_runtime::{
+	traits::{Bounded, Zero},
+	RuntimeDebug,
+};
 use sp_std::{fmt, prelude::*};
 use wasmi::{core::HostError, errors::LinkerError, Linker, Memory, Store};
 
diff --git a/substrate/frame/core-fellowship/src/lib.rs b/substrate/frame/core-fellowship/src/lib.rs
index 8f3d9633fcf..5eb7bf8caba 100644
--- a/substrate/frame/core-fellowship/src/lib.rs
+++ b/substrate/frame/core-fellowship/src/lib.rs
@@ -61,6 +61,7 @@
 use codec::{Decode, Encode, MaxEncodedLen};
 use scale_info::TypeInfo;
 use sp_arithmetic::traits::{Saturating, Zero};
+use sp_runtime::RuntimeDebug;
 use sp_std::{marker::PhantomData, prelude::*};
 
 use frame_support::{
@@ -69,7 +70,7 @@ use frame_support::{
 	traits::{
 		tokens::Balance as BalanceTrait, EnsureOrigin, EnsureOriginWithArg, Get, RankedMembers,
 	},
-	BoundedVec, RuntimeDebug,
+	BoundedVec,
 };
 
 #[cfg(test)]
diff --git a/substrate/frame/democracy/src/migrations/v1.rs b/substrate/frame/democracy/src/migrations/v1.rs
index 27a500a615c..c27f437901b 100644
--- a/substrate/frame/democracy/src/migrations/v1.rs
+++ b/substrate/frame/democracy/src/migrations/v1.rs
@@ -159,7 +159,7 @@ mod test {
 		tests::{Test as T, *},
 		types::*,
 	};
-	use frame_support::bounded_vec;
+	use sp_runtime::bounded_vec;
 
 	#[allow(deprecated)]
 	#[test]
diff --git a/substrate/frame/election-provider-multi-phase/src/mock.rs b/substrate/frame/election-provider-multi-phase/src/mock.rs
index 82c7279879f..05d151e51ec 100644
--- a/substrate/frame/election-provider-multi-phase/src/mock.rs
+++ b/substrate/frame/election-provider-multi-phase/src/mock.rs
@@ -23,7 +23,7 @@ use frame_election_provider_support::{
 };
 pub use frame_support::{assert_noop, assert_ok, pallet_prelude::GetDefault};
 use frame_support::{
-	bounded_vec, parameter_types,
+	parameter_types,
 	traits::{ConstU32, Hooks},
 	weights::{constants, Weight},
 	BoundedVec,
@@ -42,6 +42,7 @@ use sp_npos_elections::{
 	ElectionResult, EvaluateSupport,
 };
 use sp_runtime::{
+	bounded_vec,
 	testing::Header,
 	traits::{BlakeTwo256, IdentityLookup},
 	BuildStorage, PerU16,
diff --git a/substrate/frame/election-provider-multi-phase/src/unsigned.rs b/substrate/frame/election-provider-multi-phase/src/unsigned.rs
index e21e6c5e6d2..5eeac26fb13 100644
--- a/substrate/frame/election-provider-multi-phase/src/unsigned.rs
+++ b/substrate/frame/election-provider-multi-phase/src/unsigned.rs
@@ -985,11 +985,10 @@ mod tests {
 	use codec::Decode;
 	use frame_benchmarking::Zero;
 	use frame_election_provider_support::IndexAssignment;
-	use frame_support::{
-		assert_noop, assert_ok, bounded_vec, dispatch::Dispatchable, traits::OffchainWorker,
-	};
+	use frame_support::{assert_noop, assert_ok, dispatch::Dispatchable, traits::OffchainWorker};
 	use sp_npos_elections::ElectionScore;
 	use sp_runtime::{
+		bounded_vec,
 		offchain::storage_lock::{BlockAndTime, StorageLock},
 		traits::ValidateUnsigned,
 		ModuleError, PerU16, Perbill,
diff --git a/substrate/frame/election-provider-support/src/lib.rs b/substrate/frame/election-provider-support/src/lib.rs
index 577ac9c0b65..2e9ee3b8a48 100644
--- a/substrate/frame/election-provider-support/src/lib.rs
+++ b/substrate/frame/election-provider-support/src/lib.rs
@@ -82,7 +82,7 @@
 //! # use frame_election_provider_support::{*, data_provider};
 //! # use sp_npos_elections::{Support, Assignment};
 //! # use frame_support::traits::ConstU32;
-//! # use frame_support::bounded_vec;
+//! # use sp_runtime::bounded_vec;
 //!
 //! type AccountId = u64;
 //! type Balance = u64;
@@ -177,14 +177,17 @@ pub mod bounds;
 pub mod onchain;
 pub mod traits;
 
-use sp_runtime::traits::{Bounded, Saturating, Zero};
+use sp_runtime::{
+	traits::{Bounded, Saturating, Zero},
+	RuntimeDebug,
+};
 use sp_std::{fmt::Debug, prelude::*};
 
 pub use bounds::DataProviderBounds;
 pub use codec::{Decode, Encode};
 /// Re-export the solution generation macro.
 pub use frame_election_provider_solution_type::generate_solution_type;
-pub use frame_support::{traits::Get, weights::Weight, BoundedVec, RuntimeDebug};
+pub use frame_support::{traits::Get, weights::Weight, BoundedVec};
 /// Re-export some type as they are used in the interface.
 pub use sp_arithmetic::PerThing;
 pub use sp_npos_elections::{
diff --git a/substrate/frame/election-provider-support/src/onchain.rs b/substrate/frame/election-provider-support/src/onchain.rs
index 21ee710ea30..8ac245a360b 100644
--- a/substrate/frame/election-provider-support/src/onchain.rs
+++ b/substrate/frame/election-provider-support/src/onchain.rs
@@ -254,7 +254,8 @@ mod tests {
 	}
 
 	mod mock_data_provider {
-		use frame_support::{bounded_vec, traits::ConstU32};
+		use frame_support::traits::ConstU32;
+		use sp_runtime::bounded_vec;
 
 		use super::*;
 		use crate::{data_provider, VoterOf};
diff --git a/substrate/frame/elections-phragmen/src/lib.rs b/substrate/frame/elections-phragmen/src/lib.rs
index b23ddda4e8d..6912649bd12 100644
--- a/substrate/frame/elections-phragmen/src/lib.rs
+++ b/substrate/frame/elections-phragmen/src/lib.rs
@@ -107,6 +107,7 @@ use frame_support::{
 	},
 	weights::Weight,
 };
+use log;
 use scale_info::TypeInfo;
 use sp_npos_elections::{ElectionResult, ExtendedBalance};
 use sp_runtime::{
@@ -309,7 +310,7 @@ pub mod pallet {
 					frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND as f32
 			};
 
-			frame_support::log::debug!(
+			log::debug!(
 				target: LOG_TARGET,
 				"election weight {}s ({:?}) // chain's block weight {}s ({:?})",
 				to_seconds(&election_weight),
diff --git a/substrate/frame/elections-phragmen/src/migrations/v3.rs b/substrate/frame/elections-phragmen/src/migrations/v3.rs
index 204614a5b46..cdca1138ebb 100644
--- a/substrate/frame/elections-phragmen/src/migrations/v3.rs
+++ b/substrate/frame/elections-phragmen/src/migrations/v3.rs
@@ -21,8 +21,9 @@ use super::super::LOG_TARGET;
 use crate::{Config, Pallet};
 use codec::{Decode, Encode, FullCodec};
 use frame_support::{
-	pallet_prelude::ValueQuery, traits::StorageVersion, weights::Weight, RuntimeDebug, Twox64Concat,
+	pallet_prelude::ValueQuery, traits::StorageVersion, weights::Weight, Twox64Concat,
 };
+use sp_runtime::RuntimeDebug;
 use sp_std::prelude::*;
 
 #[derive(Encode, Decode, Clone, Default, RuntimeDebug, PartialEq)]
diff --git a/substrate/frame/executive/Cargo.toml b/substrate/frame/executive/Cargo.toml
index fa466dd2041..71ec08472d6 100644
--- a/substrate/frame/executive/Cargo.toml
+++ b/substrate/frame/executive/Cargo.toml
@@ -16,6 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = [
 	"derive",
 ] }
+log = { version = "0.4.17", default-features = false }
 scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
 frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" }
 frame-system = { version = "4.0.0-dev", default-features = false, path = "../system" }
@@ -40,6 +41,7 @@ default = ["std"]
 with-tracing = ["sp-tracing/with-tracing"]
 std = [
 	"codec/std",
+	"log/std",
 	"frame-support/std",
 	"frame-system/std",
 	"frame-try-runtime/std",
diff --git a/substrate/frame/executive/src/lib.rs b/substrate/frame/executive/src/lib.rs
index 4e24717a39e..1d9afdfa60a 100644
--- a/substrate/frame/executive/src/lib.rs
+++ b/substrate/frame/executive/src/lib.rs
@@ -138,6 +138,8 @@ use sp_runtime::{
 };
 use sp_std::{marker::PhantomData, prelude::*};
 
+#[cfg(feature = "try-runtime")]
+use log;
 #[cfg(feature = "try-runtime")]
 use sp_runtime::TryRuntimeError;
 
@@ -252,7 +254,7 @@ where
 		signature_check: bool,
 		select: frame_try_runtime::TryStateSelect,
 	) -> Result<Weight, &'static str> {
-		frame_support::log::info!(
+		log::info!(
 			target: LOG_TARGET,
 			"try-runtime: executing block #{:?} / state root check: {:?} / signature check: {:?} / try-state-select: {:?}",
 			block.header().number(),
@@ -289,7 +291,7 @@ where
 
 		for e in extrinsics {
 			if let Err(err) = try_apply_extrinsic(e.clone()) {
-				frame_support::log::error!(
+				log::error!(
 					target: LOG_TARGET, "executing transaction {:?} failed due to {:?}. Aborting the rest of the block execution.",
 					e,
 					err,
@@ -308,7 +310,7 @@ where
 			BlockNumberFor<System>,
 		>>::try_state(*header.number(), select)
 		.map_err(|e| {
-			frame_support::log::error!(target: LOG_TARGET, "failure: {:?}", e);
+			log::error!(target: LOG_TARGET, "failure: {:?}", e);
 			e
 		})?;
 		drop(_guard);
@@ -338,7 +340,7 @@ where
 			);
 		}
 
-		frame_support::log::info!(
+		log::info!(
 			target: LOG_TARGET,
 			"try-runtime: Block #{:?} successfully executed",
 			header.number(),
diff --git a/substrate/frame/lottery/src/lib.rs b/substrate/frame/lottery/src/lib.rs
index a6a94b4ab19..c9c02540424 100644
--- a/substrate/frame/lottery/src/lib.rs
+++ b/substrate/frame/lottery/src/lib.rs
@@ -61,12 +61,12 @@ use frame_support::{
 	pallet_prelude::MaxEncodedLen,
 	storage::bounded_vec::BoundedVec,
 	traits::{Currency, ExistenceRequirement::KeepAlive, Get, Randomness, ReservableCurrency},
-	PalletId, RuntimeDebug,
+	PalletId,
 };
 pub use pallet::*;
 use sp_runtime::{
 	traits::{AccountIdConversion, Saturating, Zero},
-	ArithmeticError, DispatchError,
+	ArithmeticError, DispatchError, RuntimeDebug,
 };
 use sp_std::prelude::*;
 pub use weights::WeightInfo;
diff --git a/substrate/frame/membership/src/lib.rs b/substrate/frame/membership/src/lib.rs
index 24b9fb5fe90..6fb61f0e491 100644
--- a/substrate/frame/membership/src/lib.rs
+++ b/substrate/frame/membership/src/lib.rs
@@ -525,12 +525,13 @@ mod tests {
 
 	use sp_core::H256;
 	use sp_runtime::{
+		bounded_vec,
 		traits::{BadOrigin, BlakeTwo256, IdentityLookup},
 		BuildStorage,
 	};
 
 	use frame_support::{
-		assert_noop, assert_ok, bounded_vec, ord_parameter_types, parameter_types,
+		assert_noop, assert_ok, ord_parameter_types, parameter_types,
 		traits::{ConstU32, ConstU64, StorageVersion},
 	};
 	use frame_system::EnsureSignedBy;
diff --git a/substrate/frame/merkle-mountain-range/Cargo.toml b/substrate/frame/merkle-mountain-range/Cargo.toml
index 1d7739eb93c..82a24904cc9 100644
--- a/substrate/frame/merkle-mountain-range/Cargo.toml
+++ b/substrate/frame/merkle-mountain-range/Cargo.toml
@@ -13,6 +13,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
+log = { version = "0.4.17", default-features = false }
 scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
 frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, path = "../benchmarking" }
 frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" }
@@ -32,6 +33,7 @@ itertools = "0.10.3"
 default = ["std"]
 std = [
 	"codec/std",
+	"log/std",
 	"frame-benchmarking?/std",
 	"frame-support/std",
 	"frame-system/std",
diff --git a/substrate/frame/merkle-mountain-range/src/lib.rs b/substrate/frame/merkle-mountain-range/src/lib.rs
index 2edef9a35d5..664f4bc7390 100644
--- a/substrate/frame/merkle-mountain-range/src/lib.rs
+++ b/substrate/frame/merkle-mountain-range/src/lib.rs
@@ -56,8 +56,9 @@
 //! NOTE This pallet is experimental and not proven to work in production.
 #![cfg_attr(not(feature = "std"), no_std)]
 
-use frame_support::{log, weights::Weight};
+use frame_support::weights::Weight;
 use frame_system::pallet_prelude::{BlockNumberFor, HeaderFor};
+use log;
 use sp_mmr_primitives::utils;
 use sp_runtime::{
 	traits::{self, One, Saturating},
diff --git a/substrate/frame/merkle-mountain-range/src/mmr/storage.rs b/substrate/frame/merkle-mountain-range/src/mmr/storage.rs
index d7466784e4a..03039be83ac 100644
--- a/substrate/frame/merkle-mountain-range/src/mmr/storage.rs
+++ b/substrate/frame/merkle-mountain-range/src/mmr/storage.rs
@@ -18,7 +18,7 @@
 //! An MMR storage implementation.
 
 use codec::Encode;
-use frame_support::log::{debug, trace};
+use log::{debug, trace};
 use sp_core::offchain::StorageKind;
 use sp_io::offchain_index;
 use sp_mmr_primitives::{mmr_lib, mmr_lib::helper, utils::NodesUtils};
diff --git a/substrate/frame/multisig/src/lib.rs b/substrate/frame/multisig/src/lib.rs
index ab117315f89..e4426c64b41 100644
--- a/substrate/frame/multisig/src/lib.rs
+++ b/substrate/frame/multisig/src/lib.rs
@@ -57,14 +57,14 @@ use frame_support::{
 	ensure,
 	traits::{Currency, Get, ReservableCurrency},
 	weights::Weight,
-	BoundedVec, RuntimeDebug,
+	BoundedVec,
 };
 use frame_system::{self as system, pallet_prelude::BlockNumberFor, RawOrigin};
 use scale_info::TypeInfo;
 use sp_io::hashing::blake2_256;
 use sp_runtime::{
 	traits::{Dispatchable, TrailingZeroInput, Zero},
-	DispatchError,
+	DispatchError, RuntimeDebug,
 };
 use sp_std::prelude::*;
 pub use weights::WeightInfo;
diff --git a/substrate/frame/nfts/src/migration.rs b/substrate/frame/nfts/src/migration.rs
index a4529148e35..f90d332062a 100644
--- a/substrate/frame/nfts/src/migration.rs
+++ b/substrate/frame/nfts/src/migration.rs
@@ -16,7 +16,8 @@
 // limitations under the License.
 
 use super::*;
-use frame_support::{log, traits::OnRuntimeUpgrade};
+use frame_support::traits::OnRuntimeUpgrade;
+use log;
 
 #[cfg(feature = "try-runtime")]
 use sp_runtime::TryRuntimeError;
diff --git a/substrate/frame/nomination-pools/src/tests.rs b/substrate/frame/nomination-pools/src/tests.rs
index ac8fa5c4dbc..d0fe4e40a18 100644
--- a/substrate/frame/nomination-pools/src/tests.rs
+++ b/substrate/frame/nomination-pools/src/tests.rs
@@ -17,9 +17,9 @@
 
 use super::*;
 use crate::{mock::*, Event};
-use frame_support::{assert_err, assert_noop, assert_ok, assert_storage_noop, bounded_btree_map};
+use frame_support::{assert_err, assert_noop, assert_ok, assert_storage_noop};
 use pallet_balances::Event as BEvent;
-use sp_runtime::{traits::Dispatchable, FixedU128};
+use sp_runtime::{bounded_btree_map, traits::Dispatchable, FixedU128};
 
 macro_rules! unbonding_pools_with_era {
 	($($k:expr => $v:expr),* $(,)?) => {{
@@ -3260,7 +3260,7 @@ mod pool_withdraw_unbonded {
 
 mod withdraw_unbonded {
 	use super::*;
-	use frame_support::bounded_btree_map;
+	use sp_runtime::bounded_btree_map;
 
 	#[test]
 	fn withdraw_unbonded_works_against_slashed_no_era_sub_pool() {
diff --git a/substrate/frame/nomination-pools/test-staking/src/lib.rs b/substrate/frame/nomination-pools/test-staking/src/lib.rs
index 15874925821..9108da510a3 100644
--- a/substrate/frame/nomination-pools/test-staking/src/lib.rs
+++ b/substrate/frame/nomination-pools/test-staking/src/lib.rs
@@ -19,14 +19,14 @@
 
 mod mock;
 
-use frame_support::{assert_noop, assert_ok, bounded_btree_map, traits::Currency};
+use frame_support::{assert_noop, assert_ok, traits::Currency};
 use mock::*;
 use pallet_nomination_pools::{
 	BondedPools, Error as PoolsError, Event as PoolsEvent, LastPoolId, PoolMember, PoolMembers,
 	PoolState,
 };
 use pallet_staking::{CurrentEra, Event as StakingEvent, Payee, RewardDestination};
-use sp_runtime::traits::Zero;
+use sp_runtime::{bounded_btree_map, traits::Zero};
 
 #[test]
 fn pool_lifecycle_e2e() {
diff --git a/substrate/frame/paged-list/Cargo.toml b/substrate/frame/paged-list/Cargo.toml
index 3d7010d331b..d2b3db0080c 100644
--- a/substrate/frame/paged-list/Cargo.toml
+++ b/substrate/frame/paged-list/Cargo.toml
@@ -24,11 +24,23 @@ sp-runtime = { version = "24.0.0", default-features = false, path = "../../primi
 sp-std = { version = "8.0.0", default-features = false, path = "../../primitives/std" }
 sp-core = { version = "21.0.0", path = "../../primitives/core", default-features = false }
 sp-io = { version = "23.0.0", path = "../../primitives/io", default-features = false }
+sp-metadata-ir = { version = "0.1.0", default-features = false, optional = true, path = "../../primitives/metadata-ir" }
 
 [features]
 default = ["std"]
 
-std = ["codec/std", "frame-benchmarking?/std", "frame-support/std", "frame-system/std", "scale-info/std", "sp-core/std", "sp-io/std", "sp-runtime/std", "sp-std/std"]
+std = [
+	"codec/std",
+	"frame-benchmarking?/std",
+	"frame-support/std",
+	"frame-system/std",
+	"scale-info/std",
+	"sp-core/std",
+	"sp-io/std",
+	"sp-runtime/std",
+	"sp-std/std",
+	"sp-metadata-ir/std"
+]
 
 runtime-benchmarks = ["frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "sp-runtime/runtime-benchmarks"]
 
@@ -37,3 +49,7 @@ try-runtime = [
 	"frame-system/try-runtime",
 	"sp-runtime/try-runtime"
 ]
+
+frame-metadata = [
+	"sp-metadata-ir"
+]
diff --git a/substrate/frame/paged-list/src/paged_list.rs b/substrate/frame/paged-list/src/paged_list.rs
index 37ebe80d934..3597c3dea68 100644
--- a/substrate/frame/paged-list/src/paged_list.rs
+++ b/substrate/frame/paged-list/src/paged_list.rs
@@ -408,12 +408,12 @@ where
 pub(crate) mod mock {
 	pub use super::*;
 	pub use frame_support::{
-		metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR},
 		parameter_types,
 		storage::{types::ValueQuery, StorageList as _},
 		StorageNoopGuard,
 	};
 	pub use sp_io::{hashing::twox_128, TestExternalities};
+	pub use sp_metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR};
 
 	parameter_types! {
 		pub const ValuesPerNewPage: u32 = 5;
diff --git a/substrate/frame/preimage/src/migration.rs b/substrate/frame/preimage/src/migration.rs
index 46e555498cd..0f3337e39bf 100644
--- a/substrate/frame/preimage/src/migration.rs
+++ b/substrate/frame/preimage/src/migration.rs
@@ -192,7 +192,7 @@ mod test {
 	use super::*;
 	use crate::mock::{Test as T, *};
 
-	use frame_support::bounded_vec;
+	use sp_runtime::bounded_vec;
 
 	#[test]
 	fn migration_works() {
diff --git a/substrate/frame/preimage/src/tests.rs b/substrate/frame/preimage/src/tests.rs
index 63a178c408a..fa621c8f558 100644
--- a/substrate/frame/preimage/src/tests.rs
+++ b/substrate/frame/preimage/src/tests.rs
@@ -23,12 +23,13 @@ use super::*;
 use crate::mock::*;
 
 use frame_support::{
-	assert_err, assert_noop, assert_ok, assert_storage_noop, bounded_vec,
+	assert_err, assert_noop, assert_ok, assert_storage_noop,
 	traits::{Bounded, BoundedInline, Hash as PreimageHash},
 	StorageNoopGuard,
 };
 use pallet_balances::Error as BalancesError;
 use sp_core::{blake2_256, H256};
+use sp_runtime::bounded_vec;
 
 /// Returns one `Inline`, `Lookup` and `Legacy` item each with different data and hash.
 pub fn make_bounded_values() -> (Bounded<Vec<u8>>, Bounded<Vec<u8>>, Bounded<Vec<u8>>) {
diff --git a/substrate/frame/proxy/src/lib.rs b/substrate/frame/proxy/src/lib.rs
index 33e9fcfade3..586d52fb62b 100644
--- a/substrate/frame/proxy/src/lib.rs
+++ b/substrate/frame/proxy/src/lib.rs
@@ -38,7 +38,6 @@ use frame_support::{
 	dispatch::{DispatchError, GetDispatchInfo},
 	ensure,
 	traits::{Currency, Get, InstanceFilter, IsSubType, IsType, OriginTrait, ReservableCurrency},
-	RuntimeDebug,
 };
 use frame_system::{self as system, ensure_signed, pallet_prelude::BlockNumberFor};
 pub use pallet::*;
@@ -46,7 +45,7 @@ use scale_info::TypeInfo;
 use sp_io::hashing::blake2_256;
 use sp_runtime::{
 	traits::{Dispatchable, Hash, Saturating, StaticLookup, TrailingZeroInput, Zero},
-	DispatchResult,
+	DispatchResult, RuntimeDebug,
 };
 use sp_std::prelude::*;
 pub use weights::WeightInfo;
diff --git a/substrate/frame/proxy/src/tests.rs b/substrate/frame/proxy/src/tests.rs
index 4b055a3935b..48a2a4ed0cc 100644
--- a/substrate/frame/proxy/src/tests.rs
+++ b/substrate/frame/proxy/src/tests.rs
@@ -27,10 +27,9 @@ use frame_support::{
 	assert_noop, assert_ok, derive_impl,
 	dispatch::DispatchError,
 	traits::{ConstU32, ConstU64, Contains},
-	RuntimeDebug,
 };
 use sp_core::H256;
-use sp_runtime::{traits::BlakeTwo256, BuildStorage};
+use sp_runtime::{traits::BlakeTwo256, BuildStorage, RuntimeDebug};
 
 type Block = frame_system::mocking::MockBlock<Test>;
 
diff --git a/substrate/frame/ranked-collective/src/lib.rs b/substrate/frame/ranked-collective/src/lib.rs
index fe1308cd034..d94932a1dac 100644
--- a/substrate/frame/ranked-collective/src/lib.rs
+++ b/substrate/frame/ranked-collective/src/lib.rs
@@ -41,6 +41,7 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 #![recursion_limit = "128"]
 
+use codec::{Decode, Encode, MaxEncodedLen};
 use scale_info::TypeInfo;
 use sp_arithmetic::traits::Saturating;
 use sp_runtime::{
@@ -51,7 +52,6 @@ use sp_runtime::{
 use sp_std::{marker::PhantomData, prelude::*};
 
 use frame_support::{
-	codec::{Decode, Encode, MaxEncodedLen},
 	dispatch::{DispatchError, DispatchResultWithPostInfo, PostDispatchInfo},
 	ensure, impl_ensure_origin_with_arg_ignoring_arg,
 	traits::{EnsureOrigin, EnsureOriginWithArg, PollStatus, Polling, RankedMembers, VoteTally},
diff --git a/substrate/frame/recovery/src/lib.rs b/substrate/frame/recovery/src/lib.rs
index 9c01d25d4f7..5673147c8e0 100644
--- a/substrate/frame/recovery/src/lib.rs
+++ b/substrate/frame/recovery/src/lib.rs
@@ -152,13 +152,16 @@
 
 use codec::{Decode, Encode, MaxEncodedLen};
 use scale_info::TypeInfo;
-use sp_runtime::traits::{CheckedAdd, CheckedMul, Dispatchable, SaturatedConversion, StaticLookup};
+use sp_runtime::{
+	traits::{CheckedAdd, CheckedMul, Dispatchable, SaturatedConversion, StaticLookup},
+	RuntimeDebug,
+};
 use sp_std::prelude::*;
 
 use frame_support::{
 	dispatch::{GetDispatchInfo, PostDispatchInfo},
 	traits::{BalanceStatus, Currency, ReservableCurrency},
-	BoundedVec, RuntimeDebug,
+	BoundedVec,
 };
 
 pub use pallet::*;
diff --git a/substrate/frame/recovery/src/tests.rs b/substrate/frame/recovery/src/tests.rs
index 85024d0bc4a..93df0701585 100644
--- a/substrate/frame/recovery/src/tests.rs
+++ b/substrate/frame/recovery/src/tests.rs
@@ -18,12 +18,12 @@
 //! Tests for the module.
 
 use super::*;
-use frame_support::{assert_noop, assert_ok, bounded_vec, traits::Currency};
+use frame_support::{assert_noop, assert_ok, traits::Currency};
 use mock::{
 	new_test_ext, run_to_block, Balances, BalancesCall, MaxFriends, Recovery, RecoveryCall,
 	RuntimeCall, RuntimeOrigin, Test,
 };
-use sp_runtime::traits::BadOrigin;
+use sp_runtime::{bounded_vec, traits::BadOrigin};
 
 #[test]
 fn basic_setup_works() {
diff --git a/substrate/frame/salary/src/lib.rs b/substrate/frame/salary/src/lib.rs
index 53dd7224909..75d6fdd329a 100644
--- a/substrate/frame/salary/src/lib.rs
+++ b/substrate/frame/salary/src/lib.rs
@@ -23,7 +23,7 @@
 use codec::{Decode, Encode, MaxEncodedLen};
 use scale_info::TypeInfo;
 use sp_arithmetic::traits::{Saturating, Zero};
-use sp_runtime::Perbill;
+use sp_runtime::{Perbill, RuntimeDebug};
 use sp_std::{marker::PhantomData, prelude::*};
 
 use frame_support::{
@@ -33,7 +33,6 @@ use frame_support::{
 		tokens::{GetSalary, Pay, PaymentStatus},
 		RankedMembers,
 	},
-	RuntimeDebug,
 };
 
 #[cfg(test)]
diff --git a/substrate/frame/scored-pool/src/mock.rs b/substrate/frame/scored-pool/src/mock.rs
index d8c6ef9b0f4..591c910488b 100644
--- a/substrate/frame/scored-pool/src/mock.rs
+++ b/substrate/frame/scored-pool/src/mock.rs
@@ -21,12 +21,13 @@ use super::*;
 use crate as pallet_scored_pool;
 
 use frame_support::{
-	bounded_vec, construct_runtime, ord_parameter_types, parameter_types,
+	construct_runtime, ord_parameter_types, parameter_types,
 	traits::{ConstU32, ConstU64},
 };
 use frame_system::EnsureSignedBy;
 use sp_core::H256;
 use sp_runtime::{
+	bounded_vec,
 	traits::{BlakeTwo256, IdentityLookup},
 	BuildStorage,
 };
diff --git a/substrate/frame/session/Cargo.toml b/substrate/frame/session/Cargo.toml
index 0858ae66565..a2a04e76a9f 100644
--- a/substrate/frame/session/Cargo.toml
+++ b/substrate/frame/session/Cargo.toml
@@ -27,6 +27,7 @@ sp-session = { version = "4.0.0-dev", default-features = false, path = "../../pr
 sp-staking = { version = "4.0.0-dev", default-features = false, path = "../../primitives/staking", features = ["serde"] }
 sp-std = { version = "8.0.0", default-features = false, path = "../../primitives/std" }
 sp-trie = { version = "22.0.0", default-features = false, optional = true, path = "../../primitives/trie" }
+sp-state-machine = { version = "0.28.0", default-features = false, path = "../../primitives/state-machine" }
 
 [features]
 default = ["historical", "std"]
@@ -45,6 +46,7 @@ std = [
 	"sp-staking/std",
 	"sp-std/std",
 	"sp-trie/std",
+	"sp-state-machine/std",
 ]
 try-runtime = [
 	"frame-support/try-runtime",
diff --git a/substrate/frame/session/benchmarking/Cargo.toml b/substrate/frame/session/benchmarking/Cargo.toml
index a26cacc561e..81e4c2ff590 100644
--- a/substrate/frame/session/benchmarking/Cargo.toml
+++ b/substrate/frame/session/benchmarking/Cargo.toml
@@ -13,6 +13,7 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
+codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
 rand = { version = "0.8.5", default-features = false, features = ["std_rng"] }
 frame-benchmarking = { version = "4.0.0-dev", default-features = false, path = "../../benchmarking" }
 frame-support = { version = "4.0.0-dev", default-features = false, path = "../../support" }
diff --git a/substrate/frame/session/benchmarking/src/lib.rs b/substrate/frame/session/benchmarking/src/lib.rs
index cbf5d67ba56..722bb14fb56 100644
--- a/substrate/frame/session/benchmarking/src/lib.rs
+++ b/substrate/frame/session/benchmarking/src/lib.rs
@@ -26,11 +26,9 @@ mod mock;
 use sp_runtime::traits::{One, StaticLookup, TrailingZeroInput};
 use sp_std::{prelude::*, vec};
 
+use codec::Decode;
 use frame_benchmarking::v1::benchmarks;
-use frame_support::{
-	codec::Decode,
-	traits::{Get, KeyOwnerProofSystem, OnInitialize},
-};
+use frame_support::traits::{Get, KeyOwnerProofSystem, OnInitialize};
 use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin};
 use pallet_session::{historical::Pallet as Historical, Pallet as Session, *};
 use pallet_staking::{
diff --git a/substrate/frame/session/src/historical/mod.rs b/substrate/frame/session/src/historical/mod.rs
index 04129e4eba1..d74e9dd0b7c 100644
--- a/substrate/frame/session/src/historical/mod.rs
+++ b/substrate/frame/session/src/historical/mod.rs
@@ -378,11 +378,9 @@ pub(crate) mod tests {
 	};
 
 	use sp_runtime::{key_types::DUMMY, testing::UintAuthorityId, BuildStorage};
+	use sp_state_machine::BasicExternalities;
 
-	use frame_support::{
-		traits::{KeyOwnerProofSystem, OnInitialize},
-		BasicExternalities,
-	};
+	use frame_support::traits::{KeyOwnerProofSystem, OnInitialize};
 
 	type Historical = Pallet<Test>;
 
diff --git a/substrate/frame/session/src/historical/offchain.rs b/substrate/frame/session/src/historical/offchain.rs
index c44eea2f374..1b4d53b74b4 100644
--- a/substrate/frame/session/src/historical/offchain.rs
+++ b/substrate/frame/session/src/historical/offchain.rs
@@ -150,11 +150,9 @@ mod tests {
 		offchain::{testing::TestOffchainExt, OffchainDbExt, OffchainWorkerExt, StorageKind},
 	};
 	use sp_runtime::{testing::UintAuthorityId, BuildStorage};
+	use sp_state_machine::BasicExternalities;
 
-	use frame_support::{
-		traits::{KeyOwnerProofSystem, OnInitialize},
-		BasicExternalities,
-	};
+	use frame_support::traits::{KeyOwnerProofSystem, OnInitialize};
 
 	type Historical = Pallet<Test>;
 
diff --git a/substrate/frame/session/src/lib.rs b/substrate/frame/session/src/lib.rs
index d2b1c2b7446..1c0093c1df6 100644
--- a/substrate/frame/session/src/lib.rs
+++ b/substrate/frame/session/src/lib.rs
@@ -115,8 +115,8 @@ mod mock;
 mod tests;
 pub mod weights;
 
+use codec::{Decode, MaxEncodedLen};
 use frame_support::{
-	codec::{Decode, MaxEncodedLen},
 	dispatch::{DispatchError, DispatchResult},
 	ensure,
 	traits::{
diff --git a/substrate/frame/session/src/mock.rs b/substrate/frame/session/src/mock.rs
index b45ebfd25c4..2db54e1a597 100644
--- a/substrate/frame/session/src/mock.rs
+++ b/substrate/frame/session/src/mock.rs
@@ -32,11 +32,11 @@ use sp_runtime::{
 	BuildStorage,
 };
 use sp_staking::SessionIndex;
+use sp_state_machine::BasicExternalities;
 
 use frame_support::{
 	parameter_types,
 	traits::{ConstU32, ConstU64},
-	BasicExternalities,
 };
 
 impl_opaque_keys! {
diff --git a/substrate/frame/staking/src/migrations.rs b/substrate/frame/staking/src/migrations.rs
index 0a27290daac..332da506f01 100644
--- a/substrate/frame/staking/src/migrations.rs
+++ b/substrate/frame/staking/src/migrations.rs
@@ -296,7 +296,7 @@ pub mod v10 {
 pub mod v9 {
 	use super::*;
 	#[cfg(feature = "try-runtime")]
-	use frame_support::codec::{Decode, Encode};
+	use codec::{Decode, Encode};
 	#[cfg(feature = "try-runtime")]
 	use sp_std::vec::Vec;
 
diff --git a/substrate/frame/staking/src/tests.rs b/substrate/frame/staking/src/tests.rs
index 29539cbb84c..fd7dabac74d 100644
--- a/substrate/frame/staking/src/tests.rs
+++ b/substrate/frame/staking/src/tests.rs
@@ -23,7 +23,7 @@ use frame_election_provider_support::{
 	ElectionProvider, SortedListProvider, Support,
 };
 use frame_support::{
-	assert_noop, assert_ok, assert_storage_noop, bounded_vec,
+	assert_noop, assert_ok, assert_storage_noop,
 	dispatch::{extract_actual_weight, GetDispatchInfo, WithPostDispatchInfo},
 	pallet_prelude::*,
 	traits::{Currency, Get, ReservableCurrency},
@@ -31,7 +31,7 @@ use frame_support::{
 use mock::*;
 use pallet_balances::Error as BalancesError;
 use sp_runtime::{
-	assert_eq_error_rate,
+	assert_eq_error_rate, bounded_vec,
 	traits::{BadOrigin, Dispatchable},
 	Perbill, Percent, Rounding, TokenError,
 };
diff --git a/substrate/frame/state-trie-migration/src/lib.rs b/substrate/frame/state-trie-migration/src/lib.rs
index c5b41cd9a44..e22a47458b7 100644
--- a/substrate/frame/state-trie-migration/src/lib.rs
+++ b/substrate/frame/state-trie-migration/src/lib.rs
@@ -1268,8 +1268,8 @@ mod mock {
 #[cfg(test)]
 mod test {
 	use super::{mock::*, *};
-	use frame_support::{bounded_vec, dispatch::*};
-	use sp_runtime::{traits::Bounded, StateVersion};
+	use frame_support::dispatch::*;
+	use sp_runtime::{bounded_vec, traits::Bounded, StateVersion};
 
 	#[test]
 	fn fails_if_no_migration() {
diff --git a/substrate/frame/support/Cargo.toml b/substrate/frame/support/Cargo.toml
index da6ee19e04a..5d1dbd71022 100644
--- a/substrate/frame/support/Cargo.toml
+++ b/substrate/frame/support/Cargo.toml
@@ -28,6 +28,7 @@ sp-inherents = { version = "4.0.0-dev", default-features = false, path = "../../
 sp-staking = { version = "4.0.0-dev", default-features = false, path = "../../primitives/staking" }
 sp-weights = { version = "20.0.0", default-features = false, path = "../../primitives/weights" }
 sp-debug-derive = { default-features = false, path = "../../primitives/debug-derive" }
+sp-metadata-ir = { version = "0.1.0", default-features = false, path = "../../primitives/metadata-ir" }
 tt-call = "1.0.8"
 macro_magic = "0.4.2"
 frame-support-procedural = { version = "4.0.0-dev", default-features = false, path = "./procedural" }
@@ -76,7 +77,8 @@ std = [
 	"environmental/std",
 	"sp-genesis-builder/std",
 	"frame-system/std",
-	"sp-debug-derive/std"
+	"sp-debug-derive/std",
+	"sp-metadata-ir/std"
 ]
 runtime-benchmarks = [
 	"frame-system/runtime-benchmarks",
diff --git a/substrate/frame/support/procedural/src/benchmark.rs b/substrate/frame/support/procedural/src/benchmark.rs
index 9f28e7129d2..5a5bafa0929 100644
--- a/substrate/frame/support/procedural/src/benchmark.rs
+++ b/substrate/frame/support/procedural/src/benchmark.rs
@@ -724,7 +724,7 @@ fn expand_benchmark(
 		Ok(ident) => ident,
 		Err(err) => return err.to_compile_error().into(),
 	};
-	let codec = quote!(#krate::frame_support::codec);
+	let codec = quote!(#krate::frame_support::__private::codec);
 	let traits = quote!(#krate::frame_support::traits);
 	let setup_stmts = benchmark_def.setup_stmts;
 	let verify_stmts = benchmark_def.verify_stmts;
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/call.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/call.rs
index cc4841418be..cbf2ea90785 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/call.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/call.rs
@@ -68,10 +68,10 @@ pub fn expand_outer_dispatch(
 
 		#[derive(
 			Clone, PartialEq, Eq,
-			#scrate::codec::Encode,
-			#scrate::codec::Decode,
-			#scrate::scale_info::TypeInfo,
-			#scrate::RuntimeDebug,
+			#scrate::__private::codec::Encode,
+			#scrate::__private::codec::Decode,
+			#scrate::__private::scale_info::TypeInfo,
+			#scrate::__private::RuntimeDebug,
 		)]
 		pub enum RuntimeCall {
 			#variant_defs
@@ -166,7 +166,7 @@ pub fn expand_outer_dispatch(
 			type PostInfo = #scrate::dispatch::PostDispatchInfo;
 			fn dispatch(self, origin: RuntimeOrigin) -> #scrate::dispatch::DispatchResultWithPostInfo {
 				if !<Self::RuntimeOrigin as #scrate::traits::OriginTrait>::filter_call(&origin, &self) {
-					return #scrate::sp_std::result::Result::Err(
+					return #scrate::__private::sp_std::result::Result::Err(
 						#system_path::Error::<#runtime>::CallFiltered.into()
 					);
 				}
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/config.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/config.rs
index 440e856221a..ffe55bceb80 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/config.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/config.rs
@@ -67,8 +67,8 @@ pub fn expand_outer_config(
 
 		#types
 
-		use #scrate::serde as __genesis_config_serde_import__;
-		#[derive(#scrate::serde::Serialize, #scrate::serde::Deserialize, Default)]
+		use #scrate::__private::serde as __genesis_config_serde_import__;
+		#[derive(#scrate::__private::serde::Serialize, #scrate::__private::serde::Deserialize, Default)]
 		#[serde(rename_all = "camelCase")]
 		#[serde(deny_unknown_fields)]
 		#[serde(crate = "__genesis_config_serde_import__")]
@@ -86,7 +86,7 @@ pub fn expand_outer_config(
 				&self,
 				storage: &mut #scrate::sp_runtime::Storage,
 			) -> std::result::Result<(), String> {
-				#scrate::BasicExternalities::execute_with_storage(storage, || {
+				#scrate::__private::BasicExternalities::execute_with_storage(storage, || {
 					<Self as #scrate::traits::BuildGenesisConfig>::build(&self);
 					Ok(())
 				})
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/freeze_reason.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/freeze_reason.rs
index d357fab7211..b142f8e84c9 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/freeze_reason.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/freeze_reason.rs
@@ -38,9 +38,9 @@ pub fn expand_outer_freeze_reason(pallet_decls: &[Pallet], scrate: &TokenStream)
 		/// A reason for placing a freeze on funds.
 		#[derive(
 			Copy, Clone, Eq, PartialEq, Ord, PartialOrd,
-			#scrate::codec::Encode, #scrate::codec::Decode, #scrate::codec::MaxEncodedLen,
-			#scrate::scale_info::TypeInfo,
-			#scrate::RuntimeDebug,
+			#scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen,
+			#scrate::__private::scale_info::TypeInfo,
+			#scrate::__private::RuntimeDebug,
 		)]
 		pub enum RuntimeFreezeReason {
 			#( #freeze_reason_variants )*
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/hold_reason.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/hold_reason.rs
index 6acfe5382f1..ed7183c4a15 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/hold_reason.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/hold_reason.rs
@@ -38,9 +38,9 @@ pub fn expand_outer_hold_reason(pallet_decls: &[Pallet], scrate: &TokenStream) -
 		/// A reason for placing a hold on funds.
 		#[derive(
 			Copy, Clone, Eq, PartialEq, Ord, PartialOrd,
-			#scrate::codec::Encode, #scrate::codec::Decode, #scrate::codec::MaxEncodedLen,
-			#scrate::scale_info::TypeInfo,
-			#scrate::RuntimeDebug,
+			#scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen,
+			#scrate::__private::scale_info::TypeInfo,
+			#scrate::__private::RuntimeDebug,
 		)]
 		pub enum RuntimeHoldReason {
 			#( #hold_reason_variants )*
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/inherent.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/inherent.rs
index 1dc51d9cd2b..a77aad66dcf 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/inherent.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/inherent.rs
@@ -58,17 +58,17 @@ pub fn expand_outer_inherent(
 
 		trait InherentDataExt {
 			fn create_extrinsics(&self) ->
-				#scrate::sp_std::vec::Vec<<#block as #scrate::sp_runtime::traits::Block>::Extrinsic>;
+				#scrate::__private::sp_std::vec::Vec<<#block as #scrate::sp_runtime::traits::Block>::Extrinsic>;
 			fn check_extrinsics(&self, block: &#block) -> #scrate::inherent::CheckInherentsResult;
 		}
 
 		impl InherentDataExt for #scrate::inherent::InherentData {
 			fn create_extrinsics(&self) ->
-				#scrate::sp_std::vec::Vec<<#block as #scrate::sp_runtime::traits::Block>::Extrinsic>
+				#scrate::__private::sp_std::vec::Vec<<#block as #scrate::sp_runtime::traits::Block>::Extrinsic>
 			{
 				use #scrate::inherent::ProvideInherent;
 
-				let mut inherents = #scrate::sp_std::vec::Vec::new();
+				let mut inherents = #scrate::__private::sp_std::vec::Vec::new();
 
 				#(
 					#pallet_attrs
@@ -91,7 +91,7 @@ pub fn expand_outer_inherent(
 				use #scrate::traits::{IsSubType, ExtrinsicCall};
 				use #scrate::sp_runtime::traits::Block as _;
 				use #scrate::_private::sp_inherents::Error;
-				use #scrate::log;
+				use #scrate::__private::log;
 
 				let mut result = #scrate::inherent::CheckInherentsResult::new();
 
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/lock_id.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/lock_id.rs
index d7031dcaf55..ba35147a051 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/lock_id.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/lock_id.rs
@@ -38,9 +38,9 @@ pub fn expand_outer_lock_id(pallet_decls: &[Pallet], scrate: &TokenStream) -> To
 		/// An identifier for each lock placed on funds.
 		#[derive(
 			Copy, Clone, Eq, PartialEq, Ord, PartialOrd,
-			#scrate::codec::Encode, #scrate::codec::Decode, #scrate::codec::MaxEncodedLen,
-			#scrate::scale_info::TypeInfo,
-			#scrate::RuntimeDebug,
+			#scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen,
+			#scrate::__private::scale_info::TypeInfo,
+			#scrate::__private::RuntimeDebug,
 		)]
 		pub enum RuntimeLockId {
 			#( #lock_id_variants )*
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/metadata.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/metadata.rs
index 0975fedb35d..0e76f9a9246 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/metadata.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/metadata.rs
@@ -61,7 +61,7 @@ pub fn expand_runtime_metadata(
 
 			quote! {
 				#attr
-				#scrate::metadata_ir::PalletMetadataIR {
+				#scrate::__private::metadata_ir::PalletMetadataIR {
 					name: stringify!(#name),
 					index: #index,
 					storage: #storage,
@@ -77,7 +77,7 @@ pub fn expand_runtime_metadata(
 
 	quote! {
 		impl #runtime {
-			fn metadata_ir() -> #scrate::metadata_ir::MetadataIR {
+			fn metadata_ir() -> #scrate::__private::metadata_ir::MetadataIR {
 				// Each runtime must expose the `runtime_metadata()` to fetch the runtime API metadata.
 				// The function is implemented by calling `impl_runtime_apis!`.
 				//
@@ -96,23 +96,23 @@ pub fn expand_runtime_metadata(
 				// `Deref` needs a reference for resolving the function call.
 				let rt = #runtime;
 
-				let ty = #scrate::scale_info::meta_type::<#extrinsic>();
-				let address_ty = #scrate::scale_info::meta_type::<
+				let ty = #scrate::__private::scale_info::meta_type::<#extrinsic>();
+				let address_ty = #scrate::__private::scale_info::meta_type::<
 						<<#extrinsic as #scrate::sp_runtime::traits::Extrinsic>::SignaturePayload as #scrate::sp_runtime::traits::SignaturePayload>::SignatureAddress
 					>();
-				let call_ty = #scrate::scale_info::meta_type::<
+				let call_ty = #scrate::__private::scale_info::meta_type::<
 					<#extrinsic as #scrate::sp_runtime::traits::Extrinsic>::Call
 					>();
-				let signature_ty = #scrate::scale_info::meta_type::<
+				let signature_ty = #scrate::__private::scale_info::meta_type::<
 						<<#extrinsic as #scrate::sp_runtime::traits::Extrinsic>::SignaturePayload as #scrate::sp_runtime::traits::SignaturePayload>::Signature
 					>();
-				let extra_ty = #scrate::scale_info::meta_type::<
+				let extra_ty = #scrate::__private::scale_info::meta_type::<
 						<<#extrinsic as #scrate::sp_runtime::traits::Extrinsic>::SignaturePayload as #scrate::sp_runtime::traits::SignaturePayload>::SignatureExtra
 					>();
 
-				#scrate::metadata_ir::MetadataIR {
-					pallets: #scrate::sp_std::vec![ #(#pallets),* ],
-					extrinsic: #scrate::metadata_ir::ExtrinsicMetadataIR {
+				#scrate::__private::metadata_ir::MetadataIR {
+					pallets: #scrate::__private::sp_std::vec![ #(#pallets),* ],
+					extrinsic: #scrate::__private::metadata_ir::ExtrinsicMetadataIR {
 						ty,
 						version: <#extrinsic as #scrate::sp_runtime::traits::ExtrinsicMetadata>::VERSION,
 						address_ty,
@@ -125,39 +125,39 @@ pub fn expand_runtime_metadata(
 								>::SignedExtensions as #scrate::sp_runtime::traits::SignedExtension
 							>::metadata()
 								.into_iter()
-								.map(|meta| #scrate::metadata_ir::SignedExtensionMetadataIR {
+								.map(|meta| #scrate::__private::metadata_ir::SignedExtensionMetadataIR {
 									identifier: meta.identifier,
 									ty: meta.ty,
 									additional_signed: meta.additional_signed,
 								})
 								.collect(),
 					},
-					ty: #scrate::scale_info::meta_type::<#runtime>(),
+					ty: #scrate::__private::scale_info::meta_type::<#runtime>(),
 					apis: (&rt).runtime_metadata(),
-					outer_enums: #scrate::metadata_ir::OuterEnumsIR {
-						call_enum_ty: #scrate::scale_info::meta_type::<
+					outer_enums: #scrate::__private::metadata_ir::OuterEnumsIR {
+						call_enum_ty: #scrate::__private::scale_info::meta_type::<
 								<#runtime as #system_path::Config>::RuntimeCall
 							>(),
-						event_enum_ty: #scrate::scale_info::meta_type::<RuntimeEvent>(),
-						error_enum_ty: #scrate::scale_info::meta_type::<RuntimeError>(),
+						event_enum_ty: #scrate::__private::scale_info::meta_type::<RuntimeEvent>(),
+						error_enum_ty: #scrate::__private::scale_info::meta_type::<RuntimeError>(),
 					}
 				}
 			}
 
-			pub fn metadata() -> #scrate::metadata::RuntimeMetadataPrefixed {
+			pub fn metadata() -> #scrate::__private::metadata::RuntimeMetadataPrefixed {
 				// Note: this always returns the V14 version. The runtime API function
 				// must be deprecated.
-				#scrate::metadata_ir::into_v14(#runtime::metadata_ir())
+				#scrate::__private::metadata_ir::into_v14(#runtime::metadata_ir())
 			}
 
-			pub fn metadata_at_version(version: u32) -> Option<#scrate::OpaqueMetadata> {
-				#scrate::metadata_ir::into_version(#runtime::metadata_ir(), version).map(|prefixed| {
-					#scrate::OpaqueMetadata::new(prefixed.into())
+			pub fn metadata_at_version(version: u32) -> Option<#scrate::__private::OpaqueMetadata> {
+				#scrate::__private::metadata_ir::into_version(#runtime::metadata_ir(), version).map(|prefixed| {
+					#scrate::__private::OpaqueMetadata::new(prefixed.into())
 				})
 			}
 
-			pub fn metadata_versions() -> #scrate::sp_std::vec::Vec<u32> {
-				#scrate::metadata_ir::supported_versions()
+			pub fn metadata_versions() -> #scrate::__private::sp_std::vec::Vec<u32> {
+				#scrate::__private::metadata_ir::supported_versions()
 			}
 		}
 	}
@@ -220,8 +220,8 @@ fn expand_pallet_metadata_events(
 
 		quote! {
 			Some(
-				#scrate::metadata_ir::PalletEventMetadataIR {
-					ty: #scrate::scale_info::meta_type::<#pallet_event>()
+				#scrate::__private::metadata_ir::PalletEventMetadataIR {
+					ty: #scrate::__private::scale_info::meta_type::<#pallet_event>()
 				}
 			)
 		}
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/origin.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/origin.rs
index 0eaa73f6030..b421d2aaffa 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/origin.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/origin.rs
@@ -105,25 +105,25 @@ pub fn expand_outer_origin(
 		#[derive(Clone)]
 		pub struct RuntimeOrigin {
 			caller: OriginCaller,
-			filter: #scrate::sp_std::rc::Rc<Box<dyn Fn(&<#runtime as #system_path::Config>::RuntimeCall) -> bool>>,
+			filter: #scrate::__private::sp_std::rc::Rc<Box<dyn Fn(&<#runtime as #system_path::Config>::RuntimeCall) -> bool>>,
 		}
 
 		#[cfg(not(feature = "std"))]
-		impl #scrate::sp_std::fmt::Debug for RuntimeOrigin {
+		impl #scrate::__private::sp_std::fmt::Debug for RuntimeOrigin {
 			fn fmt(
 				&self,
-				fmt: &mut #scrate::sp_std::fmt::Formatter,
-			) -> #scrate::sp_std::result::Result<(), #scrate::sp_std::fmt::Error> {
+				fmt: &mut #scrate::__private::sp_std::fmt::Formatter,
+			) -> #scrate::__private::sp_std::result::Result<(), #scrate::__private::sp_std::fmt::Error> {
 				fmt.write_str("<wasm:stripped>")
 			}
 		}
 
 		#[cfg(feature = "std")]
-		impl #scrate::sp_std::fmt::Debug for RuntimeOrigin {
+		impl #scrate::__private::sp_std::fmt::Debug for RuntimeOrigin {
 			fn fmt(
 				&self,
-				fmt: &mut #scrate::sp_std::fmt::Formatter,
-			) -> #scrate::sp_std::result::Result<(), #scrate::sp_std::fmt::Error> {
+				fmt: &mut #scrate::__private::sp_std::fmt::Formatter,
+			) -> #scrate::__private::sp_std::result::Result<(), #scrate::__private::sp_std::fmt::Error> {
 				fmt.debug_struct("Origin")
 					.field("caller", &self.caller)
 					.field("filter", &"[function ptr]")
@@ -139,7 +139,7 @@ pub fn expand_outer_origin(
 			fn add_filter(&mut self, filter: impl Fn(&Self::Call) -> bool + 'static) {
 				let f = self.filter.clone();
 
-				self.filter = #scrate::sp_std::rc::Rc::new(Box::new(move |call| {
+				self.filter = #scrate::__private::sp_std::rc::Rc::new(Box::new(move |call| {
 					f(call) && filter(call)
 				}));
 			}
@@ -150,7 +150,7 @@ pub fn expand_outer_origin(
 					as #scrate::traits::Contains<<#runtime as #system_path::Config>::RuntimeCall>
 				>::contains;
 
-				self.filter = #scrate::sp_std::rc::Rc::new(Box::new(filter));
+				self.filter = #scrate::__private::sp_std::rc::Rc::new(Box::new(filter));
 			}
 
 			fn set_caller_from(&mut self, other: impl Into<Self>) {
@@ -197,8 +197,8 @@ pub fn expand_outer_origin(
 		}
 
 		#[derive(
-			Clone, PartialEq, Eq, #scrate::RuntimeDebug, #scrate::codec::Encode,
-			#scrate::codec::Decode, #scrate::scale_info::TypeInfo, #scrate::codec::MaxEncodedLen,
+			Clone, PartialEq, Eq, #scrate::__private::RuntimeDebug, #scrate::__private::codec::Encode,
+			#scrate::__private::codec::Decode, #scrate::__private::scale_info::TypeInfo, #scrate::__private::codec::MaxEncodedLen,
 		)]
 		#[allow(non_camel_case_types)]
 		pub enum OriginCaller {
@@ -206,7 +206,7 @@ pub fn expand_outer_origin(
 			system(#system_path::Origin<#runtime>),
 			#caller_variants
 			#[allow(dead_code)]
-			Void(#scrate::Void)
+			Void(#scrate::__private::Void)
 		}
 
 		// For backwards compatibility and ease of accessing these functions.
@@ -252,7 +252,7 @@ pub fn expand_outer_origin(
 		impl TryFrom<OriginCaller> for #system_path::Origin<#runtime> {
 			type Error = OriginCaller;
 			fn try_from(x: OriginCaller)
-				-> #scrate::sp_std::result::Result<#system_path::Origin<#runtime>, OriginCaller>
+				-> #scrate::__private::sp_std::result::Result<#system_path::Origin<#runtime>, OriginCaller>
 			{
 				if let OriginCaller::system(l) = x {
 					Ok(l)
@@ -275,7 +275,7 @@ pub fn expand_outer_origin(
 			fn from(x: OriginCaller) -> Self {
 				let mut o = RuntimeOrigin {
 					caller: x,
-					filter: #scrate::sp_std::rc::Rc::new(Box::new(|_| true)),
+					filter: #scrate::__private::sp_std::rc::Rc::new(Box::new(|_| true)),
 				};
 
 				#scrate::traits::OriginTrait::reset_filter(&mut o);
@@ -284,7 +284,7 @@ pub fn expand_outer_origin(
 			}
 		}
 
-		impl From<RuntimeOrigin> for #scrate::sp_std::result::Result<#system_path::Origin<#runtime>, RuntimeOrigin> {
+		impl From<RuntimeOrigin> for #scrate::__private::sp_std::result::Result<#system_path::Origin<#runtime>, RuntimeOrigin> {
 			/// NOTE: converting to pallet origin loses the origin filter information.
 			fn from(val: RuntimeOrigin) -> Self {
 				if let OriginCaller::system(l) = val.caller {
@@ -394,7 +394,7 @@ fn expand_origin_pallet_conversions(
 		}
 
 		#attr
-		impl From<RuntimeOrigin> for #scrate::sp_std::result::Result<#pallet_origin, RuntimeOrigin> {
+		impl From<RuntimeOrigin> for #scrate::__private::sp_std::result::Result<#pallet_origin, RuntimeOrigin> {
 			/// NOTE: converting to pallet origin loses the origin filter information.
 			fn from(val: RuntimeOrigin) -> Self {
 				if let OriginCaller::#variant_name(l) = val.caller {
@@ -410,7 +410,7 @@ fn expand_origin_pallet_conversions(
 			type Error = OriginCaller;
 			fn try_from(
 				x: OriginCaller,
-			) -> #scrate::sp_std::result::Result<#pallet_origin, OriginCaller> {
+			) -> #scrate::__private::sp_std::result::Result<#pallet_origin, OriginCaller> {
 				if let OriginCaller::#variant_name(l) = x {
 					Ok(l)
 				} else {
@@ -424,7 +424,7 @@ fn expand_origin_pallet_conversions(
 			type Error = ();
 			fn try_from(
 				x: &'a OriginCaller,
-			) -> #scrate::sp_std::result::Result<&'a #pallet_origin, ()> {
+			) -> #scrate::__private::sp_std::result::Result<&'a #pallet_origin, ()> {
 				if let OriginCaller::#variant_name(l) = x {
 					Ok(&l)
 				} else {
@@ -438,7 +438,7 @@ fn expand_origin_pallet_conversions(
 			type Error = ();
 			fn try_from(
 				x: &'a RuntimeOrigin,
-			) -> #scrate::sp_std::result::Result<&'a #pallet_origin, ()> {
+			) -> #scrate::__private::sp_std::result::Result<&'a #pallet_origin, ()> {
 				if let OriginCaller::#variant_name(l) = &x.caller {
 					Ok(&l)
 				} else {
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/outer_enums.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/outer_enums.rs
index b78360d5fc0..df69c19a4b6 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/outer_enums.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/outer_enums.rs
@@ -159,10 +159,10 @@ pub fn expand_outer_enum(
 
 		#[derive(
 			#event_custom_derives
-			#scrate::codec::Encode,
-			#scrate::codec::Decode,
-			#scrate::scale_info::TypeInfo,
-			#scrate::RuntimeDebug,
+			#scrate::__private::codec::Encode,
+			#scrate::__private::codec::Decode,
+			#scrate::__private::scale_info::TypeInfo,
+			#scrate::__private::RuntimeDebug,
 		)]
 		#[allow(non_camel_case_types)]
 		pub enum #enum_name_ident {
@@ -247,7 +247,7 @@ fn expand_enum_conversion(
 		impl TryInto<#pallet_enum> for #enum_name_ident {
 			type Error = ();
 
-			fn try_into(self) -> #scrate::sp_std::result::Result<#pallet_enum, Self::Error> {
+			fn try_into(self) -> #scrate::__private::sp_std::result::Result<#pallet_enum, Self::Error> {
 				match self {
 					Self::#variant_name(evt) => Ok(evt),
 					_ => Err(()),
@@ -273,8 +273,8 @@ fn generate_error_impl(scrate: &TokenStream, enum_ty: OuterEnumType) -> TokenStr
 			pub fn from_dispatch_error(err: #scrate::sp_runtime::DispatchError) -> Option<Self> {
 				let #scrate::sp_runtime::DispatchError::Module(module_error) = err else { return None };
 
-				let bytes = #scrate::codec::Encode::encode(&module_error);
-				#scrate::codec::Decode::decode(&mut &bytes[..]).ok()
+				let bytes = #scrate::__private::codec::Encode::encode(&module_error);
+				#scrate::__private::codec::Decode::decode(&mut &bytes[..]).ok()
 			}
 		}
 	}
diff --git a/substrate/frame/support/procedural/src/construct_runtime/expand/slash_reason.rs b/substrate/frame/support/procedural/src/construct_runtime/expand/slash_reason.rs
index abffb97d439..2a3283230ad 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/expand/slash_reason.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/expand/slash_reason.rs
@@ -38,9 +38,9 @@ pub fn expand_outer_slash_reason(pallet_decls: &[Pallet], scrate: &TokenStream)
 		/// A reason for slashing funds.
 		#[derive(
 			Copy, Clone, Eq, PartialEq, Ord, PartialOrd,
-			#scrate::codec::Encode, #scrate::codec::Decode, #scrate::codec::MaxEncodedLen,
-			#scrate::scale_info::TypeInfo,
-			#scrate::RuntimeDebug,
+			#scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen,
+			#scrate::__private::scale_info::TypeInfo,
+			#scrate::__private::RuntimeDebug,
 		)]
 		pub enum RuntimeSlashReason {
 			#( #slash_reason_variants )*
diff --git a/substrate/frame/support/procedural/src/construct_runtime/mod.rs b/substrate/frame/support/procedural/src/construct_runtime/mod.rs
index efc22441544..f42dd837e3a 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/mod.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/mod.rs
@@ -94,11 +94,11 @@
 //! ```
 //! This call has some implicit pallet parts, thus it will expand to:
 //! ```ignore
-//! frame_support::tt_call! {
+//! frame_support::__private::tt_call! {
 //! 	macro = [{ pallet_balances::tt_default_parts }]
 //! 	~~> frame_support::match_and_insert! {
 //! 		target = [{
-//! 			frame_support::tt_call! {
+//! 			frame_support::__private::tt_call! {
 //! 				macro = [{ frame_system::tt_default_parts }]
 //! 				~~> frame_support::match_and_insert! {
 //! 					target = [{
@@ -280,7 +280,7 @@ fn construct_runtime_implicit_to_explicit(
 		let pallet_name = &pallet.name;
 		let pallet_instance = pallet.instance.as_ref().map(|instance| quote::quote!(::<#instance>));
 		expansion = quote::quote!(
-			#frame_support::tt_call! {
+			#frame_support::__private::tt_call! {
 				macro = [{ #pallet_path::tt_default_parts }]
 				frame_support = [{ #frame_support }]
 				~~> #frame_support::match_and_insert! {
@@ -316,7 +316,7 @@ fn construct_runtime_explicit_to_explicit_expanded(
 		let pallet_name = &pallet.name;
 		let pallet_instance = pallet.instance.as_ref().map(|instance| quote::quote!(::<#instance>));
 		expansion = quote::quote!(
-			#frame_support::tt_call! {
+			#frame_support::__private::tt_call! {
 				macro = [{ #pallet_path::tt_extra_parts }]
 				frame_support = [{ #frame_support }]
 				~~> #frame_support::match_and_insert! {
@@ -428,7 +428,7 @@ fn construct_runtime_final_expansion(
 
 		#[derive(
 			Clone, Copy, PartialEq, Eq, #scrate::sp_runtime::RuntimeDebug,
-			#scrate::scale_info::TypeInfo
+			#scrate::__private::scale_info::TypeInfo
 		)]
 		pub struct #name;
 		impl #scrate::sp_runtime::traits::GetRuntimeBlockType for #name {
@@ -453,7 +453,7 @@ fn construct_runtime_final_expansion(
 		#[doc(hidden)]
 		trait InternalConstructRuntime {
 			#[inline(always)]
-			fn runtime_metadata(&self) -> #scrate::sp_std::vec::Vec<#scrate::metadata_ir::RuntimeApiMetadataIR> {
+			fn runtime_metadata(&self) -> #scrate::__private::sp_std::vec::Vec<#scrate::__private::metadata_ir::RuntimeApiMetadataIR> {
 				Default::default()
 			}
 		}
@@ -700,10 +700,10 @@ fn decl_pallet_runtime_setup(
 
 		impl #scrate::traits::PalletInfo for PalletInfo {
 			fn index<P: 'static>() -> Option<usize> {
-				let type_id = #scrate::sp_std::any::TypeId::of::<P>();
+				let type_id = #scrate::__private::sp_std::any::TypeId::of::<P>();
 				#(
 					#pallet_attrs
-					if type_id == #scrate::sp_std::any::TypeId::of::<#names>() {
+					if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() {
 						return Some(#indices)
 					}
 				)*
@@ -712,10 +712,10 @@ fn decl_pallet_runtime_setup(
 			}
 
 			fn name<P: 'static>() -> Option<&'static str> {
-				let type_id = #scrate::sp_std::any::TypeId::of::<P>();
+				let type_id = #scrate::__private::sp_std::any::TypeId::of::<P>();
 				#(
 					#pallet_attrs
-					if type_id == #scrate::sp_std::any::TypeId::of::<#names>() {
+					if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() {
 						return Some(#name_strings)
 					}
 				)*
@@ -724,10 +724,10 @@ fn decl_pallet_runtime_setup(
 			}
 
 			fn module_name<P: 'static>() -> Option<&'static str> {
-				let type_id = #scrate::sp_std::any::TypeId::of::<P>();
+				let type_id = #scrate::__private::sp_std::any::TypeId::of::<P>();
 				#(
 					#pallet_attrs
-					if type_id == #scrate::sp_std::any::TypeId::of::<#names>() {
+					if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() {
 						return Some(#module_names)
 					}
 				)*
@@ -736,10 +736,10 @@ fn decl_pallet_runtime_setup(
 			}
 
 			fn crate_version<P: 'static>() -> Option<#scrate::traits::CrateVersion> {
-				let type_id = #scrate::sp_std::any::TypeId::of::<P>();
+				let type_id = #scrate::__private::sp_std::any::TypeId::of::<P>();
 				#(
 					#pallet_attrs
-					if type_id == #scrate::sp_std::any::TypeId::of::<#names>() {
+					if type_id == #scrate::__private::sp_std::any::TypeId::of::<#names>() {
 						return Some(
 							<#pallet_structs as #scrate::traits::PalletInfoAccess>::crate_version()
 						)
@@ -760,7 +760,7 @@ fn decl_integrity_test(scrate: &TokenStream2) -> TokenStream2 {
 
 			#[test]
 			pub fn runtime_integrity_tests() {
-				#scrate::sp_tracing::try_init_simple();
+				#scrate::__private::sp_tracing::try_init_simple();
 				<AllPalletsWithSystem as #scrate::traits::IntegrityTest>::integrity_test();
 			}
 		}
@@ -781,7 +781,7 @@ fn decl_static_assertions(
 		);
 
 		quote! {
-			#scrate::tt_call! {
+			#scrate::__private::tt_call! {
 				macro = [{ #path::tt_error_token }]
 				frame_support = [{ #scrate }]
 				~~> #scrate::assert_error_encoded_size! {
diff --git a/substrate/frame/support/procedural/src/pallet/expand/call.rs b/substrate/frame/support/procedural/src/pallet/expand/call.rs
index aa6a8e09f52..6489949ed5c 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/call.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/call.rs
@@ -275,9 +275,9 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
 			#frame_support::CloneNoBound,
 			#frame_support::EqNoBound,
 			#frame_support::PartialEqNoBound,
-			#frame_support::codec::Encode,
-			#frame_support::codec::Decode,
-			#frame_support::scale_info::TypeInfo,
+			#frame_support::__private::codec::Encode,
+			#frame_support::__private::codec::Decode,
+			#frame_support::__private::scale_info::TypeInfo,
 		)]
 		#[codec(encode_bound())]
 		#[codec(decode_bound())]
@@ -287,7 +287,7 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
 			#[doc(hidden)]
 			#[codec(skip)]
 			__Ignore(
-				#frame_support::sp_std::marker::PhantomData<(#type_use_gen,)>,
+				#frame_support::__private::sp_std::marker::PhantomData<(#type_use_gen,)>,
 				#frame_support::Never,
 			),
 			#(
@@ -394,8 +394,8 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
 					match self {
 						#(
 							Self::#fn_name { #( #args_name_pattern, )* } => {
-								#frame_support::sp_tracing::enter_span!(
-									#frame_support::sp_tracing::trace_span!(stringify!(#fn_name))
+								#frame_support::__private::sp_tracing::enter_span!(
+									#frame_support::__private::sp_tracing::trace_span!(stringify!(#fn_name))
 								);
 								#maybe_allow_attrs
 								<#pallet_ident<#type_use_gen>>::#fn_name(origin, #( #args_name, )* )
@@ -419,8 +419,8 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
 
 		impl<#type_impl_gen> #pallet_ident<#type_use_gen> #where_clause {
 			#[doc(hidden)]
-			pub fn call_functions() -> #frame_support::metadata_ir::PalletCallMetadataIR {
-				#frame_support::scale_info::meta_type::<#call_ident<#type_use_gen>>().into()
+			pub fn call_functions() -> #frame_support::__private::metadata_ir::PalletCallMetadataIR {
+				#frame_support::__private::scale_info::meta_type::<#call_ident<#type_use_gen>>().into()
 			}
 		}
 	)
diff --git a/substrate/frame/support/procedural/src/pallet/expand/constants.rs b/substrate/frame/support/procedural/src/pallet/expand/constants.rs
index 6e1cd3df627..57fa8b7f3cd 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/constants.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/constants.rs
@@ -54,7 +54,7 @@ pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream {
 			default_byte_impl: quote::quote!(
 				let value = <<T as Config #trait_use_gen>::#ident as
 					#frame_support::traits::Get<#const_type>>::get();
-				#frame_support::codec::Encode::encode(&value)
+				#frame_support::__private::codec::Encode::encode(&value)
 			),
 			metadata_name: None,
 		}
@@ -69,7 +69,7 @@ pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream {
 			doc: const_.doc.clone(),
 			default_byte_impl: quote::quote!(
 				let value = <Pallet<#type_use_gen>>::#ident();
-				#frame_support::codec::Encode::encode(&value)
+				#frame_support::__private::codec::Encode::encode(&value)
 			),
 			metadata_name: const_.metadata_name.clone(),
 		}
@@ -85,11 +85,11 @@ pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream {
 		let default_byte_impl = &const_.default_byte_impl;
 
 		quote::quote!({
-			#frame_support::metadata_ir::PalletConstantMetadataIR {
+			#frame_support::__private::metadata_ir::PalletConstantMetadataIR {
 				name: #ident_str,
-				ty: #frame_support::scale_info::meta_type::<#const_type>(),
+				ty: #frame_support::__private::scale_info::meta_type::<#const_type>(),
 				value: { #default_byte_impl },
-				docs: #frame_support::sp_std::vec![ #( #doc ),* ],
+				docs: #frame_support::__private::sp_std::vec![ #( #doc ),* ],
 			}
 		})
 	});
@@ -99,9 +99,9 @@ pub fn expand_constants(def: &mut Def) -> proc_macro2::TokenStream {
 
 			#[doc(hidden)]
 			pub fn pallet_constants_metadata()
-				-> #frame_support::sp_std::vec::Vec<#frame_support::metadata_ir::PalletConstantMetadataIR>
+				-> #frame_support::__private::sp_std::vec::Vec<#frame_support::__private::metadata_ir::PalletConstantMetadataIR>
 			{
-				#frame_support::sp_std::vec![ #( #consts ),* ]
+				#frame_support::__private::sp_std::vec![ #( #consts ),* ]
 			}
 		}
 	)
diff --git a/substrate/frame/support/procedural/src/pallet/expand/documentation.rs b/substrate/frame/support/procedural/src/pallet/expand/documentation.rs
index 4e6347e83bb..ec19f889a9f 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/documentation.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/documentation.rs
@@ -163,9 +163,9 @@ pub fn expand_documentation(def: &mut Def) -> proc_macro2::TokenStream {
 
 			#[doc(hidden)]
 			pub fn pallet_documentation_metadata()
-				-> #frame_support::sp_std::vec::Vec<&'static str>
+				-> #frame_support::__private::sp_std::vec::Vec<&'static str>
 			{
-				#frame_support::sp_std::vec![ #( #docs ),* ]
+				#frame_support::__private::sp_std::vec![ #( #docs ),* ]
 			}
 		}
 	)
diff --git a/substrate/frame/support/procedural/src/pallet/expand/error.rs b/substrate/frame/support/procedural/src/pallet/expand/error.rs
index 376a6a9f51c..d3aa0b762bc 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/error.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/error.rs
@@ -44,7 +44,7 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
 					$caller:tt
 					frame_support = [{ $($frame_support:ident)::* }]
 				} => {
-					$($frame_support::)*tt_return! {
+					$($frame_support::)*__private::tt_return! {
 						$caller
 					}
 				};
@@ -62,7 +62,7 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
 		#[doc(hidden)]
 		#[codec(skip)]
 		__Ignore(
-			#frame_support::sp_std::marker::PhantomData<(#type_use_gen)>,
+			#frame_support::__private::sp_std::marker::PhantomData<(#type_use_gen)>,
 			#frame_support::Never,
 		)
 	);
@@ -98,9 +98,9 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
 	// derive TypeInfo for error metadata
 	error_item.attrs.push(syn::parse_quote! {
 		#[derive(
-			#frame_support::codec::Encode,
-			#frame_support::codec::Decode,
-			#frame_support::scale_info::TypeInfo,
+			#frame_support::__private::codec::Encode,
+			#frame_support::__private::codec::Decode,
+			#frame_support::__private::scale_info::TypeInfo,
 			#frame_support::PalletError,
 		)]
 	});
@@ -115,11 +115,11 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
 	}
 
 	quote::quote_spanned!(error.attr_span =>
-		impl<#type_impl_gen> #frame_support::sp_std::fmt::Debug for #error_ident<#type_use_gen>
+		impl<#type_impl_gen> #frame_support::__private::sp_std::fmt::Debug for #error_ident<#type_use_gen>
 			#config_where_clause
 		{
-			fn fmt(&self, f: &mut #frame_support::sp_std::fmt::Formatter<'_>)
-				-> #frame_support::sp_std::fmt::Result
+			fn fmt(&self, f: &mut #frame_support::__private::sp_std::fmt::Formatter<'_>)
+				-> #frame_support::__private::sp_std::fmt::Result
 			{
 				f.write_str(self.as_str())
 			}
@@ -148,7 +148,7 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
 			#config_where_clause
 		{
 			fn from(err: #error_ident<#type_use_gen>) -> Self {
-				use #frame_support::codec::Encode;
+				use #frame_support::__private::codec::Encode;
 				let index = <
 					<T as #frame_system::Config>::PalletInfo
 					as #frame_support::traits::PalletInfo
@@ -172,7 +172,7 @@ pub fn expand_error(def: &mut Def) -> proc_macro2::TokenStream {
 				$caller:tt
 				frame_support = [{ $($frame_support:ident)::* }]
 			} => {
-				$($frame_support::)*tt_return! {
+				$($frame_support::)*__private::tt_return! {
 					$caller
 					error = [{ #error_ident }]
 				}
diff --git a/substrate/frame/support/procedural/src/pallet/expand/event.rs b/substrate/frame/support/procedural/src/pallet/expand/event.rs
index f94bdef332d..fbb699b4d41 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/event.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/event.rs
@@ -87,7 +87,7 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {
 			#[doc(hidden)]
 			#[codec(skip)]
 			__Ignore(
-				#frame_support::sp_std::marker::PhantomData<(#event_use_gen)>,
+				#frame_support::__private::sp_std::marker::PhantomData<(#event_use_gen)>,
 				#frame_support::Never,
 			)
 		);
@@ -109,9 +109,9 @@ pub fn expand_event(def: &mut Def) -> proc_macro2::TokenStream {
 			#frame_support::EqNoBound,
 			#frame_support::PartialEqNoBound,
 			#frame_support::RuntimeDebugNoBound,
-			#frame_support::codec::Encode,
-			#frame_support::codec::Decode,
-			#frame_support::scale_info::TypeInfo,
+			#frame_support::__private::codec::Encode,
+			#frame_support::__private::codec::Decode,
+			#frame_support::__private::scale_info::TypeInfo,
 		)]
 	));
 
diff --git a/substrate/frame/support/procedural/src/pallet/expand/genesis_build.rs b/substrate/frame/support/procedural/src/pallet/expand/genesis_build.rs
index f54d308fce3..15ddfcf1d49 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/genesis_build.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/genesis_build.rs
@@ -39,7 +39,7 @@ pub fn expand_genesis_build(def: &mut Def) -> proc_macro2::TokenStream {
 			impl<#type_impl_gen> #frame_support::sp_runtime::BuildStorage for #gen_cfg_ident<#gen_cfg_use_gen> #where_clause
 			{
 				fn assimilate_storage(&self, storage: &mut sp_runtime::Storage) -> std::result::Result<(), std::string::String> {
-					#frame_support::BasicExternalities::execute_with_storage(storage, || {
+					#frame_support::__private::BasicExternalities::execute_with_storage(storage, || {
 						self.build();
 						Ok(())
 					})
diff --git a/substrate/frame/support/procedural/src/pallet/expand/genesis_config.rs b/substrate/frame/support/procedural/src/pallet/expand/genesis_config.rs
index cbe47bd8505..b00f9bcd1a6 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/genesis_config.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/genesis_config.rs
@@ -79,7 +79,7 @@ pub fn expand_genesis_config(def: &mut Def) -> proc_macro2::TokenStream {
 	let genesis_config_item =
 		&mut def.item.content.as_mut().expect("Checked by def parser").1[genesis_config.index];
 
-	let serde_crate = format!("{}::serde", frame_support);
+	let serde_crate = format!("{}::__private::serde", frame_support);
 
 	match genesis_config_item {
 		syn::Item::Enum(syn::ItemEnum { attrs, .. }) |
diff --git a/substrate/frame/support/procedural/src/pallet/expand/hooks.rs b/substrate/frame/support/procedural/src/pallet/expand/hooks.rs
index d2d2b2967fa..2825756f270 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/hooks.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/hooks.rs
@@ -38,7 +38,7 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 	let log_runtime_upgrade = if has_runtime_upgrade {
 		// a migration is defined here.
 		quote::quote! {
-			#frame_support::log::info!(
+			#frame_support::__private::log::info!(
 				target: #frame_support::LOG_TARGET,
 				"⚠️ {} declares internal migrations (which *might* execute). \
 				 On-chain `{:?}` vs current storage version `{:?}`",
@@ -50,7 +50,7 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 	} else {
 		// default.
 		quote::quote! {
-			#frame_support::log::debug!(
+			#frame_support::__private::log::debug!(
 				target: #frame_support::LOG_TARGET,
 				"✅ no migration for {}",
 				pallet_name,
@@ -64,7 +64,7 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			as
 			#frame_support::traits::PalletInfo
 		>::name::<Self>().expect("No name found for the pallet! This usually means that the pallet wasn't added to `construct_runtime!`.");
-		#frame_support::log::debug!(
+		#frame_support::__private::log::debug!(
 			target: #frame_support::LOG_TARGET,
 			"🩺 try-state pallet {:?}",
 			pallet_name,
@@ -97,7 +97,7 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 					#frame_support::traits::PalletInfo
 				>::name::<Self>().unwrap_or("<unknown pallet name>");
 
-				#frame_support::log::error!(
+				#frame_support::__private::log::error!(
 					target: #frame_support::LOG_TARGET,
 					"{}: On chain storage version {:?} doesn't match current storage version {:?}.",
 					pallet_name,
@@ -119,7 +119,7 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 					#frame_support::traits::PalletInfo
 				>::name::<Self>().unwrap_or("<unknown pallet name>");
 
-				#frame_support::log::error!(
+				#frame_support::__private::log::error!(
 					target: #frame_support::LOG_TARGET,
 					"{}: On chain storage version {:?} is set to non zero, \
 					 while the pallet is missing the `#[pallet::storage_version(VERSION)]` attribute.",
@@ -141,8 +141,8 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			for #pallet_ident<#type_use_gen> #where_clause
 		{
 			fn on_finalize(n: #frame_system::pallet_prelude::BlockNumberFor::<T>) {
-				#frame_support::sp_tracing::enter_span!(
-					#frame_support::sp_tracing::trace_span!("on_finalize")
+				#frame_support::__private::sp_tracing::enter_span!(
+					#frame_support::__private::sp_tracing::trace_span!("on_finalize")
 				);
 				<
 					Self as #frame_support::traits::Hooks<
@@ -175,8 +175,8 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			fn on_initialize(
 				n: #frame_system::pallet_prelude::BlockNumberFor::<T>
 			) -> #frame_support::weights::Weight {
-				#frame_support::sp_tracing::enter_span!(
-					#frame_support::sp_tracing::trace_span!("on_initialize")
+				#frame_support::__private::sp_tracing::enter_span!(
+					#frame_support::__private::sp_tracing::trace_span!("on_initialize")
 				);
 				<
 					Self as #frame_support::traits::Hooks<
@@ -191,8 +191,8 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			for #pallet_ident<#type_use_gen> #where_clause
 		{
 			fn on_runtime_upgrade() -> #frame_support::weights::Weight {
-				#frame_support::sp_tracing::enter_span!(
-					#frame_support::sp_tracing::trace_span!("on_runtime_update")
+				#frame_support::__private::sp_tracing::enter_span!(
+					#frame_support::__private::sp_tracing::trace_span!("on_runtime_update")
 				);
 
 				// log info about the upgrade.
@@ -211,7 +211,7 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			}
 
 			#[cfg(feature = "try-runtime")]
-			fn pre_upgrade() -> Result<#frame_support::sp_std::vec::Vec<u8>, #frame_support::sp_runtime::TryRuntimeError> {
+			fn pre_upgrade() -> Result<#frame_support::__private::sp_std::vec::Vec<u8>, #frame_support::sp_runtime::TryRuntimeError> {
 				<
 					Self
 					as
@@ -220,7 +220,7 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			}
 
 			#[cfg(feature = "try-runtime")]
-			fn post_upgrade(state: #frame_support::sp_std::vec::Vec<u8>) -> Result<(), #frame_support::sp_runtime::TryRuntimeError> {
+			fn post_upgrade(state: #frame_support::__private::sp_std::vec::Vec<u8>) -> Result<(), #frame_support::sp_runtime::TryRuntimeError> {
 				#post_storage_version_check
 
 				<
@@ -251,7 +251,7 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			for #pallet_ident<#type_use_gen> #where_clause
 			{
 				fn integrity_test() {
-					#frame_support::sp_io::TestExternalities::default().execute_with(|| {
+					#frame_support::__private::sp_io::TestExternalities::default().execute_with(|| {
 						<
 							Self as #frame_support::traits::Hooks<
 								#frame_system::pallet_prelude::BlockNumberFor::<T>
diff --git a/substrate/frame/support/procedural/src/pallet/expand/pallet_struct.rs b/substrate/frame/support/procedural/src/pallet/expand/pallet_struct.rs
index 800e23388c1..e519e34d1df 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/pallet_struct.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/pallet_struct.rs
@@ -54,7 +54,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
 	if let Some(field) = pallet_item.fields.iter_mut().next() {
 		if field.ty == syn::parse_quote!(_) {
 			field.ty = syn::parse_quote!(
-				#frame_support::sp_std::marker::PhantomData<(#type_use_gen)>
+				#frame_support::__private::sp_std::marker::PhantomData<(#type_use_gen)>
 			);
 		}
 	}
@@ -82,9 +82,9 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
 		quote::quote_spanned!(def.pallet_struct.attr_span =>
 			impl<#type_impl_gen> #pallet_ident<#type_use_gen> #config_where_clause {
 				#[doc(hidden)]
-				pub fn error_metadata() -> Option<#frame_support::metadata_ir::PalletErrorMetadataIR> {
-					Some(#frame_support::metadata_ir::PalletErrorMetadataIR {
-						ty: #frame_support::scale_info::meta_type::<#error_ident<#type_use_gen>>()
+				pub fn error_metadata() -> Option<#frame_support::__private::metadata_ir::PalletErrorMetadataIR> {
+					Some(#frame_support::__private::metadata_ir::PalletErrorMetadataIR {
+						ty: #frame_support::__private::scale_info::meta_type::<#error_ident<#type_use_gen>>()
 					})
 				}
 			}
@@ -93,7 +93,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
 		quote::quote_spanned!(def.pallet_struct.attr_span =>
 			impl<#type_impl_gen> #pallet_ident<#type_use_gen> #config_where_clause {
 				#[doc(hidden)]
-				pub fn error_metadata() -> Option<#frame_support::metadata_ir::PalletErrorMetadataIR> {
+				pub fn error_metadata() -> Option<#frame_support::__private::metadata_ir::PalletErrorMetadataIR> {
 					None
 				}
 			}
@@ -139,10 +139,10 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
 			#storages_where_clauses
 		{
 			fn storage_info()
-				-> #frame_support::sp_std::vec::Vec<#frame_support::traits::StorageInfo>
+				-> #frame_support::__private::sp_std::vec::Vec<#frame_support::traits::StorageInfo>
 			{
 				#[allow(unused_mut)]
-				let mut res = #frame_support::sp_std::vec![];
+				let mut res = #frame_support::__private::sp_std::vec![];
 
 				#(
 					#(#storage_cfg_attrs)*
@@ -179,8 +179,8 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
 	let whitelisted_storage_keys_impl = quote::quote![
 		use #frame_support::traits::{StorageInfoTrait, TrackedStorageKey, WhitelistedStorageKeys};
 		impl<#type_impl_gen> WhitelistedStorageKeys for #pallet_ident<#type_use_gen> #storages_where_clauses {
-			fn whitelisted_storage_keys() -> #frame_support::sp_std::vec::Vec<TrackedStorageKey> {
-				use #frame_support::sp_std::vec;
+			fn whitelisted_storage_keys() -> #frame_support::__private::sp_std::vec::Vec<TrackedStorageKey> {
+				use #frame_support::__private::sp_std::vec;
 				vec![#(
 					TrackedStorageKey::new(#whitelisted_storage_idents::<#type_use_gen>::hashed_key().to_vec())
 				),*]
@@ -264,7 +264,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
 			#config_where_clause
 		{
 			fn count() -> usize { 1 }
-			fn infos() -> #frame_support::sp_std::vec::Vec<#frame_support::traits::PalletInfoData> {
+			fn infos() -> #frame_support::__private::sp_std::vec::Vec<#frame_support::traits::PalletInfoData> {
 				use #frame_support::traits::PalletInfoAccess;
 				let item = #frame_support::traits::PalletInfoData {
 					index: Self::index(),
@@ -272,7 +272,7 @@ pub fn expand_pallet_struct(def: &mut Def) -> proc_macro2::TokenStream {
 					module_name: Self::module_name(),
 					crate_version: Self::crate_version(),
 				};
-				#frame_support::sp_std::vec![item]
+				#frame_support::__private::sp_std::vec![item]
 			}
 		}
 
diff --git a/substrate/frame/support/procedural/src/pallet/expand/storage.rs b/substrate/frame/support/procedural/src/pallet/expand/storage.rs
index f3c394d731f..1a941f6cb3f 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/storage.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/storage.rs
@@ -421,7 +421,7 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream {
 			#(#cfg_attrs)*
 			{
 				<#full_ident as #frame_support::storage::StorageEntryMetadataBuilder>::build_metadata(
-					#frame_support::sp_std::vec![
+					#frame_support::__private::sp_std::vec![
 						#( #docs, )*
 					],
 					&mut entries,
@@ -492,7 +492,7 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream {
 						impl<#type_impl_gen> #pallet_ident<#type_use_gen> #completed_where_clause {
 							#[doc = #getter_doc_line]
 							pub fn #getter<KArg>(k: KArg) -> #query where
-								KArg: #frame_support::codec::EncodeLike<#key>,
+								KArg: #frame_support::__private::codec::EncodeLike<#key>,
 							{
 								<
 									#full_ident as #frame_support::storage::StorageMap<#key, #value>
@@ -518,7 +518,7 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream {
 						impl<#type_impl_gen> #pallet_ident<#type_use_gen> #completed_where_clause {
 							#[doc = #getter_doc_line]
 							pub fn #getter<KArg>(k: KArg) -> #query where
-								KArg: #frame_support::codec::EncodeLike<#key>,
+								KArg: #frame_support::__private::codec::EncodeLike<#key>,
 							{
 								// NOTE: we can't use any trait here because CountedStorageMap
 								// doesn't implement any.
@@ -544,8 +544,8 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream {
 						impl<#type_impl_gen> #pallet_ident<#type_use_gen> #completed_where_clause {
 							#[doc = #getter_doc_line]
 							pub fn #getter<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> #query where
-								KArg1: #frame_support::codec::EncodeLike<#key1>,
-								KArg2: #frame_support::codec::EncodeLike<#key2>,
+								KArg1: #frame_support::__private::codec::EncodeLike<#key1>,
+								KArg2: #frame_support::__private::codec::EncodeLike<#key2>,
 							{
 								<
 									#full_ident as
@@ -791,8 +791,8 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream {
 			#completed_where_clause
 		{
 			#[doc(hidden)]
-			pub fn storage_metadata() -> #frame_support::metadata_ir::PalletStorageMetadataIR {
-				#frame_support::metadata_ir::PalletStorageMetadataIR {
+			pub fn storage_metadata() -> #frame_support::__private::metadata_ir::PalletStorageMetadataIR {
+				#frame_support::__private::metadata_ir::PalletStorageMetadataIR {
 					prefix: <
 						<T as #frame_system::Config>::PalletInfo as
 						#frame_support::traits::PalletInfo
@@ -800,7 +800,7 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream {
 						.expect("No name found for the pallet in the runtime! This usually means that the pallet wasn't added to `construct_runtime!`."),
 					entries: {
 						#[allow(unused_mut)]
-						let mut entries = #frame_support::sp_std::vec![];
+						let mut entries = #frame_support::__private::sp_std::vec![];
 						#( #entries_builder )*
 						entries
 					},
diff --git a/substrate/frame/support/procedural/src/pallet/expand/tt_default_parts.rs b/substrate/frame/support/procedural/src/pallet/expand/tt_default_parts.rs
index 356bdbf67e9..86db56c776d 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/tt_default_parts.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/tt_default_parts.rs
@@ -96,7 +96,7 @@ pub fn expand_tt_default_parts(def: &mut Def) -> proc_macro2::TokenStream {
 				$caller:tt
 				frame_support = [{ $($frame_support:ident)::* }]
 			} => {
-				$($frame_support)*::tt_return! {
+				$($frame_support)*::__private::tt_return! {
 					$caller
 					tokens = [{
 						expanded::{
@@ -126,7 +126,7 @@ pub fn expand_tt_default_parts(def: &mut Def) -> proc_macro2::TokenStream {
 				$caller:tt
 				frame_support = [{ $($frame_support:ident)::* }]
 			} => {
-				$($frame_support)*::tt_return! {
+				$($frame_support)*::__private::tt_return! {
 					$caller
 					tokens = [{
 						expanded::{
diff --git a/substrate/frame/support/procedural/src/pallet/parse/composite.rs b/substrate/frame/support/procedural/src/pallet/parse/composite.rs
index 2bbfcd2e998..cb554a11617 100644
--- a/substrate/frame/support/procedural/src/pallet/parse/composite.rs
+++ b/substrate/frame/support/procedural/src/pallet/parse/composite.rs
@@ -120,9 +120,9 @@ impl CompositeDef {
 			let derive_attr: syn::Attribute = syn::parse_quote! {
 				#[derive(
 					Copy, Clone, Eq, PartialEq, Ord, PartialOrd,
-					#scrate::codec::Encode, #scrate::codec::Decode, #scrate::codec::MaxEncodedLen,
-					#scrate::scale_info::TypeInfo,
-					#scrate::RuntimeDebug,
+					#scrate::__private::codec::Encode, #scrate::__private::codec::Decode, #scrate::__private::codec::MaxEncodedLen,
+					#scrate::__private::scale_info::TypeInfo,
+					#scrate::__private::RuntimeDebug,
 				)]
 			};
 			item.attrs.push(derive_attr);
diff --git a/substrate/frame/support/procedural/src/pallet_error.rs b/substrate/frame/support/procedural/src/pallet_error.rs
index 246a5bd4a21..7fd02240a62 100644
--- a/substrate/frame/support/procedural/src/pallet_error.rs
+++ b/substrate/frame/support/procedural/src/pallet_error.rs
@@ -124,7 +124,7 @@ fn generate_field_types(
 					res = Some(None);
 				} else if meta.path.is_ident("compact") {
 					let field_ty = &field.ty;
-					res = Some(Some(quote::quote!(#scrate::codec::Compact<#field_ty>)));
+					res = Some(Some(quote::quote!(#scrate::__private::codec::Compact<#field_ty>)));
 				} else if meta.path.is_ident("compact") {
 					res = Some(Some(meta.value()?.parse()?));
 				}
diff --git a/substrate/frame/support/procedural/src/storage_alias.rs b/substrate/frame/support/procedural/src/storage_alias.rs
index d1d1aba4799..a3f21806e18 100644
--- a/substrate/frame/support/procedural/src/storage_alias.rs
+++ b/substrate/frame/support/procedural/src/storage_alias.rs
@@ -622,7 +622,7 @@ fn generate_storage_instance(
 
 		quote! {
 			#visibility struct #counter_name< #impl_generics >(
-				#crate_::sp_std::marker::PhantomData<(#type_generics)>
+				#crate_::__private::sp_std::marker::PhantomData<(#type_generics)>
 			) #where_clause;
 
 			impl<#impl_generics> #crate_::traits::StorageInstance
@@ -647,7 +647,7 @@ fn generate_storage_instance(
 	let code = quote! {
 		#[allow(non_camel_case_types)]
 		#visibility struct #name< #impl_generics >(
-			#crate_::sp_std::marker::PhantomData<(#type_generics)>
+			#crate_::__private::sp_std::marker::PhantomData<(#type_generics)>
 		) #where_clause;
 
 		impl<#impl_generics> #crate_::traits::StorageInstance
diff --git a/substrate/frame/support/procedural/src/tt_macro.rs b/substrate/frame/support/procedural/src/tt_macro.rs
index 69b5eb3d552..01611f5dc4a 100644
--- a/substrate/frame/support/procedural/src/tt_macro.rs
+++ b/substrate/frame/support/procedural/src/tt_macro.rs
@@ -49,9 +49,9 @@ impl syn::parse::Parse for CreateTtReturnMacroDef {
 }
 
 /// A proc macro that accepts a name and any number of key-value pairs, to be used to create a
-/// declarative macro that follows tt-call conventions and simply calls [`tt_call::tt_return`],
-/// accepting an optional `frame-support` argument and returning the key-value pairs that were
-/// supplied to the proc macro.
+/// declarative macro that follows tt-call conventions and simply calls
+/// [`tt_call::tt_return`], accepting an optional `frame-support` argument and returning
+/// the key-value pairs that were supplied to the proc macro.
 ///
 /// # Example
 /// ```ignore
@@ -67,7 +67,7 @@ impl syn::parse::Parse for CreateTtReturnMacroDef {
 ///         $caller:tt
 ///         $(frame_support = [{ $($frame_support:ident)::* }])?
 ///     } => {
-///         frame_support::tt_return! {
+///         frame_support::__private::tt_return! {
 ///             $caller
 ///             foo = [{ bar }]
 ///         }
@@ -94,7 +94,7 @@ pub fn create_tt_return_macro(input: proc_macro::TokenStream) -> proc_macro::Tok
 				$caller:tt
 				$(frame_support = [{ $($frame_support:ident)::* }])?
 			} => {
-				#frame_support::tt_return! {
+				#frame_support::__private::tt_return! {
 					$caller
 					#(
 						#keys = [{ #values }]
diff --git a/substrate/frame/support/src/dispatch.rs b/substrate/frame/support/src/dispatch.rs
index e462066a846..0388a9adb39 100644
--- a/substrate/frame/support/src/dispatch.rs
+++ b/substrate/frame/support/src/dispatch.rs
@@ -18,31 +18,30 @@
 //! Dispatch system. Contains a macro for defining runtime modules and
 //! generating values representing lazy module function calls.
 
-pub use crate::{
-	codec::{
-		Codec, Decode, Encode, EncodeAsRef, EncodeLike, HasCompact, Input, MaxEncodedLen, Output,
-	},
-	scale_info::TypeInfo,
-	sp_std::{
-		fmt, marker,
-		prelude::{Clone, Eq, PartialEq, Vec},
-		result,
-	},
-	traits::{
-		CallMetadata, GetCallIndex, GetCallMetadata, GetCallName, GetStorageVersion,
-		UnfilteredDispatchable,
-	},
+pub use crate::traits::{
+	CallMetadata, GetCallIndex, GetCallMetadata, GetCallName, GetStorageVersion,
+	UnfilteredDispatchable,
 };
+pub use codec::{
+	Codec, Decode, Encode, EncodeAsRef, EncodeLike, HasCompact, Input, MaxEncodedLen, Output,
+};
+pub use scale_info::TypeInfo;
+pub use sp_runtime::{
+	traits::Dispatchable, transaction_validity::TransactionPriority, DispatchError, RuntimeDebug,
+};
+pub use sp_std::{
+	fmt, marker,
+	prelude::{Clone, Eq, PartialEq, Vec},
+	result,
+};
+pub use sp_weights::Weight;
+
 #[cfg(feature = "std")]
 use serde::{Deserialize, Serialize};
 use sp_runtime::{
 	generic::{CheckedExtrinsic, UncheckedExtrinsic},
 	traits::SignedExtension,
 };
-pub use sp_runtime::{
-	traits::Dispatchable, transaction_validity::TransactionPriority, DispatchError, RuntimeDebug,
-};
-pub use sp_weights::Weight;
 
 /// The return type of a `Dispatchable` in frame. When returned explicitly from
 /// a dispatchable function it allows overriding the default `PostDispatchInfo`
diff --git a/substrate/frame/support/src/hash.rs b/substrate/frame/support/src/hash.rs
index 115ce605d54..9c48f4b187a 100644
--- a/substrate/frame/support/src/hash.rs
+++ b/substrate/frame/support/src/hash.rs
@@ -17,9 +17,9 @@
 
 //! Hash utilities.
 
-use crate::metadata_ir;
 use codec::{Codec, MaxEncodedLen};
 use sp_io::hashing::{blake2_128, blake2_256, twox_128, twox_256, twox_64};
+use sp_metadata_ir as metadata_ir;
 use sp_std::prelude::Vec;
 
 // This trait must be kept coherent with frame-support-procedural HasherKind usage
diff --git a/substrate/frame/support/src/lib.rs b/substrate/frame/support/src/lib.rs
index 0c416c73766..eee68233f3a 100644
--- a/substrate/frame/support/src/lib.rs
+++ b/substrate/frame/support/src/lib.rs
@@ -32,38 +32,30 @@
 /// Export ourself as `frame_support` to make tests happy.
 extern crate self as frame_support;
 
+/// Private exports that are being used by macros.
+///
+/// The exports are not stable and should not be relied on.
 #[doc(hidden)]
-pub use sp_tracing;
-
-#[doc(hidden)]
-pub use codec;
-#[doc(hidden)]
-pub use frame_metadata as metadata;
-#[doc(hidden)]
-pub use log;
-#[doc(hidden)]
-pub use paste;
-#[doc(hidden)]
-pub use scale_info;
-pub use serde;
-pub use sp_api::metadata_ir;
-pub use sp_core::{OpaqueMetadata, Void};
-#[doc(hidden)]
-pub use sp_core_hashing_proc_macro;
-#[doc(hidden)]
-pub use sp_io::{self, storage::root as storage_root};
-#[cfg(feature = "std")]
-#[doc(hidden)]
-pub use sp_runtime::{bounded_btree_map, bounded_vec};
-#[doc(hidden)]
-pub use sp_runtime::{RuntimeDebug, StateVersion};
-#[cfg(feature = "std")]
-#[doc(hidden)]
-pub use sp_state_machine::BasicExternalities;
-#[doc(hidden)]
-pub use sp_std;
-#[doc(hidden)]
-pub use tt_call::*;
+pub mod __private {
+	pub use codec;
+	pub use frame_metadata as metadata;
+	pub use log;
+	pub use paste;
+	pub use scale_info;
+	pub use serde;
+	pub use sp_core::{OpaqueMetadata, Void};
+	pub use sp_core_hashing_proc_macro;
+	pub use sp_io::{self, storage::root as storage_root};
+	pub use sp_metadata_ir as metadata_ir;
+	#[cfg(feature = "std")]
+	pub use sp_runtime::{bounded_btree_map, bounded_vec};
+	pub use sp_runtime::{RuntimeDebug, StateVersion};
+	#[cfg(feature = "std")]
+	pub use sp_state_machine::BasicExternalities;
+	pub use sp_std;
+	pub use sp_tracing;
+	pub use tt_call::*;
+}
 
 #[macro_use]
 pub mod dispatch;
@@ -255,7 +247,7 @@ macro_rules! parameter_types {
 	) => (
 		$( #[ $attr ] )*
 		$vis struct $name $(
-			< $($ty_params),* >( $($crate::sp_std::marker::PhantomData<$ty_params>),* )
+			< $($ty_params),* >( $($crate::__private::sp_std::marker::PhantomData<$ty_params>),* )
 		)?;
 		$crate::parameter_types!(IMPL_CONST $name , $type , $value $( $(, $ty_params)* )?);
 		$crate::parameter_types!( $( $rest )* );
@@ -267,7 +259,7 @@ macro_rules! parameter_types {
 	) => (
 		$( #[ $attr ] )*
 		$vis struct $name $(
-			< $($ty_params),* >( $($crate::sp_std::marker::PhantomData<$ty_params>),* )
+			< $($ty_params),* >( $($crate::__private::sp_std::marker::PhantomData<$ty_params>),* )
 		)?;
 		$crate::parameter_types!(IMPL $name, $type, $value $( $(, $ty_params)* )?);
 		$crate::parameter_types!( $( $rest )* );
@@ -279,7 +271,7 @@ macro_rules! parameter_types {
 	) => (
 		$( #[ $attr ] )*
 		$vis struct $name $(
-			< $($ty_params),* >( $($crate::sp_std::marker::PhantomData<$ty_params>),* )
+			< $($ty_params),* >( $($crate::__private::sp_std::marker::PhantomData<$ty_params>),* )
 		)?;
 		$crate::parameter_types!(IMPL_STORAGE $name, $type, $value $( $(, $ty_params)* )?);
 		$crate::parameter_types!( $( $rest )* );
@@ -332,7 +324,7 @@ macro_rules! parameter_types {
 		impl< $($ty_params),* > $name< $($ty_params),* > {
 			/// Returns the key for this parameter type.
 			pub fn key() -> [u8; 16] {
-				$crate::sp_core_hashing_proc_macro::twox_128!(b":", $name, b":")
+				$crate::__private::sp_core_hashing_proc_macro::twox_128!(b":", $name, b":")
 			}
 
 			/// Set the value of this parameter type in the storage.
@@ -397,7 +389,7 @@ macro_rules! parameter_types_impl_thread_local {
 		$crate::parameter_types_impl_thread_local!(
 			IMPL_THREAD_LOCAL $( $vis, $name, $type, $value, )*
 		);
-		$crate::paste::item! {
+		$crate::__private::paste::item! {
 			$crate::parameter_types!(
 				$(
 					$( #[ $attr ] )*
@@ -432,7 +424,7 @@ macro_rules! parameter_types_impl_thread_local {
 		}
 	};
 	(IMPL_THREAD_LOCAL $( $vis:vis, $name:ident, $type:ty, $value:expr, )* ) => {
-		$crate::paste::item! {
+		$crate::__private::paste::item! {
 			thread_local! {
 				$(
 					pub static [<$name:snake:upper>]: std::cell::RefCell<$type> =
@@ -462,7 +454,7 @@ macro_rules! ord_parameter_types {
 	(IMPL $name:ident , $type:ty , $value:expr) => {
 		impl $crate::traits::SortedMembers<$type> for $name {
 			fn contains(t: &$type) -> bool { &$value == t }
-			fn sorted_members() -> $crate::sp_std::prelude::Vec<$type> { vec![$value] }
+			fn sorted_members() -> $crate::__private::sp_std::prelude::Vec<$type> { vec![$value] }
 			fn count() -> usize { 1 }
 			#[cfg(feature = "runtime-benchmarks")]
 			fn add(_: &$type) {}
@@ -485,9 +477,9 @@ macro_rules! runtime_print {
 	($($arg:tt)+) => {
 		{
 			use core::fmt::Write;
-			let mut w = $crate::sp_std::Writer::default();
+			let mut w = $crate::__private::sp_std::Writer::default();
 			let _ = core::write!(&mut w, $($arg)+);
-			$crate::sp_io::misc::print_utf8(&w.inner())
+			$crate::__private::sp_io::misc::print_utf8(&w.inner())
 		}
 	}
 }
@@ -684,9 +676,13 @@ macro_rules! assert_noop {
 		$x:expr,
 		$y:expr $(,)?
 	) => {
-		let h = $crate::storage_root($crate::StateVersion::V1);
+		let h = $crate::__private::storage_root($crate::__private::StateVersion::V1);
 		$crate::assert_err!($x, $y);
-		assert_eq!(h, $crate::storage_root($crate::StateVersion::V1), "storage has been mutated");
+		assert_eq!(
+			h,
+			$crate::__private::storage_root($crate::__private::StateVersion::V1),
+			"storage has been mutated"
+		);
 	};
 }
 
@@ -699,9 +695,9 @@ macro_rules! assert_storage_noop {
 	(
 		$x:expr
 	) => {
-		let h = $crate::storage_root($crate::StateVersion::V1);
+		let h = $crate::__private::storage_root($crate::__private::StateVersion::V1);
 		$x;
-		assert_eq!(h, $crate::storage_root($crate::StateVersion::V1));
+		assert_eq!(h, $crate::__private::storage_root($crate::__private::StateVersion::V1));
 	};
 }
 
@@ -801,10 +797,10 @@ pub mod _private {
 pub mod testing_prelude {
 	pub use super::{
 		assert_err, assert_err_ignore_postinfo, assert_err_with_weight, assert_error_encoded_size,
-		assert_noop, assert_ok, assert_storage_noop, bounded_btree_map, bounded_vec,
-		parameter_types, traits::Get,
+		assert_noop, assert_ok, assert_storage_noop, parameter_types, traits::Get,
 	};
 	pub use sp_arithmetic::assert_eq_error_rate;
+	pub use sp_runtime::{bounded_btree_map, bounded_vec};
 }
 
 /// Prelude to be used alongside pallet macro, for ease of use.
@@ -830,7 +826,7 @@ pub mod pallet_prelude {
 			IsType, PalletInfoAccess, StorageInfoTrait, StorageVersion, TypedGet,
 		},
 		Blake2_128, Blake2_128Concat, Blake2_256, CloneNoBound, DebugNoBound, EqNoBound, Identity,
-		PartialEqNoBound, RuntimeDebug, RuntimeDebugNoBound, Twox128, Twox256, Twox64Concat,
+		PartialEqNoBound, RuntimeDebugNoBound, Twox128, Twox256, Twox64Concat,
 	};
 	pub use codec::{Decode, Encode, MaxEncodedLen};
 	pub use frame_support::pallet_macros::*;
@@ -844,7 +840,7 @@ pub mod pallet_prelude {
 			TransactionTag, TransactionValidity, TransactionValidityError, UnknownTransaction,
 			ValidTransaction,
 		},
-		MAX_MODULE_ERROR_ENCODED_SIZE,
+		RuntimeDebug, MAX_MODULE_ERROR_ENCODED_SIZE,
 	};
 	pub use sp_std::marker::PhantomData;
 	pub use sp_weights::Weight;
diff --git a/substrate/frame/support/src/storage/bounded_vec.rs b/substrate/frame/support/src/storage/bounded_vec.rs
index 59b716b3ae5..06c58915a94 100644
--- a/substrate/frame/support/src/storage/bounded_vec.rs
+++ b/substrate/frame/support/src/storage/bounded_vec.rs
@@ -35,8 +35,9 @@ impl<T, S: Get<u32>> StorageTryAppend<T> for BoundedVec<T, S> {
 #[cfg(test)]
 pub mod test {
 	use super::*;
-	use crate::{bounded_vec, traits::ConstU32, Twox128};
+	use crate::{traits::ConstU32, Twox128};
 	use sp_io::TestExternalities;
+	use sp_runtime::bounded_vec;
 
 	#[crate::storage_alias]
 	type Foo = StorageValue<Prefix, BoundedVec<u32, ConstU32<7>>>;
diff --git a/substrate/frame/support/src/storage/child.rs b/substrate/frame/support/src/storage/child.rs
index 76b9c554d65..e54002d18db 100644
--- a/substrate/frame/support/src/storage/child.rs
+++ b/substrate/frame/support/src/storage/child.rs
@@ -21,10 +21,10 @@
 // NOTE: could replace unhashed by having only one kind of storage (top trie being the child info
 // of null length parent storage key).
 
-pub use crate::sp_io::{KillStorageResult, MultiRemovalResults};
-use crate::sp_std::prelude::*;
 use codec::{Codec, Decode, Encode};
 pub use sp_core::storage::{ChildInfo, ChildType, StateVersion};
+pub use sp_io::{KillStorageResult, MultiRemovalResults};
+use sp_std::prelude::*;
 
 /// Return the value of the item in storage under `key`, or `None` if there is no explicit entry.
 pub fn get<T: Decode + Sized>(child_info: &ChildInfo, key: &[u8]) -> Option<T> {
diff --git a/substrate/frame/support/src/storage/storage_noop_guard.rs b/substrate/frame/support/src/storage/storage_noop_guard.rs
index f2fb60027ec..d00e6e18ecc 100644
--- a/substrate/frame/support/src/storage/storage_noop_guard.rs
+++ b/substrate/frame/support/src/storage/storage_noop_guard.rs
@@ -41,7 +41,7 @@ pub struct StorageNoopGuard(sp_std::vec::Vec<u8>);
 
 impl Default for StorageNoopGuard {
 	fn default() -> Self {
-		Self(frame_support::storage_root(frame_support::StateVersion::V1))
+		Self(sp_io::storage::root(sp_runtime::StateVersion::V1))
 	}
 }
 
@@ -52,7 +52,7 @@ impl Drop for StorageNoopGuard {
 			return
 		}
 		assert_eq!(
-			frame_support::storage_root(frame_support::StateVersion::V1),
+			sp_io::storage::root(sp_runtime::StateVersion::V1),
 			self.0,
 			"StorageNoopGuard detected wrongful storage changes.",
 		);
diff --git a/substrate/frame/support/src/storage/types/counted_map.rs b/substrate/frame/support/src/storage/types/counted_map.rs
index 081f99fa16b..5b750a74098 100644
--- a/substrate/frame/support/src/storage/types/counted_map.rs
+++ b/substrate/frame/support/src/storage/types/counted_map.rs
@@ -18,7 +18,6 @@
 //! Storage counted map type.
 
 use crate::{
-	metadata_ir::StorageEntryMetadataIR,
 	storage::{
 		generator::StorageMap as _,
 		types::{
@@ -32,6 +31,7 @@ use crate::{
 };
 use codec::{Decode, Encode, EncodeLike, FullCodec, MaxEncodedLen, Ref};
 use sp_io::MultiRemovalResults;
+use sp_metadata_ir::StorageEntryMetadataIR;
 use sp_runtime::traits::Saturating;
 use sp_std::prelude::*;
 
@@ -512,11 +512,11 @@ mod test {
 	use super::*;
 	use crate::{
 		hash::*,
-		metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR},
 		storage::{bounded_vec::BoundedVec, types::ValueQuery},
 		traits::ConstU32,
 	};
 	use sp_io::{hashing::twox_128, TestExternalities};
+	use sp_metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR};
 
 	struct Prefix;
 	impl StorageInstance for Prefix {
diff --git a/substrate/frame/support/src/storage/types/counted_nmap.rs b/substrate/frame/support/src/storage/types/counted_nmap.rs
index 43a243cc5d6..7dbcb74f000 100644
--- a/substrate/frame/support/src/storage/types/counted_nmap.rs
+++ b/substrate/frame/support/src/storage/types/counted_nmap.rs
@@ -29,7 +29,7 @@ use crate::{
 	Never,
 };
 use codec::{Decode, Encode, EncodeLike, FullCodec, MaxEncodedLen, Ref};
-use sp_api::metadata_ir::StorageEntryMetadataIR;
+use sp_metadata_ir::StorageEntryMetadataIR;
 use sp_runtime::traits::Saturating;
 use sp_std::prelude::*;
 
@@ -638,8 +638,8 @@ mod test {
 		hash::{StorageHasher as _, *},
 		storage::types::{Key as NMapKey, ValueQuery},
 	};
-	use sp_api::metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR};
 	use sp_io::{hashing::twox_128, TestExternalities};
+	use sp_metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR};
 
 	struct Prefix;
 	impl StorageInstance for Prefix {
diff --git a/substrate/frame/support/src/storage/types/double_map.rs b/substrate/frame/support/src/storage/types/double_map.rs
index 08ac1709c4b..e7879218410 100644
--- a/substrate/frame/support/src/storage/types/double_map.rs
+++ b/substrate/frame/support/src/storage/types/double_map.rs
@@ -19,7 +19,6 @@
 //! StoragePrefixedDoubleMap traits and their methods directly.
 
 use crate::{
-	metadata_ir::{StorageEntryMetadataIR, StorageEntryTypeIR},
 	storage::{
 		types::{OptionQuery, QueryKindTrait, StorageEntryMetadataBuilder},
 		KeyLenOf, StorageAppend, StorageDecodeLength, StoragePrefixedMap, StorageTryAppend,
@@ -29,6 +28,7 @@ use crate::{
 };
 use codec::{Decode, Encode, EncodeLike, FullCodec, MaxEncodedLen};
 use sp_arithmetic::traits::SaturatedConversion;
+use sp_metadata_ir::{StorageEntryMetadataIR, StorageEntryTypeIR};
 use sp_std::prelude::*;
 
 /// A type that allow to store values for `(key1, key2)` couple. Similar to `StorageMap` but allow
@@ -734,12 +734,9 @@ where
 #[cfg(test)]
 mod test {
 	use super::*;
-	use crate::{
-		hash::*,
-		metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR},
-		storage::types::ValueQuery,
-	};
+	use crate::{hash::*, storage::types::ValueQuery};
 	use sp_io::{hashing::twox_128, TestExternalities};
+	use sp_metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR};
 
 	struct Prefix;
 	impl StorageInstance for Prefix {
diff --git a/substrate/frame/support/src/storage/types/key.rs b/substrate/frame/support/src/storage/types/key.rs
index ec055aba803..90cf09dd1d3 100755
--- a/substrate/frame/support/src/storage/types/key.rs
+++ b/substrate/frame/support/src/storage/types/key.rs
@@ -41,7 +41,7 @@ pub trait KeyGenerator {
 	type HashFn: FnOnce(&[u8]) -> Vec<u8>;
 	type HArg;
 
-	const HASHER_METADATA: &'static [crate::metadata_ir::StorageHasherIR];
+	const HASHER_METADATA: &'static [sp_metadata_ir::StorageHasherIR];
 
 	/// Given a `key` tuple, calculate the final key by encoding each element individually and
 	/// hashing them using the corresponding hasher in the `KeyGenerator`.
@@ -74,7 +74,7 @@ impl<H: StorageHasher, K: FullCodec + StaticTypeInfo> KeyGenerator for Key<H, K>
 	type HashFn = Box<dyn FnOnce(&[u8]) -> Vec<u8>>;
 	type HArg = (Self::HashFn,);
 
-	const HASHER_METADATA: &'static [crate::metadata_ir::StorageHasherIR] = &[H::METADATA];
+	const HASHER_METADATA: &'static [sp_metadata_ir::StorageHasherIR] = &[H::METADATA];
 
 	fn final_key<KArg: EncodeLikeTuple<Self::KArg> + TupleToEncodedIter>(key: KArg) -> Vec<u8> {
 		H::hash(&key.to_encoded_iter().next().expect("should have at least one element!"))
@@ -114,7 +114,7 @@ impl KeyGenerator for Tuple {
 	for_tuples!( type HArg = ( #(Tuple::HashFn),* ); );
 	type HashFn = Box<dyn FnOnce(&[u8]) -> Vec<u8>>;
 
-	const HASHER_METADATA: &'static [crate::metadata_ir::StorageHasherIR] =
+	const HASHER_METADATA: &'static [sp_metadata_ir::StorageHasherIR] =
 		&[for_tuples!( #(Tuple::Hasher::METADATA),* )];
 
 	fn final_key<KArg: EncodeLikeTuple<Self::KArg> + TupleToEncodedIter>(key: KArg) -> Vec<u8> {
diff --git a/substrate/frame/support/src/storage/types/map.rs b/substrate/frame/support/src/storage/types/map.rs
index c919dc6745d..816b90162f6 100644
--- a/substrate/frame/support/src/storage/types/map.rs
+++ b/substrate/frame/support/src/storage/types/map.rs
@@ -19,7 +19,6 @@
 //! methods directly.
 
 use crate::{
-	metadata_ir::{StorageEntryMetadataIR, StorageEntryTypeIR},
 	storage::{
 		types::{OptionQuery, QueryKindTrait, StorageEntryMetadataBuilder},
 		KeyLenOf, StorageAppend, StorageDecodeLength, StoragePrefixedMap, StorageTryAppend,
@@ -29,6 +28,7 @@ use crate::{
 };
 use codec::{Decode, Encode, EncodeLike, FullCodec, MaxEncodedLen};
 use sp_arithmetic::traits::SaturatedConversion;
+use sp_metadata_ir::{StorageEntryMetadataIR, StorageEntryTypeIR};
 use sp_std::prelude::*;
 
 /// A type that allow to store value for given key. Allowing to insert/remove/iterate on values.
@@ -511,10 +511,10 @@ mod test {
 	use super::*;
 	use crate::{
 		hash::*,
-		metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR},
 		storage::{types::ValueQuery, IterableStorageMap},
 	};
 	use sp_io::{hashing::twox_128, TestExternalities};
+	use sp_metadata_ir::{StorageEntryModifierIR, StorageEntryTypeIR, StorageHasherIR};
 
 	struct Prefix;
 	impl StorageInstance for Prefix {
diff --git a/substrate/frame/support/src/storage/types/mod.rs b/substrate/frame/support/src/storage/types/mod.rs
index 99b0455fc67..c7f2557099b 100644
--- a/substrate/frame/support/src/storage/types/mod.rs
+++ b/substrate/frame/support/src/storage/types/mod.rs
@@ -18,8 +18,8 @@
 //! Storage types to build abstraction on storage, they implements storage traits such as
 //! StorageMap and others.
 
-use crate::metadata_ir::{StorageEntryMetadataIR, StorageEntryModifierIR};
 use codec::FullCodec;
+use sp_metadata_ir::{StorageEntryMetadataIR, StorageEntryModifierIR};
 use sp_std::prelude::*;
 
 mod counted_map;
diff --git a/substrate/frame/support/src/storage/types/nmap.rs b/substrate/frame/support/src/storage/types/nmap.rs
index 0fac1fc9337..e9a4b12dd43 100755
--- a/substrate/frame/support/src/storage/types/nmap.rs
+++ b/substrate/frame/support/src/storage/types/nmap.rs
@@ -19,7 +19,6 @@
 //! traits and their methods directly.
 
 use crate::{
-	metadata_ir::{StorageEntryMetadataIR, StorageEntryTypeIR},
 	storage::{
 		types::{
 			EncodeLikeTuple, HasKeyPrefix, HasReversibleKeyPrefix, OptionQuery, QueryKindTrait,
@@ -30,6 +29,7 @@ use crate::{
 	traits::{Get, GetDefault, StorageInfo, StorageInstance},
 };
 use codec::{Decode, Encode, EncodeLike, FullCodec, MaxEncodedLen};
+use sp_metadata_ir::{StorageEntryMetadataIR, StorageEntryTypeIR};
 use sp_runtime::SaturatedConversion;
 use sp_std::prelude::*;
 
@@ -620,10 +620,10 @@ mod test {
 	use super::*;
 	use crate::{
 		hash::{StorageHasher as _, *},
-		metadata_ir::{StorageEntryModifierIR, StorageHasherIR},
 		storage::types::{Key as NMapKey, ValueQuery},
 	};
 	use sp_io::{hashing::twox_128, TestExternalities};
+	use sp_metadata_ir::{StorageEntryModifierIR, StorageHasherIR};
 
 	struct Prefix;
 	impl StorageInstance for Prefix {
diff --git a/substrate/frame/support/src/storage/types/value.rs b/substrate/frame/support/src/storage/types/value.rs
index d5fbb0656bb..14be6bb402e 100644
--- a/substrate/frame/support/src/storage/types/value.rs
+++ b/substrate/frame/support/src/storage/types/value.rs
@@ -18,7 +18,6 @@
 //! Storage value type. Implements StorageValue trait and its method directly.
 
 use crate::{
-	metadata_ir::{StorageEntryMetadataIR, StorageEntryTypeIR},
 	storage::{
 		generator::StorageValue as StorageValueT,
 		types::{OptionQuery, QueryKindTrait, StorageEntryMetadataBuilder},
@@ -28,6 +27,7 @@ use crate::{
 };
 use codec::{Decode, Encode, EncodeLike, FullCodec, MaxEncodedLen};
 use sp_arithmetic::traits::SaturatedConversion;
+use sp_metadata_ir::{StorageEntryMetadataIR, StorageEntryTypeIR};
 use sp_std::prelude::*;
 
 /// A type that allow to store a value.
@@ -278,8 +278,9 @@ where
 #[cfg(test)]
 mod test {
 	use super::*;
-	use crate::{metadata_ir::StorageEntryModifierIR, storage::types::ValueQuery};
+	use crate::storage::types::ValueQuery;
 	use sp_io::{hashing::twox_128, TestExternalities};
+	use sp_metadata_ir::StorageEntryModifierIR;
 
 	struct Prefix;
 	impl StorageInstance for Prefix {
diff --git a/substrate/frame/support/src/tests/mod.rs b/substrate/frame/support/src/tests/mod.rs
index cb4b4e82418..5ba9aef7fad 100644
--- a/substrate/frame/support/src/tests/mod.rs
+++ b/substrate/frame/support/src/tests/mod.rs
@@ -16,11 +16,11 @@
 // limitations under the License.
 
 use super::*;
-use crate::metadata_ir::{
+use sp_io::{MultiRemovalResults, TestExternalities};
+use sp_metadata_ir::{
 	PalletStorageMetadataIR, StorageEntryMetadataIR, StorageEntryModifierIR, StorageEntryTypeIR,
 	StorageHasherIR,
 };
-use sp_io::{MultiRemovalResults, TestExternalities};
 use sp_runtime::{generic, traits::BlakeTwo256, BuildStorage};
 
 pub use self::frame_system::{pallet_prelude::*, Config, Pallet};
diff --git a/substrate/frame/support/src/traits/filter.rs b/substrate/frame/support/src/traits/filter.rs
index 91efafef2f9..44f9f136cfc 100644
--- a/substrate/frame/support/src/traits/filter.rs
+++ b/substrate/frame/support/src/traits/filter.rs
@@ -103,7 +103,7 @@ macro_rules! impl_filter_stack {
 		mod $module {
 			#[allow(unused_imports)]
 			use super::*;
-			use $crate::sp_std::{boxed::Box, cell::RefCell, mem::{swap, take}, vec::Vec};
+			use $crate::__private::sp_std::{boxed::Box, cell::RefCell, mem::{swap, take}, vec::Vec};
 			use $crate::traits::filter::{Contains, FilterStack};
 
 			thread_local! {
diff --git a/substrate/frame/support/src/traits/misc.rs b/substrate/frame/support/src/traits/misc.rs
index 85eb7b47e26..eb704de4353 100644
--- a/substrate/frame/support/src/traits/misc.rs
+++ b/substrate/frame/support/src/traits/misc.rs
@@ -42,7 +42,7 @@ pub const DEFENSIVE_OP_INTERNAL_ERROR: &str = "Defensive failure has been trigge
 #[macro_export]
 macro_rules! defensive {
 	() => {
-		frame_support::log::error!(
+		frame_support::__private::log::error!(
 			target: "runtime",
 			"{}",
 			$crate::traits::DEFENSIVE_OP_PUBLIC_ERROR
@@ -50,7 +50,7 @@ macro_rules! defensive {
 		debug_assert!(false, "{}", $crate::traits::DEFENSIVE_OP_INTERNAL_ERROR);
 	};
 	($error:expr $(,)?) => {
-		frame_support::log::error!(
+		frame_support::__private::log::error!(
 			target: "runtime",
 			"{}: {:?}",
 			$crate::traits::DEFENSIVE_OP_PUBLIC_ERROR,
@@ -59,7 +59,7 @@ macro_rules! defensive {
 		debug_assert!(false, "{}: {:?}", $crate::traits::DEFENSIVE_OP_INTERNAL_ERROR, $error);
 	};
 	($error:expr, $proof:expr $(,)?) => {
-		frame_support::log::error!(
+		frame_support::__private::log::error!(
 			target: "runtime",
 			"{}: {:?}: {:?}",
 			$crate::traits::DEFENSIVE_OP_PUBLIC_ERROR,
diff --git a/substrate/frame/support/src/traits/preimages.rs b/substrate/frame/support/src/traits/preimages.rs
index db8abdbdc79..3e78116202b 100644
--- a/substrate/frame/support/src/traits/preimages.rs
+++ b/substrate/frame/support/src/traits/preimages.rs
@@ -279,7 +279,8 @@ impl StorePreimage for () {
 #[cfg(test)]
 mod tests {
 	use super::*;
-	use crate::{bounded_vec, BoundedVec};
+	use crate::BoundedVec;
+	use sp_runtime::bounded_vec;
 
 	#[test]
 	fn bounded_size_is_correct() {
diff --git a/substrate/frame/support/src/traits/storage.rs b/substrate/frame/support/src/traits/storage.rs
index 829cd31e4c3..64eddf51b7f 100644
--- a/substrate/frame/support/src/traits/storage.rs
+++ b/substrate/frame/support/src/traits/storage.rs
@@ -17,11 +17,10 @@
 
 //! Traits for encoding data related to pallet's storage items.
 
-use crate::sp_std::collections::btree_set::BTreeSet;
 use impl_trait_for_tuples::impl_for_tuples;
 pub use sp_core::storage::TrackedStorageKey;
-use sp_runtime::traits::Saturating;
-use sp_std::prelude::*;
+use sp_runtime::{traits::Saturating, RuntimeDebug};
+use sp_std::{collections::btree_set::BTreeSet, prelude::*};
 
 /// An instance of a pallet in the storage.
 ///
@@ -61,7 +60,7 @@ pub trait StorageInstance {
 
 /// Metadata about storage from the runtime.
 #[derive(
-	codec::Encode, codec::Decode, crate::RuntimeDebug, Eq, PartialEq, Clone, scale_info::TypeInfo,
+	codec::Encode, codec::Decode, RuntimeDebug, Eq, PartialEq, Clone, scale_info::TypeInfo,
 )]
 pub struct StorageInfo {
 	/// Encoded string of pallet name.
diff --git a/substrate/frame/support/src/traits/try_runtime.rs b/substrate/frame/support/src/traits/try_runtime.rs
index cb18f9d5b71..31aebeeb4d9 100644
--- a/substrate/frame/support/src/traits/try_runtime.rs
+++ b/substrate/frame/support/src/traits/try_runtime.rs
@@ -175,7 +175,7 @@ impl<BlockNumber: Clone + sp_std::fmt::Debug + AtLeast32BitUnsigned> TryState<Bl
 					{
 						result = result.and(try_state_fn(n.clone(), targets.clone()));
 					} else {
-						crate::log::warn!(
+						log::warn!(
 							"Pallet {:?} not found",
 							sp_std::str::from_utf8(pallet_name).unwrap_or_default()
 						);
diff --git a/substrate/frame/support/src/traits/validation.rs b/substrate/frame/support/src/traits/validation.rs
index 84430901b97..617cdb2d3f4 100644
--- a/substrate/frame/support/src/traits/validation.rs
+++ b/substrate/frame/support/src/traits/validation.rs
@@ -210,8 +210,8 @@ pub trait KeyOwnerProofSystem<Key> {
 impl<Key> KeyOwnerProofSystem<Key> for () {
 	// The proof and identification tuples is any bottom type to guarantee that the methods of this
 	// implementation can never be called or return anything other than `None`.
-	type Proof = crate::Void;
-	type IdentificationTuple = crate::Void;
+	type Proof = sp_core::Void;
+	type IdentificationTuple = sp_core::Void;
 
 	fn prove(_key: Key) -> Option<Self::Proof> {
 		None
diff --git a/substrate/frame/support/test/Cargo.toml b/substrate/frame/support/test/Cargo.toml
index af4d3afd4da..f6b665b1c7b 100644
--- a/substrate/frame/support/test/Cargo.toml
+++ b/substrate/frame/support/test/Cargo.toml
@@ -16,6 +16,7 @@ static_assertions = "1.1.0"
 serde = { version = "1.0.163", default-features = false, features = ["derive"] }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
+frame-metadata = { version = "16.0.0", default-features = false, features = ["current"] }
 sp-api = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/api" }
 sp-arithmetic = { version = "16.0.0", default-features = false, path = "../../../primitives/arithmetic" }
 sp-io = { version = "23.0.0", path = "../../../primitives/io", default-features = false }
@@ -26,6 +27,7 @@ sp-runtime = { version = "24.0.0", default-features = false, path = "../../../pr
 sp-core = { version = "21.0.0", default-features = false, path = "../../../primitives/core" }
 sp-std = { version = "8.0.0", default-features = false, path = "../../../primitives/std" }
 sp-version = { version = "22.0.0", default-features = false, path = "../../../primitives/version" }
+sp-metadata-ir = { version = "0.1.0", default-features = false, path = "../../../primitives/metadata-ir" }
 trybuild = { version = "1.0.74", features = [ "diff" ] }
 pretty_assertions = "1.3.0"
 rustversion = "1.0.6"
@@ -46,13 +48,15 @@ std = [
 	"serde/std",
 	"sp-api/std",
 	"sp-arithmetic/std",
+	"frame-metadata/std",
 	"sp-core/std",
 	"sp-io/std",
 	"sp-runtime/std",
 	"sp-std/std",
 	"sp-version/std",
 	"test-pallet/std",
-	"sp-state-machine/std"
+	"sp-state-machine/std",
+	"sp-metadata-ir/std"
 ]
 experimental = ["frame-support/experimental"]
 try-runtime = [
diff --git a/substrate/frame/support/test/tests/construct_runtime.rs b/substrate/frame/support/test/tests/construct_runtime.rs
index ff207ddf977..a14276fa4d2 100644
--- a/substrate/frame/support/test/tests/construct_runtime.rs
+++ b/substrate/frame/support/test/tests/construct_runtime.rs
@@ -636,7 +636,7 @@ fn call_subtype_conversion() {
 
 #[test]
 fn test_metadata() {
-	use frame_support::metadata::{v14::*, *};
+	use frame_metadata::{v14::*, *};
 	use scale_info::meta_type;
 	use sp_core::Encode;
 
diff --git a/substrate/frame/support/test/tests/construct_runtime_ui/deprecated_where_block.stderr b/substrate/frame/support/test/tests/construct_runtime_ui/deprecated_where_block.stderr
index 946277e9068..0aee2cbceb9 100644
--- a/substrate/frame/support/test/tests/construct_runtime_ui/deprecated_where_block.stderr
+++ b/substrate/frame/support/test/tests/construct_runtime_ui/deprecated_where_block.stderr
@@ -374,7 +374,7 @@ note: required by a bound in `Result`
    |
    | pub enum Result<T, E> {
    |                 ^ required by this bound in `Result`
-   = note: this error originates in the derive macro `self::sp_api_hidden_includes_construct_runtime::hidden_include::codec::Decode` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info)
+   = note: this error originates in the derive macro `self::sp_api_hidden_includes_construct_runtime::hidden_include::__private::codec::Decode` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error[E0277]: the trait bound `Runtime: Config` is not satisfied in `RuntimeEvent`
   --> tests/construct_runtime_ui/deprecated_where_block.rs:3:1
@@ -439,4 +439,4 @@ note: required by a bound in `Result`
    |
    | pub enum Result<T, E> {
    |                 ^ required by this bound in `Result`
-   = note: this error originates in the derive macro `self::sp_api_hidden_includes_construct_runtime::hidden_include::codec::Decode` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info)
+   = note: this error originates in the derive macro `self::sp_api_hidden_includes_construct_runtime::hidden_include::__private::codec::Decode` which comes from the expansion of the macro `construct_runtime` (in Nightly builds, run with -Z macro-backtrace for more info)
diff --git a/substrate/frame/support/test/tests/instance.rs b/substrate/frame/support/test/tests/instance.rs
index 2fb6d7658d6..43a93df9dea 100644
--- a/substrate/frame/support/test/tests/instance.rs
+++ b/substrate/frame/support/test/tests/instance.rs
@@ -20,14 +20,14 @@
 use frame_support::{
 	derive_impl,
 	inherent::{InherentData, InherentIdentifier, MakeFatalError, ProvideInherent},
-	metadata_ir::{
-		PalletStorageMetadataIR, StorageEntryMetadataIR, StorageEntryModifierIR,
-		StorageEntryTypeIR, StorageHasherIR,
-	},
 	traits::ConstU32,
 };
 use frame_system::pallet_prelude::BlockNumberFor;
 use sp_core::sr25519;
+use sp_metadata_ir::{
+	PalletStorageMetadataIR, StorageEntryMetadataIR, StorageEntryModifierIR, StorageEntryTypeIR,
+	StorageHasherIR,
+};
 use sp_runtime::{
 	generic,
 	traits::{BlakeTwo256, Verify},
diff --git a/substrate/frame/support/test/tests/pallet.rs b/substrate/frame/support/test/tests/pallet.rs
index cb78bded1a3..8c85cd56959 100644
--- a/substrate/frame/support/test/tests/pallet.rs
+++ b/substrate/frame/support/test/tests/pallet.rs
@@ -1378,7 +1378,7 @@ fn migrate_from_pallet_version_to_storage_version() {
 #[test]
 fn metadata() {
 	use codec::Decode;
-	use frame_support::metadata::{v15::*, *};
+	use frame_metadata::{v15::*, *};
 
 	fn maybe_docs(doc: Vec<&'static str>) -> Vec<&'static str> {
 		if cfg!(feature = "no-metadata-docs") {
@@ -1860,7 +1860,7 @@ fn metadata() {
 
 #[test]
 fn metadata_at_version() {
-	use frame_support::metadata::*;
+	use frame_metadata::*;
 	use sp_core::Decode;
 
 	// Metadata always returns the V14.3
diff --git a/substrate/frame/support/test/tests/pallet_instance.rs b/substrate/frame/support/test/tests/pallet_instance.rs
index 4ecb9bcb58a..be675a562ce 100644
--- a/substrate/frame/support/test/tests/pallet_instance.rs
+++ b/substrate/frame/support/test/tests/pallet_instance.rs
@@ -721,7 +721,7 @@ fn pallet_on_genesis() {
 
 #[test]
 fn metadata() {
-	use frame_support::metadata::{v14::*, *};
+	use frame_metadata::{v14::*, *};
 
 	let system_pallet_metadata = PalletMetadata {
 		index: 0,
diff --git a/substrate/frame/support/test/tests/runtime_metadata.rs b/substrate/frame/support/test/tests/runtime_metadata.rs
index 50bad87d32e..a545735f2b1 100644
--- a/substrate/frame/support/test/tests/runtime_metadata.rs
+++ b/substrate/frame/support/test/tests/runtime_metadata.rs
@@ -15,13 +15,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-use frame_support::{
-	metadata_ir::{
-		RuntimeApiMetadataIR, RuntimeApiMethodMetadataIR, RuntimeApiMethodParamMetadataIR,
-	},
-	traits::ConstU32,
-};
+use frame_support::traits::ConstU32;
 use scale_info::{form::MetaForm, meta_type};
+use sp_metadata_ir::{
+	RuntimeApiMetadataIR, RuntimeApiMethodMetadataIR, RuntimeApiMethodParamMetadataIR,
+};
 use sp_runtime::traits::Block as BlockT;
 
 pub type BlockNumber = u64;
diff --git a/substrate/frame/system/src/migrations/mod.rs b/substrate/frame/system/src/migrations/mod.rs
index 6f873061dba..945bbc53955 100644
--- a/substrate/frame/system/src/migrations/mod.rs
+++ b/substrate/frame/system/src/migrations/mod.rs
@@ -22,8 +22,8 @@ use crate::{Config, Pallet};
 use codec::{Decode, Encode, FullCodec};
 use frame_support::{
 	pallet_prelude::ValueQuery, traits::PalletInfoAccess, weights::Weight, Blake2_128Concat,
-	RuntimeDebug,
 };
+use sp_runtime::RuntimeDebug;
 use sp_std::prelude::*;
 
 /// Type used to encode the number of references an account has.
diff --git a/substrate/frame/system/src/offchain.rs b/substrate/frame/system/src/offchain.rs
index 313a557c44d..dd4ac6782a5 100644
--- a/substrate/frame/system/src/offchain.rs
+++ b/substrate/frame/system/src/offchain.rs
@@ -57,10 +57,10 @@
 #![warn(missing_docs)]
 
 use codec::Encode;
-use frame_support::RuntimeDebug;
 use sp_runtime::{
 	app_crypto::RuntimeAppPublic,
 	traits::{Extrinsic as ExtrinsicT, IdentifyAccount, One},
+	RuntimeDebug,
 };
 use sp_std::{collections::btree_set::BTreeSet, prelude::*};
 
-- 
GitLab