diff --git a/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java b/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
index 347bf5b..e84e0f6 100644
--- a/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
+++ b/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
@@ -11,6 +11,7 @@
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.counter.ICounterStoreService;
+import net.floodlightcontroller.mastership.IMastershipService;
 import net.floodlightcontroller.perfmon.IPktInProcessingTimeService;
 import net.floodlightcontroller.restserver.IRestApiService;
 import net.floodlightcontroller.storage.IStorageSourceService;
@@ -49,6 +50,7 @@
         dependencies.add(IRestApiService.class);
         dependencies.add(ICounterStoreService.class);
         dependencies.add(IThreadPoolService.class);
+        dependencies.add(IMastershipService.class);
         return dependencies;
     }
 
@@ -64,6 +66,7 @@
            context.getServiceImpl(IRestApiService.class));
        controller.setThreadPoolService(
            context.getServiceImpl(IThreadPoolService.class));
+       controller.setMastershipService(context.getServiceImpl(IMastershipService.class));
        controller.init(context.getConfigParams(this));
     }
 
diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index a5ee71a..d9cc5e1 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -65,6 +65,7 @@
 import net.floodlightcontroller.core.util.ListenerDispatcher;
 import net.floodlightcontroller.core.web.CoreWebRoutable;
 import net.floodlightcontroller.counter.ICounterStoreService;
+import net.floodlightcontroller.mastership.IMastershipService;
 import net.floodlightcontroller.packet.Ethernet;
 import net.floodlightcontroller.perfmon.IPktInProcessingTimeService;
 import net.floodlightcontroller.restserver.IRestApiService;
@@ -134,6 +135,7 @@
 import org.slf4j.LoggerFactory;
 
 
+
 /**
  * The main controller class.  Handles all setup and network listeners
  */
@@ -187,6 +189,7 @@
     protected IStorageSourceService storageSource;
     protected IPktInProcessingTimeService pktinProcTime;
     protected IThreadPoolService threadPool;
+    protected IMastershipService masterHelper;
     
     // Configuration options
     protected int openFlowPort = 6633;
@@ -389,6 +392,10 @@
         this.threadPool = tp;
     }
 
