diff --git a/cumulus/client/network/src/tests.rs b/cumulus/client/network/src/tests.rs
index 009f922008b1204bebed6c5a68ad8dbb1daf6efb..cccb710bf18f1122d8675ee0bfca23e2075b3d47 100644
--- a/cumulus/client/network/src/tests.rs
+++ b/cumulus/client/network/src/tests.rs
@@ -321,8 +321,8 @@ impl RelayChainInterface for DummyRelayChainInterface {
 		.to_vec();
 
 		Ok(RuntimeVersion {
-			spec_name: sp_version::create_runtime_str!("test"),
-			impl_name: sp_version::create_runtime_str!("test"),
+			spec_name: Cow::Borrowed("test"),
+			impl_name: Cow::Borrowed("test"),
 			authoring_version: 1,
 			spec_version: 1,
 			impl_version: 0,
diff --git a/cumulus/client/pov-recovery/src/tests.rs b/cumulus/client/pov-recovery/src/tests.rs
index d528a92a52a80a033052bf0cb5b80c841aba2f21..91b462e06bf87bf9fb264e638daa77547b8ce660 100644
--- a/cumulus/client/pov-recovery/src/tests.rs
+++ b/cumulus/client/pov-recovery/src/tests.rs
@@ -322,8 +322,8 @@ impl RelayChainInterface for Relaychain {
 		.to_vec();
 
 		Ok(RuntimeVersion {
-			spec_name: sp_version::create_runtime_str!("test"),
-			impl_name: sp_version::create_runtime_str!("test"),
+			spec_name: Cow::Borrowed("test"),
+			impl_name: Cow::Borrowed("test"),
 			authoring_version: 1,
 			spec_version: 1,
 			impl_version: 0,
diff --git a/cumulus/pallets/parachain-system/src/mock.rs b/cumulus/pallets/parachain-system/src/mock.rs
index 1f5e4f4dbcf3c07a0e620f2a638916cd2928591b..5b59be0482e7396cddf161889ace0ca726da9fd5 100644
--- a/cumulus/pallets/parachain-system/src/mock.rs
+++ b/cumulus/pallets/parachain-system/src/mock.rs
@@ -57,8 +57,8 @@ frame_support::construct_runtime!(
 
 parameter_types! {
 	pub Version: RuntimeVersion = RuntimeVersion {
-		spec_name: sp_version::create_runtime_str!("test"),
-		impl_name: sp_version::create_runtime_str!("system-test"),
+		spec_name: alloc::borrow::Cow::Borrowed("test"),
+		impl_name: alloc::borrow::Cow::Borrowed("system-test"),
 		authoring_version: 1,
 		spec_version: 1,
 		impl_version: 1,
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs
index d15dd971a8194812f6120858d35b3e0261088d34..d58d2f6d5f4d68b7bbb1e38dc3457b1ea286e156 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs
@@ -67,8 +67,8 @@ mod preset_names {
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
 	use preset_names::*;
-	let patch = match id.try_into() {
-		Ok(PRESET_GENESIS) => asset_hub_rococo_genesis(
+	let patch = match id.as_ref() {
+		PRESET_GENESIS => asset_hub_rococo_genesis(
 			// initial collators.
 			vec![
 				// E8XC6rTJRsioKCp6KMy6zd24ykj4gWsusZ3AkSeyavpVBAG
@@ -100,7 +100,7 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
 			ASSET_HUB_ROCOCO_ED * 524_288,
 			1000.into(),
 		),
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => asset_hub_rococo_genesis(
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => asset_hub_rococo_genesis(
 			// initial collators.
 			vec![
 				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
@@ -110,7 +110,7 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
 			testnet_parachains_constants::rococo::currency::UNITS * 1_000_000,
 			1000.into(),
 		),
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => asset_hub_rococo_genesis(
+		sp_genesis_builder::DEV_RUNTIME_PRESET => asset_hub_rococo_genesis(
 			// initial collators.
 			vec![(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into())],
 			vec![
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs
index 420fa67f41f3824bbf3397dec7fd0dd972237831..474434448bb94efade8fd9b3da72e99c0db20625 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs
+++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs
@@ -42,7 +42,7 @@ use cumulus_primitives_core::{AggregateMessageOrigin, ClaimQueueOffset, CoreSele
 use sp_api::impl_runtime_apis;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{AccountIdConversion, BlakeTwo256, Block as BlockT, Saturating, Verify},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult, Permill,
@@ -120,8 +120,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("statemine"),
-	impl_name: create_runtime_str!("statemine"),
+	spec_name: alloc::borrow::Cow::Borrowed("statemine"),
+	impl_name: alloc::borrow::Cow::Borrowed("statemine"),
 	authoring_version: 1,
 	spec_version: 1_016_002,
 	impl_version: 0,
@@ -1556,7 +1556,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/genesis_config_presets.rs
index 758ce3f40609fdc322807d1ac222df737a0bc3b6..f440b5a2f421aa6f650ef58a76b535fdb34dac48 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/genesis_config_presets.rs
@@ -76,8 +76,8 @@ mod preset_names {
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
 	use preset_names::*;
-	let patch = match id.try_into() {
-		Ok(PRESET_GENESIS) => asset_hub_westend_genesis(
+	let patch = match id.as_ref() {
+		PRESET_GENESIS => asset_hub_westend_genesis(
 			// initial collators.
 			vec![
 				(
@@ -105,7 +105,7 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
 			ASSET_HUB_WESTEND_ED * 4096,
 			1000.into(),
 		),
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => asset_hub_westend_genesis(
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => asset_hub_westend_genesis(
 			// initial collators.
 			vec![
 				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
@@ -115,7 +115,7 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
 			WND * 1_000_000,
 			1000.into(),
 		),
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => asset_hub_westend_genesis(
+		sp_genesis_builder::DEV_RUNTIME_PRESET => asset_hub_westend_genesis(
 			// initial collators.
 			vec![(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into())],
 			vec![
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs
index baa3aad95fda190ec6e759747404348a9c87e0ff..7261680677d4fb22b2202ef63cc6cdb6529a5064 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs
+++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/lib.rs
@@ -70,7 +70,7 @@ use parachains_common::{
 use sp_api::impl_runtime_apis;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H160};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{AccountIdConversion, BlakeTwo256, Block as BlockT, Saturating, Verify},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult, Perbill, Permill, RuntimeDebug,
@@ -124,8 +124,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
 	// Note: "westmint" is the legacy name for this chain. It has been renamed to
 	// "asset-hub-westend". Many wallets/tools depend on the `spec_name`, so it remains "westmint"
 	// for the time being. Wallets/tools should update to treat "asset-hub-westend" equally.
-	spec_name: create_runtime_str!("westmint"),
-	impl_name: create_runtime_str!("westmint"),
+	spec_name: alloc::borrow::Cow::Borrowed("westmint"),
+	impl_name: alloc::borrow::Cow::Borrowed("westmint"),
 	authoring_version: 1,
 	spec_version: 1_016_004,
 	impl_version: 0,
@@ -1736,7 +1736,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/genesis_config_presets.rs
index d1b599967bf3690cbe93172beac225d38b14e75a..8b749ae301b512bb4e10173fcdcd2d47a2535bf8 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/genesis_config_presets.rs
@@ -89,8 +89,8 @@ fn bridge_hub_rococo_genesis(
 
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<u8>> {
-	let patch = match id.try_into() {
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => bridge_hub_rococo_genesis(
+	let patch = match id.as_ref() {
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => bridge_hub_rococo_genesis(
 			// initial collators.
 			vec![
 				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
@@ -106,7 +106,7 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<
 				Some(bp_messages::LegacyLaneId([0, 0, 0, 2])),
 			)],
 		),
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => bridge_hub_rococo_genesis(
+		sp_genesis_builder::DEV_RUNTIME_PRESET => bridge_hub_rococo_genesis(
 			// initial collators.
 			vec![
 				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs
index f63e1f8fcf65bd95c2ac6dcb5f37bf1aae17aee3..9a44dd17b64673b448621324ab85f3bd25cf1391 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs
@@ -47,7 +47,7 @@ use pallet_bridge_messages::LaneIdOf;
 use sp_api::impl_runtime_apis;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::Block as BlockT,
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult,
@@ -235,8 +235,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("bridge-hub-rococo"),
-	impl_name: create_runtime_str!("bridge-hub-rococo"),
+	spec_name: alloc::borrow::Cow::Borrowed("bridge-hub-rococo"),
+	impl_name: alloc::borrow::Cow::Borrowed("bridge-hub-rococo"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -1070,7 +1070,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/genesis_config_presets.rs
index 2949ae01fdcccdc6dfa9dfc229d76e3021c5e08e..e639b899149a171ed892621acfdb7ffcef2c524e 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/genesis_config_presets.rs
@@ -89,8 +89,8 @@ fn bridge_hub_westend_genesis(
 
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<u8>> {
-	let patch = match id.try_into() {
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => bridge_hub_westend_genesis(
+	let patch = match id.as_ref() {
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => bridge_hub_westend_genesis(
 			// initial collators.
 			vec![
 				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
@@ -106,7 +106,7 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<
 				Some(bp_messages::LegacyLaneId([0, 0, 0, 2])),
 			)],
 		),
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => bridge_hub_westend_genesis(
+		sp_genesis_builder::DEV_RUNTIME_PRESET => bridge_hub_westend_genesis(
 			// initial collators.
 			vec![
 				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs
index 1d7cd5de40eb45f3d901b7a4f3c434381a8b950c..7c71f30b356b09f7c05c1e4c34b4a931626c4a95 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/lib.rs
@@ -45,7 +45,7 @@ use cumulus_primitives_core::{ClaimQueueOffset, CoreSelector, ParaId};
 use sp_api::impl_runtime_apis;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::Block as BlockT,
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult,
@@ -220,8 +220,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("bridge-hub-westend"),
-	impl_name: create_runtime_str!("bridge-hub-westend"),
+	spec_name: alloc::borrow::Cow::Borrowed("bridge-hub-westend"),
+	impl_name: alloc::borrow::Cow::Borrowed("bridge-hub-westend"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -955,7 +955,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/collectives/collectives-westend/src/genesis_config_presets.rs
index aec8e96cedc0b5e3d6fdf354c12557813ac96d00..77e971ff8ad7f6dd2f111a83a01fc52dc7fb76f6 100644
--- a/cumulus/parachains/runtimes/collectives/collectives-westend/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/collectives/collectives-westend/src/genesis_config_presets.rs
@@ -69,8 +69,8 @@ fn collectives_westend_genesis(
 
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<u8>> {
-	let patch = match id.try_into() {
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => collectives_westend_genesis(
+	let patch = match id.as_ref() {
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => collectives_westend_genesis(
 			// initial collators.
 			vec![
 				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
@@ -79,7 +79,7 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<
 			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			1001.into(),
 		),
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => collectives_westend_genesis(
+		sp_genesis_builder::DEV_RUNTIME_PRESET => collectives_westend_genesis(
 			// initial collators.
 			vec![(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into())],
 			vec![
diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs b/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs
index 8cb2e42cb31bda1bf494762f306eda48760e0dcc..c3e105a84fb63c87514d4fcd56520d7de78dccad 100644
--- a/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs
+++ b/cumulus/parachains/runtimes/collectives/collectives-westend/src/lib.rs
@@ -56,7 +56,7 @@ use impls::{AllianceProposalProvider, EqualOrGreatestRootCmp};
 use sp_api::impl_runtime_apis;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{AccountIdConversion, BlakeTwo256, Block as BlockT},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult, Perbill,
@@ -123,8 +123,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("collectives-westend"),
-	impl_name: create_runtime_str!("collectives-westend"),
+	spec_name: alloc::borrow::Cow::Borrowed("collectives-westend"),
+	impl_name: alloc::borrow::Cow::Borrowed("collectives-westend"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -1061,7 +1061,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs
index 2fc3fe4f31415cf6fd060626cf7eea169f4c8014..f661a8bdccfe90c5931e0676efe63765fd7167c1 100644
--- a/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs
+++ b/cumulus/parachains/runtimes/contracts/contracts-rococo/src/lib.rs
@@ -37,7 +37,7 @@ use cumulus_primitives_core::{AggregateMessageOrigin, ClaimQueueOffset, CoreSele
 use sp_api::impl_runtime_apis;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::Block as BlockT,
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult, Perbill,
@@ -141,8 +141,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("contracts-rococo"),
-	impl_name: create_runtime_str!("contracts-rococo"),
+	spec_name: alloc::borrow::Cow::Borrowed("contracts-rococo"),
+	impl_name: alloc::borrow::Cow::Borrowed("contracts-rococo"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -772,7 +772,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs
index f2ccb9c552e3375cce1e578998cd22b6465f6467..a4ff48bfc0a010c605ce07a456848355d9e57170 100644
--- a/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs
+++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/src/lib.rs
@@ -67,7 +67,7 @@ use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 #[cfg(any(feature = "std", test))]
 pub use sp_runtime::BuildStorage;
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{BlakeTwo256, Block as BlockT},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult, DispatchError, MultiAddress, Perbill, RuntimeDebug,
@@ -146,8 +146,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("coretime-rococo"),
-	impl_name: create_runtime_str!("coretime-rococo"),
+	spec_name: alloc::borrow::Cow::Borrowed("coretime-rococo"),
+	impl_name: alloc::borrow::Cow::Borrowed("coretime-rococo"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -918,7 +918,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs b/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs
index 2f944e79fe00e21899e66cd71dfcbf6a9aad0d8c..edede5aeb46b2ba688b920a9c12932c05e769322 100644
--- a/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs
+++ b/cumulus/parachains/runtimes/coretime/coretime-westend/src/lib.rs
@@ -67,7 +67,7 @@ use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 #[cfg(any(feature = "std", test))]
 pub use sp_runtime::BuildStorage;
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{BlakeTwo256, Block as BlockT},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult, DispatchError, MultiAddress, Perbill, RuntimeDebug,
@@ -146,8 +146,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("coretime-westend"),
-	impl_name: create_runtime_str!("coretime-westend"),
+	spec_name: alloc::borrow::Cow::Borrowed("coretime-westend"),
+	impl_name: alloc::borrow::Cow::Borrowed("coretime-westend"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -910,7 +910,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs b/cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs
index ad656cdbb83a89dd74f50092dd0208c2a0c1348f..fdf467ab64b8a11cf8672afe8ad47146e66a6b64 100644
--- a/cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs
+++ b/cumulus/parachains/runtimes/glutton/glutton-westend/src/lib.rs
@@ -55,7 +55,7 @@ use sp_api::impl_runtime_apis;
 pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{BlakeTwo256, Block as BlockT},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult,
@@ -99,8 +99,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("glutton-westend"),
-	impl_name: create_runtime_str!("glutton-westend"),
+	spec_name: alloc::borrow::Cow::Borrowed("glutton-westend"),
+	impl_name: alloc::borrow::Cow::Borrowed("glutton-westend"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -460,7 +460,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch,  BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/people/people-rococo/src/lib.rs b/cumulus/parachains/runtimes/people/people-rococo/src/lib.rs
index bb290c0af97dc1a43d123d1a50a5fdb2a0c2edc0..25356a84806d0582472f51114eee03260f1df8a4 100644
--- a/cumulus/parachains/runtimes/people/people-rococo/src/lib.rs
+++ b/cumulus/parachains/runtimes/people/people-rococo/src/lib.rs
@@ -58,7 +58,7 @@ use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 #[cfg(any(feature = "std", test))]
 pub use sp_runtime::BuildStorage;
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{BlakeTwo256, Block as BlockT},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult,
@@ -134,8 +134,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("people-rococo"),
-	impl_name: create_runtime_str!("people-rococo"),
+	spec_name: alloc::borrow::Cow::Borrowed("people-rococo"),
+	impl_name: alloc::borrow::Cow::Borrowed("people-rococo"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -886,7 +886,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/people/people-westend/src/lib.rs b/cumulus/parachains/runtimes/people/people-westend/src/lib.rs
index 7a586504badba13603817156105f5980b7012d9e..1c5183636c49964850adcd1748cca3ed10bbaf17 100644
--- a/cumulus/parachains/runtimes/people/people-westend/src/lib.rs
+++ b/cumulus/parachains/runtimes/people/people-westend/src/lib.rs
@@ -58,7 +58,7 @@ use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 #[cfg(any(feature = "std", test))]
 pub use sp_runtime::BuildStorage;
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{BlakeTwo256, Block as BlockT},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult,
@@ -133,8 +133,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("people-westend"),
-	impl_name: create_runtime_str!("people-westend"),
+	spec_name: alloc::borrow::Cow::Borrowed("people-westend"),
+	impl_name: alloc::borrow::Cow::Borrowed("people-westend"),
 	authoring_version: 1,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -884,7 +884,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/testing/penpal/src/lib.rs b/cumulus/parachains/runtimes/testing/penpal/src/lib.rs
index 136592c5602601072e843f9d28c0bf60c7bd5bd7..6c9e3f7f23a5aa022eecff7a82176826042a9254 100644
--- a/cumulus/parachains/runtimes/testing/penpal/src/lib.rs
+++ b/cumulus/parachains/runtimes/testing/penpal/src/lib.rs
@@ -73,7 +73,7 @@ use sp_api::impl_runtime_apis;
 pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{AccountIdConversion, AccountIdLookup, BlakeTwo256, Block as BlockT, Dispatchable},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult,
@@ -242,8 +242,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("penpal-parachain"),
-	impl_name: create_runtime_str!("penpal-parachain"),
+	spec_name: alloc::borrow::Cow::Borrowed("penpal-parachain"),
+	impl_name: alloc::borrow::Cow::Borrowed("penpal-parachain"),
 	authoring_version: 1,
 	spec_version: 1,
 	impl_version: 0,
@@ -1117,7 +1117,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs
index 34bd45b6ef990b85ede27c56f9291dcdee59dc80..095f571974f0ead3e8ca2e06ee298ab07d6c94a1 100644
--- a/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs
+++ b/cumulus/parachains/runtimes/testing/rococo-parachain/src/lib.rs
@@ -30,7 +30,7 @@ use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery;
 use sp_api::impl_runtime_apis;
 use sp_core::OpaqueMetadata;
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, Hash as HashT},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult,
@@ -106,8 +106,8 @@ impl_opaque_keys! {
 /// This runtime version.
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("test-parachain"),
-	impl_name: create_runtime_str!("test-parachain"),
+	spec_name: alloc::borrow::Cow::Borrowed("test-parachain"),
+	impl_name: alloc::borrow::Cow::Borrowed("test-parachain"),
 	authoring_version: 1,
 	spec_version: 1_014_000,
 	impl_version: 0,
diff --git a/cumulus/polkadot-omni-node/lib/src/fake_runtime_api/utils.rs b/cumulus/polkadot-omni-node/lib/src/fake_runtime_api/utils.rs
index 0b1ed5d82889e5f70898dd5b82696e78c247cf3b..6bfd5f4f4cbd1743782303d0d5f6ab78d16c7b4a 100644
--- a/cumulus/polkadot-omni-node/lib/src/fake_runtime_api/utils.rs
+++ b/cumulus/polkadot-omni-node/lib/src/fake_runtime_api/utils.rs
@@ -202,7 +202,7 @@ macro_rules! impl_node_runtime_apis {
 
 				fn dispatch_benchmark(
 					_: frame_benchmarking::BenchmarkConfig
-				) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+				) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, String> {
 					unimplemented!()
 				}
 			}
diff --git a/cumulus/test/runtime/src/genesis_config_presets.rs b/cumulus/test/runtime/src/genesis_config_presets.rs
index 6cf56ef5363fd5a4da76bbcf7e6cebed9b88b11b..84ba71ae795fd508f8a8bfe0eddb269537ae6758 100644
--- a/cumulus/test/runtime/src/genesis_config_presets.rs
+++ b/cumulus/test/runtime/src/genesis_config_presets.rs
@@ -58,9 +58,9 @@ pub fn preset_names() -> Vec<PresetId> {
 
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
-	let patch = match id.try_into() {
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) |
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) =>
+	let patch = match id.as_ref() {
+		sp_genesis_builder::DEV_RUNTIME_PRESET |
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET =>
 			testnet_genesis_with_default_endowed(100.into()),
 		_ => return None,
 	};
diff --git a/cumulus/test/runtime/src/lib.rs b/cumulus/test/runtime/src/lib.rs
index 01c1571f343f8ec61322d0337b075fc33fc6bba5..b1649c410581a0f725e76312a535965db5e3cb6e 100644
--- a/cumulus/test/runtime/src/lib.rs
+++ b/cumulus/test/runtime/src/lib.rs
@@ -45,7 +45,7 @@ use sp_core::{ConstBool, ConstU32, ConstU64, OpaqueMetadata};
 
 use cumulus_primitives_core::{ClaimQueueOffset, CoreSelector};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{BlakeTwo256, Block as BlockT, IdentifyAccount, Verify},
 	transaction_validity::{TransactionSource, TransactionValidity},
 	ApplyExtrinsicResult, MultiAddress, MultiSignature,
@@ -126,8 +126,8 @@ const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000;
 #[cfg(not(feature = "increment-spec-version"))]
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("cumulus-test-parachain"),
-	impl_name: create_runtime_str!("cumulus-test-parachain"),
+	spec_name: alloc::borrow::Cow::Borrowed("cumulus-test-parachain"),
+	impl_name: alloc::borrow::Cow::Borrowed("cumulus-test-parachain"),
 	authoring_version: 1,
 	// Read the note above.
 	spec_version: 1,
@@ -140,8 +140,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
 #[cfg(feature = "increment-spec-version")]
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("cumulus-test-parachain"),
-	impl_name: create_runtime_str!("cumulus-test-parachain"),
+	spec_name: alloc::borrow::Cow::Borrowed("cumulus-test-parachain"),
+	impl_name: alloc::borrow::Cow::Borrowed("cumulus-test-parachain"),
 	authoring_version: 1,
 	// Read the note above.
 	spec_version: 2,
diff --git a/docs/sdk/packages/guides/first-runtime/src/lib.rs b/docs/sdk/packages/guides/first-runtime/src/lib.rs
index 92d51962b6febb03a4da80b3003e70ca174bbaf8..7c96f5653e5278fe3298533a46cd71f899002819 100644
--- a/docs/sdk/packages/guides/first-runtime/src/lib.rs
+++ b/docs/sdk/packages/guides/first-runtime/src/lib.rs
@@ -31,8 +31,8 @@ use pallet_transaction_payment_rpc_runtime_api::{FeeDetails, RuntimeDispatchInfo
 #[docify::export]
 #[runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("first-runtime"),
-	impl_name: create_runtime_str!("first-runtime"),
+	spec_name: alloc::borrow::Cow::Borrowed("first-runtime"),
+	impl_name: alloc::borrow::Cow::Borrowed("first-runtime"),
 	authoring_version: 1,
 	spec_version: 0,
 	impl_version: 1,
@@ -152,8 +152,8 @@ pub mod genesis_config_presets {
 	/// Get the set of the available genesis config presets.
 	#[docify::export]
 	pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
-		let patch = match id.try_into() {
-			Ok(DEV_RUNTIME_PRESET) => development_config_genesis(),
+		let patch = match id.as_ref() {
+			DEV_RUNTIME_PRESET => development_config_genesis(),
 			_ => return None,
 		};
 		Some(
diff --git a/docs/sdk/src/reference_docs/chain_spec_runtime/src/presets.rs b/docs/sdk/src/reference_docs/chain_spec_runtime/src/presets.rs
index c1316b2f87347811409c0f6581abf57c20c3def1..5918f2b8ccd5961566ab96360f98c8e0a11c462a 100644
--- a/docs/sdk/src/reference_docs/chain_spec_runtime/src/presets.rs
+++ b/docs/sdk/src/reference_docs/chain_spec_runtime/src/presets.rs
@@ -121,12 +121,12 @@ fn preset_invalid() -> Value {
 /// If no preset with given `id` exits `None` is returned.
 #[docify::export]
 pub fn get_builtin_preset(id: &sp_genesis_builder::PresetId) -> Option<alloc::vec::Vec<u8>> {
-	let preset = match id.try_into() {
-		Ok(PRESET_1) => preset_1(),
-		Ok(PRESET_2) => preset_2(),
-		Ok(PRESET_3) => preset_3(),
-		Ok(PRESET_4) => preset_4(),
-		Ok(PRESET_INVALID) => preset_invalid(),
+	let preset = match id.as_ref() {
+		PRESET_1 => preset_1(),
+		PRESET_2 => preset_2(),
+		PRESET_3 => preset_3(),
+		PRESET_4 => preset_4(),
+		PRESET_INVALID => preset_invalid(),
 		_ => return None,
 	};
 
diff --git a/docs/sdk/src/reference_docs/chain_spec_runtime/src/runtime.rs b/docs/sdk/src/reference_docs/chain_spec_runtime/src/runtime.rs
index 5be3a59dc7bb84304ae38c9758439a2a1c99795b..282fc1ff489c0195973d712c085688bdaf77a30a 100644
--- a/docs/sdk/src/reference_docs/chain_spec_runtime/src/runtime.rs
+++ b/docs/sdk/src/reference_docs/chain_spec_runtime/src/runtime.rs
@@ -39,8 +39,8 @@ use sp_genesis_builder::PresetId;
 /// The runtime version.
 #[runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("minimal-template-runtime"),
-	impl_name: create_runtime_str!("minimal-template-runtime"),
+	spec_name: alloc::borrow::Cow::Borrowed("minimal-template-runtime"),
+	impl_name: alloc::borrow::Cow::Borrowed("minimal-template-runtime"),
 	authoring_version: 1,
 	spec_version: 0,
 	impl_version: 1,
diff --git a/polkadot/runtime/rococo/src/genesis_config_presets.rs b/polkadot/runtime/rococo/src/genesis_config_presets.rs
index d609548aed27c580b511ff235f9b52d4ba06e80d..39c862660894c5c8cf23851aa2358eb0382b6c59 100644
--- a/polkadot/runtime/rococo/src/genesis_config_presets.rs
+++ b/polkadot/runtime/rococo/src/genesis_config_presets.rs
@@ -490,11 +490,11 @@ fn versi_local_testnet_genesis() -> serde_json::Value {
 
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
-	let patch = match id.try_into() {
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => rococo_local_testnet_genesis(),
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => rococo_development_config_genesis(),
-		Ok("staging_testnet") => rococo_staging_testnet_config_genesis(),
-		Ok("versi_local_testnet") => versi_local_testnet_genesis(),
+	let patch = match id.as_ref() {
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => rococo_local_testnet_genesis(),
+		sp_genesis_builder::DEV_RUNTIME_PRESET => rococo_development_config_genesis(),
+		"staging_testnet" => rococo_staging_testnet_config_genesis(),
+		"versi_local_testnet" => versi_local_testnet_genesis(),
 		_ => return None,
 	};
 	Some(
diff --git a/polkadot/runtime/rococo/src/lib.rs b/polkadot/runtime/rococo/src/lib.rs
index e02a28353d296d002758addb82495f1286cdb2e6..88e738cc980da48489ff3b14c6f94a8580d5fe13 100644
--- a/polkadot/runtime/rococo/src/lib.rs
+++ b/polkadot/runtime/rococo/src/lib.rs
@@ -100,7 +100,7 @@ use pallet_session::historical as session_historical;
 use pallet_transaction_payment::{FeeDetails, FungibleAdapter, RuntimeDispatchInfo};
 use sp_core::{ConstU128, ConstU8, Get, OpaqueMetadata, H256};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{
 		AccountIdConversion, BlakeTwo256, Block as BlockT, ConstU32, ConvertInto, IdentityLookup,
 		Keccak256, OpaqueKeys, SaturatedConversion, Verify,
@@ -168,8 +168,8 @@ pub mod fast_runtime_binary {
 /// Runtime version (Rococo).
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("rococo"),
-	impl_name: create_runtime_str!("parity-rococo-v2.0"),
+	spec_name: alloc::borrow::Cow::Borrowed("rococo"),
+	impl_name: alloc::borrow::Cow::Borrowed("parity-rococo-v2.0"),
 	authoring_version: 0,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -2435,7 +2435,7 @@ sp_api::impl_runtime_apis! {
 			config: frame_benchmarking::BenchmarkConfig,
 		) -> Result<
 			Vec<frame_benchmarking::BenchmarkBatch>,
-			sp_runtime::RuntimeString,
+			alloc::string::String,
 		> {
 			use frame_support::traits::WhitelistedStorageKeys;
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
diff --git a/polkadot/runtime/test-runtime/src/lib.rs b/polkadot/runtime/test-runtime/src/lib.rs
index 9e7ee488af72d8b9993a307997066702a6e7591a..bb46b19956e860b861e1e47a9d12174121002bb2 100644
--- a/polkadot/runtime/test-runtime/src/lib.rs
+++ b/polkadot/runtime/test-runtime/src/lib.rs
@@ -80,7 +80,6 @@ use sp_consensus_beefy::ecdsa_crypto::{AuthorityId as BeefyId, Signature as Beef
 use sp_core::{ConstU32, OpaqueMetadata};
 use sp_mmr_primitives as mmr;
 use sp_runtime::{
-	create_runtime_str,
 	curve::PiecewiseLinear,
 	generic, impl_opaque_keys,
 	traits::{
@@ -119,8 +118,8 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));
 /// Runtime version (Test).
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("polkadot-test-runtime"),
-	impl_name: create_runtime_str!("parity-polkadot-test-runtime"),
+	spec_name: alloc::borrow::Cow::Borrowed("polkadot-test-runtime"),
+	impl_name: alloc::borrow::Cow::Borrowed("parity-polkadot-test-runtime"),
 	authoring_version: 2,
 	spec_version: 1056,
 	impl_version: 0,
diff --git a/polkadot/runtime/westend/src/genesis_config_presets.rs b/polkadot/runtime/westend/src/genesis_config_presets.rs
index a9e22898ddb45ebd15dade033c39a98489f33b2e..b074d54fb5827994719d8d3d818071356329345c 100644
--- a/polkadot/runtime/westend/src/genesis_config_presets.rs
+++ b/polkadot/runtime/westend/src/genesis_config_presets.rs
@@ -411,10 +411,10 @@ fn westend_local_testnet_genesis() -> serde_json::Value {
 
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
-	let patch = match id.try_into() {
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => westend_local_testnet_genesis(),
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => westend_development_config_genesis(),
-		Ok("staging_testnet") => westend_staging_testnet_config_genesis(),
+	let patch = match id.as_ref() {
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => westend_local_testnet_genesis(),
+		sp_genesis_builder::DEV_RUNTIME_PRESET => westend_development_config_genesis(),
+		"staging_testnet" => westend_staging_testnet_config_genesis(),
 		_ => return None,
 	};
 	Some(
diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs
index 251d92b03bbb9cf09177a97d7ca3710b62fa4ed6..21790e259f075e4b86130e63d19b0772864df77a 100644
--- a/polkadot/runtime/westend/src/lib.rs
+++ b/polkadot/runtime/westend/src/lib.rs
@@ -95,7 +95,7 @@ use sp_consensus_beefy::{
 };
 use sp_core::{ConstU8, OpaqueMetadata, RuntimeDebug, H256};
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{
 		AccountIdConversion, BlakeTwo256, Block as BlockT, ConvertInto, IdentityLookup, Keccak256,
 		OpaqueKeys, SaturatedConversion, Verify,
@@ -168,8 +168,8 @@ pub mod fast_runtime_binary {
 /// Runtime version (Westend).
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("westend"),
-	impl_name: create_runtime_str!("parity-westend"),
+	spec_name: alloc::borrow::Cow::Borrowed("westend"),
+	impl_name: alloc::borrow::Cow::Borrowed("parity-westend"),
 	authoring_version: 2,
 	spec_version: 1_016_001,
 	impl_version: 0,
@@ -2592,7 +2592,7 @@ sp_api::impl_runtime_apis! {
 			config: frame_benchmarking::BenchmarkConfig,
 		) -> Result<
 			Vec<frame_benchmarking::BenchmarkBatch>,
-			sp_runtime::RuntimeString,
+			alloc::string::String,
 		> {
 			use frame_support::traits::WhitelistedStorageKeys;
 			use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError};
diff --git a/prdoc/pr_5693.prdoc b/prdoc/pr_5693.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..d8afae7ba0bca14906968b4d7cc6ff9586870b03
--- /dev/null
+++ b/prdoc/pr_5693.prdoc
@@ -0,0 +1,84 @@
+title: Remove `sp_runtime::RuntimeString` and replace with `Cow<'static, str>` or
+  `String` depending on use case
+doc:
+  - audience: Runtime Dev
+    description: |
+      Deprecate `RuntimeString`, replace with `String` or `Cow<'static, str>` where appropriate.
+
+      For downstream projects the upgrade will primarily consist of following two changes:
+      ```diff
+      #[sp_version::runtime_version]
+      pub const VERSION: RuntimeVersion = RuntimeVersion {
+      -	spec_name: create_runtime_str!("statemine"),
+      -	impl_name: create_runtime_str!("statemine"),
+      +	spec_name: alloc::borrow::Cow::Borrowed("statemine"),
+      +	impl_name: alloc::borrow::Cow::Borrowed("statemine"),
+      ```
+      ```diff
+      		fn dispatch_benchmark(
+      			config: frame_benchmarking::BenchmarkConfig
+      -		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+      +		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
+      ```
+      SCALE encoding/decoding remains the same as before, but serde encoding in runtime has changed from bytes to string (it was like this in `std` environment already).
+crates:
+- name: cumulus-client-network
+  bump: major
+- name: cumulus-client-pov-recovery
+  bump: major
+- name: cumulus-pallet-parachain-system
+  bump: major
+- name: asset-hub-rococo-runtime
+  bump: major
+- name: asset-hub-westend-runtime
+  bump: major
+- name: bridge-hub-rococo-runtime
+  bump: major
+- name: bridge-hub-westend-runtime
+  bump: major
+- name: collectives-westend-runtime
+  bump: major
+- name: contracts-rococo-runtime
+  bump: major
+- name: coretime-rococo-runtime
+  bump: major
+- name: coretime-westend-runtime
+  bump: major
+- name: glutton-westend-runtime
+  bump: major
+- name: people-rococo-runtime
+  bump: major
+- name: people-westend-runtime
+  bump: major
+- name: penpal-runtime
+  bump: major
+- name: rococo-parachain-runtime
+  bump: major
+- name: rococo-runtime
+  bump: major
+- name: westend-runtime
+  bump: major
+- name: staging-chain-spec-builder
+  bump: major
+- name: sc-consensus-pow
+  bump: major
+- name: sc-executor
+  bump: major
+- name: frame-benchmarking
+  bump: major
+- name: polkadot-sdk-frame
+  bump: major
+- name: frame-support
+  bump: major
+- name: frame-system
+  bump: major
+- name: sp-api
+  bump: major
+- name: sp-genesis-builder
+  bump: major
+- name: sp-runtime
+  bump: major
+- name: sp-version-proc-macro
+  bump: major
+- name: sp-version
+  bump: major
diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs
index 76b09c127c3504c5371bc9d02158af22c2962cb5..18db43b1c12015bd8813d4c6c62db0e05ca02697 100644
--- a/substrate/bin/node/runtime/src/lib.rs
+++ b/substrate/bin/node/runtime/src/lib.rs
@@ -102,7 +102,6 @@ use sp_consensus_grandpa::AuthorityId as GrandpaId;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H160};
 use sp_inherents::{CheckInherentsResult, InherentData};
 use sp_runtime::{
-	create_runtime_str,
 	curve::PiecewiseLinear,
 	generic, impl_opaque_keys,
 	traits::{
@@ -168,8 +167,8 @@ pub fn wasm_binary_unwrap() -> &'static [u8] {
 /// Runtime version.
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("node"),
-	impl_name: create_runtime_str!("substrate-node"),
+	spec_name: alloc::borrow::Cow::Borrowed("node"),
+	impl_name: alloc::borrow::Cow::Borrowed("substrate-node"),
 	authoring_version: 10,
 	// Per convention: if the runtime behavior changes, increment spec_version
 	// and set impl_version to 0. If only runtime
@@ -3613,7 +3612,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{baseline, Benchmarking, BenchmarkBatch};
 			use sp_storage::TrackedStorageKey;
 
diff --git a/substrate/bin/utils/chain-spec-builder/src/lib.rs b/substrate/bin/utils/chain-spec-builder/src/lib.rs
index 98ff480b8cebab0c58948771de37795b8957cb16..6f3128ed7eb05980c8888449da8354d27bc64742 100644
--- a/substrate/bin/utils/chain-spec-builder/src/lib.rs
+++ b/substrate/bin/utils/chain-spec-builder/src/lib.rs
@@ -293,16 +293,6 @@ impl ChainSpecBuilder {
 				let presets = caller
 					.preset_names()
 					.map_err(|e| format!("getting default config from runtime should work: {e}"))?;
-				let presets: Vec<String> = presets
-					.into_iter()
-					.map(|preset| {
-						String::from(
-							TryInto::<&str>::try_into(&preset)
-								.unwrap_or_else(|_| "cannot display preset id")
-								.to_string(),
-						)
-					})
-					.collect();
 				println!("{}", serde_json::json!({"presets":presets}).to_string());
 			},
 			ChainSpecBuilderCmd::DisplayPreset(DisplayPresetCmd { runtime, preset_name }) => {
diff --git a/substrate/client/consensus/pow/src/lib.rs b/substrate/client/consensus/pow/src/lib.rs
index cd7da128549f0d8ded3b073568e735fae970028f..882f3440e164e1761b0a9bfdc80d30af8b4004dc 100644
--- a/substrate/client/consensus/pow/src/lib.rs
+++ b/substrate/client/consensus/pow/src/lib.rs
@@ -62,7 +62,6 @@ use sp_inherents::{CreateInherentDataProviders, InherentDataProvider};
 use sp_runtime::{
 	generic::{BlockId, Digest, DigestItem},
 	traits::{Block as BlockT, Header as HeaderT},
-	RuntimeString,
 };
 use std::{cmp::Ordering, marker::PhantomData, sync::Arc, time::Duration};
 
@@ -110,7 +109,7 @@ pub enum Error<B: BlockT> {
 	#[error("{0}")]
 	Environment(String),
 	#[error("{0}")]
-	Runtime(RuntimeString),
+	Runtime(String),
 	#[error("{0}")]
 	Other(String),
 }
diff --git a/substrate/client/executor/src/wasm_runtime.rs b/substrate/client/executor/src/wasm_runtime.rs
index 77dfc09c8807e7bb6fa9289bf3a58cc909b9f4f8..8f189ca92388aeae8663f2165f68caad48d1b979 100644
--- a/substrate/client/executor/src/wasm_runtime.rs
+++ b/substrate/client/executor/src/wasm_runtime.rs
@@ -441,18 +441,20 @@ where
 
 #[cfg(test)]
 mod tests {
+	extern crate alloc;
+
 	use super::*;
+	use alloc::borrow::Cow;
 	use codec::Encode;
 	use sp_api::{Core, RuntimeApiInfo};
-	use sp_runtime::RuntimeString;
 	use sp_version::{create_apis_vec, RuntimeVersion};
 	use sp_wasm_interface::HostFunctions;
 	use substrate_test_runtime::Block;
 
 	#[derive(Encode)]
 	pub struct OldRuntimeVersion {
-		pub spec_name: RuntimeString,
-		pub impl_name: RuntimeString,
+		pub spec_name: Cow<'static, str>,
+		pub impl_name: Cow<'static, str>,
 		pub authoring_version: u32,
 		pub spec_version: u32,
 		pub impl_version: u32,
diff --git a/substrate/frame/benchmarking/src/utils.rs b/substrate/frame/benchmarking/src/utils.rs
index ca362f7aa7efe20e4c78a29a2a7d3136ec548775..fb55cee99e810eb160fb0a77eb9d7f31807a3df0 100644
--- a/substrate/frame/benchmarking/src/utils.rs
+++ b/substrate/frame/benchmarking/src/utils.rs
@@ -238,7 +238,7 @@ sp_api::decl_runtime_apis! {
 		fn benchmark_metadata(extra: bool) -> (Vec<BenchmarkList>, Vec<StorageInfo>);
 
 		/// Dispatch the given benchmark.
-		fn dispatch_benchmark(config: BenchmarkConfig) -> Result<Vec<BenchmarkBatch>, sp_runtime::RuntimeString>;
+		fn dispatch_benchmark(config: BenchmarkConfig) -> Result<Vec<BenchmarkBatch>, alloc::string::String>;
 	}
 }
 
diff --git a/substrate/frame/benchmarking/src/v1.rs b/substrate/frame/benchmarking/src/v1.rs
index d687f9fdfa1048241e6a4547ce0d5fa5a9110b8d..e73ed1f4382f6fd25759822c21334c3424076db8 100644
--- a/substrate/frame/benchmarking/src/v1.rs
+++ b/substrate/frame/benchmarking/src/v1.rs
@@ -1734,8 +1734,8 @@ pub fn show_benchmark_debug_info(
 	components: &[(BenchmarkParameter, u32)],
 	verify: &bool,
 	error_message: &str,
-) -> sp_runtime::RuntimeString {
-	sp_runtime::format_runtime_string!(
+) -> alloc::string::String {
+	alloc::format!(
 		"\n* Pallet: {}\n\
 		* Benchmark: {}\n\
 		* Components: {:?}\n\
diff --git a/substrate/frame/revive/src/evm/runtime.rs b/substrate/frame/revive/src/evm/runtime.rs
index 9b360c7de712a66e9d6b6cb1ba323f4a833406c8..d4c3440a3ea780949dbb671fd875c3c51416a063 100644
--- a/substrate/frame/revive/src/evm/runtime.rs
+++ b/substrate/frame/revive/src/evm/runtime.rs
@@ -190,7 +190,7 @@ impl<'a, Address: Decode, Signature: Decode, E: EthExtra> serde::Deserialize<'a>
 	{
 		let r = sp_core::bytes::deserialize(de)?;
 		Decode::decode(&mut &r[..])
-			.map_err(|e| serde::de::Error::custom(sp_runtime::format!("Decode error: {}", e)))
+			.map_err(|e| serde::de::Error::custom(alloc::format!("Decode error: {}", e)))
 	}
 }
 
diff --git a/substrate/frame/src/lib.rs b/substrate/frame/src/lib.rs
index a8d2c0b3fc56fe1eb4c5a6e19f8e93046aaf7f81..0ca36ca8545a8cb4fde650421099e5a8ad7384da 100644
--- a/substrate/frame/src/lib.rs
+++ b/substrate/frame/src/lib.rs
@@ -373,7 +373,10 @@ pub mod runtime {
 		};
 
 		/// Types to define your runtime version.
-		pub use sp_version::{create_runtime_str, runtime_version, RuntimeVersion};
+		// TODO: Remove deprecation suppression once
+		#[allow(deprecated)]
+		pub use sp_version::create_runtime_str;
+		pub use sp_version::{runtime_version, RuntimeVersion};
 
 		#[cfg(feature = "std")]
 		pub use sp_version::NativeVersion;
diff --git a/substrate/frame/support/src/genesis_builder_helper.rs b/substrate/frame/support/src/genesis_builder_helper.rs
index 662ea2cb1862dd003c1c5a5d3979ececb096f3b1..38b339eb93297bbafbc29b311c9e4ff9e52cc2a5 100644
--- a/substrate/frame/support/src/genesis_builder_helper.rs
+++ b/substrate/frame/support/src/genesis_builder_helper.rs
@@ -21,16 +21,15 @@
 
 extern crate alloc;
 
-use alloc::vec::Vec;
+use alloc::{format, vec::Vec};
 use frame_support::traits::BuildGenesisConfig;
 use sp_genesis_builder::{PresetId, Result as BuildResult};
-use sp_runtime::format_runtime_string;
 
 /// Build `GenesisConfig` from a JSON blob not using any defaults and store it in the storage. For
 /// more info refer to [`sp_genesis_builder::GenesisBuilder::build_state`].
 pub fn build_state<GC: BuildGenesisConfig>(json: Vec<u8>) -> BuildResult {
-	let gc = serde_json::from_slice::<GC>(&json)
-		.map_err(|e| format_runtime_string!("Invalid JSON blob: {}", e))?;
+	let gc =
+		serde_json::from_slice::<GC>(&json).map_err(|e| format!("Invalid JSON blob: {}", e))?;
 	<GC as BuildGenesisConfig>::build(&gc);
 	Ok(())
 }
@@ -41,7 +40,7 @@ pub fn build_state<GC: BuildGenesisConfig>(json: Vec<u8>) -> BuildResult {
 /// to [`sp_genesis_builder::GenesisBuilder::get_preset`].
 pub fn get_preset<GC>(
 	name: &Option<PresetId>,
-	preset_for_name: impl FnOnce(&sp_genesis_builder::PresetId) -> Option<alloc::vec::Vec<u8>>,
+	preset_for_name: impl FnOnce(&PresetId) -> Option<Vec<u8>>,
 ) -> Option<Vec<u8>>
 where
 	GC: BuildGenesisConfig + Default,
diff --git a/substrate/frame/support/test/compile_pass/src/lib.rs b/substrate/frame/support/test/compile_pass/src/lib.rs
index 677ef4e94c89665bf639a3897cd4617f9ed18e60..31f3126b8dd5938ddc490e374b0039da3fc22ec2 100644
--- a/substrate/frame/support/test/compile_pass/src/lib.rs
+++ b/substrate/frame/support/test/compile_pass/src/lib.rs
@@ -21,20 +21,22 @@
 
 #![cfg_attr(not(feature = "std"), no_std)]
 
+extern crate alloc;
+
 use frame_support::{
 	construct_runtime, derive_impl, parameter_types,
 	traits::{ConstU16, ConstU32, ConstU64, Everything},
 };
 use sp_core::{sr25519, H256};
 use sp_runtime::{
-	create_runtime_str, generic,
+	generic,
 	traits::{BlakeTwo256, IdentityLookup, Verify},
 };
 use sp_version::RuntimeVersion;
 
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("frame-support-test-compile-pass"),
-	impl_name: create_runtime_str!("substrate-frame-support-test-compile-pass-runtime"),
+	spec_name: alloc::borrow::Cow::Borrowed("frame-support-test-compile-pass"),
+	impl_name: alloc::borrow::Cow::Borrowed("substrate-frame-support-test-compile-pass-runtime"),
 	authoring_version: 0,
 	spec_version: 0,
 	impl_version: 0,
diff --git a/substrate/frame/system/src/lib.rs b/substrate/frame/system/src/lib.rs
index 02d61921741c02d3ac3f39f2df48e4af6213e39a..ff682c82ce9d59457cd041f4ede5f2e61a87bdbe 100644
--- a/substrate/frame/system/src/lib.rs
+++ b/substrate/frame/system/src/lib.rs
@@ -99,7 +99,7 @@
 
 extern crate alloc;
 
-use alloc::{boxed::Box, vec, vec::Vec};
+use alloc::{borrow::Cow, boxed::Box, vec, vec::Vec};
 use core::{fmt::Debug, marker::PhantomData};
 use pallet_prelude::{BlockNumberFor, HeaderFor};
 #[cfg(feature = "std")]
@@ -1159,24 +1159,24 @@ pub struct AccountInfo<Nonce, AccountData> {
 
 /// Stores the `spec_version` and `spec_name` of when the last runtime upgrade
 /// happened.
-#[derive(sp_runtime::RuntimeDebug, Encode, Decode, TypeInfo)]
+#[derive(RuntimeDebug, Encode, Decode, TypeInfo)]
 #[cfg_attr(feature = "std", derive(PartialEq))]
 pub struct LastRuntimeUpgradeInfo {
 	pub spec_version: codec::Compact<u32>,
-	pub spec_name: sp_runtime::RuntimeString,
+	pub spec_name: Cow<'static, str>,
 }
 
 impl LastRuntimeUpgradeInfo {
 	/// Returns if the runtime was upgraded in comparison of `self` and `current`.
 	///
 	/// Checks if either the `spec_version` increased or the `spec_name` changed.
-	pub fn was_upgraded(&self, current: &sp_version::RuntimeVersion) -> bool {
+	pub fn was_upgraded(&self, current: &RuntimeVersion) -> bool {
 		current.spec_version > self.spec_version.0 || current.spec_name != self.spec_name
 	}
 }
 
-impl From<sp_version::RuntimeVersion> for LastRuntimeUpgradeInfo {
-	fn from(version: sp_version::RuntimeVersion) -> Self {
+impl From<RuntimeVersion> for LastRuntimeUpgradeInfo {
+	fn from(version: RuntimeVersion) -> Self {
 		Self { spec_version: version.spec_version.into(), spec_name: version.spec_name }
 	}
 }
diff --git a/substrate/frame/system/src/mock.rs b/substrate/frame/system/src/mock.rs
index f43ffe3c87eed971f1debd0fbd575ec6f3af4658..80bc75973d196e28d8b34389a96d5758ddc96783 100644
--- a/substrate/frame/system/src/mock.rs
+++ b/substrate/frame/system/src/mock.rs
@@ -33,8 +33,8 @@ const MAX_BLOCK_WEIGHT: Weight = Weight::from_parts(1024, u64::MAX);
 
 parameter_types! {
 	pub Version: RuntimeVersion = RuntimeVersion {
-		spec_name: sp_version::create_runtime_str!("test"),
-		impl_name: sp_version::create_runtime_str!("system-test"),
+		spec_name: alloc::borrow::Cow::Borrowed("test"),
+		impl_name: alloc::borrow::Cow::Borrowed("system-test"),
 		authoring_version: 1,
 		spec_version: 1,
 		impl_version: 1,
diff --git a/substrate/primitives/api/src/lib.rs b/substrate/primitives/api/src/lib.rs
index 700e212688c8d7bf2666e37a123d4ea5413a1808..b412d4b52fed5208d0d2fe8ace56977822b3b55f 100644
--- a/substrate/primitives/api/src/lib.rs
+++ b/substrate/primitives/api/src/lib.rs
@@ -105,7 +105,7 @@ pub mod __private {
 		generic::BlockId,
 		traits::{Block as BlockT, Hash as HashT, HashingFor, Header as HeaderT, NumberFor},
 		transaction_validity::TransactionValidity,
-		ExtrinsicInclusionMode, RuntimeString, TransactionOutcome,
+		ExtrinsicInclusionMode, TransactionOutcome,
 	};
 	pub use sp_version::{create_apis_vec, ApiId, ApisVec, RuntimeVersion};
 
@@ -286,7 +286,7 @@ pub use sp_api_proc_macro::decl_runtime_apis;
 /// # Example
 ///
 /// ```rust
-/// use sp_version::create_runtime_str;
+/// extern crate alloc;
 /// #
 /// # use sp_runtime::{ExtrinsicInclusionMode, traits::Block as BlockT};
 /// # use sp_test_primitives::Block;
@@ -338,8 +338,8 @@ pub use sp_api_proc_macro::decl_runtime_apis;
 ///
 /// /// Runtime version. This needs to be declared for each runtime.
 /// pub const VERSION: sp_version::RuntimeVersion = sp_version::RuntimeVersion {
-///     spec_name: create_runtime_str!("node"),
-///     impl_name: create_runtime_str!("test-node"),
+///     spec_name: alloc::borrow::Cow::Borrowed("node"),
+///     impl_name: alloc::borrow::Cow::Borrowed("test-node"),
 ///     authoring_version: 1,
 ///     spec_version: 1,
 ///     impl_version: 0,
diff --git a/substrate/primitives/genesis-builder/src/lib.rs b/substrate/primitives/genesis-builder/src/lib.rs
index 4763aa06341e84145087082e15af5aa56c958ef5..9abc278688646737b8bd7513318763f2a2b49cca 100644
--- a/substrate/primitives/genesis-builder/src/lib.rs
+++ b/substrate/primitives/genesis-builder/src/lib.rs
@@ -73,13 +73,13 @@
 //! which is the foundation for genesis block.
 
 extern crate alloc;
-use alloc::vec::Vec;
+use alloc::{string::String, vec::Vec};
 
 /// The result type alias, used in build methods. `Err` contains formatted error message.
-pub type Result = core::result::Result<(), sp_runtime::RuntimeString>;
+pub type Result = core::result::Result<(), String>;
 
 /// The type representing preset ID.
-pub type PresetId = sp_runtime::RuntimeString;
+pub type PresetId = String;
 
 /// The default `development` preset used to communicate with the runtime via
 /// [`GenesisBuilder`] interface.
diff --git a/substrate/primitives/runtime/src/lib.rs b/substrate/primitives/runtime/src/lib.rs
index 6eed57656a6da6d9f20df6a9b7833712914c00f4..f0c8e50f1ba1e66993b98badf980d1f385f8591c 100644
--- a/substrate/primitives/runtime/src/lib.rs
+++ b/substrate/primitives/runtime/src/lib.rs
@@ -49,7 +49,7 @@
 extern crate alloc;
 
 #[doc(hidden)]
-pub use alloc::{format, vec::Vec};
+pub use alloc::vec::Vec;
 #[doc(hidden)]
 pub use codec;
 #[doc(hidden)]
@@ -90,15 +90,12 @@ mod multiaddress;
 pub mod offchain;
 pub mod proving_trie;
 pub mod runtime_logger;
-mod runtime_string;
 #[cfg(feature = "std")]
 pub mod testing;
 pub mod traits;
 pub mod transaction_validity;
 pub mod type_with_default;
 
-pub use crate::runtime_string::*;
-
 // Re-export Multiaddress
 pub use multiaddress::MultiAddress;
 
@@ -953,7 +950,7 @@ impl<'a> ::serde::Deserialize<'a> for OpaqueExtrinsic {
 	{
 		let r = ::sp_core::bytes::deserialize(de)?;
 		Decode::decode(&mut &r[..])
-			.map_err(|e| ::serde::de::Error::custom(format!("Decode error: {}", e)))
+			.map_err(|e| ::serde::de::Error::custom(alloc::format!("Decode error: {}", e)))
 	}
 }
 
@@ -1037,6 +1034,23 @@ impl OpaqueValue {
 	}
 }
 
+// TODO: Remove in future versions and clean up `parse_str_literal` in `sp-version-proc-macro`
+/// Deprecated `Cow::Borrowed()` wrapper.
+#[macro_export]
+#[deprecated = "Use Cow::Borrowed() instead of create_runtime_str!()"]
+macro_rules! create_runtime_str {
+	( $y:expr ) => {{
+		$crate::Cow::Borrowed($y)
+	}};
+}
+// TODO: Re-export for ^ macro `create_runtime_str`, should be removed once macro is gone
+#[doc(hidden)]
+pub use alloc::borrow::Cow;
+// TODO: Remove in future versions
+/// Deprecated alias to improve upgrade experience
+#[deprecated = "Use String or Cow<'static, str> instead"]
+pub type RuntimeString = alloc::string::String;
+
 #[cfg(test)]
 mod tests {
 	use crate::traits::BlakeTwo256;
diff --git a/substrate/primitives/runtime/src/runtime_string.rs b/substrate/primitives/runtime/src/runtime_string.rs
deleted file mode 100644
index bb0347badcbbe510d3f3ff35942a373ac1dc19cb..0000000000000000000000000000000000000000
--- a/substrate/primitives/runtime/src/runtime_string.rs
+++ /dev/null
@@ -1,168 +0,0 @@
-// 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 alloc::vec::Vec;
-use codec::{Decode, Encode};
-use sp_core::RuntimeDebug;
-
-/// A string that wraps a `&'static str` in the runtime and `String`/`Vec<u8>` on decode.
-#[derive(Eq, RuntimeDebug, Clone)]
-pub enum RuntimeString {
-	/// The borrowed mode that wraps a `&'static str`.
-	Borrowed(&'static str),
-	/// The owned mode that wraps a `String`.
-	#[cfg(feature = "std")]
-	Owned(String),
-	/// The owned mode that wraps a `Vec<u8>`.
-	#[cfg(not(feature = "std"))]
-	Owned(Vec<u8>),
-}
-
-impl scale_info::TypeInfo for RuntimeString {
-	type Identity = str;
-
-	fn type_info() -> scale_info::Type {
-		Self::Identity::type_info()
-	}
-}
-
-/// Convenience macro to use the format! interface to get a `RuntimeString::Owned`
-#[macro_export]
-macro_rules! format_runtime_string {
-	($($args:tt)*) => {{
-		#[cfg(feature = "std")]
-		{
-			sp_runtime::RuntimeString::Owned(format!($($args)*))
-		}
-		#[cfg(not(feature = "std"))]
-		{
-			sp_runtime::RuntimeString::Owned($crate::format!($($args)*).as_bytes().to_vec())
-		}
-	}};
-}
-
-impl From<&'static str> for RuntimeString {
-	fn from(data: &'static str) -> Self {
-		Self::Borrowed(data)
-	}
-}
-
-impl<'a> TryFrom<&'a RuntimeString> for &'a str {
-	type Error = core::str::Utf8Error;
-	fn try_from(from: &'a RuntimeString) -> core::result::Result<&'a str, Self::Error> {
-		match from {
-			#[cfg(feature = "std")]
-			RuntimeString::Owned(string) => Ok(string.as_str()),
-			#[cfg(not(feature = "std"))]
-			RuntimeString::Owned(vec) => core::str::from_utf8(&vec),
-			RuntimeString::Borrowed(str) => Ok(str),
-		}
-	}
-}
-
-#[cfg(feature = "std")]
-impl From<RuntimeString> for String {
-	fn from(string: RuntimeString) -> Self {
-		match string {
-			RuntimeString::Borrowed(data) => data.to_owned(),
-			RuntimeString::Owned(data) => data,
-		}
-	}
-}
-
-impl Default for RuntimeString {
-	fn default() -> Self {
-		Self::Borrowed(Default::default())
-	}
-}
-
-impl PartialEq for RuntimeString {
-	fn eq(&self, other: &Self) -> bool {
-		self.as_ref() == other.as_ref()
-	}
-}
-
-impl AsRef<[u8]> for RuntimeString {
-	fn as_ref(&self) -> &[u8] {
-		match self {
-			Self::Borrowed(val) => val.as_ref(),
-			Self::Owned(val) => val.as_ref(),
-		}
-	}
-}
-
-#[cfg(feature = "std")]
-impl std::ops::Deref for RuntimeString {
-	type Target = str;
-
-	fn deref(&self) -> &str {
-		match self {
-			Self::Borrowed(val) => val,
-			Self::Owned(val) => val,
-		}
-	}
-}
-
-impl Encode for RuntimeString {
-	fn encode(&self) -> Vec<u8> {
-		match self {
-			Self::Borrowed(val) => val.encode(),
-			Self::Owned(val) => val.encode(),
-		}
-	}
-}
-
-impl Decode for RuntimeString {
-	fn decode<I: codec::Input>(value: &mut I) -> Result<Self, codec::Error> {
-		Decode::decode(value).map(Self::Owned)
-	}
-}
-
-#[cfg(feature = "std")]
-impl std::fmt::Display for RuntimeString {
-	fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
-		match self {
-			Self::Borrowed(val) => write!(f, "{}", val),
-			Self::Owned(val) => write!(f, "{}", val),
-		}
-	}
-}
-
-#[cfg(feature = "serde")]
-impl serde::Serialize for RuntimeString {
-	fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
-		match self {
-			Self::Borrowed(val) => val.serialize(serializer),
-			Self::Owned(val) => val.serialize(serializer),
-		}
-	}
-}
-
-#[cfg(feature = "serde")]
-impl<'de> serde::Deserialize<'de> for RuntimeString {
-	fn deserialize<D: serde::Deserializer<'de>>(de: D) -> Result<Self, D::Error> {
-		Ok(Self::Owned(serde::Deserialize::deserialize(de)?))
-	}
-}
-
-/// Create a const [`RuntimeString`].
-#[macro_export]
-macro_rules! create_runtime_str {
-	( $y:expr ) => {{
-		$crate::RuntimeString::Borrowed($y)
-	}};
-}
diff --git a/substrate/primitives/version/proc-macro/src/decl_runtime_version.rs b/substrate/primitives/version/proc-macro/src/decl_runtime_version.rs
index b4f749c90f59204029242b6275c3ff9ba140bc2c..ac6d501b927d7fb2af03ed1617ee494cf99c69c9 100644
--- a/substrate/primitives/version/proc-macro/src/decl_runtime_version.rs
+++ b/substrate/primitives/version/proc-macro/src/decl_runtime_version.rs
@@ -182,21 +182,47 @@ impl ParseRuntimeVersion {
 	}
 
 	fn parse_str_literal(expr: &Expr) -> Result<String> {
-		let mac = match *expr {
-			Expr::Macro(syn::ExprMacro { ref mac, .. }) => mac,
-			_ => return Err(Error::new(expr.span(), "a macro expression is expected here")),
-		};
+		match expr {
+			// TODO: Remove this branch when `sp_runtime::create_runtime_str` is removed
+			Expr::Macro(syn::ExprMacro { mac, .. }) => {
+				let lit: ExprLit = mac.parse_body().map_err(|e| {
+					Error::new(
+						e.span(),
+						format!(
+							"a single literal argument is expected, but parsing is failed: {}",
+							e
+						),
+					)
+				})?;
 
-		let lit: ExprLit = mac.parse_body().map_err(|e| {
-			Error::new(
-				e.span(),
-				format!("a single literal argument is expected, but parsing is failed: {}", e),
-			)
-		})?;
+				match &lit.lit {
+					Lit::Str(lit) => Ok(lit.value()),
+					_ => Err(Error::new(lit.span(), "only string literals are supported here")),
+				}
+			},
+			Expr::Call(call) => {
+				if call.args.len() != 1 {
+					return Err(Error::new(
+						expr.span(),
+						"a single literal argument is expected, but parsing is failed",
+					));
+				}
+				let Expr::Lit(lit) = call.args.first().expect("Length checked above; qed") else {
+					return Err(Error::new(
+						expr.span(),
+						"a single literal argument is expected, but parsing is failed",
+					));
+				};
 
-		match lit.lit {
-			Lit::Str(ref lit) => Ok(lit.value()),
-			_ => Err(Error::new(lit.span(), "only string literals are supported here")),
+				match &lit.lit {
+					Lit::Str(lit) => Ok(lit.value()),
+					_ => Err(Error::new(lit.span(), "only string literals are supported here")),
+				}
+			},
+			_ => Err(Error::new(
+				expr.span(),
+				format!("a function call is expected here, instead of: {expr:?}"),
+			)),
 		}
 	}
 
diff --git a/substrate/primitives/version/src/lib.rs b/substrate/primitives/version/src/lib.rs
index a9f1c2373069523cc503071626907626a88de745..2e1464646647927592877da3aca196e02129dffa 100644
--- a/substrate/primitives/version/src/lib.rs
+++ b/substrate/primitives/version/src/lib.rs
@@ -46,7 +46,7 @@ use std::collections::HashSet;
 pub use alloc::borrow::Cow;
 use codec::{Decode, Encode, Input};
 use scale_info::TypeInfo;
-use sp_runtime::RuntimeString;
+#[allow(deprecated)]
 pub use sp_runtime::{create_runtime_str, StateVersion};
 #[doc(hidden)]
 pub use sp_std;
@@ -72,12 +72,15 @@ pub mod embed;
 /// This macro accepts a const item like the following:
 ///
 /// ```rust
-/// use sp_version::{create_runtime_str, RuntimeVersion};
+/// extern crate alloc;
+///
+/// use alloc::borrow::Cow;
+/// use sp_version::RuntimeVersion;
 ///
 /// #[sp_version::runtime_version]
 /// pub const VERSION: RuntimeVersion = RuntimeVersion {
-/// 	spec_name: create_runtime_str!("test"),
-/// 	impl_name: create_runtime_str!("test"),
+/// 	spec_name: Cow::Borrowed("test"),
+/// 	impl_name: Cow::Borrowed("test"),
 /// 	authoring_version: 10,
 /// 	spec_version: 265,
 /// 	impl_version: 1,
@@ -164,14 +167,14 @@ pub struct RuntimeVersion {
 	/// Identifies the different Substrate runtimes. There'll be at least polkadot and node.
 	/// A different on-chain spec_name to that of the native runtime would normally result
 	/// in node not attempting to sync or author blocks.
-	pub spec_name: RuntimeString,
+	pub spec_name: Cow<'static, str>,
 
 	/// Name of the implementation of the spec. This is of little consequence for the node
 	/// and serves only to differentiate code of different implementation teams. For this
 	/// codebase, it will be parity-polkadot. If there were a non-Rust implementation of the
 	/// Polkadot runtime (e.g. C++), then it would identify itself with an accordingly different
 	/// `impl_name`.
-	pub impl_name: RuntimeString,
+	pub impl_name: Cow<'static, str>,
 
 	/// `authoring_version` is the version of the authorship interface. An authoring node
 	/// will not attempt to author blocks unless this is equal to its native runtime.
@@ -472,8 +475,8 @@ impl<'de> serde::Deserialize<'de> for RuntimeVersion {
 			where
 				A: serde::de::MapAccess<'de>,
 			{
-				let mut spec_name: Option<RuntimeString> = None;
-				let mut impl_name: Option<RuntimeString> = None;
+				let mut spec_name: Option<Cow<'static, str>> = None;
+				let mut impl_name: Option<Cow<'static, str>> = None;
 				let mut authoring_version: Option<u32> = None;
 				let mut spec_version: Option<u32> = None;
 				let mut impl_version: Option<u32> = None;
diff --git a/substrate/test-utils/runtime/src/lib.rs b/substrate/test-utils/runtime/src/lib.rs
index a4a0d348a39019b130e330ced14b7d6ec9c6dfc0..1314d9d6dd4596d6d117c6bfdd0bb675ec009ad6 100644
--- a/substrate/test-utils/runtime/src/lib.rs
+++ b/substrate/test-utils/runtime/src/lib.rs
@@ -63,7 +63,7 @@ pub use sp_core::hash::H256;
 use sp_genesis_builder::PresetId;
 use sp_inherents::{CheckInherentsResult, InherentData};
 use sp_runtime::{
-	create_runtime_str, impl_opaque_keys, impl_tx_ext_default,
+	impl_opaque_keys, impl_tx_ext_default,
 	traits::{BlakeTwo256, Block as BlockT, DispatchInfoOf, Dispatchable, NumberFor, Verify},
 	transaction_validity::{
 		TransactionSource, TransactionValidity, TransactionValidityError, ValidTransaction,
@@ -114,8 +114,8 @@ pub fn wasm_binary_logging_disabled_unwrap() -> &'static [u8] {
 /// Test runtime version.
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("test"),
-	impl_name: create_runtime_str!("parity-test"),
+	spec_name: alloc::borrow::Cow::Borrowed("test"),
+	impl_name: alloc::borrow::Cow::Borrowed("parity-test"),
 	authoring_version: 1,
 	spec_version: 2,
 	impl_version: 2,
@@ -727,8 +727,8 @@ impl_runtime_apis! {
 
 		fn get_preset(name: &Option<PresetId>) -> Option<Vec<u8>> {
 			get_preset::<RuntimeGenesisConfig>(name, |name| {
-				let patch = match name.try_into() {
-					Ok("staging") => {
+				 let patch = match name.as_ref() {
+					"staging" => {
 						let endowed_accounts: Vec<AccountId> = vec![
 							AccountKeyring::Bob.public().into(),
 							AccountKeyring::Charlie.public().into(),
@@ -746,7 +746,7 @@ impl_runtime_apis! {
 							}
 						})
 					},
-					Ok("foobar") => json!({"foo":"bar"}),
+					"foobar" => json!({"foo":"bar"}),
 					_ => return None,
 				};
 				Some(serde_json::to_string(&patch)
@@ -1392,10 +1392,8 @@ mod tests {
 			let r = BuildResult::decode(&mut &r[..]).unwrap();
 			log::info!("result: {:#?}", r);
 			assert_eq!(r, Err(
-				sp_runtime::RuntimeString::Owned(
-					"Invalid JSON blob: unknown field `renamed_authorities`, expected `authorities` or `epochConfig` at line 4 column 25".to_string(),
-				))
-			);
+				"Invalid JSON blob: unknown field `renamed_authorities`, expected `authorities` or `epochConfig` at line 4 column 25".to_string(),
+			));
 		}
 
 		#[test]
@@ -1406,10 +1404,8 @@ mod tests {
 			let r = executor_call(&mut t, "GenesisBuilder_build_state", &j.encode()).unwrap();
 			let r = BuildResult::decode(&mut &r[..]).unwrap();
 			assert_eq!(r, Err(
-				sp_runtime::RuntimeString::Owned(
-					"Invalid JSON blob: unknown field `babex`, expected one of `system`, `babe`, `substrateTest`, `balances` at line 3 column 9".to_string(),
-				))
-			);
+				"Invalid JSON blob: unknown field `babex`, expected one of `system`, `babe`, `substrateTest`, `balances` at line 3 column 9".to_string(),
+			));
 		}
 
 		#[test]
@@ -1419,14 +1415,11 @@ mod tests {
 
 			let mut t = BasicExternalities::new_empty();
 			let r = executor_call(&mut t, "GenesisBuilder_build_state", &j.encode()).unwrap();
-			let r =
-				core::result::Result::<(), sp_runtime::RuntimeString>::decode(&mut &r[..]).unwrap();
+			let r = core::result::Result::<(), String>::decode(&mut &r[..]).unwrap();
 			assert_eq!(
 				r,
-				Err(sp_runtime::RuntimeString::Owned(
-					"Invalid JSON blob: missing field `authorities` at line 11 column 3"
-						.to_string()
-				))
+				Err("Invalid JSON blob: missing field `authorities` at line 11 column 3"
+					.to_string())
 			);
 		}
 
diff --git a/templates/minimal/runtime/src/lib.rs b/templates/minimal/runtime/src/lib.rs
index 304e50af25088fe93905c25f4d156747277739d1..ecdba739c50ebaf8ca10d46674ac0f1eedb4466f 100644
--- a/templates/minimal/runtime/src/lib.rs
+++ b/templates/minimal/runtime/src/lib.rs
@@ -66,8 +66,8 @@ pub mod genesis_config_presets {
 
 	/// Get the set of the available genesis config presets.
 	pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
-		let patch = match id.try_into() {
-			Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => development_config_genesis(),
+		let patch = match id.as_ref() {
+			sp_genesis_builder::DEV_RUNTIME_PRESET => development_config_genesis(),
 			_ => return None,
 		};
 		Some(
@@ -86,8 +86,8 @@ pub mod genesis_config_presets {
 /// The runtime version.
 #[runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("minimal-template-runtime"),
-	impl_name: create_runtime_str!("minimal-template-runtime"),
+	spec_name: alloc::borrow::Cow::Borrowed("minimal-template-runtime"),
+	impl_name: alloc::borrow::Cow::Borrowed("minimal-template-runtime"),
 	authoring_version: 1,
 	spec_version: 0,
 	impl_version: 1,
diff --git a/templates/parachain/runtime/src/apis.rs b/templates/parachain/runtime/src/apis.rs
index eba9293a67ba1aa46b7697f7e03d31cca681fdca..05a508ca655fb1fe6be4db53a839b76c8a9c1cec 100644
--- a/templates/parachain/runtime/src/apis.rs
+++ b/templates/parachain/runtime/src/apis.rs
@@ -261,7 +261,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{BenchmarkError, Benchmarking, BenchmarkBatch};
 			use super::*;
 
diff --git a/templates/parachain/runtime/src/genesis_config_presets.rs b/templates/parachain/runtime/src/genesis_config_presets.rs
index 9091db357005bfd2fced9d272ac48c2486023d16..77ae85c0b174caeb6fb4470783972c3f0a3f02c8 100644
--- a/templates/parachain/runtime/src/genesis_config_presets.rs
+++ b/templates/parachain/runtime/src/genesis_config_presets.rs
@@ -97,9 +97,9 @@ fn development_config_genesis() -> Value {
 
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &PresetId) -> Option<vec::Vec<u8>> {
-	let patch = match id.try_into() {
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => local_testnet_genesis(),
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => development_config_genesis(),
+	let patch = match id.as_ref() {
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => local_testnet_genesis(),
+		sp_genesis_builder::DEV_RUNTIME_PRESET => development_config_genesis(),
 		_ => return None,
 	};
 	Some(
diff --git a/templates/parachain/runtime/src/lib.rs b/templates/parachain/runtime/src/lib.rs
index 78dc38ef427f7cebea51a81394f876a4dff2444b..43e76dba0591c5284358b18151bedc580d82d7b3 100644
--- a/templates/parachain/runtime/src/lib.rs
+++ b/templates/parachain/runtime/src/lib.rs
@@ -20,7 +20,7 @@ use smallvec::smallvec;
 use polkadot_sdk::{staging_parachain_info as parachain_info, *};
 
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{BlakeTwo256, IdentifyAccount, Verify},
 	MultiSignature,
 };
@@ -164,8 +164,8 @@ impl_opaque_keys! {
 
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("parachain-template-runtime"),
-	impl_name: create_runtime_str!("parachain-template-runtime"),
+	spec_name: alloc::borrow::Cow::Borrowed("parachain-template-runtime"),
+	impl_name: alloc::borrow::Cow::Borrowed("parachain-template-runtime"),
 	authoring_version: 1,
 	spec_version: 1,
 	impl_version: 0,
diff --git a/templates/solochain/runtime/src/apis.rs b/templates/solochain/runtime/src/apis.rs
index f21eaa3444316af31564c05a19133b35b35e83e8..06c645fa0c53959b209fa4bcfe867eb6c34a5a6d 100644
--- a/templates/solochain/runtime/src/apis.rs
+++ b/templates/solochain/runtime/src/apis.rs
@@ -237,7 +237,7 @@ impl_runtime_apis! {
 
 		fn dispatch_benchmark(
 			config: frame_benchmarking::BenchmarkConfig
-		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
 			use frame_benchmarking::{baseline, Benchmarking, BenchmarkBatch};
 			use sp_storage::TrackedStorageKey;
 			use frame_system_benchmarking::Pallet as SystemBench;
diff --git a/templates/solochain/runtime/src/genesis_config_presets.rs b/templates/solochain/runtime/src/genesis_config_presets.rs
index 693ae5c2221f268ce9d04703ae9e6e140d7c4c50..7c444456a600e2f1336ad27a6308dd0edd6a5ef2 100644
--- a/templates/solochain/runtime/src/genesis_config_presets.rs
+++ b/templates/solochain/runtime/src/genesis_config_presets.rs
@@ -91,9 +91,9 @@ pub fn local_config_genesis() -> Value {
 
 /// Provides the JSON representation of predefined genesis config for given `id`.
 pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
-	let patch = match id.try_into() {
-		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => development_config_genesis(),
-		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => local_config_genesis(),
+	let patch = match id.as_ref() {
+		sp_genesis_builder::DEV_RUNTIME_PRESET => development_config_genesis(),
+		sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET => local_config_genesis(),
 		_ => return None,
 	};
 	Some(
diff --git a/templates/solochain/runtime/src/lib.rs b/templates/solochain/runtime/src/lib.rs
index f2eb49592be958b7ad54df023ed25e072c9c98c7..ae0ea16ae42ef6122d1472677f5a23fe769e465d 100644
--- a/templates/solochain/runtime/src/lib.rs
+++ b/templates/solochain/runtime/src/lib.rs
@@ -11,7 +11,7 @@ pub mod configs;
 extern crate alloc;
 use alloc::vec::Vec;
 use sp_runtime::{
-	create_runtime_str, generic, impl_opaque_keys,
+	generic, impl_opaque_keys,
 	traits::{BlakeTwo256, IdentifyAccount, Verify},
 	MultiAddress, MultiSignature,
 };
@@ -61,8 +61,8 @@ impl_opaque_keys! {
 // https://docs.substrate.io/main-docs/build/upgrade#runtime-versioning
 #[sp_version::runtime_version]
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-	spec_name: create_runtime_str!("solochain-template-runtime"),
-	impl_name: create_runtime_str!("solochain-template-runtime"),
+	spec_name: alloc::borrow::Cow::Borrowed("solochain-template-runtime"),
+	impl_name: alloc::borrow::Cow::Borrowed("solochain-template-runtime"),
 	authoring_version: 1,
 	// The version of the runtime specification. A full node will not attempt to use its native
 	//   runtime in substitute for the on-chain Wasm runtime unless all of `spec_name`,