diff --git a/client.py b/client.py
index 0ffa0a5e0e33cbb71defaa7107d17f45bc72b04d..5421f9446f17da66a4c782f7749249a78be43663 100644
--- a/client.py
+++ b/client.py
@@ -101,4 +101,4 @@ class Client(multiprocessing.Process):
             connection, addr = client_receive_message_socket.accept()
             message = connection.recv(1024)
             print(f"New server: {message.decode('utf-8')}")
-            self.registered_server = message.decode('utf-8')
\ No newline at end of file
+            self.registered_server_address = message.decode('utf-8')
diff --git a/server.py b/server.py
index f610113068de975a3b4ba9d3845d858826cde111..d288e3ab16526b07e8024caa2480f90f826d3c99 100644
--- a/server.py
+++ b/server.py
@@ -139,21 +139,27 @@ class Server(multiprocessing.Process):
             
             heartbeat_send_thread = threading.Thread(target=self.send_heartbeat)
             heartbeat_send_thread.start()
-
+        
         else:
             self.cache_update_listener_thread = threading.Thread(target=self.listen_for_cache_update)
-            self.client_message_listener_thread = threading.Thread(target=self.listen_for_client_messages)
             self.heartbeat_receive_thread = threading.Thread(target=self.listen_for_heartbeats)
             self.heartbeat_timeout_thread = threading.Thread(target=self.check_heartbeat_timeout)
             self.leader_election_thread = threading.Thread(target=self.leader_election)
 
             self.cache_update_listener_thread.start()
-            self.client_message_listener_thread.start()
             self.heartbeat_receive_thread.start()
             self.heartbeat_timeout_thread.start()
             self.leader_election_thread.start()
 
-            self.is_admin_of_groupchat = True
+            self.group_server_threads()
+    
+    def start_listen_client_message_thread(self):
+
+        self.client_message_listener_thread = threading.Thread(target=self.listen_for_client_messages)
+
+        self.client_message_listener_thread.start()
+
+        self.is_admin_of_groupchat = True
     
     def get_broadcast_address(self):
         IP = self.server_address
@@ -252,6 +258,10 @@ class Server(multiprocessing.Process):
         update_cache_thread2.start()
         update_group_server_of_client_thread.start()
 
+        # if server is not already a groupchat server start threads for groupchat tasks
+        if self.is_admin_of_groupchat == False:
+            self.start_listen_client_message_thread()
+
     # find out which clients need to be informed about their groupchat server change
     def update_group_server_of_client(self, reassigned_groups):
 
@@ -547,7 +557,7 @@ class Server(multiprocessing.Process):
         server_socket.bind((self.server_address, PORT))
         server_socket.listen()
 
-        print(self.server_id+": "+"Group-chat server is listening for client messages at port: ", self.server_port)
+        print(self.server_id+": "+"Group-chat server is listening for client messages at port: ", PORT)
 
         while True:
             connection, addr = server_socket.accept()
@@ -723,7 +733,11 @@ class Server(multiprocessing.Process):
     def handle_leader_tasks(self):
         # Perform leader-specific tasks here
         print(self.server_address, " is now the leader.")
+        old_server_id = self.server_id
         self.server_id = "MAIN"
+
+        # check if new MAIN server was leader of any groupchats and reassign these to serverID MAIN
+        self.reassign_chat_groups(old_server_id)
         self.stop_threads()
         self.run()