diff --git a/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java b/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java
index cc0ddf4..bfb2e9a 100644
--- a/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java
+++ b/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java
@@ -32,16 +32,16 @@
 	 * @param controller A string identifying the controller and (possibly) how to talk to it.
 	 * (We will have to develop a convention for this - most likely hostname:port)
 	 */
-	public void registerController(String controllerId) throws Exception;
+	public void registerController(String controllerId) throws RegistryException;
 	
 	/**
 	 * Get all controllers in the cluster
 	 * @return
 	 */
-	public Collection<String> getAllControllers() throws Exception;
+	public Collection<String> getAllControllers() throws RegistryException;
 	
 	
-	public String getControllerForSwitch(long dpid) throws Exception;
+	public String getControllerForSwitch(long dpid) throws RegistryException;
 	
 	public Collection<Long> getSwitchesControlledByController(String controllerId);
 }
diff --git a/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java b/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java
index bff588b..2e50670 100644
--- a/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java
+++ b/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java
@@ -25,12 +25,13 @@
 import com.netflix.curator.framework.CuratorFramework;
 import com.netflix.curator.framework.CuratorFrameworkFactory;
 import com.netflix.curator.framework.api.CuratorWatcher;
+import com.netflix.curator.framework.imps.CuratorFrameworkState;
 import com.netflix.curator.framework.recipes.cache.ChildData;
 import com.netflix.curator.framework.recipes.cache.PathChildrenCache;
 import com.netflix.curator.framework.recipes.cache.PathChildrenCache.StartMode;
 import com.netflix.curator.framework.recipes.leader.LeaderLatch;
 import com.netflix.curator.framework.recipes.leader.Participant;
