diff --git a/.github/scripts/cmd/cmd.py b/.github/scripts/cmd/cmd.py
index 01f36ea375c5bf8bc6a7039e184de39b5013faab..6a624bf4237b5ff4f07404d45e8ce2a48ef70d69 100755
--- a/.github/scripts/cmd/cmd.py
+++ b/.github/scripts/cmd/cmd.py
@@ -15,12 +15,21 @@ runtimesMatrix = json.load(f)
 runtimeNames = list(map(lambda x: x['name'], runtimesMatrix))
 
 common_args = {
-    '--continue-on-fail': {"action": "store_true", "help": "Won't exit(1) on failed command and continue with next steps. "},
     '--quiet': {"action": "store_true", "help": "Won't print start/end/failed messages in PR"},
     '--clean': {"action": "store_true", "help": "Clean up the previous bot's & author's comments in PR"},
     '--image': {"help": "Override docker image '--image docker.io/paritytech/ci-unified:latest'"},
 }
 
+def print_and_log(message, output_file='/tmp/cmd/command_output.log'):
+    print(message)
+    with open(output_file, 'a') as f:
+        f.write(message + '\n')
+
+def setup_logging():
+    if not os.path.exists('/tmp/cmd'):
+        os.makedirs('/tmp/cmd')
+    open('/tmp/cmd/command_output.log', 'w')
+
 parser = argparse.ArgumentParser(prog="/cmd ", description='A command runner for polkadot-sdk repo', add_help=False)
 parser.add_argument('--help', action=_HelpAction, help='help for help if you need some help')  # help for help
 for arg, config in common_args.items():
@@ -28,6 +37,8 @@ for arg, config in common_args.items():
 
 subparsers = parser.add_subparsers(help='a command to run', dest='command')
 
+setup_logging()
+
 """
 BENCH 
 """
