diff --git a/substrate/client/consensus/aura/src/import_queue.rs b/substrate/client/consensus/aura/src/import_queue.rs
index 8034fd08a7eb6f57d04f6d3c06d0202301a1d596..c3faa5382686e9aed0d449b27c18cc2909f3343b 100644
--- a/substrate/client/consensus/aura/src/import_queue.rs
+++ b/substrate/client/consensus/aura/src/import_queue.rs
@@ -317,43 +317,6 @@ impl<B: BlockT, C, P, CAW, CIDP> Verifier<B> for AuraVerifier<C, P, CAW, CIDP> w
 	}
 }
 
-fn initialize_authorities_cache<A, B, C>(client: &C) -> Result<(), ConsensusError> where
-	A: Codec + Debug,
-	B: BlockT,
-	C: ProvideRuntimeApi<B> + BlockOf + ProvideCache<B> + UsageProvider<B>,
-	C::Api: AuraApi<B, A>,
-{
-	// no cache => no initialization
-	let cache = match client.cache() {
-		Some(cache) => cache,
-		None => return Ok(()),
-	};
-
-	let best_hash = client.usage_info().chain.best_hash;
-
-	// check if we already have initialized the cache
-	let map_err = |error| sp_consensus::Error::from(sp_consensus::Error::ClientImport(
-		format!(
-			"Error initializing authorities cache: {}",
-			error,
-		)));
-
-	let block_id = BlockId::hash(best_hash);
-	let authorities: Option<Vec<A>> = cache
-		.get_at(&well_known_cache_keys::AUTHORITIES, &block_id)
-		.unwrap_or(None)
-		.and_then(|(_, _, v)| Decode::decode(&mut &v[..]).ok());
-	if authorities.is_some() {
-		return Ok(());
-	}
-
-	let authorities = crate::authorities(client, &block_id)?;
-	cache.initialize(&well_known_cache_keys::AUTHORITIES, authorities.encode())
-		.map_err(map_err)?;
-
-	Ok(())
-}
-
 /// Should we check for equivocation of a block author?
 #[derive(Debug, Clone, Copy)]
 pub enum CheckForEquivocation {
@@ -438,8 +401,6 @@ pub fn import_queue<'a, P, Block, I, C, S, CAW, CIDP>(
 	CIDP: CreateInherentDataProviders<Block, ()> + Sync + Send + 'static,
 	CIDP::InherentDataProviders: InherentDataProviderExt + Send + Sync,
 {
-	initialize_authorities_cache(&*client)?;
-
 	let verifier = build_verifier::<P, _, _, _>(
 		BuildVerifierParams {
 			client,
diff --git a/substrate/client/consensus/aura/src/lib.rs b/substrate/client/consensus/aura/src/lib.rs
index 702e4dc0bf1bd8794c66ce6e629ac960a73977a2..d0b0cefe8ddca162d31d42ccf3dcd2f6ac215f47 100644
--- a/substrate/client/consensus/aura/src/lib.rs
+++ b/substrate/client/consensus/aura/src/lib.rs
@@ -45,7 +45,7 @@ use sp_consensus::{
 	BlockOrigin, Error as ConsensusError, SelectChain,
 };
 use sc_client_api::{backend::AuxStore, BlockOf, UsageProvider};
-use sp_blockchain::{Result as CResult, well_known_cache_keys, ProvideCache, HeaderBackend};
+use sp_blockchain::{Result as CResult, ProvideCache, HeaderBackend};
 use sp_core::crypto::Public;
 use sp_application_crypto::{AppKey, AppPublic};
 use sp_runtime::{generic::BlockId, traits::NumberFor};
@@ -546,14 +546,9 @@ fn authorities<A, B, C>(client: &C, at: &BlockId<B>) -> Result<Vec<A>, Consensus
 	C: ProvideRuntimeApi<B> + BlockOf + ProvideCache<B>,
 	C::Api: AuraApi<B, A>,
 {
-	client
-		.cache()
-		.and_then(|cache| cache
-			.get_at(&well_known_cache_keys::AUTHORITIES, at)
-			.unwrap_or(None)
-			.and_then(|(_, _, v)| Decode::decode(&mut &v[..]).ok())
-		)
-		.or_else(|| AuraApi::authorities(&*client.runtime_api(), at).ok())
+	client.runtime_api()
+		.authorities(at)
+		.ok()
 		.ok_or_else(|| sp_consensus::Error::InvalidAuthoritiesSet.into())
 }
 
diff --git a/substrate/primitives/consensus/aura/src/lib.rs b/substrate/primitives/consensus/aura/src/lib.rs
index a28e681fda27f8361d27603abaa47eb895b182fb..ef888a2ab855b7e213e22ec5ea3b22a29462bc53 100644
--- a/substrate/primitives/consensus/aura/src/lib.rs
+++ b/substrate/primitives/consensus/aura/src/lib.rs
@@ -90,6 +90,7 @@ sp_api::decl_runtime_apis! {
 		fn slot_duration() -> SlotDuration;
 
 		// Return the current set of authorities.
+		#[skip_initialize_block]
 		fn authorities() -> Vec<AuthorityId>;
 	}
 }