diff --git a/server.py b/server.py
index 65a3623c04889c1fad120e5aee6eeea48935ab38..98424e132f08120991f02fbeefc38b7af0af5e64 100644
--- a/server.py
+++ b/server.py
@@ -49,6 +49,7 @@ class Server(multiprocessing.Process):
         self.ring_socket = ring_socket
         if self.os == "macOS":
             self.ring_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
+        self.ring_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
         self.ring_socket.bind((self.server_address, leader_election_port))
         self.server_uuid = self.generate_server_uuid()
         print("My UUID: ", self.server_uuid)
@@ -163,7 +164,6 @@ class Server(multiprocessing.Process):
             
     def send_heartbeat(self):
         print("Heartbeat Sending started")
-        self.local_servers_cache = Server.local_servers_cache
         print("Local Server Cache:", self.local_servers_cache)
         while True:
             time.sleep(10)
@@ -550,15 +550,20 @@ class Server(multiprocessing.Process):
             # Send the election message to the neighbor's address.
             self.ring_socket.sendto(json.dumps(election_message).encode(), (neighbor_address[0], leader_election_port))
             print(election_message, "...sent to: ", neighbor_address, "...on port: ", leader_election_port)
-        elif isLeader == True and uuid != self.server_uuid: #Agreeing to someone else as leader
-            election_message = {"id": uuid, "isLeader": True}
+        elif isLeader == False and uuid < self.server_uuid: #Suggesting itself to leader
+            election_message = {"id": self.server_uuid, "isLeader": True}
             # Send the election message to the neighbor's address.
             self.ring_socket.sendto(json.dumps(election_message).encode(), (neighbor_address[0], leader_election_port))
+            print(election_message, "...sent to: ", neighbor_address, "...on port: ", leader_election_port)
         elif isLeader == False and uuid == self.server_uuid: #Suggesting itself to leader
             election_message = {"id": self.server_uuid, "isLeader": True}
             # Send the election message to the neighbor's address.
             self.ring_socket.sendto(json.dumps(election_message).encode(), (neighbor_address[0], leader_election_port))
             print(election_message, "...sent to: ", neighbor_address, "...on port: ", leader_election_port)
+        elif isLeader == True and uuid != self.server_uuid: #Agreeing to someone else as leader
+            election_message = {"id": uuid, "isLeader": True}
+            # Send the election message to the neighbor's address.
+            self.ring_socket.sendto(json.dumps(election_message).encode(), (neighbor_address[0], leader_election_port))
         else: #Sending pid 
             election_message = {"id": uuid, "isLeader": False}
             # Send the election message to the neighbor's address.
@@ -613,7 +618,6 @@ class Server(multiprocessing.Process):
             data, address = self.ring_socket.recvfrom(4096)
             #Reset last heartbeat timestamp
             self.last_heartbeat_timestamp = None
-            print("first yes")
             if data:
                 election_message = json.loads(data.decode())
                 received_id = election_message.get('id')