diff --git a/substrate/client/network/transactions/src/config.rs b/substrate/client/network/transactions/src/config.rs
index 6b4725a2b8d9868505c3d8bf5182eaba9fb9a945..e3b80ab7bc9da57999fe4680df8ddce5e2956edf 100644
--- a/substrate/client/network/transactions/src/config.rs
+++ b/substrate/client/network/transactions/src/config.rs
@@ -59,11 +59,11 @@ pub trait TransactionPool<H: ExHashT, B: BlockT>: Send + Sync {
 	/// Get transactions from the pool that are ready to be propagated.
 	fn transactions(&self) -> Vec<(H, Arc<B::Extrinsic>)>;
 	/// Get hash of transaction.
-	fn hash_of(&self, transaction: &Arc<B::Extrinsic>) -> H;
+	fn hash_of(&self, transaction: &B::Extrinsic) -> H;
 	/// Import a transaction into the pool.
 	///
 	/// This will return future.
-	fn import(&self, transaction: Arc<B::Extrinsic>) -> TransactionImportFuture;
+	fn import(&self, transaction: B::Extrinsic) -> TransactionImportFuture;
 	/// Notify the pool about transactions broadcast.
 	fn on_broadcasted(&self, propagations: HashMap<H, Vec<String>>);
 	/// Get transaction by hash.
@@ -83,11 +83,11 @@ impl<H: ExHashT + Default, B: BlockT> TransactionPool<H, B> for EmptyTransaction
 		Vec::new()
 	}
 
-	fn hash_of(&self, _transaction: &Arc<B::Extrinsic>) -> H {
+	fn hash_of(&self, _transaction: &B::Extrinsic) -> H {
 		Default::default()
 	}
 
-	fn import(&self, _transaction: Arc<B::Extrinsic>) -> TransactionImportFuture {
+	fn import(&self, _transaction: B::Extrinsic) -> TransactionImportFuture {
 		Box::pin(future::ready(TransactionImport::KnownGood))
 	}
 
diff --git a/substrate/client/network/transactions/src/lib.rs b/substrate/client/network/transactions/src/lib.rs
index 128f7b2b77c6f28f21e74a46002325169d626cbc..f86ece0cfb0bb52424a6196b89ffc9e7c9455199 100644
--- a/substrate/client/network/transactions/src/lib.rs
+++ b/substrate/client/network/transactions/src/lib.rs
@@ -431,7 +431,7 @@ where
 					break
 				}
 
-				let hash = self.transaction_pool.hash_of(&Arc::new(t.clone()));
+				let hash = self.transaction_pool.hash_of(&t);
 				peer.known_transactions.insert(hash.clone());
 
 				self.network.report_peer(who, rep::ANY_TRANSACTION);
@@ -439,7 +439,7 @@ where
 				match self.pending_transactions_peers.entry(hash.clone()) {
 					Entry::Vacant(entry) => {
 						self.pending_transactions.push(PendingTransaction {
-							validation: self.transaction_pool.import(Arc::new(t)),
+							validation: self.transaction_pool.import(t),
 							tx_hash: hash,
 						});
 						entry.insert(vec![who]);
diff --git a/substrate/client/service/src/lib.rs b/substrate/client/service/src/lib.rs
index 8b82bfa4230a130cd26b549cd9a57333d5ae5b4d..62f9dbba73d9b445ebeeb86d28fc671b77e53bc0 100644
--- a/substrate/client/service/src/lib.rs
+++ b/substrate/client/service/src/lib.rs
@@ -510,11 +510,11 @@ where
 		transactions_to_propagate(&*self.pool)
 	}
 
-	fn hash_of(&self, transaction: &Arc<B::Extrinsic>) -> H {
-		self.pool.hash_of(transaction.as_ref())
+	fn hash_of(&self, transaction: &B::Extrinsic) -> H {
+		self.pool.hash_of(transaction)
 	}
 
-	fn import(&self, transaction: Arc<B::Extrinsic>) -> TransactionImportFuture {
+	fn import(&self, transaction: B::Extrinsic) -> TransactionImportFuture {
 		let encoded = transaction.encode();
 		let uxt = match Decode::decode(&mut &encoded[..]) {
 			Ok(uxt) => uxt,