diff --git a/src/main.rs b/src/main.rs
index c81dd9c..312c616 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -15,7 +15,7 @@ use std::{
 
 use clap::Parser;
 use faker::Faker;
-use packet::{rw::read_packet, Packet};
+use packet::{rw::read_packet, Packet, CLIENT_NAME_SIZE};
 use player::PlayerActor;
 use server::{web_main, Manager};
 use tokio::{
@@ -25,10 +25,11 @@ use tokio::{
 use tracing::{error, info, Level};
 use tracing_subscriber::{filter::FilterFn, layer::SubscriberExt, util::SubscriberInitExt, Layer};
 use xtra::{prelude::MessageChannel, Address, Mailbox};
+use zerocopy::FromZeros;
 
 type PacketChannel = MessageChannel<Packet, (), xtra::refcount::Strong>;
-pub fn clients() -> &'static RwLock<HashMap<u128, (PacketChannel, SocketAddr)>> {
-  static CLIENTS: LazyLock<RwLock<HashMap<u128, (PacketChannel, SocketAddr)>>> = LazyLock::new(|| RwLock::default());
+pub fn clients() -> &'static RwLock<HashMap<u128, (PacketChannel, protocol::String<CLIENT_NAME_SIZE>, SocketAddr)>> {
+  static CLIENTS: LazyLock<RwLock<HashMap<u128, (PacketChannel, protocol::String<CLIENT_NAME_SIZE>, SocketAddr)>>> = LazyLock::new(|| RwLock::default());
 
   &CLIENTS
 }
@@ -84,6 +85,7 @@ async fn main() {
       1,
       (
         MessageChannel::new(address),
+        protocol::String::new_zeroed(),
         "0.0.0.0:0".to_socket_addrs().unwrap().next().unwrap(),
       ),
     );
diff --git a/src/player.rs b/src/player.rs
index 9efda79..e5d363b 100644
--- a/src/player.rs
+++ b/src/player.rs
@@ -21,7 +21,7 @@ use crate::{
 };
 
 pub async fn broadcast_packet(packet: Packet) {
-  for (id, (address, _)) in clients().read().await.iter() {
+  for (id, (address, _, _)) in clients().read().await.iter() {
     if *id != packet.user_id {
       let _ = address.send(packet.clone()).detach().await;
     }
@@ -41,7 +41,8 @@ pub async fn broadcast_packet(packet: Packet) {
     }
     PacketData::Disconnect(..) => {
       if packet.user_id != 1 {
-      manager().send(PlayerDisconnected { id: packet.user_id }).await.unwrap();}
+        manager().send(PlayerDisconnected { id: packet.user_id }).await.unwrap();
+      }
     }
     PacketData::Player(player) => {
       let _ = manager()
@@ -182,7 +183,7 @@ impl PlayerActor {
         .instrument(span.clone()),
       ));
 
-      clients().write().await.insert(user_id, (MessageChannel::new(address), addr));
+      clients().write().await.insert(user_id, (MessageChannel::new(address), connect.client_name, addr));
 
       xtra::run(
         mailbox,
@@ -209,11 +210,22 @@ impl Actor for PlayerActor {
       udp: false,
       data: PacketData::Connect(Connect {
         kind: self.connection_kind,
-        max_player: 8,
+        max_player: 10,
         client_name: self.name,
       }),
     })
     .await;
+    for (user_id, b) in clients().read().await.iter() {
+      let _ = self.write_sender.send(WriteMessage::Data(Packet {
+        user_id: *user_id,
+        udp: false,
+        data: PacketData::Connect(Connect {
+          kind: self.connection_kind,
+          max_player: 10,
+          client_name: b.1,
+        }),
+      }));
+    }
     self
       .write_sender
       .send(WriteMessage::Data(Packet {
@@ -255,6 +267,7 @@ impl Handler<Packet> for PlayerActor {
       match packet.data {
         PacketData::HolePunch(_) => {
           info!("got hole punch!");
+
           return;
         }
         PacketData::UdpInit(UdpInit { port }) => {