diff --git a/substrate/bin/node/cli/src/cli.rs b/substrate/bin/node/cli/src/cli.rs
index aaa02dcc2b7b87b51026e31007a32b64a011bda3..3a83c3eb76a38009b2aded39be6112b5e9b82f75 100644
--- a/substrate/bin/node/cli/src/cli.rs
+++ b/substrate/bin/node/cli/src/cli.rs
@@ -14,10 +14,10 @@
 // You should have received a copy of the GNU General Public License
 // along with Substrate.  If not, see <http://www.gnu.org/licenses/>.
 
-pub use substrate_cli::error;
+pub use substrate_cli::VersionInfo;
 use tokio::prelude::Future;
 use tokio::runtime::{Builder as RuntimeBuilder, Runtime};
-pub use substrate_cli::{VersionInfo, IntoExit, NoCustom, SharedParams, ExecutionStrategyParam};
+use substrate_cli::{IntoExit, NoCustom, SharedParams, ImportParams, error};
 use substrate_service::{AbstractService, Roles as ServiceRoles, Configuration};
 use log::info;
 use structopt::{StructOpt, clap::App};
@@ -25,7 +25,6 @@ use substrate_cli::{display_role, parse_and_prepare, AugmentClap, GetLogFilter,
 use crate::{service, ChainSpec, load_spec};
 use crate::factory_impl::FactoryState;
 use transaction_factory::RuntimeAdapter;
-use client::ExecutionStrategies;
 
 /// Custom subcommands.
 #[derive(Clone, Debug, StructOpt)]
@@ -82,15 +81,9 @@ pub struct FactoryCmd {
 	#[structopt(flatten)]
 	pub shared_params: SharedParams,
 
-	/// The means of execution used when calling into the runtime while importing blocks.
-	#[structopt(
-		long = "execution",
-		value_name = "STRATEGY",
-		possible_values = &ExecutionStrategyParam::variants(),
-		case_insensitive = true,
-		default_value = "NativeElseWasm"
-	)]
-	pub execution: ExecutionStrategyParam,
+	#[allow(missing_docs)]
+	#[structopt(flatten)]
+	pub import_params: ImportParams,
 }
 
 impl AugmentClap for FactoryCmd {
@@ -147,12 +140,8 @@ pub fn run<I, T, E>(args: I, exit: E, version: substrate_cli::VersionInfo) -> er
 				&cli_args.shared_params,
 				&version,
 			)?;