-import com.netflix.curator.retry.ExponentialBackoffRetry;
+import com.netflix.curator.retry.RetryOneTime;
 
 public class MastershipManager implements IFloodlightModule, IMastershipService {
 
@@ -50,6 +51,8 @@
 	protected Map<String, LeaderLatch> switchLatches;
 	protected Map<String, MastershipCallback> switchCallbacks;
 	
+	protected boolean moduleEnabled = false;
+	
 	protected class ParamaterizedCuratorWatcher implements CuratorWatcher {
 		private String dpid;
 		private boolean isLeader = false;
@@ -111,6 +114,8 @@
 	@Override
 	public void acquireMastership(long dpid, MastershipCallback cb) throws Exception {
 		
+		if (!moduleEnabled) return;
+		
 		if (mastershipId == null){
 			throw new RuntimeException("Must set mastershipId before calling aquireMastership");
 		}
@@ -142,6 +147,8 @@
 
 	@Override
 	public void releaseMastership(long dpid) {
+		if (!moduleEnabled) return;
+		
 		String dpidStr = HexString.toHexString(dpid);
 		
 		LeaderLatch latch = switchLatches.get(dpidStr);
@@ -163,6 +170,8 @@
 
 	@Override
 	public boolean amMaster(long dpid) {
+		if (!moduleEnabled) return false;
+		
 		LeaderLatch latch = switchLatches.get(HexString.toHexString(dpid));
 		
 		if (latch == null) {
@@ -189,7 +198,9 @@
 	}
 	
 	@Override
-	public Collection<String> getAllControllers() throws Exception {
+	public Collection<String> getAllControllers() throws RegistryException {
+		if (!moduleEnabled) return null;
+		
 		log.debug("Getting all controllers");
 		
 		List<String> controllers = new ArrayList<String>();
@@ -199,7 +210,7 @@
 			try {
 				d = new String(data.getData(), "UTF-8");
 			} catch (UnsupportedEncodingException e) {
-				throw new Exception("Error encoding string", e);
+				throw new RegistryException("Error encoding string", e);
 			}
 
 			controllers.add(d);
@@ -208,29 +219,32 @@
 	}
 
 	@Override
-	public void registerController(String id) throws Exception {
+	public void registerController(String id) throws RegistryException {
+		if (!moduleEnabled) return;
+		
 		byte bytes[] = null;
 		try {
 			bytes = id.getBytes("UTF-8");
 		} catch (UnsupportedEncodingException e1) {
-			throw new Exception("Error encoding string", e1);
+			throw new RegistryException("Error encoding string", e1);
 		}
 		
 		String path = controllerPath + "/" + id;
 		
 		log.info("Registering controller with id {}", id);
 		
-		//Create ephemeral node with my id
+		//Create ephemeral node in controller registry
 		try {
 			client.create().withProtection().withMode(CreateMode.EPHEMERAL)
 					.forPath(path, bytes);
 		} catch (Exception e) {
-			throw new Exception("Error contacting the Zookeeper service", e);
+			throw new RegistryException("Error contacting the Zookeeper service", e);
 		}
 	}
 	
 	@Override
-	public String getControllerForSwitch(long dpid) throws Exception {
+	public String getControllerForSwitch(long dpid) throws RegistryException {
+		if (!moduleEnabled) return null;
 		// TODO Work out how we should store this controller/switch data.
 		// The leader latch might be a index to the /controllers collections
 		// which holds more info on the controller (how to talk to it for example).
@@ -248,7 +262,7 @@
 		try {
 			leader = latch.getLeader();
 		} catch (Exception e) {
-			throw new Exception("Error contacting the Zookeeper service", e);
+			throw new RegistryException("Error contacting the Zookeeper service", e);
 		}
 		
 		return leader.getId();
@@ -288,7 +302,19 @@
 	
 	@Override
 	public void init (FloodlightModuleContext context) throws FloodlightModuleException {
-		/*
+		
+		//Read config to see if we should try and connect to zookeeper
+		Map<String, String> configOptions = context.getConfigParams(this);
+		String enableZookeeper = configOptions.get("enableZookeeper");
+		if (enableZookeeper != null) {
+			log.info("Enabling Mastership module - requires Zookeeper connection");
+			moduleEnabled = true;
+		}
+		else {
+			log.info("Mastership module is disabled");
+			return;
+		}
+		
 		try {
 			String localHostname = java.net.InetAddress.getLocalHost().getHostName();
 			mastershipId = localHostname;
@@ -301,7 +327,8 @@
 		switchLatches = new HashMap<String, LeaderLatch>();
 		switchCallbacks = new HashMap<String, MastershipCallback>();
 		
-		RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
+		//RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
+		RetryPolicy retryPolicy = new RetryOneTime(0);
 		client = CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
 		
 		client.start();
@@ -312,13 +339,10 @@
 		
 		try {
 			controllerCache.start(StartMode.BUILD_INITIAL_CACHE);
-			
-			
 		} catch (Exception e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
-	*/
 	}
 	
 	@Override
diff --git a/src/main/java/net/floodlightcontroller/mastership/RegistryException.java b/src/main/java/net/floodlightcontroller/mastership/RegistryException.java
index 134117c..fcc14a6 100644
--- a/src/main/java/net/floodlightcontroller/mastership/RegistryException.java
+++ b/src/main/java/net/floodlightcontroller/mastership/RegistryException.java
@@ -3,12 +3,13 @@
 public class RegistryException extends Exception {
 
 	private static final long serialVersionUID = -8276300722010217913L;
-
+	
 	/*
 	public RegistryException() {
 		// TODO Auto-generated constructor stub
 	}
 
+	
 	public RegistryException(String message) {
 		super(message);
 		// TODO Auto-generated constructor stub
@@ -18,17 +19,10 @@
 		super(cause);
 		// TODO Auto-generated constructor stub
 	}
-
+	*/
+	
 	public RegistryException(String message, Throwable cause) {
 		super(message, cause);
-		// TODO Auto-generated constructor stub
 	}
 
-	public RegistryException(String message, Throwable cause,
-			boolean enableSuppression, boolean writableStackTrace) {
-		super(message, cause, enableSuppression, writableStackTrace);
-		// TODO Auto-generated constructor stub
-	}
-	*/
-
 }
