diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
index 66a7b55e912c3b5c734eac8104cd19d05ef5d3c1..b171312cacc4f54be88bd3dc9d906629f331e984 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
@@ -101,7 +101,7 @@ public class OFSwitchHandshakeHandler implements IOFConnectionListener {
 	private final OFFeaturesReply featuresReply;
 	private final Timer timer;
 	
-	private volatile boolean visitedMaster = false;
+	private volatile OFControllerRole initialRole = null;
 
 	private final ArrayList<OFPortStatus> pendingPortStatusMsg;
 
@@ -1234,8 +1234,8 @@ public class OFSwitchHandshakeHandler implements IOFConnectionListener {
 			if (OFSwitchManager.clearTablesOnEachTransitionToMaster) {
 				log.info("Clearing flow tables of {} on recent transition to MASTER.", sw.getId().toString());
 				clearAllTables();
-			} else if (OFSwitchManager.clearTablesOnInitialConnectAsMaster && !visitedMaster) {
-				visitedMaster = true;
+			} else if (OFSwitchManager.clearTablesOnInitialConnectAsMaster && initialRole == null) { /* don't do it if we were slave first */
+				initialRole = OFControllerRole.ROLE_MASTER;
 				log.info("Clearing flow tables of {} on initial role as MASTER.", sw.getId().toString());
 				clearAllTables();
 			}
@@ -1367,6 +1367,9 @@ public class OFSwitchHandshakeHandler implements IOFConnectionListener {
 		@Override
 		void enterState() {
 			setSwitchStatus(SwitchStatus.SLAVE);
+			if (initialRole == null) {
+				initialRole = OFControllerRole.ROLE_SLAVE;
+			}
 		}
 
 		@Override