diff --git a/Cargo.lock b/Cargo.lock
index 0e0e47f955ad018c8bc34bae2fa8195a4c30fe92..5ffb73c9c67727c30eb2e7cfd5d9cc906991d269 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -12183,7 +12183,6 @@ dependencies = [
  "sp-core",
  "sp-maybe-compressed-blob",
  "sp-tracing",
- "tikv-jemalloc-ctl",
  "tokio",
  "tracing-gum",
 ]
diff --git a/polkadot/Cargo.toml b/polkadot/Cargo.toml
index e3cfda9bd46ce0facc56d21bdbcd16336c9b2fd1..f173557a0ffba1fb2b696cfb7a98cf665bac0d51 100644
--- a/polkadot/Cargo.toml
+++ b/polkadot/Cargo.toml
@@ -22,7 +22,7 @@ version = "1.0.0"
 
 [dependencies]
 color-eyre = { version = "0.6.1", default-features = false }
-tikv-jemallocator = "0.5.0"
+tikv-jemallocator = { version = "0.5.0", optional = true }
 
 # Crates in our workspace, defined as dependencies so we can pass them feature flags.
 polkadot-cli = { path = "cli", features = [
@@ -38,6 +38,9 @@ polkadot-overseer = { path = "node/overseer" }
 polkadot-node-core-pvf-common = { path = "node/core/pvf/common" }
 polkadot-node-core-pvf-execute-worker = { path = "node/core/pvf/execute-worker" }
 
+[target.'cfg(target_os = "linux")'.dependencies]
+tikv-jemallocator = "0.5.0"
+
 [dev-dependencies]
 assert_cmd = "2.0.4"
 nix = { version = "0.26.1", features = ["signal"] }
@@ -59,7 +62,9 @@ fast-runtime = [ "polkadot-cli/fast-runtime" ]
 runtime-metrics = [ "polkadot-cli/runtime-metrics" ]
 pyroscope = [ "polkadot-cli/pyroscope" ]
 jemalloc-allocator = [
+	"dep:tikv-jemallocator",
 	"polkadot-node-core-pvf-prepare-worker/jemalloc-allocator",
+	"polkadot-node-core-pvf/jemalloc-allocator",
 	"polkadot-overseer/jemalloc-allocator",
 ]
 
diff --git a/polkadot/node/core/pvf/Cargo.toml b/polkadot/node/core/pvf/Cargo.toml
index a10b748e8823dd6410f378c517a3b172c0078bb1..f28d00d26906d4f9deead77af99dd9e9ddb0143d 100644
--- a/polkadot/node/core/pvf/Cargo.toml
+++ b/polkadot/node/core/pvf/Cargo.toml
@@ -54,6 +54,7 @@ halt = { package = "test-parachain-halt", path = "../../../parachain/test-parach
 
 [features]
 ci-only-tests = []
+jemalloc-allocator = [ "polkadot-node-core-pvf-common/jemalloc-allocator" ]
 # This feature is used to export test code to other crates without putting it in the production build.
 # This is also used by the `puppet_worker` binary.
 test-utils = [
diff --git a/polkadot/node/core/pvf/common/Cargo.toml b/polkadot/node/core/pvf/common/Cargo.toml
index ded8f0dc63beda87ffff3b7b879124c9ad394ded..620e2148623f3c57801ec32bfb813e32a1f2abff 100644
--- a/polkadot/node/core/pvf/common/Cargo.toml
+++ b/polkadot/node/core/pvf/common/Cargo.toml
@@ -38,3 +38,4 @@ tempfile = "3.3.0"
 # This feature is used to export test code to other crates without putting it in the production build.
 # Also used for building the puppet worker.
 test-utils = []
+jemalloc-allocator = []
diff --git a/polkadot/node/core/pvf/execute-worker/Cargo.toml b/polkadot/node/core/pvf/execute-worker/Cargo.toml
index 5ef7c8e8e87e3a5667a5c317e27ec10d6d971436..a9619015594faf1236ef47497644b60235d77c1f 100644
--- a/polkadot/node/core/pvf/execute-worker/Cargo.toml
+++ b/polkadot/node/core/pvf/execute-worker/Cargo.toml
@@ -11,7 +11,6 @@ cpu-time = "1.0.0"
 futures = "0.3.21"
 gum = { package = "tracing-gum", path = "../../../gum" }
 rayon = "1.5.1"
-tikv-jemalloc-ctl = { version = "0.5.0", optional = true }
 tokio = { version = "1.24.2", features = ["fs", "process"] }
 
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive"] }
@@ -24,8 +23,5 @@ sp-core = { path = "../../../../../substrate/primitives/core" }
 sp-maybe-compressed-blob = { path = "../../../../../substrate/primitives/maybe-compressed-blob" }
 sp-tracing = { path = "../../../../../substrate/primitives/tracing" }
 
-[target.'cfg(target_os = "linux")'.dependencies]
-tikv-jemalloc-ctl = "0.5.0"
-
 [features]
 builder = []
diff --git a/polkadot/node/core/pvf/prepare-worker/Cargo.toml b/polkadot/node/core/pvf/prepare-worker/Cargo.toml
index dfa87e4d2407725fe842353f00fcebe0f505bb23..61d197af07acc620ecbd99ea8c7012c1273f4079 100644
--- a/polkadot/node/core/pvf/prepare-worker/Cargo.toml
+++ b/polkadot/node/core/pvf/prepare-worker/Cargo.toml
@@ -32,4 +32,7 @@ tikv-jemalloc-ctl = "0.5.0"
 
 [features]
 builder = []
-jemalloc-allocator = [ "dep:tikv-jemalloc-ctl" ]
+jemalloc-allocator = [
+	"dep:tikv-jemalloc-ctl",
+	"polkadot-node-core-pvf-common/jemalloc-allocator",
+]