-			config.execution_strategies = ExecutionStrategies {
-				importing: cli_args.execution.into(),
-				block_construction: cli_args.execution.into(),
-				other: cli_args.execution.into(),
-				..Default::default()
-			};
+
+			substrate_cli::fill_import_params(&mut config, &cli_args.import_params, ServiceRoles::FULL)?;
 
 			match ChainSpec::from(config.chain_spec.id()) {
 				Some(ref c) if c == &ChainSpec::Development || c == &ChainSpec::LocalTestnet => {},
diff --git a/substrate/client/cli/src/lib.rs b/substrate/client/cli/src/lib.rs
index 08012ec6272515c8eb1716bc0824949015f7f33f..4d8b9830c89a6707ba1fc2df31c527ded55482fd 100644
--- a/substrate/client/cli/src/lib.rs
+++ b/substrate/client/cli/src/lib.rs
@@ -56,7 +56,7 @@ use params::{
 	NetworkConfigurationParams, MergeParameters, TransactionPoolParams,
 	NodeKeyParams, NodeKeyType, Cors, CheckBlockCmd,
 };
-pub use params::{NoCustom, CoreParams, SharedParams, ExecutionStrategy as ExecutionStrategyParam};
+pub use params::{NoCustom, CoreParams, SharedParams, ImportParams, ExecutionStrategy};
 pub use traits::{GetLogFilter, AugmentClap};
 use app_dirs::{AppInfo, AppDataType};
 use log::info;
@@ -440,7 +440,8 @@ impl<'a> ParseAndPrepareImport<'a> {
 		E: ChainSpecExtension,
 		Exit: IntoExit
 	{
-		let config = create_config_with_db_path(spec_factory, &self.params.shared_params, self.version)?;
+		let mut config = create_config_with_db_path(spec_factory, &self.params.shared_params, self.version)?;
+		fill_import_params(&mut config, &self.params.import_params, service::Roles::FULL)?;
 
 		let file: Box<dyn ReadPlusSeek + Send> = match self.params.input {
 			Some(filename) => Box::new(File::open(filename)?),
@@ -499,7 +500,8 @@ impl<'a> CheckBlock<'a> {
 			E: ChainSpecExtension,
 			Exit: IntoExit
 	{
-		let config = create_config_with_db_path(spec_factory, &self.params.shared_params, self.version)?;
+		let mut config = create_config_with_db_path(spec_factory, &self.params.shared_params, self.version)?;
+		fill_import_params(&mut config, &self.params.import_params, service::Roles::FULL)?;
 
 		let input = if self.params.input.starts_with("0x") { &self.params.input[2..] } else { &self.params.input[..] };
 		let block_id = match FromStr::from_str(input) {
@@ -738,7 +740,8 @@ fn fill_config_keystore_password<C, G, E>(
 	Ok(())
 }
 
-fn fill_shared_config<C, G, E>(config: &mut Configuration<C, G, E>, cli: &SharedParams, role: service::Roles)
+/// Put block import CLI params into `config` object.
+pub fn fill_import_params<C, G, E>(config: &mut Configuration<C, G, E>, cli: &ImportParams, role: service::Roles)
 	-> error::Result<()>
 where
 	C: Default,
@@ -776,7 +779,7 @@ where
 	config.wasm_method = cli.wasm_method.into();
 
 	let exec = &cli.execution_strategies;
-	let exec_all_or = |strat: params::ExecutionStrategy| exec.execution.unwrap_or(strat).into();
+	let exec_all_or = |strat: ExecutionStrategy| exec.execution.unwrap_or(strat).into();
 	config.execution_strategies = ExecutionStrategies {
 		syncing: exec_all_or(exec.execution_syncing),
 		importing: exec_all_or(exec.execution_import_block),
@@ -813,7 +816,7 @@ where
 			service::Roles::FULL
 		};
 
-	fill_shared_config(&mut config, &cli.shared_params, role)?;
+	fill_import_params(&mut config, &cli.import_params, role)?;
 
 	config.impl_name = impl_name;
 	config.impl_commit = version.commit;
@@ -924,8 +927,7 @@ where
 	let spec = load_spec(cli, spec_factory)?;
 	let base_path = base_path(cli, version);
 
-	let mut config = service::Configuration::default_with_spec_and_base_path(spec.clone(), Some(base_path));
-	fill_shared_config(&mut config, &cli, service::Roles::FULL)?;
+	let config = service::Configuration::default_with_spec_and_base_path(spec.clone(), Some(base_path));
 	Ok(config)
 }
 
diff --git a/substrate/client/cli/src/params.rs b/substrate/client/cli/src/params.rs
index 6657556551ba9ad3e45c8f03139416d673c86490..2ad6a9ea55a0a5b169ba350b7cbaf45a73705b83 100644
--- a/substrate/client/cli/src/params.rs
+++ b/substrate/client/cli/src/params.rs
@@ -109,7 +109,11 @@ pub struct SharedParams {
 	/// Sets a custom logging filter.
 	#[structopt(short = "l", long = "log", value_name = "LOG_PATTERN")]
 	pub log: Option<String>,
+}
 
+/// Parameters for block import.
+#[derive(Debug, StructOpt, Clone)]
+pub struct ImportParams {
 	/// Specify the state pruning mode, a number of blocks to keep or 'archive'.
 	///
 	/// Default is to keep all block states if the node is running as a
@@ -505,6 +509,10 @@ pub struct RunCmd {
 	#[structopt(flatten)]
 	pub shared_params: SharedParams,
 
+	#[allow(missing_docs)]
+	#[structopt(flatten)]
+	pub import_params: ImportParams,
+
 	#[allow(missing_docs)]
 	#[structopt(flatten)]
 	pub network_config: NetworkConfigurationParams,
@@ -764,6 +772,10 @@ pub struct ImportBlocksCmd {
 	#[allow(missing_docs)]
 	#[structopt(flatten)]
 	pub shared_params: SharedParams,
+
+	#[allow(missing_docs)]
+	#[structopt(flatten)]
+	pub import_params: ImportParams,
 }
 
 impl_get_log_filter!(ImportBlocksCmd);
@@ -784,6 +796,10 @@ pub struct CheckBlockCmd {
 	#[allow(missing_docs)]
 	#[structopt(flatten)]
 	pub shared_params: SharedParams,
+
+	#[allow(missing_docs)]
+	#[structopt(flatten)]
+	pub import_params: ImportParams,
 }
 
 impl_get_log_filter!(CheckBlockCmd);