diff --git a/core/net/src/test/java/org/onlab/onos/cluster/impl/MastershipManagerTest.java b/core/net/src/test/java/org/onlab/onos/cluster/impl/MastershipManagerTest.java
index c5c152c..96b8ae0 100644
--- a/core/net/src/test/java/org/onlab/onos/cluster/impl/MastershipManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/cluster/impl/MastershipManagerTest.java
@@ -68,15 +68,15 @@
 
     @Test
     public void relinquishMastership() {
-        //no backups - should turn to standby and no master for device
+        //no backups - should just turn to NONE for device.
         mgr.setRole(NID_LOCAL, DEV_MASTER, MASTER);
         assertEquals("wrong role:", MASTER, mgr.getLocalRole(DEV_MASTER));
         mgr.relinquishMastership(DEV_MASTER);
         assertNull("wrong master:", mgr.getMasterFor(DEV_OTHER));
-        assertEquals("wrong role:", STANDBY, mgr.getLocalRole(DEV_MASTER));
+        assertEquals("wrong role:", NONE, mgr.getLocalRole(DEV_MASTER));
 
         //not master, nothing should happen
-        mgr.setRole(NID_LOCAL, DEV_OTHER, STANDBY);
+        mgr.setRole(NID_LOCAL, DEV_OTHER, NONE);
         mgr.relinquishMastership(DEV_OTHER);
         assertNull("wrong role:", mgr.getMasterFor(DEV_OTHER));
 
diff --git a/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleMastershipStore.java b/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleMastershipStore.java
index 709c95a..a0ac4c7 100644
--- a/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleMastershipStore.java
+++ b/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleMastershipStore.java
@@ -226,12 +226,34 @@
                 break;
             }
         }
+        backups.remove(backup);
         return backup;
     }
 
     @Override
     public MastershipEvent relinquishRole(NodeId nodeId, DeviceId deviceId) {
-        return setStandby(nodeId, deviceId);
+        MastershipRole role = getRole(nodeId, deviceId);
+        synchronized (this) {
+            switch (role) {
+                case MASTER:
+                    NodeId backup = reelect(nodeId);
+                    backups.remove(nodeId);
+                    if (backup == null) {
+                        masterMap.remove(deviceId);
+                    } else {
+                        masterMap.put(deviceId, backup);
+                        termMap.get(deviceId).incrementAndGet();
+                        return new MastershipEvent(MASTER_CHANGED, deviceId,
+                                new RoleInfo(backup, Lists.newLinkedList(backups)));
+                    }
+                case STANDBY:
+                    backups.remove(nodeId);
+                case NONE:
+                default:
+                    log.warn("unknown Mastership Role {}", role);
+            }
+        }
+        return null;
     }
 
 }
