diff --git a/chat_server.py b/chat_server.py
index 762abccecd7ba07ef4fbf53df53d32c2edfb7250..c3b9e238dc37a4f9482b48ea9aa7a250a9624edc 100644
--- a/chat_server.py
+++ b/chat_server.py
@@ -24,6 +24,7 @@ if __name__ == '__main__':
     clients_cache = dict()
 
     BROADCAST_PORT = 49154
+    #BROADCAST_PORT_LISTEN = 49154
 
     print("I'm alive")
     MSG = bytes("HI MAIN SERVER", 'utf-8')
@@ -31,15 +32,24 @@ if __name__ == '__main__':
     broadcast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
     broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+
+    # Create a separate socket for receiving broadcast messages
+    # receive_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    # receive_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+    # receive_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+
+    
     if os == "macOS":
         broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
         broadcast_socket.sendto(MSG, (broadcast_address, BROADCAST_PORT))
+        
+        # receive_socket.bind((broadcast_address, BROADCAST_PORT_LISTEN))
     else:
         broadcast_socket.sendto(MSG, (broadcast_address, BROADCAST_PORT))
     print("Successfully sent message")
 
     message, server = broadcast_socket.recvfrom(1024)
-    print("after receive")
+    print("test")
     match = re.search(r'\b([A-Za-z])\b$', message.decode('utf-8'))
     server_id = match.group(1)
     
diff --git a/server.py b/server.py
index 2bb98f99a0f597f6d532f2efce6100705dbdb585..51042d98254e4d55871701ab8d2c3297e64dc739 100644
--- a/server.py
+++ b/server.py
@@ -142,9 +142,9 @@ class Server(multiprocessing.Process):
     def send_heartbeat(self):
         while True:
             time.sleep(10)
-            for server_id in self.local_servers_cache.items():
+            for server_id, server_address in self.local_servers_cache.items():
                 if server_id != self.server_id:
-                    acknowledgment_received = self.send_heartbeat_to_server(self.server_address, server_heartbeat_tcp_listener_port)
+                    acknowledgment_received = self.send_heartbeat_to_server(server_address[0], server_heartbeat_tcp_listener_port)
                     #acknowledgment_received = "YES"
                     if acknowledgment_received:
                         print(f"Heartbeat acknowledgment received from {server_id}")
@@ -242,25 +242,41 @@ class Server(multiprocessing.Process):
                 self.local_servers_cache[new_server_id] = addr
 
                 print(self.server_id+": "+"Received server register broadcast message:", message)
-                self.register_server(addr, new_server_id)
 
+                #self.register_server(addr, new_server_id)
+
+                register_server_thread = threading.Thread(target=self.register_server(addr, new_server_id))
+                register_server_thread.start()
                 update_cache_thread = threading.Thread(target=self.updateCacheList)
                 if update_cache_thread.is_alive:
                     update_cache_thread.run()
                 else:
                     update_cache_thread.start()
 
+    # def register_server(self, addr, server_id):
+    #     BROADCAST_ADDRESS = self.get_broadcast_address()
+    #     message = 'Hi ' + addr[0] + ' this is your chat-group ID: ' + str(server_id)
+    #     server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    #     if self.os == "macOS":
+    #         server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
+    #         server_socket.connect((BROADCAST_ADDRESS, 49154))
+
+    #         print(self.server_port)
+    #     else:
+    #         server_socket.connect(('<broadcast>', self.server_port))
+            
+    #     server_socket.sendto(str.encode(message), addr)
+    #     server_socket.close()
+                    
     def register_server(self, addr, server_id):
-        BROADCAST_ADDRESS = self.get_broadcast_address()
         message = 'Hi ' + addr[0] + ' this is your chat-group ID: ' + str(server_id)
         server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-        if self.os == "macOS":
-            server_socket.connect((BROADCAST_ADDRESS, self.server_port))
-        else:
-            server_socket.connect((BROADCAST_ADDRESS, self.server_port))
-            
+        #server_socket.connect((self.server_address, self.server_port))
+        server_socket.connect((addr[0], addr[1]))
         server_socket.sendto(str.encode(message), addr)
+        print(server_socket)
         server_socket.close()
+
         
 
     def listen_for_clients(self):
@@ -382,8 +398,8 @@ class Server(multiprocessing.Process):
         broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
 
         if self.os == "macOS":
-            broadcast_socket.sendto(MSG, (BROADCAST_ADDRESS, PORT))
             broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
+            broadcast_socket.sendto(MSG, (BROADCAST_ADDRESS, PORT))
         else:
             broadcast_socket.sendto(MSG, (BROADCAST_ADDRESS, PORT))
         broadcast_socket.close()
@@ -403,6 +419,7 @@ class Server(multiprocessing.Process):
         listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 
         if self.os == "macOS":
+            print("listening for cache updates")
             listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
             listen_socket.bind((BROADCAST_ADDRESS, BROADCAST_PORT))
         else: