diff --git a/polkadot/node/overseer/overseer-gen/proc-macro/build.rs b/polkadot/node/overseer/overseer-gen/proc-macro/build.rs
new file mode 100644
index 0000000000000000000000000000000000000000..ebc4e5d75ab58d165fde683e8868afe5d998158e
--- /dev/null
+++ b/polkadot/node/overseer/overseer-gen/proc-macro/build.rs
@@ -0,0 +1,2 @@
+/// A dummy build script, so `OUT_DIR` is set.
+fn main() {}
diff --git a/polkadot/node/overseer/overseer-gen/proc-macro/src/lib.rs b/polkadot/node/overseer/overseer-gen/proc-macro/src/lib.rs
index 1a0634b297203724806133f9e10c900b4635316a..1c7d32d6449fe6b15812d8b54e9342a381b766d4 100644
--- a/polkadot/node/overseer/overseer-gen/proc-macro/src/lib.rs
+++ b/polkadot/node/overseer/overseer-gen/proc-macro/src/lib.rs
@@ -98,12 +98,12 @@ pub(crate) fn impl_overseer_gen(
 	additive.extend(impl_message_wrapper_enum(&info)?);
 	additive.extend(impl_dispatch(&info));
 
-	#[cfg(feature = "expansion")]
-	{
+	if cfg!(feature = "expansion") {
 		use std::io::Write;
 
-		let cwd = std::env::current_dir().unwrap();
-		let path: std::path::PathBuf = cwd.join("overlord-expansion.rs");
+		let out = env!("OUT_DIR");
+		let out = std::path::PathBuf::from(out);
+		let path = out.join("overlord-expansion.rs");
 		let mut f = std::fs::OpenOptions::new()
 			.write(true)
 			.create(true)
@@ -117,9 +117,15 @@ pub(crate) fn impl_overseer_gen(
 		std::process::Command::new("rustfmt")
 			.arg("--edition=2018")
 			.arg(&path)
-			.current_dir(cwd)
+			.current_dir(out)
 			.spawn()
 			.expect("Running rustfmt works. qed");
+
+		let path = path.display().to_string();
+		Ok(quote! {
+			include!( #path );
+		})
+	} else {
+		Ok(additive)
 	}
-	Ok(additive)
 }