diff --git a/src/api/mod.rs b/src/api/mod.rs
index 7fa70873afff2626638d45680df8cc2c42863cd2..00ae35cd6be293fbb34ec4666cf72da427ccdcc9 100644
--- a/src/api/mod.rs
+++ b/src/api/mod.rs
@@ -10,8 +10,8 @@
 pub(crate) use conduit::{debug_info, pdu::PduEvent, utils, Error, Result};
 pub(crate) use service::services;
 
-pub use crate::router::State;
-pub(crate) use crate::router::{Ruma, RumaResponse};
+pub use self::router::State;
+pub(crate) use self::router::{Ruma, RumaResponse};
 
 conduit::mod_ctor! {}
 conduit::mod_dtor! {}
diff --git a/src/api/router.rs b/src/api/router.rs
index d624de32bc2ae3e99d512da4a9a327e366edb82e..cff58c32d0cc3a176271bc21ffbe90b77d65fda1 100644
--- a/src/api/router.rs
+++ b/src/api/router.rs
@@ -3,8 +3,7 @@
 mod handler;
 mod request;
 mod response;
-
-use std::sync::Arc;
+mod state;
 
 use axum::{
 	response::IntoResponse,
@@ -15,11 +14,10 @@
 use http::Uri;
 
 use self::handler::RouterExt;
+pub use self::state::State;
 pub(super) use self::{args::Args as Ruma, response::RumaResponse};
 use crate::{client, server};
 
-pub type State = Arc<service::Services>;
-
 pub fn build(router: Router<State>, server: &Server) -> Router<State> {
 	let config = &server.config;
 	let router = router
diff --git a/src/api/router/state.rs b/src/api/router/state.rs
new file mode 100644
index 0000000000000000000000000000000000000000..b1149d8900af913998868909274daa15add3023d
--- /dev/null
+++ b/src/api/router/state.rs
@@ -0,0 +1,22 @@
+use std::{ops::Deref, sync::Arc};
+
+use conduit_service::Services;
+
+#[derive(Clone)]
+pub struct State {
+	services: Arc<Services>,
+}
+
+impl State {
+	pub fn new(services: Arc<Services>) -> Self {
+		Self {
+			services,
+		}
+	}
+}
+
+impl Deref for State {
+	type Target = Arc<Services>;
+
+	fn deref(&self) -> &Self::Target { &self.services }
+}
diff --git a/src/router/router.rs b/src/router/router.rs
index 3527f1e6ded552869edb801e69735147328e5032..e59b088be68fc52d94d239165f0e0d2819e6f8bc 100644
--- a/src/router/router.rs
+++ b/src/router/router.rs
@@ -9,7 +9,7 @@
 
 pub(crate) fn build(services: &Arc<Services>) -> Router {
 	let router = Router::<State>::new();
-	let state = services.clone();
+	let state = State::new(services.clone());
 
 	conduit_api::router::build(router, &services.server)
 		.route("/", get(it_works))