+	public void setMastershipService(IMastershipService serviceImpl) {
+		this.masterHelper = serviceImpl;		
+	}
+	
     @Override
     public Role getRole() {
         synchronized(roleChanger) {
@@ -761,7 +768,7 @@
                     else {
                         // Role supported not enabled on controller (for now)
                         // automatically promote switch to active state. 
-                        log.debug("This controller's role is null, " + 
+                        log.debug("This controller's role is {}, " + 
                                 "not sending role request msg to {}",
                                 role, sw);
                         // Need to clear FlowMods before we add the switch
diff --git a/src/main/java/net/floodlightcontroller/mastership/IMastershipHelper.java b/src/main/java/net/floodlightcontroller/mastership/IMastershipHelper.java
new file mode 100644
index 0000000..b4becfa
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/mastership/IMastershipHelper.java
@@ -0,0 +1,27 @@
+package net.floodlightcontroller.mastership;
+
+public interface IMastershipHelper {
+	
+	// Callback for all mastership changes. 
+	// Change callback is called when mastership is acquired or released
+	public interface MastershipCallback {
+		public void changeCallback(long dpid);
+	}
+	
+	// Set/get mastership identifier. This is used to set the unique identifier of the controller that is asking for mastership.
+	// It needs to be set first before any mastership call can be made
+	public void setMastershipId (String id);
+	public String getMastershipId ();
+	
+	// Request mastership for a switch. Our request for mastership remains in a queue. If we win mastership, the callback
+	// is called. This call is non-blocking and can be called from the packet processing context as well.
+	public void requestMastership(long dpid, MastershipCallback cb);
+	
+	// Release mastership for a switch. If we are the master, then the mastership will be released and given to the next
+	// controller who had requested mastership. If we are not the master our request for mastership will be 
+	// removed from the queue.
+	public void releaseMastership(long dpid);
+	
+	// Check if I am the master of a switch and return true if I am the master. 
+	public boolean amMaster(long dpid);	
+}
diff --git a/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java b/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java
new file mode 100644
index 0000000..322210e
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/mastership/IMastershipService.java
@@ -0,0 +1,21 @@
+package net.floodlightcontroller.mastership;
+
+import net.floodlightcontroller.core.module.IFloodlightService;
+
+public interface IMastershipService extends IFloodlightService {
+	
+	// Acquire mastership for a switch. 
+	public void acquireMastership(long dpid, boolean blockOk);
+	
+	// Release mastership for a switch
+	public void releaseMastership(long dpid);
+	
+	// Check if I am the master of a switch. This is a nonblocking call that checks if the caller is a 
+	public boolean amMaster(long dpid);
+	
+	// Set/Get mastership identifier.
+	// This is typically a unique identifier of the controller that does not change across restarts
+	public void setMastershipId (String id);
+	public String getMastershipId ();
+	
+}
diff --git a/src/main/java/net/floodlightcontroller/mastership/MastershipHelper.java b/src/main/java/net/floodlightcontroller/mastership/MastershipHelper.java
new file mode 100644
index 0000000..fdac8ca
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/mastership/MastershipHelper.java
@@ -0,0 +1,35 @@
+package net.floodlightcontroller.mastership;
+
+public class MastershipHelper implements IMastershipHelper {
+
+	@Override
+	public void setMastershipId(String id) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public String getMastershipId() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public void requestMastership(long dpid, MastershipCallback cb) {
+		// TODO Auto-generated method stub
+		return;
+	}
+
+	@Override
+	public void releaseMastership(long dpid) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public boolean amMaster(long dpid) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+}
diff --git a/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java b/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java
new file mode 100644
index 0000000..2470b12
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/mastership/MastershipManager.java
@@ -0,0 +1,84 @@
+package net.floodlightcontroller.mastership;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.floodlightcontroller.core.module.FloodlightModuleContext;
+import net.floodlightcontroller.core.module.FloodlightModuleException;
+import net.floodlightcontroller.core.module.IFloodlightModule;
+import net.floodlightcontroller.core.module.IFloodlightService;
+import net.floodlightcontroller.mastership.IMastershipService;
+
+public class MastershipManager implements IFloodlightModule, IMastershipService {
+
+	protected static Logger log = LoggerFactory.getLogger(MastershipManager.class);
+	protected String mastershipId;
+	
+	@Override
+	public Collection<Class<? extends IFloodlightService>> getModuleServices() {
+		Collection<Class<? extends IFloodlightService>> l = new ArrayList<Class<? extends IFloodlightService>>();
+		l.add(IMastershipService.class);
+		return l;
+	}
+	
+	@Override
+	public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
+		Map<Class<? extends IFloodlightService>, IFloodlightService> m = 
+				new HashMap<Class<? extends IFloodlightService>, IFloodlightService>();
+		m.put(IMastershipService.class,  this);
+		return m;
+	}
+	
+	@Override
+	public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
+		// no module dependencies
+		return null;
+	}
+	
+	@Override
+	public void init (FloodlightModuleContext context) throws FloodlightModuleException {
+		//TODO
+		return;
+	}
+	
+	@Override
+	public void startUp (FloodlightModuleContext context) {
+		//TODO
+		return;
+	}
+
+	@Override
+	public void acquireMastership(long dpid, boolean blockOk) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void releaseMastership(long dpid) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public boolean amMaster(long dpid) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
+	public void setMastershipId(String id) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public String getMastershipId() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}
diff --git a/src/main/java/net/floodlightcontroller/mastership/MastershipRouteResource.java b/src/main/java/net/floodlightcontroller/mastership/MastershipRouteResource.java
new file mode 100644
index 0000000..f75c518
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/mastership/MastershipRouteResource.java
@@ -0,0 +1,32 @@
+package net.floodlightcontroller.mastership;
+
+import org.restlet.resource.ServerResource;
+import org.restlet.resource.Get;
+import org.restlet.resource.Post;
+import org.restlet.resource.Delete;
+
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
+
+public class MastershipRouteResource extends ServerResource {
+
+	protected static Logger log = LoggerFactory.getLogger(MastershipRouteResource.class);
+
+	@Get
+	public String get(String fmJson) {
+		// TODO
+		return null;
+	}
+	
+	@Post
+	public String store (String fmJson) {
+		//TODO
+		return null;
+	}
+	
+	@Delete
+	public String delete (String fmJson) {
+		//TODO
+		return null;
+	}
+}
diff --git a/src/main/java/net/floodlightcontroller/mastership/MastershipWebRoutable.java b/src/main/java/net/floodlightcontroller/mastership/MastershipWebRoutable.java
new file mode 100644
index 0000000..56d5d66
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/mastership/MastershipWebRoutable.java
@@ -0,0 +1,23 @@
+package net.floodlightcontroller.mastership;
+
+import org.restlet.Context;
+import org.restlet.Restlet;
+import org.restlet.routing.Router;
+
+import net.floodlightcontroller.restserver.RestletRoutable;
+
+public class MastershipWebRoutable implements RestletRoutable {
+
+	@Override
+	public Restlet getRestlet(Context context) {
+		Router router = new Router(context);
+		router.attach("/json", MastershipRouteResource.class);
+		return router;
+	}
+
+	@Override
+	public String basePath() {
+		return "/wm/mastership";
+	}
+
+}