@@ -39,8 +50,8 @@ bench_example = '''**Examples**:
  Runs benchmarks for pallet_balances and pallet_multisig for all runtimes which have these pallets. **--quiet** makes it to output nothing to PR but reactions
  %(prog)s --pallet pallet_balances pallet_xcm_benchmarks::generic --quiet
  
- Runs bench for all pallets for westend runtime and continues even if some benchmarks fail
- %(prog)s --runtime westend --continue-on-fail
+ Runs bench for all pallets for westend runtime and fails fast on first failed benchmark
+ %(prog)s --runtime westend --fail-fast
  
  Does not output anything and cleans up the previous bot's & author command triggering comments in PR 
  %(prog)s --runtime westend rococo --pallet pallet_balances pallet_multisig --quiet --clean
@@ -53,6 +64,7 @@ for arg, config in common_args.items():
 
 parser_bench.add_argument('--runtime', help='Runtime(s) space separated', choices=runtimeNames, nargs='*', default=runtimeNames)
 parser_bench.add_argument('--pallet', help='Pallet(s) space separated', nargs='*', default=[])
+parser_bench.add_argument('--fail-fast', help='Fail fast on first failed benchmark', action='store_true')
 
 """
 FMT 
@@ -156,7 +168,9 @@ def main():
                     manifest_path = os.popen(search_manifest_path).read()
                     if not manifest_path:
                         print(f'-- pallet {pallet} not found in dev runtime')
-                        exit(1)
+                        if args.fail_fast:
+                            print_and_log(f'Error: {pallet} not found in dev runtime')
+                            sys.exit(1)
                     package_dir = os.path.dirname(manifest_path)
                     print(f'-- package_dir: {package_dir}')
                     print(f'-- manifest_path: {manifest_path}')
@@ -186,8 +200,9 @@ def main():
                     f"{config['bench_flags']}"
                 print(f'-- Running: {cmd} \n')
                 status = os.system(cmd)
-                if status != 0 and not args.continue_on_fail:
-                    print(f'Failed to benchmark {pallet} in {runtime}')
+
+                if status != 0 and args.fail_fast:
+                    print_and_log(f'❌ Failed to benchmark {pallet} in {runtime}')
                     sys.exit(1)
 
                 # Otherwise collect failed benchmarks and print them at the end
@@ -198,14 +213,14 @@ def main():
                     successful_benchmarks[f'{runtime}'] = successful_benchmarks.get(f'{runtime}', []) + [pallet]
 
         if failed_benchmarks:
-            print('❌ Failed benchmarks of runtimes/pallets:')
+            print_and_log('❌ Failed benchmarks of runtimes/pallets:')
             for runtime, pallets in failed_benchmarks.items():
-                print(f'-- {runtime}: {pallets}')
+                print_and_log(f'-- {runtime}: {pallets}')
 
         if successful_benchmarks:
-            print('✅ Successful benchmarks of runtimes/pallets:')
+            print_and_log('✅ Successful benchmarks of runtimes/pallets:')
             for runtime, pallets in successful_benchmarks.items():
-                print(f'-- {runtime}: {pallets}')
+                print_and_log(f'-- {runtime}: {pallets}')
 
     elif args.command == 'fmt':
         command = f"cargo +nightly fmt"
@@ -213,8 +228,8 @@ def main():
         nightly_status = os.system(f'{command}')
         taplo_status = os.system('taplo format --config .config/taplo.toml')
 
-        if (nightly_status != 0 or taplo_status != 0) and not args.continue_on_fail:
-            print('❌ Failed to format code')
+        if (nightly_status != 0 or taplo_status != 0):
+            print_and_log('❌ Failed to format code')
             sys.exit(1)
 
     elif args.command == 'update-ui':
@@ -222,15 +237,15 @@ def main():
         print(f'Updating ui with `{command}`')
         status = os.system(f'{command}')
 
-        if status != 0 and not args.continue_on_fail:
-            print('❌ Failed to format code')
+        if status != 0:
+            print_and_log('❌ Failed to update ui')
             sys.exit(1)
 
     elif args.command == 'prdoc':
         # Call the main function from ./github/scripts/generate-prdoc.py module
         exit_code = generate_prdoc.main(args)
-        if exit_code != 0 and not args.continue_on_fail:
-            print('❌ Failed to generate prdoc')
+        if exit_code != 0:
+            print_and_log('❌ Failed to generate prdoc')
             sys.exit(exit_code)
 
     print('🚀 Done')
diff --git a/.github/scripts/cmd/test_cmd.py b/.github/scripts/cmd/test_cmd.py
index 0316c7ff1bb48a793c6227a6c1a36aa24b8c762d..faad3f261b9ae4840451060c5f70d00732cdd814 100644
--- a/.github/scripts/cmd/test_cmd.py
+++ b/.github/scripts/cmd/test_cmd.py
@@ -96,7 +96,7 @@ class TestCmd(unittest.TestCase):
             command='bench',
             runtime=list(map(lambda x: x['name'], mock_runtimes_matrix)),
             pallet=['pallet_balances'],
-            continue_on_fail=False,
+            fail_fast=True,
             quiet=False,
             clean=False,
             image=None
@@ -153,7 +153,7 @@ class TestCmd(unittest.TestCase):
             command='bench',
             runtime=['westend'],
             pallet=['pallet_balances', 'pallet_staking'],
-            continue_on_fail=False,
+            fail_fast=True,
             quiet=False,
             clean=False,
             image=None
@@ -196,7 +196,7 @@ class TestCmd(unittest.TestCase):
             command='bench',
             runtime=['westend'],
             pallet=['pallet_xcm_benchmarks::generic'],
-            continue_on_fail=False,
+            fail_fast=True,
             quiet=False,
             clean=False,
             image=None
@@ -232,7 +232,7 @@ class TestCmd(unittest.TestCase):
             command='bench',
             runtime=['westend', 'rococo'],
             pallet=['pallet_balances', 'pallet_staking'],
-            continue_on_fail=False,
+            fail_fast=True,
             quiet=False,
             clean=False,
             image=None
@@ -290,7 +290,7 @@ class TestCmd(unittest.TestCase):
             command='bench',
             runtime=['dev'],
             pallet=['pallet_balances'],
-            continue_on_fail=False,
+            fail_fast=True,
             quiet=False,
             clean=False,
             image=None
@@ -327,7 +327,7 @@ class TestCmd(unittest.TestCase):
             command='bench',
             runtime=['asset-hub-westend'],
             pallet=['pallet_assets'],
-            continue_on_fail=False,
+            fail_fast=True,
             quiet=False,
             clean=False,
             image=None
@@ -362,7 +362,7 @@ class TestCmd(unittest.TestCase):
             command='bench',
             runtime=['asset-hub-westend'],
             pallet=['pallet_xcm_benchmarks::generic', 'pallet_assets'],
-            continue_on_fail=False,
+            fail_fast=True,
             quiet=False,
             clean=False,
             image=None
@@ -400,7 +400,7 @@ class TestCmd(unittest.TestCase):
 
             self.mock_system.assert_has_calls(expected_calls, any_order=True)
 
-    @patch('argparse.ArgumentParser.parse_known_args', return_value=(argparse.Namespace(command='fmt', continue_on_fail=False), []))
+    @patch('argparse.ArgumentParser.parse_known_args', return_value=(argparse.Namespace(command='fmt'), []))
     @patch('os.system', return_value=0)
     def test_fmt_command(self, mock_system, mock_parse_args):
         with patch('sys.exit') as mock_exit:
@@ -410,7 +410,7 @@ class TestCmd(unittest.TestCase):
             mock_system.assert_any_call('cargo +nightly fmt')
             mock_system.assert_any_call('taplo format --config .config/taplo.toml')
 
-    @patch('argparse.ArgumentParser.parse_known_args', return_value=(argparse.Namespace(command='update-ui', continue_on_fail=False), []))
+    @patch('argparse.ArgumentParser.parse_known_args', return_value=(argparse.Namespace(command='update-ui'), []))
     @patch('os.system', return_value=0)
     def test_update_ui_command(self, mock_system, mock_parse_args):
         with patch('sys.exit') as mock_exit:
@@ -419,7 +419,7 @@ class TestCmd(unittest.TestCase):
             mock_exit.assert_not_called()
             mock_system.assert_called_with('sh ./scripts/update-ui-tests.sh')
 
-    @patch('argparse.ArgumentParser.parse_known_args', return_value=(argparse.Namespace(command='prdoc', continue_on_fail=False), []))
+    @patch('argparse.ArgumentParser.parse_known_args', return_value=(argparse.Namespace(command='prdoc'), []))
     @patch('os.system', return_value=0)
     def test_prdoc_command(self, mock_system, mock_parse_args):
         with patch('sys.exit') as mock_exit:
diff --git a/.github/workflows/check-frame-omni-bencher.yml b/.github/workflows/check-frame-omni-bencher.yml
index 935fc080c4eabd26c480bb690ca3deb262a07275..924a8b7f712fee78b5b114afa69013e40fe6faef 100644
--- a/.github/workflows/check-frame-omni-bencher.yml
+++ b/.github/workflows/check-frame-omni-bencher.yml
@@ -86,14 +86,14 @@ jobs:
           forklift cargo build --release --locked -p $PACKAGE_NAME -p frame-omni-bencher --features=${{ matrix.runtime.bench_features }} --quiet
           echo "Running short benchmarking for PACKAGE_NAME=$PACKAGE_NAME and RUNTIME_BLOB_PATH=$RUNTIME_BLOB_PATH"
           ls -lrt $RUNTIME_BLOB_PATH
-          
+
           cmd="./target/release/frame-omni-bencher v1 benchmark pallet --runtime $RUNTIME_BLOB_PATH --all --steps 2 --repeat 1 $FLAGS"
           echo "Running command: $cmd"
           eval "$cmd"
   confirm-frame-omni-benchers-passed:
     runs-on: ubuntu-latest
     name: All benchmarks passed
-    needs: run-frame-omni-bencher
+    needs: [quick-benchmarks-omni, run-frame-omni-bencher]
     if: always() && !cancelled()
     steps:
       - run: |
diff --git a/.github/workflows/check-runtime-migration.yml b/.github/workflows/check-runtime-migration.yml
index 39a1c4d03486f0da20712f270775a39c66a571e7..758de0e7b43395ae7ba086c6628c4e633f50c8dd 100644
--- a/.github/workflows/check-runtime-migration.yml
+++ b/.github/workflows/check-runtime-migration.yml
@@ -36,14 +36,10 @@ jobs:
         network:
           [
             westend,
-            rococo,
             asset-hub-westend,
-            asset-hub-rococo,
             bridge-hub-westend,
-            bridge-hub-rococo,
-            contracts-rococo,
             collectives-westend,
-            coretime-rococo,
+            coretime-westend,
           ]
         include:
           - network: westend
@@ -52,49 +48,27 @@ jobs:
             uri: "wss://try-runtime-westend.polkadot.io:443"
             subcommand_extra_args: "--no-weight-warnings --blocktime 6000"
             command_extra_args: ""
-          - network: rococo
-            package: rococo-runtime
-            wasm: rococo_runtime.compact.compressed.wasm
-            uri: "wss://try-runtime-rococo.polkadot.io:443"
-            subcommand_extra_args: "--no-weight-warnings --blocktime 6000"
-            command_extra_args: ""
           - network: asset-hub-westend
             package: asset-hub-westend-runtime
             wasm: asset_hub_westend_runtime.compact.compressed.wasm
             uri: "wss://westend-asset-hub-rpc.polkadot.io:443"
             subcommand_extra_args: " --blocktime 6000"
             command_extra_args: ""
-          - network: "asset-hub-rococo"
-            package: "asset-hub-rococo-runtime"
-            wasm: "asset_hub_rococo_runtime.compact.compressed.wasm"
-            uri: "wss://rococo-asset-hub-rpc.polkadot.io:443"
-            subcommand_extra_args: " --blocktime 6000"
-            command_extra_args: ""
-          - network: "bridge-hub-westend"
-            package: "bridge-hub-westend-runtime"
-            wasm: "bridge_hub_westend_runtime.compact.compressed.wasm"
+          - network: bridge-hub-westend
+            package: bridge-hub-westend-runtime
+            wasm: bridge_hub_westend_runtime.compact.compressed.wasm
             uri: "wss://westend-bridge-hub-rpc.polkadot.io:443"
             subcommand_extra_args: " --blocktime 6000"
-          - network: "bridge-hub-rococo"
-            package: "bridge-hub-rococo-runtime"
-            wasm: "bridge_hub_rococo_runtime.compact.compressed.wasm"
-            uri: "wss://rococo-bridge-hub-rpc.polkadot.io:443"
-            subcommand_extra_args: " --blocktime 6000"
-          - network: "contracts-rococo"
-            package: "contracts-rococo-runtime"
-            wasm: "contracts_rococo_runtime.compact.compressed.wasm"
-            uri: "wss://rococo-contracts-rpc.polkadot.io:443"
-            subcommand_extra_args: " --blocktime 6000"
-          - network: "collectives-westend"
-            package: "collectives-westend-runtime"
-            wasm: "collectives_westend_runtime.compact.compressed.wasm"
+          - network: collectives-westend
+            package: collectives-westend-runtime
+            wasm: collectives_westend_runtime.compact.compressed.wasm
             uri: "wss://westend-collectives-rpc.polkadot.io:443"
             command_extra_args: "--disable-spec-name-check"
             subcommand_extra_args: " --blocktime 6000"
-          - network: "coretime-rococo"
-            package: "coretime-rococo-runtime"
-            wasm: "coretime_rococo_runtime.compact.compressed.wasm"
-            uri: "wss://rococo-coretime-rpc.polkadot.io:443"
+          - network: coretime-westend
+            package: coretime-westend-runtime
+            wasm: coretime_westend_runtime.compact.compressed.wasm
+            uri: "wss://westend-coretime-rpc.polkadot.io:443"
             subcommand_extra_args: " --blocktime 6000"
     steps:
       - name: Checkout
diff --git a/.github/workflows/cmd.yml b/.github/workflows/cmd.yml
index f8bc7cb5b606d8d692898bb8b6eeebfd284868fa..525ab0c0fc2300c2b74f3ef16756853446275650 100644
--- a/.github/workflows/cmd.yml
+++ b/.github/workflows/cmd.yml
@@ -283,6 +283,7 @@ jobs:
     env:
       JOB_NAME: "cmd"
     runs-on: ${{ needs.set-image.outputs.RUNNER }}
+    timeout-minutes: 4320 # 72 hours -> 3 days; as it could take a long time to run all the runtimes/pallets
     container:
       image: ${{ needs.set-image.outputs.IMAGE }}
     steps:
@@ -368,6 +369,23 @@ jobs:
           git status
           git diff
 
+          if [ -f /tmp/cmd/command_output.log ]; then
+            CMD_OUTPUT=$(cat /tmp/cmd/command_output.log)
+            # export to summary to display in the PR
+            echo "$CMD_OUTPUT" >> $GITHUB_STEP_SUMMARY
+            # should be multiline, otherwise it captures the first line only
+            echo 'cmd_output<<EOF' >> $GITHUB_OUTPUT
+            echo "$CMD_OUTPUT" >> $GITHUB_OUTPUT
+            echo 'EOF' >> $GITHUB_OUTPUT
+          fi
+
+      - name: Upload command output
+        if: ${{ always() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: command-output
+          path: /tmp/cmd/command_output.log
+
       - name: Commit changes
         run: |
           if [ -n "$(git status --porcelain)" ]; then
@@ -413,35 +431,50 @@ jobs:
         uses: actions/github-script@v7
         env:
           SUBWEIGHT: "${{ steps.subweight.outputs.result }}"
+          CMD_OUTPUT: "${{ steps.cmd.outputs.cmd_output }}"
         with:
           github-token: ${{ secrets.GITHUB_TOKEN }}
           script: |
             let runUrl = ${{ steps.build-link.outputs.run_url }}
             let subweight = process.env.SUBWEIGHT;
+            let cmdOutput = process.env.CMD_OUTPUT;
+            console.log(cmdOutput);
 
-            let subweightCollapsed = subweight 
+            let subweightCollapsed = subweight.trim() !== '' 
               ? `<details>\n\n<summary>Subweight results:</summary>\n\n${subweight}\n\n</details>` 
               : '';
 
+            let cmdOutputCollapsed = cmdOutput.trim() !== ''
+              ? `<details>\n\n<summary>Command output:</summary>\n\n${cmdOutput}\n\n</details>` 
+              : '';
+
             github.rest.issues.createComment({
               issue_number: context.issue.number,
               owner: context.repo.owner,
               repo: context.repo.repo,
-              body: `Command "${{ steps.get-pr-comment.outputs.group2 }}" has finished ✅ [See logs here](${runUrl})${subweightCollapsed}`
+              body: `Command "${{ steps.get-pr-comment.outputs.group2 }}" has finished ✅ [See logs here](${runUrl})${subweightCollapsed}${cmdOutputCollapsed}`
             })
 
       - name: Comment PR (Failure)
         if: ${{ failure() && !contains(github.event.comment.body, '--quiet') }}
         uses: actions/github-script@v7
+        env:
+          CMD_OUTPUT: "${{ steps.cmd.outputs.cmd_output }}"
         with:
           github-token: ${{ secrets.GITHUB_TOKEN }}
           script: |
             let jobUrl = ${{ steps.build-link.outputs.job_url }}
+            let cmdOutput = process.env.CMD_OUTPUT;
+
+            let cmdOutputCollapsed = cmdOutput.trim() !== ''
+              ? `<details>\n\n<summary>Command output:</summary>\n\n${cmdOutput}\n\n</details>` 
+              : '';
+
             github.rest.issues.createComment({
               issue_number: context.issue.number,
               owner: context.repo.owner,
               repo: context.repo.repo,
-              body: `Command "${{ steps.get-pr-comment.outputs.group2 }}" has failed ❌! [See logs here](${jobUrl})`
+              body: `Command "${{ steps.get-pr-comment.outputs.group2 }}" has failed ❌! [See logs here](${jobUrl})${cmdOutputCollapsed}`
             })
 
       - name: Add 😕 reaction on failure
diff --git a/.gitlab/pipeline/test.yml b/.gitlab/pipeline/test.yml
index 00a0aa2c9771c09c29d98840473154ea8427bf7c..81e9ad12751a297febd712ca5228dd4027300e6b 100644
--- a/.gitlab/pipeline/test.yml
+++ b/.gitlab/pipeline/test.yml
@@ -136,20 +136,3 @@ test-rustdoc:
     SKIP_WASM_BUILD: 1
   script:
     - time cargo doc --workspace --all-features --no-deps
-
-quick-benchmarks-omni:
-  stage: test
-  extends:
-    - .docker-env
-    - .common-refs
-    - .run-immediately
-  variables:
-    # Enable debug assertions since we are running optimized builds for testing
-    # but still want to have debug assertions.
-    RUSTFLAGS: "-C debug-assertions"
-    RUST_BACKTRACE: "full"
-    WASM_BUILD_NO_COLOR: 1
-    WASM_BUILD_RUSTFLAGS: "-C debug-assertions"
-  script:
-    - time cargo build --locked --quiet --release -p asset-hub-westend-runtime --features runtime-benchmarks
-    - time cargo run --locked --release -p frame-omni-bencher --quiet -- v1 benchmark pallet --runtime target/release/wbuild/asset-hub-westend-runtime/asset_hub_westend_runtime.compact.compressed.wasm --all --steps 2 --repeat 1 --quiet
diff --git a/.gitlab/pipeline/zombienet/polkadot.yml b/.gitlab/pipeline/zombienet/polkadot.yml
index 33191d99941d6d4830dfd9698dfe66630f95586d..d17380839942a1243dbc9b8d90768b07b05c5415 100644
--- a/.gitlab/pipeline/zombienet/polkadot.yml
+++ b/.gitlab/pipeline/zombienet/polkadot.yml
@@ -94,7 +94,7 @@ zombienet-polkadot-functional-0002-parachains-disputes:
       --local-dir="${LOCAL_DIR}/functional"
       --test="0002-parachains-disputes.zndsl"
 
-.zombienet-polkadot-functional-0003-beefy-and-mmr:
+zombienet-polkadot-functional-0003-beefy-and-mmr:
   extends:
     - .zombienet-polkadot-common
   script:
@@ -172,7 +172,7 @@ zombienet-polkadot-elastic-scaling-0001-basic-3cores-6s-blocks:
   variables:
     FORCED_INFRA_INSTANCE: "spot-iops"
   before_script:
-    - !reference [.zombienet-polkadot-common, before_script]
+    - !reference [ .zombienet-polkadot-common, before_script ]
     - cp --remove-destination ${LOCAL_DIR}/assign-core.js ${LOCAL_DIR}/elastic_scaling
   script:
     - /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh
@@ -183,7 +183,7 @@ zombienet-polkadot-elastic-scaling-0002-elastic-scaling-doesnt-break-parachains:
   extends:
     - .zombienet-polkadot-common
   before_script:
-    - !reference [.zombienet-polkadot-common, before_script]
+    - !reference [ .zombienet-polkadot-common, before_script ]
     - cp --remove-destination ${LOCAL_DIR}/assign-core.js ${LOCAL_DIR}/elastic_scaling
   script:
     - /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh
@@ -218,7 +218,7 @@ zombienet-polkadot-functional-0015-coretime-shared-core:
   extends:
     - .zombienet-polkadot-common
   before_script:
-    - !reference [.zombienet-polkadot-common, before_script]
+    - !reference [ .zombienet-polkadot-common, before_script ]
     - cp --remove-destination ${LOCAL_DIR}/assign-core.js ${LOCAL_DIR}/functional
   script:
     - /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh
@@ -360,10 +360,10 @@ zombienet-polkadot-malus-0001-dispute-valid:
     - job: build-polkadot-zombienet-tests
       artifacts: true
   before_script:
-    - !reference [".zombienet-polkadot-common", "before_script"]
+    - !reference [ ".zombienet-polkadot-common", "before_script" ]
     - export POLKADOT_IMAGE="${ZOMBIENET_INTEGRATION_TEST_IMAGE}"
   script:
-  # we want to use `--no-capture` in zombienet tests.
+    # we want to use `--no-capture` in zombienet tests.
     - unset NEXTEST_FAILURE_OUTPUT
     - unset NEXTEST_SUCCESS_OUTPUT
     - cargo nextest run --archive-file ./artifacts/polkadot-zombienet-tests.tar.zst --no-capture -- smoke::coretime_revenue::coretime_revenue_test
diff --git a/Cargo.lock b/Cargo.lock
index d57eac1609b6263186abba8ef20e75d9ef439a9c..b823690125fc5e99d110f54d30d423b23ae2bd9c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -12178,14 +12178,9 @@ dependencies = [
 name = "pallet-parachain-template"
 version = "0.0.0"
 dependencies = [
- "frame-benchmarking",
- "frame-support",
- "frame-system",
  "parity-scale-codec",
+ "polkadot-sdk-frame",
  "scale-info",
- "sp-core 28.0.0",
- "sp-io 30.0.0",
- "sp-runtime 31.0.1",
 ]
 
 [[package]]
@@ -13047,57 +13042,16 @@ version = "0.0.0"
 dependencies = [
  "clap 4.5.13",
  "color-print",
- "cumulus-client-cli",
- "cumulus-client-collator",
- "cumulus-client-consensus-aura",
- "cumulus-client-consensus-common",
- "cumulus-client-consensus-proposer",
- "cumulus-client-service",
- "cumulus-primitives-core",
- "cumulus-primitives-parachain-inherent",
- "cumulus-relay-chain-interface",
  "docify",
- "frame-benchmarking",
- "frame-benchmarking-cli",
  "futures",
  "jsonrpsee 0.24.3",
  "log",
- "pallet-transaction-payment-rpc",
  "parachain-template-runtime",
  "parity-scale-codec",
- "polkadot-cli",
- "polkadot-primitives",
- "sc-basic-authorship",
- "sc-chain-spec",
- "sc-cli",
- "sc-client-api",
- "sc-consensus",
- "sc-executor 0.32.0",
- "sc-network",
- "sc-network-sync",
- "sc-offchain",
- "sc-rpc",
- "sc-service",
- "sc-sysinfo",
- "sc-telemetry",
+ "polkadot-sdk",
  "sc-tracing",
- "sc-transaction-pool",
- "sc-transaction-pool-api",
  "serde",
  "serde_json",
- "sp-api 26.0.0",
- "sp-block-builder",
- "sp-blockchain",
- "sp-consensus-aura",
- "sp-core 28.0.0",
- "sp-genesis-builder",
- "sp-io 30.0.0",
- "sp-keystore 0.34.0",
- "sp-runtime 31.0.1",
- "sp-timestamp",
- "staging-xcm",
- "substrate-build-script-utils",
- "substrate-frame-rpc-system",
  "substrate-prometheus-endpoint",
 ]
 
@@ -13105,60 +13059,16 @@ dependencies = [
 name = "parachain-template-runtime"
 version = "0.0.0"
 dependencies = [
- "cumulus-pallet-aura-ext",
  "cumulus-pallet-parachain-system",
- "cumulus-pallet-session-benchmarking",
- "cumulus-pallet-xcm",
- "cumulus-pallet-xcmp-queue",
- "cumulus-primitives-aura",
- "cumulus-primitives-core",
- "cumulus-primitives-storage-weight-reclaim",
- "cumulus-primitives-utility",
  "docify",
- "frame-benchmarking",
- "frame-executive",
- "frame-metadata-hash-extension",
- "frame-support",
- "frame-system",
- "frame-system-benchmarking",
- "frame-system-rpc-runtime-api",
- "frame-try-runtime",
  "hex-literal",
  "log",
- "pallet-aura",
- "pallet-authorship",
- "pallet-balances",
- "pallet-collator-selection",
- "pallet-message-queue",
  "pallet-parachain-template",
- "pallet-session",
- "pallet-sudo",
- "pallet-timestamp",
- "pallet-transaction-payment",
- "pallet-transaction-payment-rpc-runtime-api",
- "pallet-xcm",
- "parachains-common",
  "parity-scale-codec",
- "polkadot-parachain-primitives",
- "polkadot-runtime-common",
+ "polkadot-sdk",
  "scale-info",
  "serde_json",
  "smallvec",
- "sp-api 26.0.0",
- "sp-block-builder",
- "sp-consensus-aura",
- "sp-core 28.0.0",
- "sp-genesis-builder",
- "sp-inherents",
- "sp-offchain",
- "sp-runtime 31.0.1",
- "sp-session",
- "sp-transaction-pool",
- "sp-version 29.0.0",
- "staging-parachain-info",
- "staging-xcm",
- "staging-xcm-builder",
- "staging-xcm-executor",
  "substrate-wasm-builder",
 ]
 
@@ -26352,6 +26262,7 @@ dependencies = [
 name = "westend-runtime"
 version = "7.0.0"
 dependencies = [
+ "approx",
  "binary-merkle-tree",
  "bitvec",
  "frame-benchmarking",
diff --git a/Cargo.toml b/Cargo.toml
index fde05e90ca6e68d3b26ea00448a8d4751ef96db4..08f06982d2f8476e03a0da4a04817f6dbcd6407a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -587,6 +587,7 @@ alloy-primitives = { version = "0.4.2", default-features = false }
 alloy-sol-types = { version = "0.4.2", default-features = false }
 always-assert = { version = "0.1" }
 anyhow = { version = "1.0.81", default-features = false }
+approx = { version = "0.5.1" }
 aquamarine = { version = "0.5.0" }
 arbitrary = { version = "1.3.2" }
 ark-bls12-377 = { version = "0.4.0", default-features = false }
diff --git a/README.md b/README.md
index b8ddf8427c9fd146fa26dbce56dd8f66f082f25b..8016b6b37301a32a9ccf5dd7d80827625620d760 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,3 @@
-
 <div align="center">
 
 ![SDK Logo](./docs/images/Polkadot_Logo_Horizontal_Pink_White.png#gh-dark-mode-only)
diff --git a/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs b/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs
index e909b804587f8c3792db350c00d394f923428d2f..187856b6c6122a3aa0e8c6411251ad2b8cc4c2da 100644
--- a/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs
+++ b/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs
@@ -120,6 +120,7 @@ pub type UncheckedExtrinsic =
 pub type Migrations = (
 	pallet_collator_selection::migration::v2::MigrationToV2<Runtime>,
 	cumulus_pallet_xcmp_queue::migration::v4::MigrationToV4<Runtime>,
+	cumulus_pallet_xcmp_queue::migration::v5::MigrateV4ToV5<Runtime>,
 	pallet_broker::migration::MigrateV0ToV1<Runtime>,
 	pallet_broker::migration::MigrateV1ToV2<Runtime>,
 	pallet_broker::migration::MigrateV2ToV3<Runtime>,
diff --git a/docs/contributor/commands-readme.md b/docs/contributor/commands-readme.md
index 3a0fadc3bb253505ca2127b62a85f2279183cb16..52c554cc7098784be791c664f137fb3f0a754ac0 100644
--- a/docs/contributor/commands-readme.md
+++ b/docs/contributor/commands-readme.md
@@ -24,11 +24,6 @@ By default, the Start and End/Failure of the command will be commented with the
 If you want to avoid, use this flag. Go to
 [Action Tab](https://github.com/paritytech/polkadot-sdk/actions/workflows/cmd.yml) to see the pipeline status.
 
-2.`--continue-on-fail` to continue running the command even if something inside a command
-(like specific pallet weight generation) are failed.
-Basically avoids interruption in the middle with `exit 1`
-The pipeline logs will include what is failed (like which runtimes/pallets), then you can re-run them separately or not.
-
 3.`--clean` to clean up all yours and bot's comments in PR relevant to `/cmd` commands. If you run too many commands,
 or they keep failing, and you're rerunning them again, it's handy to add this flag to keep a PR clean.
 
diff --git a/docs/contributor/weight-generation.md b/docs/contributor/weight-generation.md
index 77a570c94530c873a23d6c6bf7fe47e4ea2beff5..a22a55404a4460471fd8b3848e18ef020e14ba18 100644
--- a/docs/contributor/weight-generation.md
+++ b/docs/contributor/weight-generation.md
@@ -19,51 +19,53 @@ In a PR run the actions through comment:
 
 To regenerate all weights (however it will take long,
 so don't do it unless you really need it), run the following command:
+
 ```sh
 /cmd bench
 ```
 
 To generate weights for all pallets in a particular runtime(s), run the following command:
+
 ```sh
 /cmd bench --runtime kusama polkadot
 ```
 
 For Substrate pallets (supports sub-modules too):
+
 ```sh
 /cmd bench --runtime dev --pallet pallet_asset_conversion_ops
 ```
 
 > **📝 Note**: The action is not being run right-away, it will be queued and run in the next available runner.
-So might be quick, but might also take up to 10 mins (That's in control of Github).  
-Once the action is run, you'll see reaction 👀 on original comment, and if you didn't pass `--quiet` -
-it will also send a link to a pipeline when started, and link to whole workflow when finished.
+> So might be quick, but might also take up to 10 mins (That's in control of Github).  
+> Once the action is run, you'll see reaction 👀 on original comment, and if you didn't pass `--quiet` -
+> it will also send a link to a pipeline when started, and link to whole workflow when finished.
+>
+> **📝 Note**: It will try keep benchmarking even if some pallets failed, with the result of failed/successful pallets.
+>
+> If you want to fail fast on first failed benchmark, add `--fail-fast` flag to the command.
 
 ---
 
-> **💡Hint #1** : if you run all runtimes or all pallets, it might be that some pallet in the middle is failed
-to generate weights, thus it stops (fails) the whole pipeline.
-> If you want, you can make it to continue running, even if some pallets are failed, add `--continue-on-fail`
-flag to the command. The report will include which runtimes/pallets have failed, then you can re-run
-them separately after all is done.
-
 This way it runs all possible runtimes for the specified pallets, if it finds them in the runtime
+
 ```sh
 /cmd bench --pallet pallet_balances pallet_xcm_benchmarks::generic pallet_xcm_benchmarks::fungible
 ```
 
 If you want to run all specific pallet(s) for specific runtime(s), you can do it like this:
+
 ```sh
 /cmd bench --runtime bridge-hub-polkadot --pallet pallet_xcm_benchmarks::generic pallet_xcm_benchmarks::fungible
 ```
 
-
-> **💡Hint #2** : Sometimes when you run too many commands, or they keep failing and you're rerunning them again,
-it's handy to add `--clean` flag to the command. This will clean up all yours and bot's comments in PR relevant to
-/cmd commands.
+> **💡Hint #1** : Sometimes when you run too many commands, or they keep failing and you're rerunning them again,
+> it's handy to add `--clean` flag to the command. This will clean up all yours and bot's comments in PR relevant to
+> /cmd commands.
 
 ```sh
-/cmd bench --runtime kusama polkadot --pallet=pallet_balances --clean --continue-on-fail
+/cmd bench --runtime kusama polkadot --pallet=pallet_balances --clean
 ```
 
-> **💡Hint #3** : If you have questions or need help, feel free to tag @paritytech/opstooling (in github comments)
-or ping in [matrix](https://matrix.to/#/#command-bot:parity.io) channel.
+> **💡Hint #2** : If you have questions or need help, feel free to tag @paritytech/opstooling (in github comments)
+> or ping in [matrix](https://matrix.to/#/#command-bot:parity.io) channel.
diff --git a/polkadot/node/core/pvf/src/execute/queue.rs b/polkadot/node/core/pvf/src/execute/queue.rs
index 096cec3501b8a9c357faede4e052e7256315428c..2ac5116912eb9eb6374d27802b0a56c5a02e22d3 100644
--- a/polkadot/node/core/pvf/src/execute/queue.rs
+++ b/polkadot/node/core/pvf/src/execute/queue.rs
@@ -143,7 +143,7 @@ impl Workers {
 
 enum QueueEvent {
 	Spawn(IdleWorker, WorkerHandle, ExecuteJob),
-	StartWork(
+	FinishWork(
 		Worker,
 		Result<WorkerInterfaceResponse, WorkerInterfaceError>,
 		ArtifactId,
@@ -333,7 +333,7 @@ async fn handle_mux(queue: &mut Queue, event: QueueEvent) {
 		QueueEvent::Spawn(idle, handle, job) => {
 			handle_worker_spawned(queue, idle, handle, job);
 		},
-		QueueEvent::StartWork(worker, outcome, artifact_id, result_tx) => {
+		QueueEvent::FinishWork(worker, outcome, artifact_id, result_tx) => {
 			handle_job_finish(queue, worker, outcome, artifact_id, result_tx).await;
 		},
 	}
@@ -615,7 +615,7 @@ fn assign(queue: &mut Queue, worker: Worker, job: ExecuteJob) {
 				job.pov,
 			)
 			.await;
-			QueueEvent::StartWork(worker, result, job.artifact.id, job.result_tx)
+			QueueEvent::FinishWork(worker, result, job.artifact.id, job.result_tx)
 		}
 		.boxed(),
 	);
diff --git a/polkadot/runtime/westend/Cargo.toml b/polkadot/runtime/westend/Cargo.toml
index 28ffd9fb150a01ae1786d6938c6d32ad300a4e36..16bec1a7702a961750a43082bfe56b792f271255 100644
--- a/polkadot/runtime/westend/Cargo.toml
+++ b/polkadot/runtime/westend/Cargo.toml
@@ -118,6 +118,7 @@ xcm-builder = { workspace = true }
 xcm-runtime-apis = { workspace = true }
 
 [dev-dependencies]
+approx = { workspace = true }
 tiny-keccak = { features = ["keccak"], workspace = true }
 sp-keyring = { workspace = true, default-features = true }
 serde_json = { workspace = true, default-features = true }
diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs
index fe1777bc94eef9ee0e0fde69f758cd1bd18aaa61..0216ccaf4917317db42e0ce32620b2f7d8f764ea 100644
--- a/polkadot/runtime/westend/src/lib.rs
+++ b/polkadot/runtime/westend/src/lib.rs
@@ -65,8 +65,8 @@ use polkadot_runtime_common::{
 	elections::OnChainAccuracy,
 	identity_migrator, impl_runtime_weights,
 	impls::{
-		relay_era_payout, ContainsParts, EraPayoutParams, LocatableAssetConverter, ToAuthor,
-		VersionedLocatableAsset, VersionedLocationConverter,
+		ContainsParts, LocatableAssetConverter, ToAuthor, VersionedLocatableAsset,
+		VersionedLocationConverter,
 	},
 	paras_registrar, paras_sudo_wrapper, prod_or_fast, slots,
 	traits::OnSwap,
@@ -681,33 +681,26 @@ impl pallet_bags_list::Config<VoterBagsListInstance> for Runtime {
 pub struct EraPayout;
 impl pallet_staking::EraPayout<Balance> for EraPayout {
 	fn era_payout(
-		total_staked: Balance,
-		total_issuance: Balance,
+		_total_staked: Balance,
+		_total_issuance: Balance,
 		era_duration_millis: u64,
 	) -> (Balance, Balance) {
-		const MILLISECONDS_PER_YEAR: u64 = 1000 * 3600 * 24 * 36525 / 100;
-
-		let params = EraPayoutParams {
-			total_staked,
-			total_stakable: total_issuance,
-			ideal_stake: dynamic_params::inflation::IdealStake::get(),
-			max_annual_inflation: dynamic_params::inflation::MaxInflation::get(),
-			min_annual_inflation: dynamic_params::inflation::MinInflation::get(),
-			falloff: dynamic_params::inflation::Falloff::get(),
-			period_fraction: Perquintill::from_rational(era_duration_millis, MILLISECONDS_PER_YEAR),
-			legacy_auction_proportion: if dynamic_params::inflation::UseAuctionSlots::get() {
-				let auctioned_slots = parachains_paras::Parachains::<Runtime>::get()
-					.into_iter()
-					// all active para-ids that do not belong to a system chain is the number of
-					// parachains that we should take into account for inflation.
-					.filter(|i| *i >= 2000.into())
-					.count() as u64;
-				Some(Perquintill::from_rational(auctioned_slots.min(60), 200u64))
-			} else {
-				None
-			},
-		};
-		relay_era_payout(params)
+		const MILLISECONDS_PER_YEAR: u64 = (1000 * 3600 * 24 * 36525) / 100;
+		// A normal-sized era will have 1 / 365.25 here:
+		let relative_era_len =
+			FixedU128::from_rational(era_duration_millis.into(), MILLISECONDS_PER_YEAR.into());
+
+		// Fixed total TI that we use as baseline for the issuance.
+		let fixed_total_issuance: i128 = 5_216_342_402_773_185_773;
+		let fixed_inflation_rate = FixedU128::from_rational(8, 100);
+		let yearly_emission = fixed_inflation_rate.saturating_mul_int(fixed_total_issuance);
+
+		let era_emission = relative_era_len.saturating_mul_int(yearly_emission);
+		// 15% to treasury, as per Polkadot ref 1139.
+		let to_treasury = FixedU128::from_rational(15, 100).saturating_mul_int(era_emission);
+		let to_stakers = era_emission.saturating_sub(to_treasury);
+
+		(to_stakers.saturated_into(), to_treasury.saturated_into())
 	}
 }
 
diff --git a/polkadot/runtime/westend/src/tests.rs b/polkadot/runtime/westend/src/tests.rs
index eef95006bce45b30abc16cb8064cda6a21cce65f..c1b396a4cd2f6723e851ba0e0b653fd0c3da9e11 100644
--- a/polkadot/runtime/westend/src/tests.rs
+++ b/polkadot/runtime/westend/src/tests.rs
@@ -19,11 +19,15 @@
 use std::collections::HashSet;
 
 use crate::{xcm_config::LocationConverter, *};
+use approx::assert_relative_eq;
 use frame_support::traits::WhitelistedStorageKeys;
+use pallet_staking::EraPayout;
 use sp_core::{crypto::Ss58Codec, hexdisplay::HexDisplay};
 use sp_keyring::AccountKeyring::Alice;
 use xcm_runtime_apis::conversions::LocationToAccountHelper;
 
+const MILLISECONDS_PER_HOUR: u64 = 60 * 60 * 1000;
+
 #[test]
 fn remove_keys_weight_is_sensible() {
 	use polkadot_runtime_common::crowdloan::WeightInfo;
@@ -311,3 +315,94 @@ fn location_conversion_works() {
 		assert_eq!(got, expected, "{}", tc.description);
 	}
 }
+
+#[test]
+fn staking_inflation_correct_single_era() {
+	let (to_stakers, to_treasury) = super::EraPayout::era_payout(
+		123, // ignored
+		456, // ignored
+		MILLISECONDS_PER_HOUR,
+	);
+
+	assert_relative_eq!(to_stakers as f64, (4_046 * CENTS) as f64, max_relative = 0.01);
+	assert_relative_eq!(to_treasury as f64, (714 * CENTS) as f64, max_relative = 0.01);
+	// Total per hour is ~47.6 WND
+	assert_relative_eq!(
+		(to_stakers as f64 + to_treasury as f64),
+		(4_760 * CENTS) as f64,
+		max_relative = 0.001
+	);
+}
+
+#[test]
+fn staking_inflation_correct_longer_era() {
+	// Twice the era duration means twice the emission:
+	let (to_stakers, to_treasury) = super::EraPayout::era_payout(
+		123, // ignored
+		456, // ignored
+		2 * MILLISECONDS_PER_HOUR,
+	);
+
+	assert_relative_eq!(to_stakers as f64, (4_046 * CENTS) as f64 * 2.0, max_relative = 0.001);
+	assert_relative_eq!(to_treasury as f64, (714 * CENTS) as f64 * 2.0, max_relative = 0.001);
+}
+
+#[test]
+fn staking_inflation_correct_whole_year() {
+	let (to_stakers, to_treasury) = super::EraPayout::era_payout(
+		123,                                        // ignored
+		456,                                        // ignored
+		(36525 * 24 * MILLISECONDS_PER_HOUR) / 100, // 1 year
+	);
+
+	// Our yearly emissions is about 417k WND:
+	let yearly_emission = 417_307 * UNITS;
+	assert_relative_eq!(
+		to_stakers as f64 + to_treasury as f64,
+		yearly_emission as f64,
+		max_relative = 0.001
+	);
+
+	assert_relative_eq!(to_stakers as f64, yearly_emission as f64 * 0.85, max_relative = 0.001);
+	assert_relative_eq!(to_treasury as f64, yearly_emission as f64 * 0.15, max_relative = 0.001);
+}
+
+// 10 years into the future, our values do not overflow.
+#[test]
+fn staking_inflation_correct_not_overflow() {
+	let (to_stakers, to_treasury) = super::EraPayout::era_payout(
+		123,                                       // ignored
+		456,                                       // ignored
+		(36525 * 24 * MILLISECONDS_PER_HOUR) / 10, // 10 years
+	);
+	let initial_ti: i128 = 5_216_342_402_773_185_773;
+	let projected_total_issuance = (to_stakers as i128 + to_treasury as i128) + initial_ti;
+
+	// In 2034, there will be about 9.39 million WND in existence.
+	assert_relative_eq!(
+		projected_total_issuance as f64,
+		(9_390_000 * UNITS) as f64,
+		max_relative = 0.001
+	);
+}
+
+// Print percent per year, just as convenience.
+#[test]
+fn staking_inflation_correct_print_percent() {
+	let (to_stakers, to_treasury) = super::EraPayout::era_payout(
+		123,                                        // ignored
+		456,                                        // ignored
+		(36525 * 24 * MILLISECONDS_PER_HOUR) / 100, // 1 year
+	);
+	let yearly_emission = to_stakers + to_treasury;
+	let mut ti: i128 = 5_216_342_402_773_185_773;
+
+	for y in 0..10 {
+		let new_ti = ti + yearly_emission as i128;
+		let inflation = 100.0 * (new_ti - ti) as f64 / ti as f64;
+		println!("Year {y} inflation: {inflation}%");
+		ti = new_ti;
+
+		assert!(inflation <= 8.0 && inflation > 2.0, "sanity check");
+	}
+}
diff --git a/polkadot/zombienet_tests/functional/0003-beefy-and-mmr.zndsl b/polkadot/zombienet_tests/functional/0003-beefy-and-mmr.zndsl
index 8300ef051f09a8903b2469b3f36330c729c66125..4fc066a13b07e9622b8aa605bd9fda27bfe1c1a6 100644
--- a/polkadot/zombienet_tests/functional/0003-beefy-and-mmr.zndsl
+++ b/polkadot/zombienet_tests/functional/0003-beefy-and-mmr.zndsl
@@ -18,22 +18,22 @@ validator-unstable: reports substrate_beefy_best_block is at least 1 within 60 s
 validator-unstable: pause
 
 # Verify validator sets get changed on new sessions.
-validator: reports substrate_beefy_validator_set_id is at least 1 within 70 seconds
+validator: reports substrate_beefy_validator_set_id is at least 1 within 180 seconds
 # Check next session too.
-validator: reports substrate_beefy_validator_set_id is at least 2 within 130 seconds
+validator: reports substrate_beefy_validator_set_id is at least 2 within 180 seconds
 
 # Verify voting happens and blocks are being finalized for new sessions too:
 # since we verified we're at least in the 3rd session, verify BEEFY finalized mandatory #21.
-validator: reports substrate_beefy_best_block is at least 21 within 130 seconds
+validator: reports substrate_beefy_best_block is at least 21 within 180 seconds
 
 # Custom JS to test BEEFY RPCs.
-validator-0: js-script ./0003-beefy-finalized-heads.js with "validator-0,validator-1,validator-2" return is 1 within 5 seconds
+validator-0: js-script ./0003-beefy-finalized-heads.js with "validator-0,validator-1,validator-2" return is 1 within 60 seconds
 
 # Custom JS to test MMR RPCs.
-validator: js-script ./0003-mmr-leaves.js with "21" return is 1 within 5 seconds
-validator: js-script ./0003-mmr-generate-and-verify-proof.js with "validator-0,validator-1,validator-2" return is 1 within 5 seconds
+validator: js-script ./0003-mmr-leaves.js with "21" return is 1 within 60 seconds
+validator: js-script ./0003-mmr-generate-and-verify-proof.js with "validator-0,validator-1,validator-2" return is 1 within 60 seconds
 
 # Resume validator-unstable and verify it imports all BEEFY justification and catches up.
 validator-unstable: resume
-validator-unstable: reports substrate_beefy_validator_set_id is at least 2 within 30 seconds
-validator-unstable: reports substrate_beefy_best_block is at least 21 within 30 seconds
+validator-unstable: reports substrate_beefy_validator_set_id is at least 2 within 60 seconds
+validator-unstable: reports substrate_beefy_best_block is at least 21 within 60 seconds
diff --git a/prdoc/pr_5999.prdoc b/prdoc/pr_5999.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..5252de6289d17fee6382c2707b706d88352a19bf
--- /dev/null
+++ b/prdoc/pr_5999.prdoc
@@ -0,0 +1,15 @@
+# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0
+# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json
+
+title: "Westend: Constant yearly emission"
+
+doc:
+  - audience: Runtime User
+    description: |
+      Integrating the new inflation approach from https://github.com/polkadot-fellows/runtimes/pull/471
+      into Westend first to check that it is working.
+
+
+crates:
+  - name: westend-runtime
+    bump: patch
diff --git a/prdoc/pr_6015.prdoc b/prdoc/pr_6015.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..d5a7d1e18d5db32b7b27bb0cfca7951093b7f585
--- /dev/null
+++ b/prdoc/pr_6015.prdoc
@@ -0,0 +1,9 @@
+title: Rename QueueEvent::StartWork
+doc:
+- audience: Node Dev
+  description: |-
+    When we send `QueueEvent::StartWork`, we have already completed the execution. Therefore, `QueueEvent::FinishWork` is a better match.
+
+crates:
+- name: polkadot-node-core-pvf
+  bump: patch
diff --git a/prdoc/pr_6023.prdoc b/prdoc/pr_6023.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..3b3b5a4cb5fd3b24ff33fec551a9563107f16f9c
--- /dev/null
+++ b/prdoc/pr_6023.prdoc
@@ -0,0 +1,11 @@
+title: Fix storage in pallet section
+
+doc:
+  - audience: Runtime Dev
+    description: |
+      Fix compilation of `pallet::storage` in a pallet section: a local binding definition was not
+      correctly referenced due to macro hygiene.
+
+crates:
+  - name: frame-support-procedural
+    bump: patch
diff --git a/prdoc/pr_6032.prdoc b/prdoc/pr_6032.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..ed47750f8fd71d3460df0aa7c8ced39f3c55732e
--- /dev/null
+++ b/prdoc/pr_6032.prdoc
@@ -0,0 +1,11 @@
+title: Fix `feeless_if` in pallet section
+
+doc:
+  - audience: Runtime Dev
+    description: |
+      Fix compilation with `pallet::feeless_if` in a pallet section: a local binding unexpectely
+      resolved to a macro definition.
+
+crates:
+  - name: frame-support-procedural
+    bump: patch
diff --git a/prdoc/pr_6061.prdoc b/prdoc/pr_6061.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..742e69ea9ecaa24932b8ce2be79932c3ece873bf
--- /dev/null
+++ b/prdoc/pr_6061.prdoc
@@ -0,0 +1,10 @@
+title: Remove check-migrations for rococo chain
+
+doc:
+  - audience: [Runtime User]
+    description: |
+      This PR adds the missing `cumulus_pallet_xcmp_queue` v5 migration to the coretime-westend runtime.
+
+crates: 
+- name: coretime-westend-runtime
+  bump: none
diff --git a/substrate/bin/node/cli/Cargo.toml b/substrate/bin/node/cli/Cargo.toml
index 6e734a723cd36f4f86ae6a7f1ad032d8c702ecab..04dcb909b8c1d0a20db0c4888e1b8c3aa97aa08d 100644
--- a/substrate/bin/node/cli/Cargo.toml
+++ b/substrate/bin/node/cli/Cargo.toml
@@ -48,7 +48,91 @@ rand = { workspace = true, default-features = true }
 serde_json = { workspace = true, default-features = true }
 
 # The Polkadot-SDK:
-polkadot-sdk = { features = ["node"], workspace = true, default-features = true }
+polkadot-sdk = { features = [
+	"fork-tree",
+	"frame-benchmarking-cli",
+	"frame-remote-externalities",
+	"frame-support-procedural-tools",
+	"generate-bags",
+	"mmr-gadget",
+	"mmr-rpc",
+	"pallet-contracts-mock-network",
+	"pallet-revive-mock-network",
+	"pallet-transaction-payment-rpc",
+	"sc-allocator",
+	"sc-authority-discovery",
+	"sc-basic-authorship",
+	"sc-block-builder",
+	"sc-chain-spec",
+	"sc-cli",
+	"sc-client-api",
+	"sc-client-db",
+	"sc-consensus",
+	"sc-consensus-aura",
+	"sc-consensus-babe",
+	"sc-consensus-babe-rpc",
+	"sc-consensus-beefy",
+	"sc-consensus-beefy-rpc",
+	"sc-consensus-epochs",
+	"sc-consensus-grandpa",
+	"sc-consensus-grandpa-rpc",
+	"sc-consensus-manual-seal",
+	"sc-consensus-pow",
+	"sc-consensus-slots",
+	"sc-executor",
+	"sc-executor-common",
+	"sc-executor-polkavm",
+	"sc-executor-wasmtime",
+	"sc-informant",
+	"sc-keystore",
+	"sc-mixnet",
+	"sc-network",
+	"sc-network-common",
+	"sc-network-gossip",
+	"sc-network-light",
+	"sc-network-statement",
+	"sc-network-sync",
+	"sc-network-transactions",
+	"sc-network-types",
+	"sc-offchain",
+	"sc-proposer-metrics",
+	"sc-rpc",
+	"sc-rpc-api",
+	"sc-rpc-server",
+	"sc-rpc-spec-v2",
+	"sc-service",
+	"sc-state-db",
+	"sc-statement-store",
+	"sc-storage-monitor",
+	"sc-sync-state-rpc",
+	"sc-sysinfo",
+	"sc-telemetry",
+	"sc-tracing",
+	"sc-transaction-pool",
+	"sc-transaction-pool-api",
+	"sc-utils",
+	"sp-blockchain",
+	"sp-consensus",
+	"sp-core-hashing",
+	"sp-core-hashing-proc-macro",
+	"sp-database",
+	"sp-maybe-compressed-blob",
+	"sp-panic-handler",
+	"sp-rpc",
+	"staging-chain-spec-builder",
+	"staging-node-inspect",
+	"staging-tracking-allocator",
+	"std",
+	"subkey",
+	"substrate-build-script-utils",
+	"substrate-frame-rpc-support",
+	"substrate-frame-rpc-system",
+	"substrate-prometheus-endpoint",
+	"substrate-rpc-client",
+	"substrate-state-trie-migration-rpc",
+	"substrate-wasm-builder",
+	"tracing-gum",
+], workspace = true, default-features = true }
 
 # Shared code between the staging node and kitchensink runtime:
 kitchensink-runtime = { workspace = true }
diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs
index c81921f844bd51e01cb95c89025c7192dc055505..ececf0d87b2d28adabe1f58917aa59bc5b8e3294 100644
--- a/substrate/bin/node/runtime/src/lib.rs
+++ b/substrate/bin/node/runtime/src/lib.rs
@@ -2643,7 +2643,7 @@ mod benches {
 		[pallet_contracts, Contracts]
 		[pallet_revive, Revive]
 		[pallet_core_fellowship, CoreFellowship]
-		[tasks_example, TasksExample]
+		[pallet_example_tasks, TasksExample]
 		[pallet_democracy, Democracy]
 		[pallet_asset_conversion, AssetConversion]
 		[pallet_election_provider_multi_phase, ElectionProviderMultiPhase]
diff --git a/substrate/frame/examples/tasks/src/mock.rs b/substrate/frame/examples/tasks/src/mock.rs
index 33912bb5269c5ba58cb9f5256cceb26d681577e5..9a1112946f69f387172d067fd2dcc6690b62d93e 100644
--- a/substrate/frame/examples/tasks/src/mock.rs
+++ b/substrate/frame/examples/tasks/src/mock.rs
@@ -18,7 +18,7 @@
 //! Mock runtime for `tasks-example` tests.
 #![cfg(test)]
 
-use crate::{self as tasks_example};
+use crate::{self as pallet_example_tasks};
 use frame_support::derive_impl;
 use sp_runtime::testing::TestXt;
 
@@ -29,7 +29,7 @@ type Block = frame_system::mocking::MockBlock<Runtime>;
 frame_support::construct_runtime!(
 	pub enum Runtime {
 		System: frame_system,
-		TasksExample: tasks_example,
+		TasksExample: pallet_example_tasks,
 	}
 );
 
@@ -48,7 +48,7 @@ where
 	type Extrinsic = Extrinsic;
 }
 
-impl tasks_example::Config for Runtime {
+impl pallet_example_tasks::Config for Runtime {
 	type RuntimeTask = RuntimeTask;
 	type WeightInfo = ();
 }
diff --git a/substrate/frame/support/procedural/src/pallet/expand/call.rs b/substrate/frame/support/procedural/src/pallet/expand/call.rs
index 8b333d19087d287d5cf0c3ce307ba9681fd0a32c..206ffc1159f719f88a59a0df1c1e9abc37e4a33f 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/call.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/call.rs
@@ -253,13 +253,13 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
 		})
 		.collect::<Vec<_>>();
 
-	let feeless_check = methods.iter().map(|method| &method.feeless_check).collect::<Vec<_>>();
-	let feeless_check_result =
-		feeless_check.iter().zip(args_name.iter()).map(|(feeless_check, arg_name)| {
-			if let Some(feeless_check) = feeless_check {
-				quote::quote!(#feeless_check(origin, #( #arg_name, )*))
+	let feeless_checks = methods.iter().map(|method| &method.feeless_check).collect::<Vec<_>>();
+	let feeless_check =
+		feeless_checks.iter().zip(args_name.iter()).map(|(feeless_check, arg_name)| {
+			if let Some(check) = feeless_check {
+				quote::quote_spanned!(span => #check)
 			} else {
-				quote::quote!(false)
+				quote::quote_spanned!(span => |_origin, #( #arg_name, )*| { false })
 			}
 		});
 
@@ -393,7 +393,8 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
 					#(
 						#cfg_attrs
 						Self::#fn_name { #( #args_name_pattern_ref, )* } => {
-							#feeless_check_result
+							let feeless_check = #feeless_check;
+							feeless_check(origin, #( #args_name, )*)
 						},
 					)*
 					Self::__Ignore(_, _) => unreachable!("__Ignore cannot be used"),
diff --git a/substrate/frame/support/procedural/src/pallet/expand/storage.rs b/substrate/frame/support/procedural/src/pallet/expand/storage.rs
index e5bfa2793cbb2ce6a84772d7f8abc8a2d7b6b8ad..10e674c3cb1947a5d89a87f971e08a7d42257751 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/storage.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/storage.rs
@@ -427,15 +427,17 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream {
 		};
 		entries_builder.push(quote::quote_spanned!(storage.attr_span =>
 			#(#cfg_attrs)*
-			{
-				<#full_ident as #frame_support::storage::StorageEntryMetadataBuilder>::build_metadata(
-					#deprecation,
-					#frame_support::__private::vec![
-						#( #docs, )*
-					],
-					&mut entries,
-				);
-			}
+			(|entries: &mut #frame_support::__private::Vec<_>| {
+				{
+					<#full_ident as #frame_support::storage::StorageEntryMetadataBuilder>::build_metadata(
+						#deprecation,
+						#frame_support::__private::vec![
+							#( #docs, )*
+						],
+						entries,
+					);
+				}
+			})
 		))
 	}
 
@@ -911,7 +913,7 @@ pub fn expand_storages(def: &mut Def) -> proc_macro2::TokenStream {
 					entries: {
 						#[allow(unused_mut)]
 						let mut entries = #frame_support::__private::vec![];
-						#( #entries_builder )*
+						#( #entries_builder(&mut entries); )*
 						entries
 					},
 				}
diff --git a/substrate/frame/support/src/lib.rs b/substrate/frame/support/src/lib.rs
index 269867e38c512232ef2c41bc561e294b08f365f6..d76073a97a3517aa3f7d6d72f66e68adc17c714f 100644
--- a/substrate/frame/support/src/lib.rs
+++ b/substrate/frame/support/src/lib.rs
@@ -915,7 +915,10 @@ pub mod pallet_prelude {
 	pub use scale_info::TypeInfo;
 	pub use sp_inherents::MakeFatalError;
 	pub use sp_runtime::{
-		traits::{MaybeSerializeDeserialize, Member, ValidateUnsigned},
+		traits::{
+			CheckedAdd, CheckedConversion, CheckedDiv, CheckedMul, CheckedShl, CheckedShr,
+			CheckedSub, MaybeSerializeDeserialize, Member, One, ValidateUnsigned, Zero,
+		},
 		transaction_validity::{
 			InvalidTransaction, TransactionLongevity, TransactionPriority, TransactionSource,
 			TransactionTag, TransactionValidity, TransactionValidityError, UnknownTransaction,
diff --git a/substrate/frame/support/test/tests/split_ui/pass/call/mod.rs b/substrate/frame/support/test/tests/split_ui/pass/call/mod.rs
new file mode 100644
index 0000000000000000000000000000000000000000..27b3ec31b835f65e9d36a67269a711fb7b2da044
--- /dev/null
+++ b/substrate/frame/support/test/tests/split_ui/pass/call/mod.rs
@@ -0,0 +1,63 @@
+// This file is part of Substrate.
+
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use frame_support::pallet_macros::pallet_section;
+
+#[pallet_section]
+mod call {
+	#[pallet::call]
+	impl<T: Config> Pallet<T> {
+        #[pallet::call_index(0)]
+        pub fn noop0(origin: OriginFor<T>) -> DispatchResult {
+            ensure_signed(origin)?;
+            Ok(())
+        }
+
+        #[pallet::call_index(1)]
+        pub fn noop1(origin: OriginFor<T>, _x: u64) -> DispatchResult {
+            ensure_signed(origin)?;
+            Ok(())
+        }
+        
+        #[pallet::call_index(2)]
+        pub fn noop2(origin: OriginFor<T>, _x: u64, _y: u64) -> DispatchResult {
+            ensure_signed(origin)?;
+            Ok(())
+        }
+
+        #[pallet::call_index(3)]
+        #[pallet::feeless_if(|_origin: &OriginFor<T>| -> bool { true })]
+        pub fn noop_feeless0(origin: OriginFor<T>) -> DispatchResult {
+            ensure_signed(origin)?;
+            Ok(())
+        }
+
+        #[pallet::call_index(4)]
+        #[pallet::feeless_if(|_origin: &OriginFor<T>, x: &u64| -> bool { *x == 1 })]
+        pub fn noop_feeless1(origin: OriginFor<T>, _x: u64) -> DispatchResult {
+            ensure_signed(origin)?;
+            Ok(())
+        }
+
+        #[pallet::call_index(5)]
+        #[pallet::feeless_if(|_origin: &OriginFor<T>, x: &u64, y: &u64| -> bool { *x == *y })]
+        pub fn noop_feeless2(origin: OriginFor<T>, _x: u64, _y: u64) -> DispatchResult {
+            ensure_signed(origin)?;
+            Ok(())
+        }
+	}
+}
diff --git a/substrate/frame/support/test/tests/split_ui/pass/split_call.rs b/substrate/frame/support/test/tests/split_ui/pass/split_call.rs
new file mode 100644
index 0000000000000000000000000000000000000000..09dbe6e3992d942fd04997f6924cec259ef1e062
--- /dev/null
+++ b/substrate/frame/support/test/tests/split_ui/pass/split_call.rs
@@ -0,0 +1,36 @@
+// This file is part of Substrate.
+
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use frame_support::pallet_macros::import_section;
+
+mod call;
+
+#[import_section(call::call)]
+#[frame_support::pallet(dev_mode)]
+pub mod pallet {
+    use frame_support::pallet_prelude::*;
+    use frame_system::pallet_prelude::*;
+
+    #[pallet::pallet]
+    pub struct Pallet<T>(_);
+
+    #[pallet::config]
+    pub trait Config: frame_system::Config {}
+}
+
+fn main() {
+}
diff --git a/substrate/frame/support/test/tests/split_ui/pass/split_storage.rs b/substrate/frame/support/test/tests/split_ui/pass/split_storage.rs
new file mode 100644
index 0000000000000000000000000000000000000000..e8601587fac73461a44eccfe72d7bb647a18f869
--- /dev/null
+++ b/substrate/frame/support/test/tests/split_ui/pass/split_storage.rs
@@ -0,0 +1,49 @@
+// This file is part of Substrate.
+
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use frame_support::pallet_macros::import_section;
+
+mod storage;
+
+#[import_section(storage::storage)]
+#[frame_support::pallet(dev_mode)]
+pub mod pallet {
+    use frame_support::pallet_prelude::*;
+    use frame_system::pallet_prelude::*;
+
+    const STORAGE_VERSION: StorageVersion = StorageVersion::new(8);
+
+    #[pallet::pallet]
+    #[pallet::storage_version(STORAGE_VERSION)]
+    pub struct Pallet<T>(_);
+
+    #[pallet::config]
+    pub trait Config: frame_system::Config {}
+
+	#[pallet::call]
+	impl<T: Config> Pallet<T> {
+		pub fn increment_value(_origin: OriginFor<T>) -> DispatchResult {
+			Value::<T>::mutate(|v| {
+				v.saturating_add(1)
+			});
+			Ok(())
+		}
+	}
+}
+
+fn main() {
+}
diff --git a/substrate/frame/support/test/tests/split_ui/pass/storage/mod.rs b/substrate/frame/support/test/tests/split_ui/pass/storage/mod.rs
new file mode 100644
index 0000000000000000000000000000000000000000..26974a750dc3a255f5d8d785849db9ee3ce68076
--- /dev/null
+++ b/substrate/frame/support/test/tests/split_ui/pass/storage/mod.rs
@@ -0,0 +1,27 @@
+// This file is part of Substrate.
+
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use frame_support::pallet_macros::pallet_section;
+
+#[pallet_section]
+mod storage {
+	#[pallet::storage]
+	pub type Value<T> = StorageValue<_, u32, ValueQuery>;
+
+	#[pallet::storage]
+	pub type Map<T> = StorageMap<_, _, u32, u32, ValueQuery>;
+}
diff --git a/templates/parachain/node/Cargo.toml b/templates/parachain/node/Cargo.toml
index c0c81d8222a444503b30323eff0f44086bf87788..ba5f1212b79c47b5204dff0a8ba2da4a30af3e5a 100644
--- a/templates/parachain/node/Cargo.toml
+++ b/templates/parachain/node/Cargo.toml
@@ -10,9 +10,6 @@ edition.workspace = true
 publish = false
 build = "build.rs"
 
-# [[bin]]
-# name = "parachain-template-node"
-
 [dependencies]
 clap = { features = ["derive"], workspace = true }
 log = { workspace = true, default-features = true }
@@ -22,82 +19,31 @@ jsonrpsee = { features = ["server"], workspace = true }
 futures = { workspace = true }
 serde_json = { workspace = true, default-features = true }
 docify = { workspace = true }
+color-print = { workspace = true }
+
+polkadot-sdk = { workspace = true, features = ["node"] }
 
-# Local
 parachain-template-runtime = { workspace = true }
 
 # Substrate
-frame-benchmarking = { workspace = true, default-features = true }
-frame-benchmarking-cli = { workspace = true, default-features = true }
-pallet-transaction-payment-rpc = { workspace = true, default-features = true }
-sc-basic-authorship = { workspace = true, default-features = true }
-sc-chain-spec = { workspace = true, default-features = true }
-sc-cli = { workspace = true, default-features = true }
-sc-client-api = { workspace = true, default-features = true }
-sc-offchain = { workspace = true, default-features = true }
-sc-consensus = { workspace = true, default-features = true }
-sc-executor = { workspace = true, default-features = true }
-sc-network = { workspace = true, default-features = true }
-sc-network-sync = { workspace = true, default-features = true }
-sc-rpc = { workspace = true, default-features = true }
-sc-service = { workspace = true, default-features = true }
-sc-sysinfo = { workspace = true, default-features = true }
-sc-telemetry = { workspace = true, default-features = true }
 sc-tracing = { workspace = true, default-features = true }
-sc-transaction-pool = { workspace = true, default-features = true }
-sc-transaction-pool-api = { workspace = true, default-features = true }
-sp-api = { workspace = true, default-features = true }
-sp-block-builder = { workspace = true, default-features = true }
-sp-blockchain = { workspace = true, default-features = true }
-sp-consensus-aura = { workspace = true, default-features = true }
-sp-core = { workspace = true, default-features = true }
-sp-genesis-builder = { workspace = true, default-features = true }
-sp-keystore = { workspace = true, default-features = true }
-sp-io = { workspace = true, default-features = true }
-sp-runtime = { workspace = true, default-features = true }
-sp-timestamp = { workspace = true, default-features = true }
-substrate-frame-rpc-system = { workspace = true, default-features = true }
 prometheus-endpoint = { workspace = true, default-features = true }
 
-# Polkadot
-polkadot-cli = { features = ["rococo-native"], workspace = true, default-features = true }
-polkadot-primitives = { workspace = true, default-features = true }
-xcm = { workspace = true }
-
-# Cumulus
-cumulus-client-cli = { workspace = true, default-features = true }
-cumulus-client-collator = { workspace = true, default-features = true }
-cumulus-client-consensus-aura = { workspace = true, default-features = true }
-cumulus-client-consensus-common = { workspace = true, default-features = true }
-cumulus-client-consensus-proposer = { workspace = true, default-features = true }
-cumulus-client-service = { workspace = true, default-features = true }
-cumulus-primitives-core = { workspace = true, default-features = true }
-cumulus-primitives-parachain-inherent = { workspace = true, default-features = true }
-cumulus-relay-chain-interface = { workspace = true, default-features = true }
-color-print = { workspace = true }
-
 [build-dependencies]
-substrate-build-script-utils = { workspace = true, default-features = true }
+polkadot-sdk = { workspace = true, features = ["substrate-build-script-utils"] }
 
 [features]
 default = ["std"]
 std = [
 	"log/std",
 	"parachain-template-runtime/std",
-	"xcm/std",
+	"polkadot-sdk/std",
 ]
 runtime-benchmarks = [
-	"cumulus-primitives-core/runtime-benchmarks",
-	"frame-benchmarking-cli/runtime-benchmarks",
-	"frame-benchmarking/runtime-benchmarks",
 	"parachain-template-runtime/runtime-benchmarks",
-	"polkadot-cli/runtime-benchmarks",
-	"polkadot-primitives/runtime-benchmarks",
-	"sc-service/runtime-benchmarks",
-	"sp-runtime/runtime-benchmarks",
+	"polkadot-sdk/runtime-benchmarks",
 ]
 try-runtime = [
 	"parachain-template-runtime/try-runtime",
-	"polkadot-cli/try-runtime",
-	"sp-runtime/try-runtime",
+	"polkadot-sdk/try-runtime",
 ]
diff --git a/templates/parachain/node/build.rs b/templates/parachain/node/build.rs
index e3bfe3116bf28dba1872f7d0b64c2ee0c9c71c3c..8ee8f23d8548d506647d040cbfe63179b90c6f60 100644
--- a/templates/parachain/node/build.rs
+++ b/templates/parachain/node/build.rs
@@ -1,4 +1,4 @@
-use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed};
+use polkadot_sdk::substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed};
 
 fn main() {
 	generate_cargo_keys();
diff --git a/templates/parachain/node/src/chain_spec.rs b/templates/parachain/node/src/chain_spec.rs
index af82607bc8e41947cb41220263cfbdfde3a45e81..55a099dd022b731054042d61b8cb45191b459786 100644
--- a/templates/parachain/node/src/chain_spec.rs
+++ b/templates/parachain/node/src/chain_spec.rs
@@ -1,3 +1,5 @@
+use polkadot_sdk::*;
+
 use parachain_template_runtime as runtime;
 use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};
 use sc_service::ChainType;
diff --git a/templates/parachain/node/src/cli.rs b/templates/parachain/node/src/cli.rs
index f008e856d99b8ba4dceac5835681920713d2d3f9..c8bdbc10d751ff8150b241092b5322bf763ac581 100644
--- a/templates/parachain/node/src/cli.rs
+++ b/templates/parachain/node/src/cli.rs
@@ -1,3 +1,4 @@
+use polkadot_sdk::*;
 use std::path::PathBuf;
 
 /// Sub-commands supported by the collator.
diff --git a/templates/parachain/node/src/command.rs b/templates/parachain/node/src/command.rs
index 6b9deade1271b183dd4e3de24075a0a804e29d3a..938bda837e0dc58bf553ed38f93ea4f761eb25cb 100644
--- a/templates/parachain/node/src/command.rs
+++ b/templates/parachain/node/src/command.rs
@@ -1,3 +1,5 @@
+use polkadot_sdk::*;
+
 use cumulus_client_service::storage_proof_size::HostFunctions as ReclaimHostFunctions;
 use cumulus_primitives_core::ParaId;
 use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE};
diff --git a/templates/parachain/node/src/main.rs b/templates/parachain/node/src/main.rs
index 12738a6793c039dc20cc4f8721ebd2ea0a7e69e9..46ebcfd266d969c730dea26612d0bdcda7ba8769 100644
--- a/templates/parachain/node/src/main.rs
+++ b/templates/parachain/node/src/main.rs
@@ -2,6 +2,8 @@
 
 #![warn(missing_docs)]
 
+use polkadot_sdk::*;
+
 mod chain_spec;
 mod cli;
 mod command;
diff --git a/templates/parachain/node/src/rpc.rs b/templates/parachain/node/src/rpc.rs
index 4937469e11e2d1b743940a633a2b979853abad5e..7549a5d090d7555434acb64efcc1acaad398a46e 100644
--- a/templates/parachain/node/src/rpc.rs
+++ b/templates/parachain/node/src/rpc.rs
@@ -9,6 +9,8 @@ use std::sync::Arc;
 
 use parachain_template_runtime::{opaque::Block, AccountId, Balance, Nonce};
 
+use polkadot_sdk::*;
+
 use sc_transaction_pool_api::TransactionPool;
 use sp_api::ProvideRuntimeApi;
 use sp_block_builder::BlockBuilder;
diff --git a/templates/parachain/node/src/service.rs b/templates/parachain/node/src/service.rs
index 655e838eed59c228ce0fa976b794d7912585353b..dd7dff2ebf164b894ac73cea26bcf7df9503c2d4 100644
--- a/templates/parachain/node/src/service.rs
+++ b/templates/parachain/node/src/service.rs
@@ -3,14 +3,16 @@
 // std
 use std::{sync::Arc, time::Duration};
 
-use cumulus_client_cli::CollatorOptions;
 // Local Runtime Types
 use parachain_template_runtime::{
 	apis::RuntimeApi,
 	opaque::{Block, Hash},
 };
 
+use polkadot_sdk::*;
+
 // Cumulus Imports
+use cumulus_client_cli::CollatorOptions;
 use cumulus_client_collator::service::CollatorService;
 #[docify::export(lookahead_collator)]
 use cumulus_client_consensus_aura::collators::lookahead::{self as aura, Params as AuraParams};
diff --git a/templates/parachain/pallets/template/Cargo.toml b/templates/parachain/pallets/template/Cargo.toml
index dde863101372e9b30a6aff3062618509b1743520..dc1088cb33fe642d4911a9d2a233bb612565aa4e 100644
--- a/templates/parachain/pallets/template/Cargo.toml
+++ b/templates/parachain/pallets/template/Cargo.toml
@@ -13,45 +13,16 @@ publish = false
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-codec = { features = [
-	"derive",
-], workspace = true }
-scale-info = { features = [
-	"derive",
-], workspace = true }
+codec = { features = ["derive"], workspace = true }
+scale-info = { features = ["derive"], workspace = true }
 
-# frame deps
-frame-benchmarking = { optional = true, workspace = true }
-frame-support = { workspace = true }
-frame-system = { workspace = true }
-
-# primitive deps
-sp-runtime = { workspace = true }
-
-[dev-dependencies]
-sp-core = { workspace = true, default-features = true }
-sp-io = { workspace = true, default-features = true }
+frame = { workspace = true, default-features = false, features = [
+	"experimental",
+	"runtime",
+] }
 
 [features]
 default = ["std"]
-runtime-benchmarks = [
-	"frame-benchmarking/runtime-benchmarks",
-	"frame-support/runtime-benchmarks",
-	"frame-system/runtime-benchmarks",
-	"sp-runtime/runtime-benchmarks",
-]
-std = [
-	"codec/std",
-	"scale-info/std",
-
-	"frame-benchmarking?/std",
-	"frame-support/std",
-	"frame-system/std",
-
-	"sp-runtime/std",
-]
-try-runtime = [
-	"frame-support/try-runtime",
-	"frame-system/try-runtime",
-	"sp-runtime/try-runtime",
-]
+runtime-benchmarks = ["frame/runtime-benchmarks"]
+std = ["codec/std", "frame/std", "scale-info/std"]
+try-runtime = ["frame/try-runtime"]
diff --git a/templates/parachain/pallets/template/src/benchmarking.rs b/templates/parachain/pallets/template/src/benchmarking.rs
index 29572c3ff6096154dca22097f58df3e5af7e8c25..9f2d09904f50ba8d33ce02f351bc999c189f3c09 100644
--- a/templates/parachain/pallets/template/src/benchmarking.rs
+++ b/templates/parachain/pallets/template/src/benchmarking.rs
@@ -1,7 +1,7 @@
 //! Benchmarking setup for pallet-template
 
 use super::*;
-use frame_benchmarking::v2::*;
+use frame::{deps::frame_benchmarking::v2::*, prelude::*};
 
 #[benchmarks]
 mod benchmarks {
diff --git a/templates/parachain/pallets/template/src/lib.rs b/templates/parachain/pallets/template/src/lib.rs
index 6bfb98972aedfc324edc3f064c7cf2d0d28d6a67..211bef51aa86ef581981d7cf66cef95b0013dbc8 100644
--- a/templates/parachain/pallets/template/src/lib.rs
+++ b/templates/parachain/pallets/template/src/lib.rs
@@ -66,17 +66,13 @@ mod benchmarking;
 // To see a full list of `pallet` macros and their use cases, see:
 // <https://paritytech.github.io/polkadot-sdk/master/pallet_example_kitchensink/index.html>
 // <https://paritytech.github.io/polkadot-sdk/master/frame_support/pallet_macros/index.html>
-#[frame_support::pallet]
+#[frame::pallet]
 pub mod pallet {
-	use frame_support::{dispatch::DispatchResultWithPostInfo, pallet_prelude::*, DefaultNoBound};
-	use frame_system::pallet_prelude::*;
-	use sp_runtime::traits::{CheckedAdd, One};
+	use frame::prelude::*;
 
 	/// Configure the pallet by specifying the parameters and types on which it depends.
 	#[pallet::config]
 	pub trait Config: frame_system::Config {
-		/// Because this pallet emits events, it depends on the runtime's definition of an event.
-		/// <https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/reference_docs/frame_runtime_types/index.html>
 		type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
 
 		/// A type representing the weights required by the dispatchables of this pallet.
diff --git a/templates/parachain/pallets/template/src/mock.rs b/templates/parachain/pallets/template/src/mock.rs
index b8c730b6eb5d68634b43838a360a67e1fab298e2..b924428d4145c51ec7de253d59380cdb8dce57f6 100644
--- a/templates/parachain/pallets/template/src/mock.rs
+++ b/templates/parachain/pallets/template/src/mock.rs
@@ -1,9 +1,12 @@
-use frame_support::{derive_impl, weights::constants::RocksDbWeight};
-use frame_system::{mocking::MockBlock, GenesisConfig};
-use sp_runtime::{traits::ConstU64, BuildStorage};
+use frame::{
+	deps::{frame_support::weights::constants::RocksDbWeight, frame_system::GenesisConfig},
+	prelude::*,
+	runtime::prelude::*,
+	testing_prelude::*,
+};
 
 // Configure a mock runtime to test the pallet.
-#[frame_support::runtime]
+#[frame_construct_runtime]
 mod test_runtime {
 	#[runtime::runtime]
 	#[runtime::derive(
@@ -39,6 +42,6 @@ impl crate::Config for Test {
 }
 
 // Build genesis storage according to the mock runtime.
-pub fn new_test_ext() -> sp_io::TestExternalities {
+pub fn new_test_ext() -> TestState {
 	GenesisConfig::<Test>::default().build_storage().unwrap().into()
 }
diff --git a/templates/parachain/pallets/template/src/tests.rs b/templates/parachain/pallets/template/src/tests.rs
index 2f641ce08fbb032aa1722a29712c1c862eaa0858..14609fd6dba7a97c5adc8f55c11cf9d2670ea7f3 100644
--- a/templates/parachain/pallets/template/src/tests.rs
+++ b/templates/parachain/pallets/template/src/tests.rs
@@ -1,5 +1,5 @@
 use crate::{mock::*, Error, Something};
-use frame_support::{assert_noop, assert_ok};
+use frame::testing_prelude::*;
 
 #[test]
 fn it_works_for_default_value() {
diff --git a/templates/parachain/pallets/template/src/weights.rs b/templates/parachain/pallets/template/src/weights.rs
index 4b4522429c6ceab1d027194e3f85e070ead595c6..9295492bc20bc919fa7f728260a25e9f0de31005 100644
--- a/templates/parachain/pallets/template/src/weights.rs
+++ b/templates/parachain/pallets/template/src/weights.rs
@@ -29,7 +29,7 @@
 #![allow(unused_parens)]
 #![allow(unused_imports)]
 
-use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
+use frame::{deps::frame_support::weights::constants::RocksDbWeight, prelude::*};
 use core::marker::PhantomData;
 
 /// Weight functions needed for pallet_template.
diff --git a/templates/parachain/runtime/Cargo.toml b/templates/parachain/runtime/Cargo.toml
index 236b7c048632e7d196982c38ac6e0db311f9290f..c9c08608f3b1b6d0ea272dabce2933aef02db179 100644
--- a/templates/parachain/runtime/Cargo.toml
+++ b/templates/parachain/runtime/Cargo.toml
@@ -32,168 +32,66 @@ serde_json = { workspace = true, default-features = false, features = ["alloc"]
 # Local
 pallet-parachain-template = { workspace = true }
 
-# Substrate / FRAME
-frame-benchmarking = { optional = true, workspace = true }
-frame-executive = { workspace = true }
-frame-metadata-hash-extension = { workspace = true }
-frame-support = { features = ["experimental"], workspace = true }
-frame-system = { workspace = true }
-frame-system-benchmarking = { optional = true, workspace = true }
-frame-system-rpc-runtime-api = { workspace = true }
-frame-try-runtime = { optional = true, workspace = true }
+polkadot-sdk = { workspace = true, default-features = false, features = [
+	"pallet-aura",
+	"pallet-authorship",
+	"pallet-balances",
+	"pallet-message-queue",
+	"pallet-session",
+	"pallet-sudo",
+	"pallet-timestamp",
+	"pallet-transaction-payment",
+	"pallet-transaction-payment-rpc-runtime-api",
 
-# FRAME Pallets
-pallet-aura = { workspace = true }
-pallet-authorship = { workspace = true }
-pallet-balances = { workspace = true }
-pallet-message-queue = { workspace = true }
-pallet-session = { workspace = true }
-pallet-sudo = { workspace = true }
-pallet-timestamp = { workspace = true }
-pallet-transaction-payment = { workspace = true }
-pallet-transaction-payment-rpc-runtime-api = { workspace = true }
+	"pallet-xcm",
+	"polkadot-parachain-primitives",
+	"polkadot-runtime-common",
+	"staging-xcm",
+	"staging-xcm-builder",
+	"staging-xcm-executor",
 
-# Substrate	Primitives
-sp-api = { workspace = true }
-sp-block-builder = { workspace = true }
-sp-consensus-aura = { workspace = true }
-sp-core = { workspace = true }
-sp-genesis-builder = { workspace = true }
-sp-inherents = { workspace = true }
-sp-offchain = { workspace = true }
-sp-runtime = { workspace = true }
-sp-session = { workspace = true }
-sp-transaction-pool = { workspace = true }
-sp-version = { workspace = true }
+	"cumulus-pallet-aura-ext",
+	"cumulus-pallet-session-benchmarking",
+	"cumulus-pallet-xcm",
+	"cumulus-pallet-xcmp-queue",
+	"cumulus-primitives-aura",
+	"cumulus-primitives-core",
+	"cumulus-primitives-storage-weight-reclaim",
+	"cumulus-primitives-utility",
+	"pallet-collator-selection",
+	"parachains-common",
+	"staging-parachain-info",
 
-# Polkadot
-pallet-xcm = { workspace = true }
-polkadot-parachain-primitives = { workspace = true }
-polkadot-runtime-common = { workspace = true }
-xcm = { workspace = true }
-xcm-builder = { workspace = true }
-xcm-executor = { workspace = true }
+	"runtime",
+] }
 
 # Cumulus
-cumulus-pallet-aura-ext = { workspace = true }
 cumulus-pallet-parachain-system = { workspace = true }
-cumulus-pallet-session-benchmarking = { workspace = true }
-cumulus-pallet-xcm = { workspace = true }
-cumulus-pallet-xcmp-queue = { workspace = true }
-cumulus-primitives-aura = { workspace = true }
-cumulus-primitives-core = { workspace = true }
-cumulus-primitives-utility = { workspace = true }
-cumulus-primitives-storage-weight-reclaim = { workspace = true }
-pallet-collator-selection = { workspace = true }
-parachains-common = { workspace = true }
-parachain-info = { workspace = true }
 
 [features]
 default = ["std"]
 std = [
 	"codec/std",
-	"cumulus-pallet-aura-ext/std",
 	"cumulus-pallet-parachain-system/std",
-	"cumulus-pallet-session-benchmarking/std",
-	"cumulus-pallet-xcm/std",
-	"cumulus-pallet-xcmp-queue/std",
-	"cumulus-primitives-aura/std",
-	"cumulus-primitives-core/std",
-	"cumulus-primitives-storage-weight-reclaim/std",
-	"cumulus-primitives-utility/std",
-	"frame-benchmarking?/std",
-	"frame-executive/std",
-	"frame-metadata-hash-extension/std",
-	"frame-support/std",
-	"frame-system-benchmarking?/std",
-	"frame-system-rpc-runtime-api/std",
-	"frame-system/std",
-	"frame-try-runtime?/std",
 	"log/std",
-	"pallet-aura/std",
-	"pallet-authorship/std",
-	"pallet-balances/std",
-	"pallet-collator-selection/std",
-	"pallet-message-queue/std",
 	"pallet-parachain-template/std",
-	"pallet-session/std",
-	"pallet-sudo/std",
-	"pallet-timestamp/std",
-	"pallet-transaction-payment-rpc-runtime-api/std",
-	"pallet-transaction-payment/std",
-	"pallet-xcm/std",
-	"parachain-info/std",
-	"parachains-common/std",
-	"polkadot-parachain-primitives/std",
-	"polkadot-runtime-common/std",
+	"polkadot-sdk/std",
 	"scale-info/std",
 	"serde_json/std",
-	"sp-api/std",
-	"sp-block-builder/std",
-	"sp-consensus-aura/std",
-	"sp-core/std",
-	"sp-genesis-builder/std",
-	"sp-inherents/std",
-	"sp-offchain/std",
-	"sp-runtime/std",
-	"sp-session/std",
-	"sp-transaction-pool/std",
-	"sp-version/std",
 	"substrate-wasm-builder",
-	"xcm-builder/std",
-	"xcm-executor/std",
-	"xcm/std",
 ]
 
 runtime-benchmarks = [
 	"cumulus-pallet-parachain-system/runtime-benchmarks",
-	"cumulus-pallet-session-benchmarking/runtime-benchmarks",
-	"cumulus-pallet-xcmp-queue/runtime-benchmarks",
-	"cumulus-primitives-core/runtime-benchmarks",
-	"cumulus-primitives-utility/runtime-benchmarks",
-	"frame-benchmarking/runtime-benchmarks",
-	"frame-support/runtime-benchmarks",
-	"frame-system-benchmarking/runtime-benchmarks",
-	"frame-system/runtime-benchmarks",
 	"hex-literal",
-	"pallet-balances/runtime-benchmarks",
-	"pallet-collator-selection/runtime-benchmarks",
-	"pallet-message-queue/runtime-benchmarks",
 	"pallet-parachain-template/runtime-benchmarks",
-	"pallet-sudo/runtime-benchmarks",
-	"pallet-timestamp/runtime-benchmarks",
-	"pallet-xcm/runtime-benchmarks",
-	"parachains-common/runtime-benchmarks",
-	"polkadot-parachain-primitives/runtime-benchmarks",
-	"polkadot-runtime-common/runtime-benchmarks",
-	"sp-runtime/runtime-benchmarks",
-	"xcm-builder/runtime-benchmarks",
-	"xcm-executor/runtime-benchmarks",
+	"polkadot-sdk/runtime-benchmarks",
 ]
 
 try-runtime = [
-	"cumulus-pallet-aura-ext/try-runtime",
 	"cumulus-pallet-parachain-system/try-runtime",
-	"cumulus-pallet-xcm/try-runtime",
-	"cumulus-pallet-xcmp-queue/try-runtime",
-	"frame-executive/try-runtime",
-	"frame-support/try-runtime",
-	"frame-system/try-runtime",
-	"frame-try-runtime/try-runtime",
-	"pallet-aura/try-runtime",
-	"pallet-authorship/try-runtime",
-	"pallet-balances/try-runtime",
-	"pallet-collator-selection/try-runtime",
-	"pallet-message-queue/try-runtime",
 	"pallet-parachain-template/try-runtime",
-	"pallet-session/try-runtime",
-	"pallet-sudo/try-runtime",
-	"pallet-timestamp/try-runtime",
-	"pallet-transaction-payment/try-runtime",
-	"pallet-xcm/try-runtime",
-	"parachain-info/try-runtime",
-	"polkadot-runtime-common/try-runtime",
-	"sp-runtime/try-runtime",
+	"polkadot-sdk/try-runtime",
 ]
 
 # Enable the metadata hash generation.
diff --git a/templates/parachain/runtime/src/apis.rs b/templates/parachain/runtime/src/apis.rs
index 243db1b6dde0c27e87b9c4c50dddc5aa2c4c2ef8..eba9293a67ba1aa46b7697f7e03d31cca681fdca 100644
--- a/templates/parachain/runtime/src/apis.rs
+++ b/templates/parachain/runtime/src/apis.rs
@@ -25,6 +25,9 @@
 
 // External crates imports
 use alloc::vec::Vec;
+
+use polkadot_sdk::*;
+
 use frame_support::{
 	genesis_builder_helper::{build_state, get_preset},
 	weights::Weight,
@@ -241,10 +244,10 @@ impl_runtime_apis! {
 	impl frame_benchmarking::Benchmark<Block> for Runtime {
 		fn benchmark_metadata(extra: bool) -> (
 			Vec<frame_benchmarking::BenchmarkList>,
-			Vec<frame_support::traits::StorageInfo>,
+			Vec<polkadot_sdk::frame_support::traits::StorageInfo>,
 		) {
 			use frame_benchmarking::{Benchmarking, BenchmarkList};
-			use frame_support::traits::StorageInfoTrait;
+			use polkadot_sdk::frame_support::traits::StorageInfoTrait;
 			use frame_system_benchmarking::Pallet as SystemBench;
 			use cumulus_pallet_session_benchmarking::Pallet as SessionBench;
 			use super::*;
@@ -277,7 +280,7 @@ impl_runtime_apis! {
 			use cumulus_pallet_session_benchmarking::Pallet as SessionBench;
 			impl cumulus_pallet_session_benchmarking::Config for Runtime {}
 
-			use frame_support::traits::WhitelistedStorageKeys;
+			use polkadot_sdk::frame_support::traits::WhitelistedStorageKeys;
 			let whitelist = AllPalletsWithSystem::whitelisted_storage_keys();
 
 			let mut batches = Vec::<BenchmarkBatch>::new();
diff --git a/templates/parachain/runtime/src/benchmarks.rs b/templates/parachain/runtime/src/benchmarks.rs
index 9fbf1ad82bdb854cbd68d0fa07a33e0de2a2ae43..aae50e7258c0616248a5b11d3efab88e4258dba9 100644
--- a/templates/parachain/runtime/src/benchmarks.rs
+++ b/templates/parachain/runtime/src/benchmarks.rs
@@ -23,7 +23,7 @@
 //
 // For more information, please refer to <http://unlicense.org>
 
-frame_benchmarking::define_benchmarks!(
+polkadot_sdk::frame_benchmarking::define_benchmarks!(
 	[frame_system, SystemBench::<Runtime>]
 	[pallet_balances, Balances]
 	[pallet_session, SessionBench::<Runtime>]
diff --git a/templates/parachain/runtime/src/configs/mod.rs b/templates/parachain/runtime/src/configs/mod.rs
index 43ab63bd0b67834a6acdd56786d2dc49bdb378c4..0cf6497fd95e42bc60fe065d494d920693fbac21 100644
--- a/templates/parachain/runtime/src/configs/mod.rs
+++ b/templates/parachain/runtime/src/configs/mod.rs
@@ -25,6 +25,10 @@
 
 mod xcm_config;
 
+use polkadot_sdk::{staging_parachain_info as parachain_info, staging_xcm as xcm, *};
+#[cfg(not(feature = "runtime-benchmarks"))]
+use polkadot_sdk::{staging_xcm_builder as xcm_builder, staging_xcm_executor as xcm_executor};
+
 // Substrate and Polkadot dependencies
 use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
 use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
diff --git a/templates/parachain/runtime/src/configs/xcm_config.rs b/templates/parachain/runtime/src/configs/xcm_config.rs
index e162bcbf88686c00ea10dc9b06c985329faa763b..3da3b711f4ff3ccec15bd94947e0eb4c9f5e110f 100644
--- a/templates/parachain/runtime/src/configs/xcm_config.rs
+++ b/templates/parachain/runtime/src/configs/xcm_config.rs
@@ -2,6 +2,11 @@ use crate::{
 	AccountId, AllPalletsWithSystem, Balances, ParachainInfo, ParachainSystem, PolkadotXcm,
 	Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue,
 };
+
+use polkadot_sdk::{
+	staging_xcm as xcm, staging_xcm_builder as xcm_builder, staging_xcm_executor as xcm_executor, *,
+};
+
 use frame_support::{
 	parameter_types,
 	traits::{ConstU32, Contains, Everything, Nothing},
diff --git a/templates/parachain/runtime/src/genesis_config_presets.rs b/templates/parachain/runtime/src/genesis_config_presets.rs
index fec53d17394ca2363094026526cbc59bd25385e5..ac2aef734f4886e2920bb84ffb2f667e5c381534 100644
--- a/templates/parachain/runtime/src/genesis_config_presets.rs
+++ b/templates/parachain/runtime/src/genesis_config_presets.rs
@@ -1,10 +1,13 @@
-use cumulus_primitives_core::ParaId;
-
 use crate::{
 	AccountId, BalancesConfig, CollatorSelectionConfig, ParachainInfoConfig, PolkadotXcmConfig,
 	RuntimeGenesisConfig, SessionConfig, SessionKeys, SudoConfig, EXISTENTIAL_DEPOSIT,
 };
+
 use alloc::{vec, vec::Vec};
+
+use polkadot_sdk::{staging_xcm as xcm, *};
+
+use cumulus_primitives_core::ParaId;
 use parachains_common::{genesis_config_helpers::*, AuraId};
 use serde_json::Value;
 use sp_core::sr25519;
diff --git a/templates/parachain/runtime/src/lib.rs b/templates/parachain/runtime/src/lib.rs
index ccec648ce4c19e52a73659fd8dc4a9ab9582414e..cb30eb0e80d211ec1305b048819706f534cfeb37 100644
--- a/templates/parachain/runtime/src/lib.rs
+++ b/templates/parachain/runtime/src/lib.rs
@@ -16,6 +16,9 @@ mod weights;
 extern crate alloc;
 use alloc::vec::Vec;
 use smallvec::smallvec;
+
+use polkadot_sdk::{staging_parachain_info as parachain_info, *};
+
 use sp_runtime::{
 	create_runtime_str, generic, impl_opaque_keys,
 	traits::{BlakeTwo256, IdentifyAccount, Verify},
@@ -33,9 +36,6 @@ use frame_support::weights::{
 pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;
 pub use sp_runtime::{MultiAddress, Perbill, Permill};
 
-#[cfg(any(feature = "std", test))]
-pub use sp_runtime::BuildStorage;
-
 use weights::ExtrinsicBaseWeight;
 
 /// Alias to 512-bit hash when used in the context of a transaction signature on the chain.
@@ -140,13 +140,12 @@ impl WeightToFeePolynomial for WeightToFee {
 /// to even the core data structures.
 pub mod opaque {
 	use super::*;
-	use sp_runtime::{
+	pub use polkadot_sdk::sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;
+	use polkadot_sdk::sp_runtime::{
 		generic,
 		traits::{BlakeTwo256, Hash as HashT},
 	};
 
-	pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;
-
 	/// Opaque block header type.
 	pub type Header = generic::Header<BlockNumber, BlakeTwo256>;
 	/// Opaque block type.
diff --git a/templates/parachain/runtime/src/weights/block_weights.rs b/templates/parachain/runtime/src/weights/block_weights.rs
index e7fdb2aae2a01ec06076de83d94817e540e205dd..9e095a412ec2772b44ef151b7ec7b9491e331155 100644
--- a/templates/parachain/runtime/src/weights/block_weights.rs
+++ b/templates/parachain/runtime/src/weights/block_weights.rs
@@ -16,6 +16,8 @@
 // limitations under the License.
 
 pub mod constants {
+	use polkadot_sdk::*;
+
 	use frame_support::{
 		parameter_types,
 		weights::{constants, Weight},
@@ -29,6 +31,8 @@ pub mod constants {
 
 	#[cfg(test)]
 	mod test_weights {
+		use polkadot_sdk::*;
+
 		use frame_support::weights::constants;
 
 		/// Checks that the weight exists and is sane.
diff --git a/templates/parachain/runtime/src/weights/extrinsic_weights.rs b/templates/parachain/runtime/src/weights/extrinsic_weights.rs
index 1a4adb968bb7195428ea00d59cd92dcd3b6eea5f..1a00a9cd0398a2e3879599bb5336c2b783157497 100644
--- a/templates/parachain/runtime/src/weights/extrinsic_weights.rs
+++ b/templates/parachain/runtime/src/weights/extrinsic_weights.rs
@@ -16,6 +16,8 @@
 // limitations under the License.
 
 pub mod constants {
+	use polkadot_sdk::*;
+
 	use frame_support::{
 		parameter_types,
 		weights::{constants, Weight},
@@ -29,6 +31,8 @@ pub mod constants {
 
 	#[cfg(test)]
 	mod test_weights {
+		use polkadot_sdk::*;
+
 		use frame_support::weights::constants;
 
 		/// Checks that the weight exists and is sane.
diff --git a/templates/parachain/runtime/src/weights/paritydb_weights.rs b/templates/parachain/runtime/src/weights/paritydb_weights.rs
index 25679703831a13b8d1bb7fb7dd4d92fa84b1f255..9071c58ec7f232c87f5403a0a33dc1c86082aecf 100644
--- a/templates/parachain/runtime/src/weights/paritydb_weights.rs
+++ b/templates/parachain/runtime/src/weights/paritydb_weights.rs
@@ -16,6 +16,8 @@
 // limitations under the License.
 
 pub mod constants {
+	use polkadot_sdk::*;
+
 	use frame_support::{
 		parameter_types,
 		weights::{constants, RuntimeDbWeight},
@@ -32,6 +34,8 @@ pub mod constants {
 
 	#[cfg(test)]
 	mod test_db_weights {
+		use polkadot_sdk::*;
+
 		use super::constants::ParityDbWeight as W;
 		use frame_support::weights::constants;
 
diff --git a/templates/parachain/runtime/src/weights/rocksdb_weights.rs b/templates/parachain/runtime/src/weights/rocksdb_weights.rs
index 3dd817aa6f137085b0e5fdf2b11b7f50e5c8b002..89e0b643aabe0d6c98b1f83acbea53ed8e6c3477 100644
--- a/templates/parachain/runtime/src/weights/rocksdb_weights.rs
+++ b/templates/parachain/runtime/src/weights/rocksdb_weights.rs
@@ -16,6 +16,8 @@
 // limitations under the License.
 
 pub mod constants {
+	use polkadot_sdk::*;
+
 	use frame_support::{
 		parameter_types,
 		weights::{constants, RuntimeDbWeight},
@@ -32,6 +34,8 @@ pub mod constants {
 
 	#[cfg(test)]
 	mod test_db_weights {
+		use polkadot_sdk::*;
+
 		use super::constants::RocksDbWeight as W;
 		use frame_support::weights::constants;