diff --git a/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java b/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java
index fdcb5c0..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);
+	public void registerController(String controllerId) throws RegistryException;
 	
 	/**
 	 * Get all controllers in the cluster
 	 * @return
 	 */
-	public Collection<String> getAllControllers();
+	public Collection<String> getAllControllers() throws RegistryException;
 	
 	
-	public String getControllerForSwitch(long dpid);
+	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 f4230ae..5f8a156 100644
--- a/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java
+++ b/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java
@@ -153,11 +153,12 @@
 		try {
 			latch.close();
 		} catch (IOException e) {
-			
+			//I think it's OK not to do anything here. Either the node got deleted correctly,
+			//or the connection went down and the node got deleted.
+		} finally {
+			switchLatches.remove(dpidStr);
+			switchCallbacks.remove(dpidStr);
 		}
-		
-		switchLatches.remove(dpidStr);
-		switchCallbacks.remove(dpidStr);
 	}
 
 	@Override
@@ -188,9 +189,9 @@
 	}
 	
 	@Override
-	public Collection<String> getAllControllers() {
-		// TODO Auto-generated method stub
+	public Collection<String> getAllControllers() throws RegistryException {
 		log.debug("Getting all controllers");
+		
 		List<String> controllers = new ArrayList<String>();
 		for (ChildData data : controllerCache.getCurrentData()){
 
@@ -198,8 +199,7 @@
 			try {
 				d = new String(data.getData(), "UTF-8");
 			} catch (UnsupportedEncodingException e) {
-				// TODO unlikely(throw exception)
-				e.printStackTrace();
+				throw new RegistryException("Error encoding string", e);
 			}
 
 			controllers.add(d);
@@ -208,14 +208,12 @@
 	}
 
 	@Override
-	public void registerController(String id) {
-		// TODO Auto-generated method stub
+	public void registerController(String id) throws RegistryException {
 		byte bytes[] = null;
 		try {
 			bytes = id.getBytes("UTF-8");
 		} catch (UnsupportedEncodingException e1) {
-			// TODO Throw some exception (very unlikely this will happen)
-			e1.printStackTrace();
+			throw new RegistryException("Error encoding string", e1);
 		}
 		
 		String path = controllerPath + "/" + id;
@@ -227,14 +225,12 @@
 			client.create().withProtection().withMode(CreateMode.EPHEMERAL)
 					.forPath(path, bytes);
 		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			// TODO Make an exception that will be thrown here
-			e.printStackTrace();
+			throw new RegistryException("Error contacting the Zookeeper service", e);
 		}
 	}
 	
 	@Override
-	public String getControllerForSwitch(long dpid) {
+	public String getControllerForSwitch(long dpid) throws RegistryException {
 		// 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).
@@ -252,8 +248,7 @@
 		try {
 			leader = latch.getLeader();
 		} catch (Exception e) {
-			// TODO Zookeeper issue, throw exception
-			e.printStackTrace();
+			throw new RegistryException("Error contacting the Zookeeper service", e);
 		}
 		
 		return leader.getId();
@@ -293,7 +288,7 @@
 	
 	@Override
 	public void init (FloodlightModuleContext context) throws FloodlightModuleException {
-
+		/*
 		try {
 			String localHostname = java.net.InetAddress.getLocalHost().getHostName();
 			mastershipId = localHostname;
@@ -323,7 +318,7 @@
 			// 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
new file mode 100644
index 0000000..ebf564a
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/mastership/RegistryException.java
@@ -0,0 +1,32 @@
+package net.floodlightcontroller.mastership;
+
+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
+	}
+
+	public RegistryException(Throwable cause) {
+		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
+	}
+
+}
