diff --git a/src/main/java/net/onrc/onos/registry/controller/IControllerRegistryService.java b/src/main/java/net/onrc/onos/registry/controller/IControllerRegistryService.java
index 576eed4..eb27cf9 100755
--- a/src/main/java/net/onrc/onos/registry/controller/IControllerRegistryService.java
+++ b/src/main/java/net/onrc/onos/registry/controller/IControllerRegistryService.java
@@ -70,6 +70,15 @@
 	 * @return 
 	 */
 	public boolean hasControl(long dpid);
+
+	/**
+	 * Check whether this instance is the leader for the cluster.
+	 * This call doesn't block.
+	 *
+	 * @return true if the instance is the leader for the cluster,
+	 * otherwise false.
+	 */
+	public boolean isClusterLeader();
 	
 	/**
 	 * Get the unique ID used to identify this controller in the cluster
diff --git a/src/main/java/net/onrc/onos/registry/controller/StandaloneRegistry.java b/src/main/java/net/onrc/onos/registry/controller/StandaloneRegistry.java
index 69e7b3e..422949a 100755
--- a/src/main/java/net/onrc/onos/registry/controller/StandaloneRegistry.java
+++ b/src/main/java/net/onrc/onos/registry/controller/StandaloneRegistry.java
@@ -69,6 +69,11 @@
 	}
 
 	@Override
+	public boolean isClusterLeader() {
+	    return true;
+	}
+
+	@Override
 	public String getControllerId() {
 		return controllerId;
 	}
diff --git a/src/main/java/net/onrc/onos/registry/controller/ZookeeperRegistry.java b/src/main/java/net/onrc/onos/registry/controller/ZookeeperRegistry.java
index 8706e85..b496321 100755
--- a/src/main/java/net/onrc/onos/registry/controller/ZookeeperRegistry.java
+++ b/src/main/java/net/onrc/onos/registry/controller/ZookeeperRegistry.java
@@ -35,6 +35,7 @@
 import com.netflix.curator.framework.recipes.leader.LeaderLatch;
 import com.netflix.curator.framework.recipes.leader.LeaderLatchEvent;
 import com.netflix.curator.framework.recipes.leader.LeaderLatchListener;
+import com.netflix.curator.framework.recipes.leader.Participant;
 import com.netflix.curator.retry.ExponentialBackoffRetry;
 import com.netflix.curator.retry.RetryOneTime;
 import com.netflix.curator.x.discovery.ServiceCache;
@@ -62,6 +63,7 @@
 	
 	private final String namespace = "onos";
 	private final String switchLatchesPath = "/switches";
+	private final String CLUSTER_LEADER_PATH = "/cluster/leader";
 
 	private final String SERVICES_PATH = "/"; //i.e. the root of our namespace
 	private final String CONTROLLER_SERVICE_NAME = "controllers";
@@ -72,7 +74,11 @@
 
 	protected ConcurrentHashMap<String, SwitchLeadershipData> switches;
 	protected Map<String, PathChildrenCache> switchPathCaches;
-	
+
+	protected LeaderLatch clusterLeaderLatch;
+	protected ClusterLeaderListener clusterLeaderListener;
+	private static final long CLUSTER_LEADER_ELECTION_RETRY_MS = 100;
+
 	private final String ID_COUNTER_PATH = "/flowidcounter";
 	private final Long ID_BLOCK_SIZE = 0x100000000L;
 	protected DistributedAtomicLong distributedIdCounter;
@@ -95,7 +101,7 @@
 		@Override
 		public void leaderLatchEvent(CuratorFramework arg0,
 				LeaderLatchEvent arg1) {
-			log.debug("Leadership changed for {}, now {}",
+			log.debug("Switch leadership changed for {}, now {}",
 					dpid, latch.hasLeadership());
 			
 			//Check that the leadership request is still active - the client
@@ -161,6 +167,26 @@
 			
 		}
 	};
+
+	protected class ClusterLeaderListener implements LeaderLatchListener {
+		LeaderLatch latch;
+
+		public ClusterLeaderListener(LeaderLatch latch) {
+			this.latch = latch;
+		}
+
+		@Override
+		public void leaderLatchEvent(CuratorFramework arg0,
+				LeaderLatchEvent arg1) {
+			log.debug("Cluster leadership changed, now {}",
+					latch.hasLeadership());
+			//
+			// NOTE: If we need to support callbacks when the
+			// leadership changes, those should be called here.
+			//
+		}
+	}
+
 	/**
 	 * Listens for changes to the switch znodes in Zookeeper. This maintains
 	 * the second level of PathChildrenCaches that hold the controllers 
@@ -258,6 +284,11 @@
 	}
 
 	@Override
+	public boolean isClusterLeader() {
+	    return clusterLeaderLatch.hasLeadership();
+	}
+
+	@Override
 	public String getControllerId() {
 		return controllerId;
 	}
@@ -500,6 +531,37 @@
 	
 	@Override
 	public void startUp (FloodlightModuleContext context) {
+		//
+		// Cluster Leader election setup.
+		// NOTE: We have to do it here, because during the init stage
+		// we don't know the Controller ID.
+		//
+		if (controllerId == null) {
+		    log.error("Error on startup: unknown ControllerId");
+		}
+		clusterLeaderLatch = new LeaderLatch(client,
+						     CLUSTER_LEADER_PATH,
+						     controllerId);
+		clusterLeaderListener = new ClusterLeaderListener(clusterLeaderLatch);
+		clusterLeaderLatch.addListener(clusterLeaderListener);
+		try {
+			clusterLeaderLatch.start();
+		} catch (Exception e) {
+		    log.error("Error on startup starting the cluster leader election: {}", e.getMessage());
+		}
+
+		// Keep trying until there is a cluster leader
+		do {
+			try {
+				Participant leader = clusterLeaderLatch.getLeader();
+				if (! leader.getId().isEmpty())
+					break;
+				Thread.sleep(CLUSTER_LEADER_ELECTION_RETRY_MS);
+			} catch (Exception e) {
+				log.error("Error on startup waiting for cluster leader election: {}", e.getMessage());
+			}
+		} while (true);
+
 		restApi.addRestletRoutable(new RegistryWebRoutable());
 	}
 }
