diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock
index 14fd4778c639a1c8f981538925f9c918e1a3ed4f..cec17f7f967663f661a028ab5b32abeefd557312 100644
--- a/substrate/Cargo.lock
+++ b/substrate/Cargo.lock
@@ -1777,7 +1777,6 @@ dependencies = [
  "pallet-indices",
  "pallet-transaction-payment",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-inherents",
  "sp-io",
@@ -4323,7 +4322,6 @@ dependencies = [
  "pallet-utility",
  "pallet-vesting",
  "parity-scale-codec",
- "serde",
  "sp-api",
  "sp-authority-discovery",
  "sp-block-builder",
@@ -4402,7 +4400,6 @@ dependencies = [
  "pallet-transaction-payment",
  "pallet-transaction-payment-rpc-runtime-api",
  "parity-scale-codec",
- "serde",
  "sp-api",
  "sp-block-builder",
  "sp-consensus-aura",
@@ -4616,7 +4613,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -4631,7 +4627,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -4649,7 +4644,6 @@ dependencies = [
  "pallet-timestamp",
  "parity-scale-codec",
  "parking_lot 0.11.1",
- "serde",
  "sp-application-crypto",
  "sp-consensus-aura",
  "sp-core",
@@ -4666,7 +4660,6 @@ dependencies = [
  "frame-system",
  "pallet-session",
  "parity-scale-codec",
- "serde",
  "sp-application-crypto",
  "sp-authority-discovery",
  "sp-core",
@@ -4710,7 +4703,6 @@ dependencies = [
  "pallet-staking-reward-curve",
  "pallet-timestamp",
  "parity-scale-codec",
- "serde",
  "sp-application-crypto",
  "sp-consensus-babe",
  "sp-consensus-vrf",
@@ -4732,7 +4724,6 @@ dependencies = [
  "log",
  "pallet-transaction-payment",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -4749,7 +4740,6 @@ dependencies = [
  "pallet-balances",
  "pallet-treasury",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -4768,7 +4758,6 @@ dependencies = [
  "log",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -4893,7 +4882,6 @@ dependencies = [
  "parking_lot 0.11.1",
  "paste 1.0.4",
  "rand 0.7.3",
- "serde",
  "sp-arithmetic",
  "sp-core",
  "sp-io",
@@ -4914,7 +4902,6 @@ dependencies = [
  "hex-literal",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -4932,7 +4919,6 @@ dependencies = [
  "log",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-npos-elections",
@@ -4951,7 +4937,6 @@ dependencies = [
  "log",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -4967,7 +4952,6 @@ dependencies = [
  "lite-json",
  "log",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-keystore",
@@ -4999,7 +4983,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-arithmetic",
  "sp-core",
  "sp-io",
@@ -5025,7 +5008,6 @@ dependencies = [
  "pallet-staking-reward-curve",
  "pallet-timestamp",
  "parity-scale-codec",
- "serde",
  "sp-application-crypto",
  "sp-core",
  "sp-finality-grandpa",
@@ -5047,7 +5029,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5065,7 +5046,6 @@ dependencies = [
  "pallet-authorship",
  "pallet-session",
  "parity-scale-codec",
- "serde",
  "sp-application-crypto",
  "sp-core",
  "sp-io",
@@ -5083,7 +5063,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-keyring",
@@ -5115,7 +5094,6 @@ dependencies = [
  "frame-support",
  "frame-system",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5134,7 +5112,6 @@ dependencies = [
  "hex-literal",
  "pallet-mmr-primitives",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5184,7 +5161,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5199,7 +5175,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5214,7 +5189,6 @@ dependencies = [
  "frame-system",
  "log",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5274,7 +5248,6 @@ dependencies = [
  "pallet-balances",
  "pallet-utility",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5305,7 +5278,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5321,7 +5293,6 @@ dependencies = [
  "frame-system",
  "log",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5337,7 +5308,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5354,7 +5324,6 @@ dependencies = [
  "lazy_static",
  "pallet-timestamp",
  "parity-scale-codec",
- "serde",
  "sp-application-crypto",
  "sp-core",
  "sp-io",
@@ -5398,7 +5367,6 @@ dependencies = [
  "pallet-balances",
  "parity-scale-codec",
  "rand_chacha 0.2.2",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5463,7 +5431,6 @@ dependencies = [
  "frame-support",
  "frame-system",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5494,7 +5461,6 @@ dependencies = [
  "impl-trait-for-tuples",
  "log",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-inherents",
  "sp-io",
@@ -5592,7 +5558,6 @@ dependencies = [
  "frame-system",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5610,7 +5575,6 @@ dependencies = [
  "hex-literal",
  "pallet-balances",
  "parity-scale-codec",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
diff --git a/substrate/bin/node-template/runtime/Cargo.toml b/substrate/bin/node-template/runtime/Cargo.toml
index 5bba2a4e970b04d2ecf62a140d075c51928beb07..8f7d39f18bc4d18bc017959de42371c2fa0e593f 100644
--- a/substrate/bin/node-template/runtime/Cargo.toml
+++ b/substrate/bin/node-template/runtime/Cargo.toml
@@ -23,7 +23,6 @@ frame-system = { version = "3.0.0", default-features = false, path = "../../../f
 pallet-timestamp = { version = "3.0.0", default-features = false, path = "../../../frame/timestamp" }
 pallet-transaction-payment = { version = "3.0.0", default-features = false, path = "../../../frame/transaction-payment" }
 frame-executive = { version = "3.0.0", default-features = false, path = "../../../frame/executive" }
-serde = { version = "1.0.101", optional = true, features = ["derive"] }
 sp-api = { version = "3.0.0", default-features = false, path = "../../../primitives/api" }
 sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "3.0.0"}
 sp-consensus-aura = { version = "0.9.0", default-features = false, path = "../../../primitives/consensus/aura" }
@@ -67,7 +66,6 @@ std = [
 	"pallet-timestamp/std",
 	"pallet-transaction-payment-rpc-runtime-api/std",
 	"pallet-transaction-payment/std",
-	"serde",
 	"sp-api/std",
 	"sp-block-builder/std",
 	"sp-consensus-aura/std",
diff --git a/substrate/bin/node/runtime/Cargo.toml b/substrate/bin/node/runtime/Cargo.toml
index f0cad60f2614d2862e9b8b0598da42b7c0cca55c..edf7109bacb77d7161afb19b512c9dc57f7f317a 100644
--- a/substrate/bin/node/runtime/Cargo.toml
+++ b/substrate/bin/node/runtime/Cargo.toml
@@ -15,7 +15,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 # third-party dependencies
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.102", optional = true }
 static_assertions = "1.1.0"
 hex-literal = { version = "0.3.1", optional = true }
 log = { version = "0.4.14", default-features = false }
@@ -133,7 +132,6 @@ std = [
 	"sp-core/std",
 	"pallet-randomness-collective-flip/std",
 	"sp-std/std",
-	"serde",
 	"pallet-session/std",
 	"sp-api/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/assets/Cargo.toml b/substrate/frame/assets/Cargo.toml
index b62e8bac8ccc67303587ed99e8ae3efbf1cbb5a2..7137cf1d789a272b008f4788ac3f29227bdcdbe5 100644
--- a/substrate/frame/assets/Cargo.toml
+++ b/substrate/frame/assets/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
 # Needed for various traits. In our case, `OnFinalize`.
@@ -33,7 +32,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/atomic-swap/Cargo.toml b/substrate/frame/atomic-swap/Cargo.toml
index a3b62d65e56a3466fd2ab35e793911bc58327a2e..4fd1284893f99a9c97402608af8375d6f99e3ab7 100644
--- a/substrate/frame/atomic-swap/Cargo.toml
+++ b/substrate/frame/atomic-swap/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
@@ -28,7 +27,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"frame-support/std",
 	"frame-system/std",
diff --git a/substrate/frame/aura/Cargo.toml b/substrate/frame/aura/Cargo.toml
index 6cae6c94c9a89c09cbd7d467d1c9e7ebbe486193..5b247b008de2ff38361c83b909893d3856ed6630 100644
--- a/substrate/frame/aura/Cargo.toml
+++ b/substrate/frame/aura/Cargo.toml
@@ -16,7 +16,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 sp-application-crypto = { version = "3.0.0", default-features = false, path = "../../primitives/application-crypto" }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
-serde = { version = "1.0.101", optional = true }
 pallet-session = { version = "3.0.0", default-features = false, path = "../session" }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
@@ -36,7 +35,6 @@ std = [
 	"sp-application-crypto/std",
 	"codec/std",
 	"sp-std/std",
-	"serde",
 	"sp-runtime/std",
 	"frame-support/std",
 	"sp-consensus-aura/std",
diff --git a/substrate/frame/authority-discovery/Cargo.toml b/substrate/frame/authority-discovery/Cargo.toml
index 85844cf716f0361046ae356844a091da1e4f0906..25fec9118230e6a98b62863c7cecfb0fc1355316 100644
--- a/substrate/frame/authority-discovery/Cargo.toml
+++ b/substrate/frame/authority-discovery/Cargo.toml
@@ -17,7 +17,6 @@ sp-authority-discovery = { version = "3.0.0", default-features = false, path = "
 sp-application-crypto = { version = "3.0.0", default-features = false, path = "../../primitives/application-crypto" }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
-serde = { version = "1.0.101", optional = true }
 pallet-session = { version = "3.0.0", features = ["historical" ], path = "../session", default-features = false }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
@@ -35,7 +34,6 @@ std = [
 	"sp-authority-discovery/std",
 	"codec/std",
 	"sp-std/std",
-	"serde",
 	"pallet-session/std",
 	"sp-runtime/std",
 	"frame-support/std",
diff --git a/substrate/frame/babe/Cargo.toml b/substrate/frame/babe/Cargo.toml
index f7bebce98acf3f4029b8f121990e1661bf9f3b51..64497eafe715c7cbef59530359037fe5b3559dc3 100644
--- a/substrate/frame/babe/Cargo.toml
+++ b/substrate/frame/babe/Cargo.toml
@@ -20,7 +20,6 @@ frame-system = { version = "3.0.0", default-features = false, path = "../system"
 pallet-authorship = { version = "3.0.0", default-features = false, path = "../authorship" }
 pallet-session = { version = "3.0.0", default-features = false, path = "../session" }
 pallet-timestamp = { version = "3.0.0", default-features = false, path = "../timestamp" }
-serde = { version = "1.0.101", optional = true }
 sp-application-crypto = { version = "3.0.0", default-features = false, path = "../../primitives/application-crypto" }
 sp-consensus-babe = { version = "0.9.0", default-features = false, path = "../../primitives/consensus/babe" }
 sp-consensus-vrf = { version = "0.9.0", default-features = false, path = "../../primitives/consensus/vrf" }
@@ -49,7 +48,6 @@ std = [
 	"pallet-authorship/std",
 	"pallet-session/std",
 	"pallet-timestamp/std",
-	"serde",
 	"sp-application-crypto/std",
 	"sp-consensus-babe/std",
 	"sp-consensus-vrf/std",
diff --git a/substrate/frame/balances/Cargo.toml b/substrate/frame/balances/Cargo.toml
index 22c4ef0976f5fef203f55f0be8dc3d87b7660c30..116a52151583a6440870d834b9b58ba9f9adadd8 100644
--- a/substrate/frame/balances/Cargo.toml
+++ b/substrate/frame/balances/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
@@ -30,7 +29,6 @@ pallet-transaction-payment = { version = "3.0.0", path = "../transaction-payment
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/bounties/Cargo.toml b/substrate/frame/bounties/Cargo.toml
index ff1a3a6807098bf5e8020719d6af97ac58d7c5ce..1845f77e97a9af9aa50bc84f4a8503c6439568e9 100644
--- a/substrate/frame/bounties/Cargo.toml
+++ b/substrate/frame/bounties/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true, features = ["derive"] }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
@@ -32,7 +31,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/collective/Cargo.toml b/substrate/frame/collective/Cargo.toml
index b8f825cc52931392ead6e167966b21dda443b594..c4940c87f827bc8eb9ddc88b52409d8286fd5607 100644
--- a/substrate/frame/collective/Cargo.toml
+++ b/substrate/frame/collective/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-core = { version = "3.0.0", default-features = false, path = "../../primitives/core" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -34,7 +33,6 @@ std = [
 	"codec/std",
 	"sp-core/std",
 	"sp-std/std",
-	"serde",
 	"sp-io/std",
 	"frame-support/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/election-provider-multi-phase/Cargo.toml b/substrate/frame/election-provider-multi-phase/Cargo.toml
index 4b5178faa8e86b45689d27f3c8cf4d49810b938f..dcb9c9b0e75b6f998a3bedc28f439a032b4eff48 100644
--- a/substrate/frame/election-provider-multi-phase/Cargo.toml
+++ b/substrate/frame/election-provider-multi-phase/Cargo.toml
@@ -14,7 +14,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 static_assertions = "1.1.0"
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 log = { version = "0.4.14", default-features = false }
 
@@ -48,7 +47,6 @@ frame-benchmarking = { version = "3.1.0", path = "../benchmarking" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"log/std",
 
diff --git a/substrate/frame/elections-phragmen/Cargo.toml b/substrate/frame/elections-phragmen/Cargo.toml
index 89723cb85fbe12a5a45ba4df419aa97f24b1b70e..32ae9968c7bf1dfc6ebc27157acf97c8c94cbabe 100644
--- a/substrate/frame/elections-phragmen/Cargo.toml
+++ b/substrate/frame/elections-phragmen/Cargo.toml
@@ -14,7 +14,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.101", optional = true }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
 sp-npos-elections = { version = "3.0.0", default-features = false, path = "../../primitives/npos-elections" }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
@@ -33,7 +32,6 @@ substrate-test-utils = { version = "3.0.0", path = "../../test-utils" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"frame-support/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/elections/Cargo.toml b/substrate/frame/elections/Cargo.toml
index ac3c709300f514cf39d04decca57368514574a49..d4b84f5bb1565b115466b982d18adbf16cd86e35 100644
--- a/substrate/frame/elections/Cargo.toml
+++ b/substrate/frame/elections/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-core = { version = "3.0.0", default-features = false, path = "../../primitives/core" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -32,7 +31,6 @@ std = [
 	"codec/std",
 	"sp-core/std",
 	"sp-std/std",
-	"serde",
 	"sp-io/std",
 	"frame-support/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/example-offchain-worker/Cargo.toml b/substrate/frame/example-offchain-worker/Cargo.toml
index 3718da643da64d3169a4c703c985a5883ca4865c..ea9fb9699ec64c213f8bc9afbac8d24d5800e787 100644
--- a/substrate/frame/example-offchain-worker/Cargo.toml
+++ b/substrate/frame/example-offchain-worker/Cargo.toml
@@ -16,7 +16,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
-serde = { version = "1.0.101", optional = true }
 sp-core = { version = "3.0.0", default-features = false, path = "../../primitives/core" }
 sp-keystore = { version = "0.9.0", path = "../../primitives/keystore", optional = true }
 sp-io = { version = "3.0.0", default-features = false, path = "../../primitives/io" }
@@ -31,7 +30,6 @@ std = [
 	"codec/std",
 	"frame-support/std",
 	"frame-system/std",
-	"serde",
 	"lite-json/std",
 	"sp-core/std",
 	"sp-io/std",
diff --git a/substrate/frame/example/Cargo.toml b/substrate/frame/example/Cargo.toml
index e24616bc84cf311950048afe7e868e1a2105a6d5..258648b52e5b77dbc578cc48214884641787aa8c 100644
--- a/substrate/frame/example/Cargo.toml
+++ b/substrate/frame/example/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
@@ -36,7 +35,6 @@ std = [
 	"frame-system/std",
 	"log/std",
 	"pallet-balances/std",
-	"serde",
 	"sp-io/std",
 	"sp-runtime/std",
 	"sp-std/std"
diff --git a/substrate/frame/executive/Cargo.toml b/substrate/frame/executive/Cargo.toml
index 97c5a5ffdc7655e238af8d3ccb9b3c15f63813a3..a923f926a09607760975829b72b865ffe7890812 100644
--- a/substrate/frame/executive/Cargo.toml
+++ b/substrate/frame/executive/Cargo.toml
@@ -16,7 +16,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
-serde = { version = "1.0.101", optional = true }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
 sp-tracing = { version = "3.0.0", default-features = false, path = "../../primitives/tracing" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -42,7 +41,6 @@ std = [
 	"codec/std",
 	"frame-support/std",
 	"frame-system/std",
-	"serde",
 	"sp-core/std",
 	"sp-runtime/std",
 	"sp-tracing/std",
diff --git a/substrate/frame/gilt/Cargo.toml b/substrate/frame/gilt/Cargo.toml
index 4df0dc49aaf933e97cd4640ccc66d7533d6615db..0b40f6ad4d6dac5ebc28f105007b49fb1cb19db5 100644
--- a/substrate/frame/gilt/Cargo.toml
+++ b/substrate/frame/gilt/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
@@ -30,7 +29,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/grandpa/Cargo.toml b/substrate/frame/grandpa/Cargo.toml
index 547e3966d52a491f2894ea244334fb7adcc48fea..a602e8b6daddf860610dc3e5fd92b855ac864342 100644
--- a/substrate/frame/grandpa/Cargo.toml
+++ b/substrate/frame/grandpa/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true, features = ["derive"] }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-application-crypto = { version = "3.0.0", default-features = false, path = "../../primitives/application-crypto" }
 sp-core = { version = "3.0.0", default-features = false, path = "../../primitives/core" }
@@ -44,7 +43,6 @@ frame-election-provider-support = { version = "3.0.0", path = "../election-provi
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"frame-benchmarking/std",
 	"sp-application-crypto/std",
diff --git a/substrate/frame/identity/Cargo.toml b/substrate/frame/identity/Cargo.toml
index 08109fda2584cba13f8375aeb22d5ecd3c5d4bd3..fce79c56f80a9302d9eaedb14e4edd539d5ad76f 100644
--- a/substrate/frame/identity/Cargo.toml
+++ b/substrate/frame/identity/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 enumflags2 = { version = "0.6.2" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -30,7 +29,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-io/std",
diff --git a/substrate/frame/im-online/Cargo.toml b/substrate/frame/im-online/Cargo.toml
index 4c5b4a8863bcd9ee8e888a11b141aa5b4521489f..2e816a6bb8564e585f890b755961bddc6c10a4f6 100644
--- a/substrate/frame/im-online/Cargo.toml
+++ b/substrate/frame/im-online/Cargo.toml
@@ -18,7 +18,6 @@ pallet-authorship = { version = "3.0.0", default-features = false, path = "../au
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-core = { version = "3.0.0", default-features = false, path = "../../primitives/core" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
-serde = { version = "1.0.101", optional = true }
 sp-io = { version = "3.0.0", default-features = false, path = "../../primitives/io" }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
 sp-staking = { version = "3.0.0", default-features = false, path = "../../primitives/staking" }
@@ -39,7 +38,6 @@ std = [
 	"codec/std",
 	"sp-core/std",
 	"sp-std/std",
-	"serde",
 	"sp-io/std",
 	"sp-runtime/std",
 	"sp-staking/std",
diff --git a/substrate/frame/indices/Cargo.toml b/substrate/frame/indices/Cargo.toml
index ce9b2053ff18432bf392cec704c62f18209ea14d..4b60ec8bc3ca81c14969d972e1c81b6d7d462e41 100644
--- a/substrate/frame/indices/Cargo.toml
+++ b/substrate/frame/indices/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-keyring = { version = "3.0.0", optional = true, path = "../../primitives/keyring" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -31,7 +30,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"sp-keyring",
 	"codec/std",
 	"sp-core/std",
diff --git a/substrate/frame/membership/Cargo.toml b/substrate/frame/membership/Cargo.toml
index 37e7aa2cb82482194b8ba1068024ffc4e9fd29c5..b11e0a2b68e45045d78902a81de52cc3409939fd 100644
--- a/substrate/frame/membership/Cargo.toml
+++ b/substrate/frame/membership/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
 sp-io = { version = "3.0.0", default-features = false, path = "../../primitives/io" }
@@ -27,7 +26,6 @@ sp-core = { version = "3.0.0", path = "../../primitives/core" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-runtime/std",
 	"sp-std/std",
diff --git a/substrate/frame/merkle-mountain-range/Cargo.toml b/substrate/frame/merkle-mountain-range/Cargo.toml
index 8861ba5c0c8b94709ee261e623889ae627149e4c..6ca451c4ab489b2f9545e627de5a07792de32aae 100644
--- a/substrate/frame/merkle-mountain-range/Cargo.toml
+++ b/substrate/frame/merkle-mountain-range/Cargo.toml
@@ -18,7 +18,6 @@ frame-support = { version = "3.0.0", default-features = false, path = "../suppor
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
 mmr-lib = { package = "ckb-merkle-mountain-range", default-features = false, version = "0.3.1" }
 pallet-mmr-primitives = { version = "3.0.0", default-features = false, path = "./primitives" }
-serde = { version = "1.0.101", optional = true }
 sp-core = { version = "3.0.0", default-features = false, path = "../../primitives/core" }
 sp-io = { version = "3.0.0", default-features = false, path = "../../primitives/io" }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
@@ -37,7 +36,6 @@ std = [
 	"frame-system/std",
 	"mmr-lib/std",
 	"pallet-mmr-primitives/std",
-	"serde",
 	"sp-core/std",
 	"sp-io/std",
 	"sp-runtime/std",
diff --git a/substrate/frame/multisig/Cargo.toml b/substrate/frame/multisig/Cargo.toml
index e48f80567f67acf6a56529556f4622d4d30501d5..7657f64c819fbf3872106d78df6b4084e69991ea 100644
--- a/substrate/frame/multisig/Cargo.toml
+++ b/substrate/frame/multisig/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
@@ -31,7 +30,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-runtime/std",
 	"frame-support/std",
diff --git a/substrate/frame/nicks/Cargo.toml b/substrate/frame/nicks/Cargo.toml
index 6c8b609b401ca74937a6c765319ecd80c8311e9b..12db6f905f2ec2190aaeb397ad93f9bd8fd18262 100644
--- a/substrate/frame/nicks/Cargo.toml
+++ b/substrate/frame/nicks/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
 sp-io = { version = "3.0.0", default-features = false, path = "../../primitives/io" }
@@ -28,7 +27,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-io/std",
diff --git a/substrate/frame/node-authorization/Cargo.toml b/substrate/frame/node-authorization/Cargo.toml
index 786eb84d1e5238e838d551db7b3b92a76b26d6d9..6e657758e8e994d4dde17328f02e8bf76876f078 100644
--- a/substrate/frame/node-authorization/Cargo.toml
+++ b/substrate/frame/node-authorization/Cargo.toml
@@ -12,7 +12,6 @@ description = "FRAME pallet for node authorization"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
@@ -25,7 +24,6 @@ log = { version = "0.4.14", default-features = false }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"frame-support/std",
 	"frame-system/std",
diff --git a/substrate/frame/proxy/Cargo.toml b/substrate/frame/proxy/Cargo.toml
index 2934b9953b316bebd842c7a3636fe7ed18d65f7e..d8f7afe433cb384c3f82b67d2d6a5483bb2e9cab 100644
--- a/substrate/frame/proxy/Cargo.toml
+++ b/substrate/frame/proxy/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
@@ -32,7 +31,6 @@ pallet-utility = { version = "3.0.0", path = "../utility" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-runtime/std",
 	"frame-support/std",
diff --git a/substrate/frame/recovery/Cargo.toml b/substrate/frame/recovery/Cargo.toml
index 1f8003bd4d056ef2eef6b4637ab97904624f7ac6..acfd2f613f8391b83f1ac085f65003e752aba799 100644
--- a/substrate/frame/recovery/Cargo.toml
+++ b/substrate/frame/recovery/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 enumflags2 = { version = "0.6.2" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -29,7 +28,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-io/std",
diff --git a/substrate/frame/scheduler/Cargo.toml b/substrate/frame/scheduler/Cargo.toml
index 4d82133b6af9d3960be126c0da5ff0cfef8dcbf1..8fb5d148662b31330482cfeaf46236dbf7e5943d 100644
--- a/substrate/frame/scheduler/Cargo.toml
+++ b/substrate/frame/scheduler/Cargo.toml
@@ -10,7 +10,6 @@ description = "FRAME example pallet"
 readme = "README.md"
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
@@ -28,7 +27,6 @@ substrate-test-utils = { version = "3.0.0", path = "../../test-utils" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-runtime/std",
 	"frame-benchmarking/std",
diff --git a/substrate/frame/scored-pool/Cargo.toml b/substrate/frame/scored-pool/Cargo.toml
index 97e3a954d7e254a17e537a9452f630032258e227..0b2f4a8198833ca8426ffa22044459ca58361d5f 100644
--- a/substrate/frame/scored-pool/Cargo.toml
+++ b/substrate/frame/scored-pool/Cargo.toml
@@ -14,7 +14,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.101", optional = true }
 sp-io = { version = "3.0.0", default-features = false, path = "../../primitives/io" }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -29,7 +28,6 @@ sp-core = { version = "3.0.0", path = "../../primitives/core" }
 default = ["std"]
 std = [
 	"codec/std",
-	"serde",
 	"sp-io/std",
 	"sp-runtime/std",
 	"sp-std/std",
diff --git a/substrate/frame/session/Cargo.toml b/substrate/frame/session/Cargo.toml
index 52b8ebbdf47803ac1129c3c3e0f123e6ffb6250a..44e1f2f67858bcf1fc31204108ce4cb87212f516 100644
--- a/substrate/frame/session/Cargo.toml
+++ b/substrate/frame/session/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-core = { version = "3.0.0", default-features = false, path = "../../primitives/core" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -35,7 +34,6 @@ lazy_static = "1.4.0"
 default = ["std", "historical"]
 historical = ["sp-trie"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-io/std",
diff --git a/substrate/frame/society/Cargo.toml b/substrate/frame/society/Cargo.toml
index a3c6dcadab86d15ef873e4c79ede2c8013c7dbfa..f9c2990061985a71aa0f75aff91ac9cc4d78daf0 100644
--- a/substrate/frame/society/Cargo.toml
+++ b/substrate/frame/society/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-runtime = { version = "3.0.0", default-features = false, path = "../../primitives/runtime" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -31,7 +30,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 default = ["std"]
 std = [
 	"codec/std",
-	"serde",
 	"sp-runtime/std",
 	"rand_chacha/std",
 	"sp-std/std",
diff --git a/substrate/frame/staking/src/lib.rs b/substrate/frame/staking/src/lib.rs
index c28dbc87bccddd0597327e8e90c9c3e048f5f174..c938dceb76e494d6479465a76a23192be7eb32b4 100644
--- a/substrate/frame/staking/src/lib.rs
+++ b/substrate/frame/staking/src/lib.rs
@@ -313,8 +313,6 @@ use sp_staking::{
 	SessionIndex,
 	offence::{OnOffenceHandler, OffenceDetails, Offence, ReportOffence, OffenceError},
 };
-#[cfg(feature = "std")]
-use sp_runtime::{Serialize, Deserialize};
 use frame_system::{
 	self as system, ensure_signed, ensure_root,
 	offchain::SendTransactionTypes,
@@ -380,7 +378,7 @@ pub struct EraRewardPoints<AccountId: Ord> {
 
 /// Indicates the initial status of the staker.
 #[derive(RuntimeDebug)]
-#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
 pub enum StakerStatus<AccountId> {
 	/// Chilling.
 	Idle,
@@ -793,7 +791,7 @@ pub trait Config: frame_system::Config + SendTransactionTypes<Call<Self>> {
 
 /// Mode of era-forcing.
 #[derive(Copy, Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug)]
-#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
 pub enum Forcing {
 	/// Not forcing anything - just let whatever happen.
 	NotForcing,
diff --git a/substrate/frame/sudo/Cargo.toml b/substrate/frame/sudo/Cargo.toml
index c1b841c30c6a34dae213174d521b8d20de2148f8..a73dfaeb1d98111b65f78d6890a4ce40d47feb90 100644
--- a/substrate/frame/sudo/Cargo.toml
+++ b/substrate/frame/sudo/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
 sp-io = { version = "3.0.0", default-features = false, path = "../../primitives/io" }
@@ -27,7 +26,6 @@ sp-core = { version = "3.0.0", path = "../../primitives/core" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-io/std",
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 cc35451b646f317c25f5c6dcbb01ca87e8a142d8..23ccdfa5ddc9abe3fc19a118d69da25f8b72d807 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/genesis_config.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/genesis_config.rs
@@ -29,6 +29,8 @@ 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);
+
 	match genesis_config_item {
 		syn::Item::Enum(syn::ItemEnum { attrs, ..}) |
 		syn::Item::Struct(syn::ItemStruct { attrs, .. }) |
@@ -50,6 +52,7 @@ pub fn expand_genesis_config(def: &mut Def) -> proc_macro2::TokenStream {
 			attrs.push(syn::parse_quote!( #[serde(deny_unknown_fields)] ));
 			attrs.push(syn::parse_quote!( #[serde(bound(serialize = ""))] ));
 			attrs.push(syn::parse_quote!( #[serde(bound(deserialize = ""))] ));
+			attrs.push(syn::parse_quote!( #[serde(crate = #serde_crate)] ));
 		},
 		_ => unreachable!("Checked by genesis_config parser"),
 	}
diff --git a/substrate/frame/support/procedural/src/storage/genesis_config/mod.rs b/substrate/frame/support/procedural/src/storage/genesis_config/mod.rs
index 87dfabcefbaaa69d917aee39b2f2bc382735903d..6dfa5a13fe5b2a50064f8d264c6cd14ce2b9da8d 100644
--- a/substrate/frame/support/procedural/src/storage/genesis_config/mod.rs
+++ b/substrate/frame/support/procedural/src/storage/genesis_config/mod.rs
@@ -65,6 +65,7 @@ fn decl_genesis_config_and_impl_default(
 	let genesis_struct = &genesis_config.genesis_struct;
 	let genesis_impl = &genesis_config.genesis_impl;
 	let genesis_where_clause = &genesis_config.genesis_where_clause;
+	let serde_crate = format!("{}::serde", scrate);
 
 	quote!(
 		/// Genesis config for the module, allow to build genesis storage.
@@ -72,6 +73,7 @@ fn decl_genesis_config_and_impl_default(
 		#[cfg(feature = "std")]
 		#[serde(rename_all = "camelCase")]
 		#[serde(deny_unknown_fields)]
+		#[serde(crate = #serde_crate)]
 		#serde_bug_bound
 		pub struct GenesisConfig#genesis_struct_decl #genesis_where_clause {
 			#( #config_fields )*
diff --git a/substrate/frame/support/src/genesis_config.rs b/substrate/frame/support/src/genesis_config.rs
index 3f7f943603e42fc9cf60d75e4ed963a33a4483cb..e6ba86f9fe922ea0a549457d1ba0e09cd0850b80 100644
--- a/substrate/frame/support/src/genesis_config.rs
+++ b/substrate/frame/support/src/genesis_config.rs
@@ -76,10 +76,13 @@ macro_rules! impl_outer_config {
 		}
 
 		$crate::paste::item! {
+			#[cfg(any(feature = "std", test))]
+			use $crate::serde as __genesis_config_serde_import__;
 			#[cfg(any(feature = "std", test))]
 			#[derive($crate::serde::Serialize, $crate::serde::Deserialize, Default)]
 			#[serde(rename_all = "camelCase")]
 			#[serde(deny_unknown_fields)]
+			#[serde(crate = "__genesis_config_serde_import__")]
 			pub struct $main {
 				$(
 					pub [< $snake $(_ $instance )? >]: $config,
diff --git a/substrate/frame/timestamp/Cargo.toml b/substrate/frame/timestamp/Cargo.toml
index 01aa6ff3cf26103f930a42fefae03e540e74c7a8..05ea8e40c66277e6885292f6302f1ed974e158fc 100644
--- a/substrate/frame/timestamp/Cargo.toml
+++ b/substrate/frame/timestamp/Cargo.toml
@@ -15,7 +15,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
 sp-io = { version = "3.0.0", default-features = false, path = "../../primitives/io", optional = true }
@@ -41,7 +40,6 @@ std = [
 	"sp-runtime/std",
 	"frame-benchmarking/std",
 	"frame-support/std",
-	"serde",
 	"frame-system/std",
 	"sp-timestamp/std",
 	"log/std",
diff --git a/substrate/frame/treasury/src/lib.rs b/substrate/frame/treasury/src/lib.rs
index bda4c761b55cf1b0d7a3744776de79be487c80ca..7de193dd69848674c966068a80ed33829c995b26 100644
--- a/substrate/frame/treasury/src/lib.rs
+++ b/substrate/frame/treasury/src/lib.rs
@@ -63,8 +63,6 @@ mod benchmarking;
 
 pub mod weights;
 
-#[cfg(feature = "std")]
-use serde::{Serialize, Deserialize};
 use sp_std::prelude::*;
 use frame_support::{decl_module, decl_storage, decl_event, ensure, print, decl_error, PalletId};
 use frame_support::traits::{
@@ -158,7 +156,7 @@ pub trait SpendFunds<T: Config<I>, I=DefaultInstance> {
 pub type ProposalIndex = u32;
 
 /// A spending proposal.
-#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
 #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug)]
 pub struct Proposal<AccountId, Balance> {
 	/// The account proposing it.
diff --git a/substrate/frame/utility/Cargo.toml b/substrate/frame/utility/Cargo.toml
index f55cff4d653c5c7e17410926d107ad7ecb9c80ea..1eb92df4ecaa683ab3b15faa48c02573f5409cbd 100644
--- a/substrate/frame/utility/Cargo.toml
+++ b/substrate/frame/utility/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 frame-support = { version = "3.0.0", default-features = false, path = "../support" }
 frame-system = { version = "3.0.0", default-features = false, path = "../system" }
@@ -31,7 +30,6 @@ pallet-balances = { version = "3.0.0", path = "../balances" }
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-runtime/std",
 	"frame-support/std",
diff --git a/substrate/frame/vesting/Cargo.toml b/substrate/frame/vesting/Cargo.toml
index e1335237eb5088188716f7a3c63283713881b779..25890fea038defccfdca2288bc9a91e103c973be 100644
--- a/substrate/frame/vesting/Cargo.toml
+++ b/substrate/frame/vesting/Cargo.toml
@@ -13,7 +13,6 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.101", optional = true }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }
 enumflags2 = { version = "0.6.2" }
 sp-std = { version = "3.0.0", default-features = false, path = "../../primitives/std" }
@@ -32,7 +31,6 @@ hex-literal = "0.3.1"
 [features]
 default = ["std"]
 std = [
-	"serde",
 	"codec/std",
 	"sp-std/std",
 	"sp-runtime/std",
diff --git a/substrate/primitives/runtime/src/traits.rs b/substrate/primitives/runtime/src/traits.rs
index 2c4572ac35115d8ac398c0b82f975f8e8ab12c8a..41820d8cb4a1c77c72b72c6f8719e1d3c5b12a1e 100644
--- a/substrate/primitives/runtime/src/traits.rs
+++ b/substrate/primitives/runtime/src/traits.rs
@@ -1217,19 +1217,24 @@ macro_rules! impl_opaque_keys {
 			)*
 		}
 	) => {
-		$( #[ $attr ] )*
-		#[derive(
-			Default, Clone, PartialEq, Eq,
-			$crate::codec::Encode,
-			$crate::codec::Decode,
-			$crate::RuntimeDebug,
-		)]
-		#[cfg_attr(feature = "std", derive($crate::serde::Serialize, $crate::serde::Deserialize))]
-		pub struct $name {
-			$(
-				$( #[ $inner_attr ] )*
-				pub $field: <$type as $crate::BoundToRuntimeAppPublic>::Public,
-			)*
+		$crate::paste::paste! {
+			#[cfg(feature = "std")]
+			use $crate::serde as [< __opaque_keys_serde_import__ $name >];
+			$( #[ $attr ] )*
+				#[derive(
+					Default, Clone, PartialEq, Eq,
+					$crate::codec::Encode,
+					$crate::codec::Decode,
+					$crate::RuntimeDebug,
+				)]
+			#[cfg_attr(feature = "std", derive($crate::serde::Serialize, $crate::serde::Deserialize))]
+			#[cfg_attr(feature = "std", serde(crate = "__opaque_keys_serde_import__" $name))]
+			pub struct $name {
+				$(
+					$( #[ $inner_attr ] )*
+						pub $field: <$type as $crate::BoundToRuntimeAppPublic>::Public,
+				)*
+			}
 		}
 
 		impl $name {