diff --git a/src/server/command.rs b/src/server/command.rs
index cc10d4d..3ad7dbe 100644
--- a/src/server/command.rs
+++ b/src/server/command.rs
@@ -50,10 +50,12 @@ async fn socket_activate(config: ServerConfig) -> anyhow::Result<()> {
     // TODO: allow getting socket path from other socket activation sources
     let conn = get_socket_from_systemd().await?;
     let uid = conn.peer_cred()?.uid();
-    let unix_user = UnixUser::from_uid(uid.into())?;
+    let unix_user = UnixUser::from_uid(uid)?;
 
     log::info!("Accepted connection from {}", unix_user.username);
 
+    sd_notify::notify(true, &[sd_notify::NotifyState::Ready]).ok();
+
     handle_requests_for_single_session(conn, &unix_user, &config).await?;
 
     Ok(())
diff --git a/src/server/server_loop.rs b/src/server/server_loop.rs
index 94e0b1c..03d9b4d 100644
--- a/src/server/server_loop.rs
+++ b/src/server/server_loop.rs
@@ -57,11 +57,13 @@ pub async fn listen_for_incoming_connections(
 
     let listener = UnixListener::bind(socket_path)?;
 
+    sd_notify::notify(true, &[sd_notify::NotifyState::Ready]).ok();
+
     while let Ok((mut conn, _addr)) = listener.accept().await {
         let uid = conn.peer_cred()?.uid();
         log::trace!("Accepted connection from uid {}", uid);
 
-        let unix_user = match UnixUser::from_uid(uid.into()) {
+        let unix_user = match UnixUser::from_uid(uid) {
             Ok(user) => user,
             Err(e) => {
                 eprintln!("Failed to get UnixUser from uid: {}", e);