diff --git a/cumulus/polkadot-parachain/src/command.rs b/cumulus/polkadot-parachain/src/command.rs
index 596b7baf6710ea1af53d988d6f5b3d0f93921c7d..32e363aff74be201f176bdcf2eec13cbe2dff6e9 100644
--- a/cumulus/polkadot-parachain/src/command.rs
+++ b/cumulus/polkadot-parachain/src/command.rs
@@ -381,7 +381,7 @@ impl SubstrateCli for RelayChainCli {
 }
 
 /// Creates partial components for the runtimes that are supported by the benchmarks.
-macro_rules! construct_benchmark_partials {
+macro_rules! construct_partials {
 	($config:expr, |$partials:ident| $code:expr) => {
 		match $config.chain_spec.runtime() {
 			Runtime::AssetHubKusama => {
@@ -456,7 +456,41 @@ macro_rules! construct_benchmark_partials {
 				)?;
 				$code
 			},
-			_ => Err("The chain is not supported".into()),
+			Runtime::Shell => {
+				let $partials = new_partial::<shell_runtime::RuntimeApi, _>(
+					&$config,
+					crate::service::shell_build_import_queue,
+				)?;
+				$code
+			},
+			Runtime::Seedling => {
+				let $partials = new_partial::<seedling_runtime::RuntimeApi, _>(
+					&$config,
+					crate::service::shell_build_import_queue,
+				)?;
+				$code
+			},
+			Runtime::ContractsRococo => {
+				let $partials = new_partial::<contracts_rococo_runtime::RuntimeApi, _>(
+					&$config,
+					crate::service::contracts_rococo_build_import_queue,
+				)?;
+				$code
+			},
+			Runtime::Penpal(_) | Runtime::Default => {
+				let $partials = new_partial::<rococo_parachain_runtime::RuntimeApi, _>(
+					&$config,
+					crate::service::rococo_parachain_build_import_queue,
+				)?;
+				$code
+			},
+			Runtime::Glutton => {
+				let $partials = new_partial::<glutton_runtime::RuntimeApi, _>(
+					&$config,
+					crate::service::shell_build_import_queue,
+				)?;
+				$code
+			},
 		}
 	};
 }
@@ -679,10 +713,12 @@ pub fn run() -> Result<()> {
 				cmd.run(config, polkadot_config)
 			})
 		},
-		Some(Subcommand::ExportGenesisState(cmd)) =>
-			construct_async_run!(|components, cli, cmd, config| {
-				Ok(async move { cmd.run(&*config.chain_spec, &*components.client) })
-			}),
+		Some(Subcommand::ExportGenesisState(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.sync_run(|config| {
+				construct_partials!(config, |partials| cmd.run(&*config.chain_spec, &*partials.client))
+			})
+		},
 		Some(Subcommand::ExportGenesisWasm(cmd)) => {
 			let runner = cli.create_runner(cmd)?;
 			runner.sync_run(|_config| {
@@ -704,7 +740,7 @@ pub fn run() -> Result<()> {
 							.into())
 					},
 				BenchmarkCmd::Block(cmd) => runner.sync_run(|config| {
-					construct_benchmark_partials!(config, |partials| cmd.run(partials.client))
+					construct_partials!(config, |partials| cmd.run(partials.client))
 				}),
 				#[cfg(not(feature = "runtime-benchmarks"))]
 				BenchmarkCmd::Storage(_) =>
@@ -716,7 +752,7 @@ pub fn run() -> Result<()> {
 					.into()),
 				#[cfg(feature = "runtime-benchmarks")]
 				BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| {
-					construct_benchmark_partials!(config, |partials| {
+					construct_partials!(config, |partials| {
 						let db = partials.backend.expose_db();
 						let storage = partials.backend.expose_storage();