diff --git a/Cargo.lock b/Cargo.lock
index cb89f5fd35a711e763f68b1bc32a89b075bbe2eb..3de8dba70080a9ea35f1cd736d896c0c9607a4a3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2723,6 +2723,7 @@ dependencies = [
  "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
  "sp-finality-tracker 2.0.0",
  "sp-timestamp 2.0.0",
+ "sp-transaction-pool 2.0.0",
  "sr-io 2.0.0",
  "sr-primitives 2.0.0",
  "structopt 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2750,7 +2751,6 @@ dependencies = [
  "substrate-service 2.0.0",
  "substrate-service-test 2.0.0",
  "substrate-telemetry 2.0.0",
- "substrate-transaction-pool 2.0.0",
  "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
  "transaction-factory 0.0.1",
@@ -2809,9 +2809,9 @@ dependencies = [
  "palette-system-rpc 2.0.0",
  "pallet-contracts-rpc 2.0.0",
  "pallet-transaction-payment-rpc 2.0.0",
+ "sp-transaction-pool 2.0.0",
  "sr-primitives 2.0.0",
  "substrate-client 2.0.0",
- "substrate-transaction-pool 2.0.0",
 ]
 
 [[package]]
@@ -2897,6 +2897,7 @@ dependencies = [
  "node-template-runtime 2.0.0",
  "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sp-transaction-pool 2.0.0",
  "sr-io 2.0.0",
  "sr-primitives 2.0.0",
  "substrate-basic-authorship 2.0.0",
@@ -2912,7 +2913,6 @@ dependencies = [
  "substrate-network 2.0.0",
  "substrate-primitives 2.0.0",
  "substrate-service 2.0.0",
- "substrate-transaction-pool 2.0.0",
  "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
  "trie-root 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "vergen 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3262,11 +3262,12 @@ dependencies = [
  "palette-system-rpc-runtime-api 2.0.0",
  "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sp-transaction-graph 2.0.0",
+ "sp-transaction-pool 2.0.0",
  "sr-primitives 2.0.0",
  "substrate-client 2.0.0",
  "substrate-primitives 2.0.0",
  "substrate-test-runtime-client 2.0.0",
- "substrate-transaction-pool 2.0.0",
 ]
 
 [[package]]
@@ -5041,6 +5042,42 @@ dependencies = [
  "substrate-inherents 2.0.0",
 ]
 
+[[package]]
+name = "sp-transaction-graph"
+version = "2.0.0"
+dependencies = [
+ "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sr-primitives 2.0.0",
+ "substrate-primitives 2.0.0",
+ "substrate-test-runtime 2.0.0",
+]
+
+[[package]]
+name = "sp-transaction-pool"
+version = "2.0.0"
+dependencies = [
+ "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sp-transaction-graph 2.0.0",
+ "sr-api 2.0.0",
+ "sr-primitives 2.0.0",
+ "substrate-keyring 2.0.0",
+ "substrate-primitives 2.0.0",
+ "substrate-test-runtime-client 2.0.0",
+ "substrate-transaction-pool-runtime-api 2.0.0",
+]
+
 [[package]]
 name = "spin"
 version = "0.5.2"
@@ -5333,6 +5370,7 @@ dependencies = [
  "futures-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sp-transaction-pool 2.0.0",
  "sr-primitives 2.0.0",
  "substrate-block-builder 2.0.0",
  "substrate-client 2.0.0",
@@ -5342,7 +5380,6 @@ dependencies = [
  "substrate-primitives 2.0.0",
  "substrate-telemetry 2.0.0",
  "substrate-test-runtime-client 2.0.0",
- "substrate-transaction-pool 2.0.0",
 ]
 
 [[package]]
@@ -5959,6 +5996,7 @@ dependencies = [
  "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sp-transaction-pool 2.0.0",
  "sr-api 2.0.0",
  "sr-primitives 2.0.0",
  "substrate-client-api 2.0.0",
@@ -5968,7 +6006,6 @@ dependencies = [
  "substrate-offchain-primitives 2.0.0",
  "substrate-primitives 2.0.0",
  "substrate-test-runtime-client 2.0.0",
- "substrate-transaction-pool 2.0.0",
  "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -6080,6 +6117,7 @@ dependencies = [
  "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sp-transaction-pool 2.0.0",
  "sr-api 2.0.0",
  "sr-io 2.0.0",
  "sr-primitives 2.0.0",
@@ -6095,7 +6133,6 @@ dependencies = [
  "substrate-session 2.0.0",
  "substrate-state-machine 2.0.0",
  "substrate-test-runtime-client 2.0.0",
- "substrate-transaction-pool 2.0.0",
  "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -6114,10 +6151,10 @@ dependencies = [
  "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sp-transaction-graph 2.0.0",
  "sr-version 2.0.0",
  "substrate-primitives 2.0.0",
  "substrate-rpc-primitives 2.0.0",
- "substrate-transaction-graph 2.0.0",
 ]
 
 [[package]]
@@ -6227,6 +6264,7 @@ dependencies = [
  "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
  "slog 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sp-transaction-pool 2.0.0",
  "sr-api 2.0.0",
  "sr-io 2.0.0",
  "sr-primitives 2.0.0",
@@ -6249,7 +6287,6 @@ dependencies = [
  "substrate-session 2.0.0",
  "substrate-telemetry 2.0.0",
  "substrate-test-runtime-client 2.0.0",
- "substrate-transaction-pool 2.0.0",
  "substrate-transaction-pool-runtime-api 2.0.0",
  "sysinfo 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -6420,42 +6457,6 @@ dependencies = [
  "substrate-test-runtime 2.0.0",
 ]
 
-[[package]]
-name = "substrate-transaction-graph"
-version = "2.0.0"
-dependencies = [
- "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
- "sr-primitives 2.0.0",
- "substrate-primitives 2.0.0",
- "substrate-test-runtime 2.0.0",
-]
-
-[[package]]
-name = "substrate-transaction-pool"
-version = "2.0.0"
-dependencies = [
- "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "parity-scale-codec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "sr-api 2.0.0",
- "sr-primitives 2.0.0",
- "substrate-keyring 2.0.0",
- "substrate-primitives 2.0.0",
- "substrate-test-runtime-client 2.0.0",
- "substrate-transaction-graph 2.0.0",
- "substrate-transaction-pool-runtime-api 2.0.0",
-]
-
 [[package]]
 name = "substrate-transaction-pool-runtime-api"
 version = "2.0.0"
diff --git a/Cargo.toml b/Cargo.toml
index 6de062dc92861733c52fcafdbe566f205e9fc935..773da044f9518df280bd731947419e24003aceb7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -38,8 +38,6 @@ members = [
 	"client/service/test",
 	"client/state-db",
 	"client/telemetry",
-	"client/transaction-pool",
-	"client/transaction-pool/graph",
 	"client/utils/wasm-builder-runner",
 	"palette/assets",
 	"palette/aura",
@@ -125,6 +123,8 @@ members = [
 	"primitives/sr-version",
 	"primitives/state-machine",
 	"primitives/timestamp",
+	"primitives/transaction-pool",
+	"primitives/transaction-pool/graph",
 	"primitives/transaction-pool/runtime-api",
 	"primitives/trie",
 	"primitives/wasm-interface",
diff --git a/bin/node-template/Cargo.toml b/bin/node-template/Cargo.toml
index 99ea7af798f1655b99a158d54d6b975bef8101f9..50714461b5e45fdc38345472ed3ceeb037b0ee98 100644
--- a/bin/node-template/Cargo.toml
+++ b/bin/node-template/Cargo.toml
@@ -25,7 +25,7 @@ primitives = { package = "substrate-primitives", path = "../../primitives/core"
 substrate-executor = { path = "../../client/executor" }
 substrate-service = { path = "../../client/service" }
 inherents = { package = "substrate-inherents", path = "../../primitives/inherents" }
-transaction-pool = { package = "substrate-transaction-pool", path = "../../client/transaction-pool" }
+transaction-pool = { package = "sp-transaction-pool", path = "../../primitives/transaction-pool" }
 network = { package = "substrate-network", path = "../../client/network" }
 aura = { package = "substrate-consensus-aura", path = "../../client/consensus/aura" }
 aura-primitives = { package = "substrate-consensus-aura-primitives", path = "../../primitives/consensus/aura" }
diff --git a/bin/node/cli/Cargo.toml b/bin/node/cli/Cargo.toml
index bb9e868beaae40d323fa18c777b4c5be5a4a8663..40f57d79d378f1504373a17900bbcdbea1875000 100644
--- a/bin/node/cli/Cargo.toml
+++ b/bin/node/cli/Cargo.toml
@@ -47,7 +47,7 @@ client-api = { package = "substrate-client-api", path = "../../../client/api" }
 client = { package = "substrate-client", path = "../../../client/" }
 inherents = { package = "substrate-inherents", path = "../../../primitives/inherents" }
 chain-spec = { package = "substrate-chain-spec", path = "../../../client/chain-spec" }
-transaction_pool = { package = "substrate-transaction-pool", path = "../../../client/transaction-pool" }
+transaction_pool = { package = "sp-transaction-pool", path = "../../../primitives/transaction-pool" }
 network = { package = "substrate-network", path = "../../../client/network" }
 babe = { package = "substrate-consensus-babe", path = "../../../client/consensus/babe" }
 grandpa = { package = "substrate-finality-grandpa", path = "../../../client/finality-grandpa" }
diff --git a/bin/node/rpc/Cargo.toml b/bin/node/rpc/Cargo.toml
index d89b805777449707e94f390c32b14da689bc1be0..4bcc7e2094d20799288d91901d33b473900bb2ed 100644
--- a/bin/node/rpc/Cargo.toml
+++ b/bin/node/rpc/Cargo.toml
@@ -13,4 +13,4 @@ sr-primitives = { path = "../../../primitives/sr-primitives" }
 pallet-contracts-rpc = { path = "../../../palette/contracts/rpc/" }
 pallet-transaction-payment-rpc = { path = "../../../palette/transaction-payment/rpc/" }
 palette-system-rpc = { path = "../../../palette/system/rpc/" }
-transaction_pool = { package = "substrate-transaction-pool", path = "../../../client/transaction-pool" }
+transaction_pool = { package = "sp-transaction-pool", path = "../../../primitives/transaction-pool" }
diff --git a/client/basic-authorship/Cargo.toml b/client/basic-authorship/Cargo.toml
index 3104b70043b0c29af5b4b56d1a827b74f31eb3d2..6050686d1d19eb2f0aec07f485ca808120a328e8 100644
--- a/client/basic-authorship/Cargo.toml
+++ b/client/basic-authorship/Cargo.toml
@@ -15,7 +15,7 @@ client-api = { package = "substrate-client-api", path = "../api" }
 consensus_common = { package = "substrate-consensus-common", path = "../../primitives/consensus/common" }
 inherents = { package = "substrate-inherents", path = "../../primitives/inherents" }
 substrate-telemetry = { path = "../telemetry" }
-transaction_pool = { package = "substrate-transaction-pool", path = "../transaction-pool" }
+transaction_pool = { package = "sp-transaction-pool", path = "../../primitives/transaction-pool" }
 block-builder = { package = "substrate-block-builder", path = "../block-builder" }
 
 [dev-dependencies]
diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml
index 29621d8502bc1754896b6fabb0488f323e889976..7dd63ab0e8637177caa54e0d7dad676cc4f2eca5 100644
--- a/client/offchain/Cargo.toml
+++ b/client/offchain/Cargo.toml
@@ -23,7 +23,7 @@ parking_lot = "0.9.0"
 primitives = { package = "substrate-primitives", path = "../../primitives/core" }
 rand = "0.7.2"
 sr-primitives = { path = "../../primitives/sr-primitives" }
-transaction_pool = { package = "substrate-transaction-pool", path = "../transaction-pool" }
+transaction_pool = { package = "sp-transaction-pool", path = "../../primitives/transaction-pool" }
 network = { package = "substrate-network", path = "../network" }
 keystore = { package = "substrate-keystore", path = "../keystore" }
 
diff --git a/client/rpc/Cargo.toml b/client/rpc/Cargo.toml
index a76d95fb144f93df01486137170fb5b6d48098eb..2bb08aa934c4fde75d0f2b6962a4b83ad04ff554 100644
--- a/client/rpc/Cargo.toml
+++ b/client/rpc/Cargo.toml
@@ -23,7 +23,7 @@ rpc-primitives = { package = "substrate-rpc-primitives", path = "../../primitive
 state_machine = { package = "substrate-state-machine", path = "../../primitives/state-machine" }
 substrate-executor = { path = "../executor" }
 substrate-keystore = { path = "../keystore" }
-transaction_pool = { package = "substrate-transaction-pool", path = "../transaction-pool" }
+transaction_pool = { package = "sp-transaction-pool", path = "../../primitives/transaction-pool" }
 hash-db = { version = "0.15.2", default-features = false }
 parking_lot = { version = "0.9.0" }
 
diff --git a/client/rpc/api/Cargo.toml b/client/rpc/api/Cargo.toml
index 053e58d0315488562f2873b981954d00a0fcda31..7f9ce84559d6778a83c9157e0cda6e41d64b4439 100644
--- a/client/rpc/api/Cargo.toml
+++ b/client/rpc/api/Cargo.toml
@@ -18,5 +18,5 @@ primitives = { package = "substrate-primitives", path = "../../../primitives/cor
 runtime_version = { package = "sr-version", path = "../../../primitives/sr-version" }
 serde = { version = "1.0.101", features = ["derive"] }
 serde_json = "1.0.41"
-txpool = { package = "substrate-transaction-graph", path = "../../transaction-pool/graph" }
+txpool = { package = "sp-transaction-graph", path = "../../../primitives/transaction-pool/graph" }
 rpc-primitives = { package = "substrate-rpc-primitives", path = "../../../primitives/rpc" }
diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml
index f7ede134713838eeec7d903bdf7ffed02f451863..01b6c86a4fdd6c009cd4aa48a9ee7bb3e0d8cfe2 100644
--- a/client/service/Cargo.toml
+++ b/client/service/Cargo.toml
@@ -44,7 +44,7 @@ tx-pool-api = { package = "substrate-transaction-pool-runtime-api", path = "../.
 client_db = { package = "substrate-client-db", path = "../db" }
 codec = { package = "parity-scale-codec", version = "1.0.0" }
 substrate-executor = { path = "../executor" }
-transaction_pool = { package = "substrate-transaction-pool", path = "../transaction-pool" }
+transaction_pool = { package = "sp-transaction-pool", path = "../../primitives/transaction-pool" }
 rpc-servers = { package = "substrate-rpc-servers", path = "../rpc-servers" }
 rpc = { package = "substrate-rpc", path = "../rpc" }
 tel = { package = "substrate-telemetry", path = "../telemetry" }
diff --git a/client/transaction-pool/Cargo.toml b/client/transaction-pool/Cargo.toml
index 1060dcd2a3ed3c9e7885b54385764ceec89d7ebb..7cf9807c0a1710e7aeedd733c149dfa09ec6c658 100644
--- a/client/transaction-pool/Cargo.toml
+++ b/client/transaction-pool/Cargo.toml
@@ -1,5 +1,5 @@
 [package]
-name = "substrate-transaction-pool"
+name = "sp-transaction-pool"
 version = "2.0.0"
 authors = ["Parity Technologies <admin@parity.io>"]
 edition = "2018"
@@ -14,7 +14,7 @@ primitives = { package = "substrate-primitives",  path = "../../primitives/core"
 sr-api = { path = "../../primitives/sr-api" }
 sr-primitives = { path = "../../primitives/sr-primitives" }
 tx-runtime-api = { package = "substrate-transaction-pool-runtime-api", path = "../../primitives/transaction-pool/runtime-api" }
-txpool = { package = "substrate-transaction-graph", path = "./graph" }
+txpool = { package = "sp-transaction-graph", path = "../../primitives/transaction-pool/graph" }
 
 [dev-dependencies]
 keyring = { package = "substrate-keyring", path = "../../primitives/keyring" }
diff --git a/palette/system/rpc/Cargo.toml b/palette/system/rpc/Cargo.toml
index 1f43db9ea2c68ba0f2d9fb608b377c2ff652ddf7..41646d193ba044f04014dbc2f9d33fd55c78ff3f 100644
--- a/palette/system/rpc/Cargo.toml
+++ b/palette/system/rpc/Cargo.toml
@@ -15,9 +15,10 @@ serde = { version = "1.0.101", features = ["derive"] }
 sr-primitives = { path = "../../../primitives/sr-primitives" }
 palette-system-rpc-runtime-api = { path = "./runtime-api" }
 substrate-primitives = { path = "../../../primitives/core" }
-transaction_pool = { package = "substrate-transaction-pool", path = "../../../client/transaction-pool" }
+sp-transaction-graph = { path = "../../../primitives/transaction-pool/graph" }
 
 [dev-dependencies]
 test-client = { package = "substrate-test-runtime-client", path = "../../../test/utils/runtime/client" }
+sp-transaction-pool = { path = "../../../primitives/transaction-pool" }
 env_logger = "0.7.0"
 futures03 = { package = "futures-preview", version = "=0.3.0-alpha.19" }
diff --git a/palette/system/rpc/src/lib.rs b/palette/system/rpc/src/lib.rs
index 5bce6aaa439f01e10a44792e43df9b529c56e26f..30dcbd2a6ad904fe9fcbe744e4b81148792f99c0 100644
--- a/palette/system/rpc/src/lib.rs
+++ b/palette/system/rpc/src/lib.rs
@@ -27,7 +27,7 @@ use sr_primitives::{
 	traits,
 };
 use substrate_primitives::hexdisplay::HexDisplay;
-use transaction_pool::txpool::{self, Pool};
+use sp_transaction_graph::{self, ChainApi, Pool};
 
 pub use palette_system_rpc_runtime_api::AccountNonceApi;
 pub use self::gen_client::Client as SystemClient;
@@ -47,13 +47,13 @@ pub trait SystemApi<AccountId, Index> {
 const RUNTIME_ERROR: i64 = 1;
 
 /// An implementation of System-specific RPC methods.
-pub struct System<P: txpool::ChainApi, C, B> {
+pub struct System<P: ChainApi, C, B> {
 	client: Arc<C>,
 	pool: Arc<Pool<P>>,
 	_marker: std::marker::PhantomData<B>,
 }
 
-impl<P: txpool::ChainApi, C, B> System<P, C, B> {
+impl<P: ChainApi, C, B> System<P, C, B> {
 	/// Create new `System` given client and transaction pool.
 	pub fn new(client: Arc<C>, pool: Arc<Pool<P>>) -> Self {
 		System {
@@ -70,7 +70,7 @@ where
 	C: HeaderBackend<Block>,
 	C: Send + Sync + 'static,
 	C::Api: AccountNonceApi<Block, AccountId, Index>,
-	P: txpool::ChainApi + Sync + Send + 'static,
+	P: ChainApi + Sync + Send + 'static,
 	Block: traits::Block,
 	AccountId: Clone + std::fmt::Display + Codec,
 	Index: Clone + std::fmt::Display + Codec + traits::SimpleArithmetic,
@@ -118,6 +118,7 @@ where
 #[cfg(test)]
 mod tests {
 	use super::*;
+	use sp_transaction_pool;
 
 	use futures03::executor::block_on;
 	use test_client::{
@@ -130,7 +131,7 @@ mod tests {
 		// given
 		let _ = env_logger::try_init();
 		let client = Arc::new(test_client::new());
-		let pool = Arc::new(Pool::new(Default::default(), transaction_pool::FullChainApi::new(client.clone())));
+		let pool = Arc::new(Pool::new(Default::default(), sp_transaction_pool::FullChainApi::new(client.clone())));
 
 		let new_transaction = |nonce: u64| {
 			let t = Transfer {
diff --git a/primitives/transaction-pool/Cargo.toml b/primitives/transaction-pool/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..366c113be9d428dc2b6a6d9ba26b782a936d4af3
--- /dev/null
+++ b/primitives/transaction-pool/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "sp-transaction-pool"
+version = "2.0.0"
+authors = ["Parity Technologies <admin@parity.io>"]
+edition = "2018"
+
+[dependencies]
+codec = { package = "parity-scale-codec", version = "1.0.0" }
+derive_more = "0.15.0"
+futures = { version = "0.3.0", features = ["thread-pool"] }
+log = "0.4.8"
+parking_lot = "0.9.0"
+primitives = { package = "substrate-primitives",  path = "../core" }
+sr-api = { path = "../sr-api" }
+sr-primitives = { path = "../sr-primitives" }
+tx-runtime-api = { package = "substrate-transaction-pool-runtime-api", path = "./runtime-api" }
+txpool = { package = "sp-transaction-graph", path = "./graph" }
+
+[dev-dependencies]
+keyring = { package = "substrate-keyring", path = "../keyring" }
+test-client = { package = "substrate-test-runtime-client", path = "../../test/utils/runtime/client" }
diff --git a/client/transaction-pool/graph/Cargo.toml b/primitives/transaction-pool/graph/Cargo.toml
similarity index 83%
rename from client/transaction-pool/graph/Cargo.toml
rename to primitives/transaction-pool/graph/Cargo.toml
index 93068c514add0f8cbea291fc25bea40c46ebd991..46d59a2a6ac63df11e9f279fae0523dbe40027cb 100644
--- a/client/transaction-pool/graph/Cargo.toml
+++ b/primitives/transaction-pool/graph/Cargo.toml
@@ -1,5 +1,5 @@
 [package]
-name = "substrate-transaction-graph"
+name = "sp-transaction-graph"
 version = "2.0.0"
 authors = ["Parity Technologies <admin@parity.io>"]
 edition = "2018"
@@ -10,8 +10,8 @@ futures-preview = "0.3.0-alpha.19"
 log = "0.4.8"
 parking_lot = "0.9.0"
 serde = { version = "1.0.101", features = ["derive"] }
-primitives = { package = "substrate-primitives",  path = "../../../primitives/core" }
-sr-primitives = { path = "../../../primitives/sr-primitives" }
+primitives = { package = "substrate-primitives",  path = "../../core" }
+sr-primitives = { path = "../../sr-primitives" }
 
 [dev-dependencies]
 assert_matches = "1.3.0"
diff --git a/client/transaction-pool/graph/benches/basics.rs b/primitives/transaction-pool/graph/benches/basics.rs
similarity index 100%
rename from client/transaction-pool/graph/benches/basics.rs
rename to primitives/transaction-pool/graph/benches/basics.rs
diff --git a/client/transaction-pool/graph/src/base_pool.rs b/primitives/transaction-pool/graph/src/base_pool.rs
similarity index 100%
rename from client/transaction-pool/graph/src/base_pool.rs
rename to primitives/transaction-pool/graph/src/base_pool.rs
diff --git a/client/transaction-pool/graph/src/error.rs b/primitives/transaction-pool/graph/src/error.rs
similarity index 100%
rename from client/transaction-pool/graph/src/error.rs
rename to primitives/transaction-pool/graph/src/error.rs
diff --git a/client/transaction-pool/graph/src/future.rs b/primitives/transaction-pool/graph/src/future.rs
similarity index 100%
rename from client/transaction-pool/graph/src/future.rs
rename to primitives/transaction-pool/graph/src/future.rs
diff --git a/client/transaction-pool/graph/src/lib.rs b/primitives/transaction-pool/graph/src/lib.rs
similarity index 100%
rename from client/transaction-pool/graph/src/lib.rs
rename to primitives/transaction-pool/graph/src/lib.rs
diff --git a/client/transaction-pool/graph/src/listener.rs b/primitives/transaction-pool/graph/src/listener.rs
similarity index 100%
rename from client/transaction-pool/graph/src/listener.rs
rename to primitives/transaction-pool/graph/src/listener.rs
diff --git a/client/transaction-pool/graph/src/pool.rs b/primitives/transaction-pool/graph/src/pool.rs
similarity index 100%
rename from client/transaction-pool/graph/src/pool.rs
rename to primitives/transaction-pool/graph/src/pool.rs
diff --git a/client/transaction-pool/graph/src/ready.rs b/primitives/transaction-pool/graph/src/ready.rs
similarity index 100%
rename from client/transaction-pool/graph/src/ready.rs
rename to primitives/transaction-pool/graph/src/ready.rs
diff --git a/client/transaction-pool/graph/src/rotator.rs b/primitives/transaction-pool/graph/src/rotator.rs
similarity index 100%
rename from client/transaction-pool/graph/src/rotator.rs
rename to primitives/transaction-pool/graph/src/rotator.rs
diff --git a/client/transaction-pool/graph/src/validated_pool.rs b/primitives/transaction-pool/graph/src/validated_pool.rs
similarity index 100%
rename from client/transaction-pool/graph/src/validated_pool.rs
rename to primitives/transaction-pool/graph/src/validated_pool.rs
diff --git a/client/transaction-pool/graph/src/watcher.rs b/primitives/transaction-pool/graph/src/watcher.rs
similarity index 100%
rename from client/transaction-pool/graph/src/watcher.rs
rename to primitives/transaction-pool/graph/src/watcher.rs
diff --git a/client/transaction-pool/src/api.rs b/primitives/transaction-pool/src/api.rs
similarity index 100%
rename from client/transaction-pool/src/api.rs
rename to primitives/transaction-pool/src/api.rs
diff --git a/client/transaction-pool/src/error.rs b/primitives/transaction-pool/src/error.rs
similarity index 100%
rename from client/transaction-pool/src/error.rs
rename to primitives/transaction-pool/src/error.rs
diff --git a/client/transaction-pool/src/lib.rs b/primitives/transaction-pool/src/lib.rs
similarity index 100%
rename from client/transaction-pool/src/lib.rs
rename to primitives/transaction-pool/src/lib.rs
diff --git a/client/transaction-pool/src/tests.rs b/primitives/transaction-pool/src/tests.rs
similarity index 100%
rename from client/transaction-pool/src/tests.rs
rename to primitives/transaction-pool/src/tests.rs