diff --git a/substrate/polkadot/service/src/lib.rs b/substrate/polkadot/service/src/lib.rs
index d3daac84ca84985dbb94a5d8ba8f2c774f5e0d9a..ea33bad5ec8f00635897e5885f76e56f8c995a1c 100644
--- a/substrate/polkadot/service/src/lib.rs
+++ b/substrate/polkadot/service/src/lib.rs
@@ -74,6 +74,7 @@ pub struct Service {
 	thread: Option<thread::JoinHandle<()>>,
 	client: Arc<Client>,
 	network: Arc<network::Service>,
+	transaction_pool: Arc<Mutex<TransactionPool>>,
 	_consensus: Option<consensus::Service>,
 }
 
@@ -182,7 +183,7 @@ impl Service {
 			// Load the first available key. Code above makes sure it exisis.
 			let key = keystore.load(&keystore.contents()?[0], "")?;
 			info!("Using authority key {:?}", key.public());
-			Some(consensus::Service::new(client.clone(), network.clone(), transaction_pool, key, &best_header))
+			Some(consensus::Service::new(client.clone(), network.clone(), transaction_pool.clone(), key, &best_header))
 		} else {
 			None
 		};
@@ -203,8 +204,9 @@ impl Service {
 		});
 		Ok(Service {
 			thread: Some(thread),
-			client: client.clone(),
-			network: network.clone(),
+			client: client,
+			network: network,
+			transaction_pool: transaction_pool,
 			_consensus: consensus_service,
 		})
 	}
@@ -218,6 +220,11 @@ impl Service {
 	pub fn network(&self) -> Arc<network::Service> {
 		self.network.clone()
 	}
+
+	/// Get shared transaction pool instance.
+	pub fn transaction_pool(&self) -> Arc<Mutex<TransactionPool>> {
+		self.transaction_pool.clone()
+	}
 }
 
 impl Drop for Service {