diff --git a/kclient.py b/kclient.py
index 36507079db3e3c9afd814c8d2c2555a77126e9ff..833815a6c9f445f71cd3e5004eccee6316c75a07 100644
--- a/kclient.py
+++ b/kclient.py
@@ -56,6 +56,7 @@ def sender():
         #print("send message to", broadcast_port)
         #checks for whitemarks
         if message.strip():
+            
             full_message = f"{message_id}: {nickname}: {message}".encode()
             client_socket.sendto(full_message, (broadcast_ip, broadcast_port))
             #print("message sended to", broadcast_port)
diff --git a/server.py b/server.py
index 8e23e62d8cd9238f48812e0500e5d9a63525ac3e..613bfbec4e9125b670b6c7525169937a7ee2002e 100644
--- a/server.py
+++ b/server.py
@@ -1,3 +1,7 @@
+##########unsicher, ob heartbeat funktioniert################
+###########deutsch englisch korrigieren###################
+################liste mit message ids auf 3-5 setzen########
+
 import socket
 import multiprocessing
 import uuid
@@ -82,7 +86,7 @@ def listen_client(shared_data):
 
     #global received_messages
     received_messages = set()
-    
+
     #save_last_messages = manager.dict()
     #message_queue = multiprocessing.Queue(maxsize=3)
     
@@ -196,7 +200,9 @@ def start_election(queue, shared_data):
             elif "LEADER" in message:
                 leader_uuid = message.split(": ")[1]
                 shared_data['current_leader'] = leader_uuid
+                #time.sleep(1)  # Delay to ensure all processes are aware of the leader
                 print(f"(leader) Leader elected: {shared_data['current_leader']}")
+                leader_election_done.set()  # Signal, dass die Leaderwahl abgeschlossen ist
                 return
 
         except multiprocessing.queues.Empty:
@@ -230,12 +236,17 @@ def start_election(queue, shared_data):
 # Heartbeat function
 def send_heartbeat(shared_data):
     """Sends heartbeat messages to keep the server active."""
+    leader_election_done.wait()  # Blockiert, bis die Leaderwahl abgeschlossen ist
+    print(f"Heartbeat function started. Leader: {shared_data['current_leader']}, Server ID: {shared_data['server_id']}")
     #only if you are the current leader
     if shared_data['current_leader'] == shared_data['server_id']:
-        time.sleep(30) #waiting for leader election #set to 20s
+        #time.sleep(10) #waiting for leader election #set to 20s
         while True:
-            broadcast_election(f"HEARTBEAT: {shared_data['server_id']}") #please change that to right neighbour after correct leader election
-            time.sleep(5)
+            try:
+                broadcast_election(f"HEARTBEAT: {shared_data['server_id']}") #please change that to right neighbour after correct leader election
+                time.sleep(5)
+            except socket.error as e:
+                print(f"Failed to send heartbeat: {e}")
 
 # Monitor heartbeats
 def monitor_heartbeats():
@@ -255,6 +266,7 @@ if __name__ == "__main__":
     multiprocessing.freeze_support()
 
     print(f"Script started with PID: {os.getpid()}")
+    leader_election_done = threading.Event()
 
     # Manager for shared data
     manager = Manager()
@@ -274,14 +286,13 @@ if __name__ == "__main__":
     #listener_election_process = multiprocessing.Process(target=listen_broadcast_election, args=(message_queue, shared_data))
     listener_client_process = multiprocessing.Process(target=listen_client, args=(shared_data,))
     election_process = multiprocessing.Process(target=start_election, args=(message_queue, shared_data))
+    # Start the listener for clients in a thread
+    listener_election_thread = threading.Thread(target=listen_broadcast_election, args=(message_queue, shared_data), daemon=True)
 
     # Heartbeat threads
     heartbeat_thread = threading.Thread(target=send_heartbeat, args=(shared_data,), daemon=True)
     heartbeat_monitor_thread = threading.Thread(target=monitor_heartbeats, daemon=True)
 
-    # Start the listener for clients in a thread
-    listener_election_thread = threading.Thread(target=listen_broadcast_election, args=(message_queue, shared_data), daemon=True)
-
     # Start processes and threads
     #listener_election_process.start()
     listener_client_process.start()