diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
index e70b43c36b74d4ff62b9ecf156eb86413f10cbd4..d0e0f69118bce5d0fd3f1335f2fb8324969b1069 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
@@ -43,6 +43,8 @@ import org.projectfloodlight.openflow.protocol.OFFlowModFailedCode;
 import org.projectfloodlight.openflow.protocol.OFFlowRemoved;
 import org.projectfloodlight.openflow.protocol.OFGetConfigReply;
 import org.projectfloodlight.openflow.protocol.OFGetConfigRequest;
+import org.projectfloodlight.openflow.protocol.OFGroupDelete;
+import org.projectfloodlight.openflow.protocol.OFGroupType;
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.protocol.OFNiciraControllerRole;
 import org.projectfloodlight.openflow.protocol.OFNiciraControllerRoleReply;
@@ -64,6 +66,7 @@ import org.projectfloodlight.openflow.protocol.errormsg.OFBadRequestErrorMsg;
 import org.projectfloodlight.openflow.protocol.errormsg.OFFlowModFailedErrorMsg;
 import org.projectfloodlight.openflow.types.DatapathId;
 import org.projectfloodlight.openflow.types.OFAuxId;
+import org.projectfloodlight.openflow.types.OFGroup;
 import org.projectfloodlight.openflow.types.OFPort;
 import org.projectfloodlight.openflow.types.TableId;
 import org.projectfloodlight.openflow.types.U64;
@@ -440,11 +443,33 @@ public class OFSwitchHandshakeHandler implements IOFConnectionListener {
 			OFFlowDelete deleteFlows = this.factory.buildFlowDelete()
 					.build();
 			this.sw.write(deleteFlows);
-		} else { /* All other OFVersions support multiple tables. */
+		} else { /* All other OFVersions support multiple tables and groups. */
 			OFFlowDelete deleteFlows = this.factory.buildFlowDelete()
 					.setTableId(TableId.ALL)
 					.build();
 			this.sw.write(deleteFlows);
+			
+			/*
+			 * Clear all groups.
+			 * We have to do this for all types manually as of Loxi 0.9.0.
+			 */
+			OFGroupDelete delgroup = this.sw.getOFFactory().buildGroupDelete()
+				.setGroup(OFGroup.ALL)
+				.setGroupType(OFGroupType.ALL)
+				.build();
+			this.sw.write(delgroup);
+			delgroup.createBuilder()
+				.setGroupType(OFGroupType.FF)
+				.build();
+			this.sw.write(delgroup);
+			delgroup.createBuilder()
+				.setGroupType(OFGroupType.INDIRECT)
+				.build();
+			this.sw.write(delgroup);
+			delgroup.createBuilder()
+				.setGroupType(OFGroupType.SELECT)
+				.build();
+			this.sw.write(delgroup);
 		}
 		
 		/*
@@ -845,15 +870,28 @@ public class OFSwitchHandshakeHandler implements IOFConnectionListener {
 
 		@Override
 		void processOFError(OFErrorMsg m) {
-			logErrorDisconnect(m);
-		}
+			/*
+			 * HP ProCurve switches do not support
+			 * the ofpt_barrier_request message.
+			 * 
+			 * Look for an error from a bad ofpt_barrier_request,
+			 * log a warning, but proceed.
+			 */
+			if (m.getErrType() == OFErrorType.BAD_REQUEST &&
+					((OFBadRequestErrorMsg) m).getCode() == OFBadRequestCode.BAD_TYPE &&
+					((OFBadRequestErrorMsg) m).getData().getParsedMessage().get() instanceof OFBarrierRequest) {
+					log.warn("Switch does not support Barrier Request messages. Could be an HP ProCurve.");
+			} else {
+				logErrorDisconnect(m);
+			}
+		} 
 
 		@Override
 		void enterState() {
 			sendHandshakeSetConfig();
 		}
 	}
-
+	
 	/**
 	 * We are waiting for a OFDescriptionStat message from the switch.
 	 * Once we receive any stat message we try to parse it. If it's not
diff --git a/src/main/java/net/floodlightcontroller/debugcounter/CounterNode.java b/src/main/java/net/floodlightcontroller/debugcounter/CounterNode.java
index 1f3c87aaefc7625cd83b093f73807bf4cce6c220..99f32f371ea526582f8011f479ff39a096967f66 100644
--- a/src/main/java/net/floodlightcontroller/debugcounter/CounterNode.java
+++ b/src/main/java/net/floodlightcontroller/debugcounter/CounterNode.java
@@ -11,6 +11,9 @@ import java.util.regex.Pattern;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 
@@ -27,6 +30,7 @@ import com.google.common.collect.ImmutableList;
  */
 class CounterNode implements Iterable<DebugCounterImpl> {
     private static final String QUOTED_SEP = Pattern.quote("/");
+    private static final Logger log = LoggerFactory.getLogger(CounterNode.class);
 
     /** path/hierarchy of this counter without leading /. An empty string
      * represents the root. A string without a / is a module name
@@ -168,6 +172,14 @@ class CounterNode implements Iterable<DebugCounterImpl> {
          * We're directly reusing the shrunken hierarchyElements List and
          * keyToRemove String, which IMHO is pretty cool how it works out.
          */
+        
+        /*
+         * Make sure it's possible to remove something.
+         */
+        if (hierarchyElements.isEmpty()) {
+        	log.error("Cannot remove a CounterNode from an empty list of hierarchy elements. Returning null.");
+        	return null;
+        } 
         String keyToRemove = hierarchyElements.remove(hierarchyElements.size() - 1); 
         for (String element: hierarchyElements) {
             cur = cur.children.get(element);
diff --git a/src/main/java/net/floodlightcontroller/forwarding/Forwarding.java b/src/main/java/net/floodlightcontroller/forwarding/Forwarding.java
index eb15b903d56bbb418c7fd667aaeff742d8b4bc37..8e9920621940c6ebbaf8af0c542d2c1d6cd3bef8 100644
--- a/src/main/java/net/floodlightcontroller/forwarding/Forwarding.java
+++ b/src/main/java/net/floodlightcontroller/forwarding/Forwarding.java
@@ -251,76 +251,64 @@ public class Forwarding extends ForwardingBase implements IFloodlightModule {
 										srcDap.getPort(),
 										dstDap.getSwitchDPID(),
 										dstDap.getPort(), U64.of(0)); //cookie = 0, i.e., default route
-										if (route != null) {
-											if (log.isTraceEnabled()) {
-												log.trace("pushRoute inPort={} route={} " +
-														"destination={}:{}",
-														new Object[] { inPort, route,
-														dstDap.getSwitchDPID(),
-														dstDap.getPort()});
-											}
-											U64 cookie = AppCookie.makeCookie(FORWARDING_APP_ID, 0);
-
-											// if there is prior routing decision use route's match
-											Match routeMatch = null;
-											IRoutingDecision decision = null;
-											if (cntx != null) {
-												decision = IRoutingDecision.rtStore.get(cntx, IRoutingDecision.CONTEXT_DECISION);
-											}
-											if (decision != null) {
-												routeMatch = decision.getMatch();
-											} else {
-												// The packet in match will only contain the port number.
-												// We need to add in specifics for the hosts we're routing between.
-												Ethernet eth = IFloodlightProviderService.bcStore.get(cntx, IFloodlightProviderService.CONTEXT_PI_PAYLOAD);
-												VlanVid vlan = VlanVid.ofVlan(eth.getVlanID());
-												MacAddress srcMac = eth.getSourceMACAddress();
-												MacAddress dstMac = eth.getDestinationMACAddress();
-												
-												// A retentive builder will remember all MatchFields of the parent the builder was generated from
-												// With a normal builder, all parent MatchFields will be lost if any MatchFields are added, mod, del
-												// TODO (This is a bug in Loxigen and the retentive builder is a workaround.)
-												Match.Builder mb = sw.getOFFactory().buildMatch();
-												mb.setExact(MatchField.IN_PORT, inPort)
-												.setExact(MatchField.ETH_SRC, srcMac)
-												.setExact(MatchField.ETH_DST, dstMac);
-												
-												if (!vlan.equals(VlanVid.ZERO)) {
-													mb.setExact(MatchField.VLAN_VID, OFVlanVidMatch.ofVlanVid(vlan));
-												}
-												
-												// TODO Detect switch type and match to create hardware-implemented flow
-												// TODO Set option in config file to support specific or MAC-only matches
-												if (eth.getEtherType() == Ethernet.TYPE_IPv4) {
-													IPv4 ip = (IPv4) eth.getPayload();
-													IPv4Address srcIp = ip.getSourceAddress();
-													IPv4Address dstIp = ip.getDestinationAddress();
-													mb.setExact(MatchField.IPV4_SRC, srcIp)
-													.setExact(MatchField.IPV4_DST, dstIp)
-													.setExact(MatchField.ETH_TYPE, EthType.IPv4);
-													
-													if (ip.getProtocol().equals(IpProtocol.TCP)) {
-														TCP tcp = (TCP) ip.getPayload();
-														mb.setExact(MatchField.IP_PROTO, IpProtocol.TCP)
-														.setExact(MatchField.TCP_SRC, tcp.getSourcePort())
-														.setExact(MatchField.TCP_DST, tcp.getDestinationPort());
-													} else if (ip.getProtocol().equals(IpProtocol.UDP)) {
-														UDP udp = (UDP) ip.getPayload();
-														mb.setExact(MatchField.IP_PROTO, IpProtocol.UDP)
-														.setExact(MatchField.UDP_SRC, udp.getSourcePort())
-														.setExact(MatchField.UDP_DST, udp.getDestinationPort());
-													}	
-												} else if (eth.getEtherType() == Ethernet.TYPE_ARP) {
-													mb.setExact(MatchField.ETH_TYPE, EthType.ARP);
-												} 
-												
-												routeMatch = mb.build();
-											}
-
-											pushRoute(route, routeMatch, pi, sw.getId(), cookie,
-													cntx, requestFlowRemovedNotifn, false,
-													OFFlowModCommand.ADD);
-										}
+						if (route != null) {
+							if (log.isTraceEnabled()) {
+								log.trace("pushRoute inPort={} route={} " +
+										"destination={}:{}",
+										new Object[] { inPort, route,
+										dstDap.getSwitchDPID(),
+										dstDap.getPort()});
+							}
+							U64 cookie = AppCookie.makeCookie(FORWARDING_APP_ID, 0);
+
+							// The packet in match will only contain the port number.
+							// We need to add in specifics for the hosts we're routing between.
+							Ethernet eth = IFloodlightProviderService.bcStore.get(cntx, IFloodlightProviderService.CONTEXT_PI_PAYLOAD);
+							VlanVid vlan = VlanVid.ofVlan(eth.getVlanID());
+							MacAddress srcMac = eth.getSourceMACAddress();
+							MacAddress dstMac = eth.getDestinationMACAddress();
+
+							// A retentive builder will remember all MatchFields of the parent the builder was generated from
+							// With a normal builder, all parent MatchFields will be lost if any MatchFields are added, mod, del
+							// TODO (This is a bug in Loxigen and the retentive builder is a workaround.)
+							Match.Builder mb = sw.getOFFactory().buildMatch();
+							mb.setExact(MatchField.IN_PORT, inPort)
+							.setExact(MatchField.ETH_SRC, srcMac)
+							.setExact(MatchField.ETH_DST, dstMac);
+
+							if (!vlan.equals(VlanVid.ZERO)) {
+								mb.setExact(MatchField.VLAN_VID, OFVlanVidMatch.ofVlanVid(vlan));
+							}
+
+							// TODO Detect switch type and match to create hardware-implemented flow
+							// TODO Set option in config file to support specific or MAC-only matches
+							if (eth.getEtherType() == Ethernet.TYPE_IPv4) {
+								IPv4 ip = (IPv4) eth.getPayload();
+								IPv4Address srcIp = ip.getSourceAddress();
+								IPv4Address dstIp = ip.getDestinationAddress();
+								mb.setExact(MatchField.IPV4_SRC, srcIp)
+								.setExact(MatchField.IPV4_DST, dstIp)
+								.setExact(MatchField.ETH_TYPE, EthType.IPv4);
+
+								if (ip.getProtocol().equals(IpProtocol.TCP)) {
+									TCP tcp = (TCP) ip.getPayload();
+									mb.setExact(MatchField.IP_PROTO, IpProtocol.TCP)
+									.setExact(MatchField.TCP_SRC, tcp.getSourcePort())
+									.setExact(MatchField.TCP_DST, tcp.getDestinationPort());
+								} else if (ip.getProtocol().equals(IpProtocol.UDP)) {
+									UDP udp = (UDP) ip.getPayload();
+									mb.setExact(MatchField.IP_PROTO, IpProtocol.UDP)
+									.setExact(MatchField.UDP_SRC, udp.getSourcePort())
+									.setExact(MatchField.UDP_DST, udp.getDestinationPort());
+								}	
+							} else if (eth.getEtherType() == Ethernet.TYPE_ARP) {
+								mb.setExact(MatchField.ETH_TYPE, EthType.ARP);
+							}
+
+							pushRoute(route, mb.build(), pi, sw.getId(), cookie,
+									cntx, requestFlowRemovedNotifn, false,
+									OFFlowModCommand.ADD);
+						}
 					}
 					iSrcDaps++;
 					iDstDaps++;
diff --git a/src/main/java/net/floodlightcontroller/testmodule/TestModule.java b/src/main/java/net/floodlightcontroller/testmodule/TestModule.java
index e72a250589d927584bc7a5f63a7173a69da2ad85..5c2c1b02ae1a2346c51f123b2578959eca6c6cfe 100644
--- a/src/main/java/net/floodlightcontroller/testmodule/TestModule.java
+++ b/src/main/java/net/floodlightcontroller/testmodule/TestModule.java
@@ -43,6 +43,7 @@ import org.projectfloodlight.openflow.protocol.meterband.OFMeterBand;
 import org.projectfloodlight.openflow.protocol.meterband.OFMeterBandDrop;
 import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
 import org.projectfloodlight.openflow.protocol.oxm.OFOxmEthSrc;
+import org.projectfloodlight.openflow.protocol.ver13.OFMeterModCommandSerializerVer13;
 import org.projectfloodlight.openflow.types.ArpOpcode;
 import org.projectfloodlight.openflow.types.DatapathId;
 import org.projectfloodlight.openflow.types.EthType;
@@ -125,7 +126,6 @@ public class TestModule implements IFloodlightModule, IOFSwitchListener {
 	@Override
 	public void switchAdded(DatapathId switchId) {
 		OFFactory factory = switchService.getSwitch(switchId).getOFFactory();
-		
 		/*
 		 * An attempt at meters, but they aren't supported anywhere, yet... 
 		 * OFMeterBand mb = factory.meterBands().buildDrop()
@@ -134,12 +134,13 @@ public class TestModule implements IFloodlightModule, IOFSwitchListener {
 				.build();
 		ArrayList<OFMeterBand> mbl = new ArrayList<OFMeterBand>();
 		mbl.add(mb);
-		
+				
 		OFMeterMod mm = factory.buildMeterMod()
 				.setMeters(mbl)
 				.setMeterId(1)
-				.setCommand(0)
-				.build(); */
+				.setCommand(OFMeterModCommandSerializerVer13.ADD_VAL) 
+				.build(); 
+		// This is a bug. You should be able to directly do OFMeterModCommand.ADD */
 		
 		/*HashSet<OFTableConfig> tblCfg = new HashSet<OFTableConfig>();
 		tblCfg.add(OFTableConfig.TABLE_MISS_CONTROLLER);
diff --git a/src/main/resources/floodlightdefault.properties b/src/main/resources/floodlightdefault.properties
index 9dc689f7c13e5747767911972295aa0c94604088..47b5bc91a7fbfa77569de0006aa91e5aa688051c 100644
--- a/src/main/resources/floodlightdefault.properties
+++ b/src/main/resources/floodlightdefault.properties
@@ -19,4 +19,5 @@ org.sdnplatform.sync.internal.SyncManager.authScheme=CHALLENGE_RESPONSE
 org.sdnplatform.sync.internal.SyncManager.keyStorePath=/etc/floodlight/auth_credentials.jceks
 org.sdnplatform.sync.internal.SyncManager.dbPath=/var/lib/floodlight/
 org.sdnplatform.sync.internal.SyncManager.port=6642
+net.floodlightcontroller.core.internal.FloodlightProvider.openflowPort=6653
 net.floodlightcontroller.core.internal.FloodlightProvider.role=ACTIVE
diff --git a/src/main/resources/logback-test.xml b/src/main/resources/logback-test.xml
index 1986dbd1507739c1ac37deeba32ea1399e340547..72350a0bc4366bcbcebc83c4e5f999c26925bbae 100644
--- a/src/main/resources/logback-test.xml
+++ b/src/main/resources/logback-test.xml
@@ -18,7 +18,7 @@
   <logger name="net.floodlightcontroller.packet" level="INFO"></logger>
   <logger name="net.floodlightcontroller.forwarding" level="INFO"></logger>
   <logger name="net.floodlightcontroller.routing" level="INFO"></logger>
-  <logger name="net.floodlightcontroller.core" level="INFO"></logger>
+  <logger name="net.floodlightcontroller.core.internal" level="INFO"></logger>
   <logger level="DEBUG" name="net.floodlightcontroller.firewall"></logger>
   <logger level="INFO" name="net.floodlightcontroller.staticflowentry"></logger>
 </configuration>
diff --git a/src/test/java/net/floodlightcontroller/staticflowentry/StaticFlowTests.java b/src/test/java/net/floodlightcontroller/staticflowentry/StaticFlowTests.java
index 562edb123c31bba2224b5e30c3f0a6c5d3c4d42a..51b2319f19053890ae402247eaf4b05a83f6bebe 100644
--- a/src/test/java/net/floodlightcontroller/staticflowentry/StaticFlowTests.java
+++ b/src/test/java/net/floodlightcontroller/staticflowentry/StaticFlowTests.java
@@ -17,6 +17,7 @@
 package net.floodlightcontroller.staticflowentry;
 
 import java.io.IOException;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -30,6 +31,7 @@ import org.junit.Test;
 import org.projectfloodlight.openflow.protocol.OFFactories;
 import org.projectfloodlight.openflow.protocol.OFFactory;
 import org.projectfloodlight.openflow.protocol.OFFlowMod;
+import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
 import org.projectfloodlight.openflow.protocol.OFVersion;
 import org.projectfloodlight.openflow.protocol.match.Match;
 import org.projectfloodlight.openflow.protocol.OFMessage;
@@ -61,310 +63,313 @@ import static org.junit.Assert.*;
 
 public class StaticFlowTests extends FloodlightTestCase {
 
-    static String TestSwitch1DPID = "00:00:00:00:00:00:00:01";
-    static int TotalTestRules = 3;
-    
-    static OFFactory factory = OFFactories.getFactory(OFVersion.OF_13);
-
-    /***
-     * Create TestRuleXXX and the corresponding FlowModXXX
-     * for X = 1..3
-     */
-    static Map<String,Object> TestRule1;
-    static OFFlowMod FlowMod1;
-    static {
-        FlowMod1 = factory.buildFlowModify().build();
-        TestRule1 = new HashMap<String,Object>();
-        TestRule1.put(COLUMN_NAME, "TestRule1");
-        TestRule1.put(COLUMN_SWITCH, TestSwitch1DPID);
-        // setup match
-        Match match;
-        TestRule1.put(COLUMN_DL_DST, "00:20:30:40:50:60");
-        match = MatchUtils.fromString("eth_dst=00:20:30:40:50:60", factory.getVersion());
-        // setup actions
-        List<OFAction> actions = new LinkedList<OFAction>();
-        TestRule1.put(COLUMN_ACTIONS, "output=1");
-        actions.add(factory.actions().output(OFPort.of(1), Integer.MAX_VALUE));
-        // done
-        FlowMod1 = FlowMod1.createBuilder().setMatch(match)
-        .setActions(actions)
-        .setBufferId(OFBufferId.NO_BUFFER)
-        .setOutPort(OFPort.ANY)
-        .setPriority(Integer.MAX_VALUE)
-        .setXid(4)
-        .build();
-    }
-
-    static Map<String,Object> TestRule2;
-    static OFFlowMod FlowMod2;
-
-    static {
-        FlowMod2 = factory.buildFlowModify().build();
-        TestRule2 = new HashMap<String,Object>();
-        TestRule2.put(COLUMN_NAME, "TestRule2");
-        TestRule2.put(COLUMN_SWITCH, TestSwitch1DPID);
-        // setup match
-        Match match;        
-        TestRule2.put(COLUMN_DL_TYPE, "0x800");
-        TestRule2.put(COLUMN_NW_DST, "192.168.1.0/24");
-        match = MatchUtils.fromString("eth_type=0x800,ipv4_dst=192.168.1.0/24", factory.getVersion());
-        // setup actions
-        List<OFAction> actions = new LinkedList<OFAction>();
-        TestRule2.put(COLUMN_ACTIONS, "output=1");
-        actions.add(factory.actions().output(OFPort.of(1), Integer.MAX_VALUE));
-        // done
-        FlowMod2 = FlowMod2.createBuilder().setMatch(match)
-                .setActions(actions)
-                .setBufferId(OFBufferId.NO_BUFFER)
-                .setOutPort(OFPort.ANY)
-                .setPriority(Integer.MAX_VALUE)
-                .setXid(5)
-                .build();
-    }
-
-
-    static Map<String,Object> TestRule3;
-    static OFFlowMod FlowMod3;
-    private StaticFlowEntryPusher staticFlowEntryPusher;
-    private IOFSwitchService switchService;
-    private IOFSwitch mockSwitch;
-    private MockDebugCounterService debugCounterService;
-    private Capture<OFMessage> writeCapture;
-    private Capture<List<OFMessage>> writeCaptureList;
-    private long dpid;
-    private MemoryStorageSource storage;
-    static {
-        FlowMod3 = factory.buildFlowModify().build();
-        TestRule3 = new HashMap<String,Object>();
-        TestRule3.put(COLUMN_NAME, "TestRule3");
-        TestRule3.put(COLUMN_SWITCH, TestSwitch1DPID);
-        // setup match
-        Match match;
-        TestRule3.put(COLUMN_DL_DST, "00:20:30:40:50:60");
-        TestRule3.put(COLUMN_DL_VLAN, 96);
-        match = MatchUtils.fromString("eth_dst=00:20:30:40:50:60,eth_vlan_vid=96", factory.getVersion());
-        // setup actions
-        TestRule3.put(COLUMN_ACTIONS, "output=controller");
-        List<OFAction> actions = new LinkedList<OFAction>();
-        actions.add(factory.actions().output(OFPort.CONTROLLER, Integer.MAX_VALUE));
-        // done
-        FlowMod3 = FlowMod3.createBuilder().setMatch(match)
-                .setActions(actions)
-                .setBufferId(OFBufferId.NO_BUFFER)
-                .setOutPort(OFPort.ANY)
-                .setPriority(Integer.MAX_VALUE)
-                .setXid(6)
-                .build();
-    }
-
-    private void verifyFlowMod(OFFlowMod testFlowMod, OFFlowMod goodFlowMod) {
-        verifyMatch(testFlowMod, goodFlowMod);
-        verifyActions(testFlowMod, goodFlowMod);
-        // dont' bother testing the cookie; just copy it over
-        goodFlowMod = goodFlowMod.createBuilder().setCookie(testFlowMod.getCookie()).build();
-        // .. so we can continue to use .equals()
-        assertTrue(OFMessageUtils.equalsIgnoreXid(goodFlowMod, testFlowMod));
-    }
-
-
-    private void verifyMatch(OFFlowMod testFlowMod, OFFlowMod goodFlowMod) {
-        assertEquals(goodFlowMod.getMatch(), testFlowMod.getMatch());
-    }
-
-
-    private void verifyActions(OFFlowMod testFlowMod, OFFlowMod goodFlowMod) {
-        List<OFAction> goodActions = goodFlowMod.getActions();
-        List<OFAction> testActions = testFlowMod.getActions();
-        assertNotNull(goodActions);
-        assertNotNull(testActions);
-        assertEquals(goodActions.size(), testActions.size());
-        // assumes actions are marshalled in same order; should be safe
-        for(int i = 0; i < goodActions.size(); i++) {
-            assertEquals(goodActions.get(i), testActions.get(i));
-        }
-    }
-
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        debugCounterService = new MockDebugCounterService();
-        staticFlowEntryPusher = new StaticFlowEntryPusher();
-        switchService = getMockSwitchService();
-        storage = new MemoryStorageSource();
-        dpid = HexString.toLong(TestSwitch1DPID);
-
-        mockSwitch = createNiceMock(IOFSwitch.class);
-        writeCapture = new Capture<OFMessage>(CaptureType.ALL);
-        writeCaptureList = new Capture<List<OFMessage>>(CaptureType.ALL);
-
-        mockSwitch.write(capture(writeCapture));
-        expectLastCall().anyTimes();
-        mockSwitch.write(capture(writeCaptureList));
-        expectLastCall().anyTimes();
-        mockSwitch.flush();
-        expectLastCall().anyTimes();
-        expect(mockSwitch.getOFFactory()).andReturn(factory).anyTimes();
-        replay(mockSwitch);
-
-        FloodlightModuleContext fmc = new FloodlightModuleContext();
-        fmc.addService(IStorageSourceService.class, storage);
-        fmc.addService(IOFSwitchService.class, getMockSwitchService());
-        fmc.addService(IDebugCounterService.class, debugCounterService);
-
-        MockFloodlightProvider mockFloodlightProvider = getMockFloodlightProvider();
-        Map<DatapathId, IOFSwitch> switchMap = new HashMap<DatapathId, IOFSwitch>();
-        switchMap.put(DatapathId.of(dpid), mockSwitch);
-        getMockSwitchService().setSwitches(switchMap);
-        fmc.addService(IFloodlightProviderService.class, mockFloodlightProvider);
-        RestApiServer restApi = new RestApiServer();
-        fmc.addService(IRestApiService.class, restApi);
-        fmc.addService(IOFSwitchService.class, switchService);
-                       
-        restApi.init(fmc);
-        debugCounterService.init(fmc);
-        storage.init(fmc);
-        staticFlowEntryPusher.init(fmc);
-        debugCounterService.init(fmc);
-        storage.startUp(fmc);
-        
-        createStorageWithFlowEntries();
-        
-        staticFlowEntryPusher.startUp(fmc);    // again, to hack unittest
-    }
-
-    @Test
-    public void testStaticFlowPush() throws Exception {
-
-        // verify that flowpusher read all three entries from storage
-        assertEquals(TotalTestRules, staticFlowEntryPusher.countEntries());
-
-        // if someone calls mockSwitch.getOutputStream(), return mockOutStream instead
-        //expect(mockSwitch.getOutputStream()).andReturn(mockOutStream).anyTimes();
-
-        // if someone calls getId(), return this dpid instead
-        resetToNice(mockSwitch);
-        mockSwitch.write(capture(writeCapture));
-        expectLastCall().anyTimes();
-        mockSwitch.write(capture(writeCaptureList));
-        expectLastCall().anyTimes();
-        mockSwitch.flush();
-        expectLastCall().anyTimes();
-        expect(mockSwitch.getOFFactory()).andReturn(factory).anyTimes();
-        expect(mockSwitch.getId()).andReturn(DatapathId.of(dpid)).anyTimes();
-        replay(mockSwitch);
-
-        // hook the static pusher up to the fake switch
-        staticFlowEntryPusher.switchAdded(DatapathId.of(dpid));
-
-        verify(mockSwitch);
-
-        // Verify that the switch has gotten some flow_mods
-        assertEquals(true, writeCapture.hasCaptured());
-        assertEquals(TotalTestRules, writeCapture.getValues().size());
-
-        // Order assumes how things are stored in hash bucket;
-        // should be fixed because OFMessage.hashCode() is deterministic
-        OFFlowMod firstFlowMod = (OFFlowMod) writeCapture.getValues().get(2);
-        verifyFlowMod(firstFlowMod, FlowMod1);
-        OFFlowMod secondFlowMod = (OFFlowMod) writeCapture.getValues().get(1);
-        verifyFlowMod(secondFlowMod, FlowMod2);
-        OFFlowMod thirdFlowMod = (OFFlowMod) writeCapture.getValues().get(0);
-        verifyFlowMod(thirdFlowMod, FlowMod3);
-
-        writeCapture.reset();
-
-        // delete two rules and verify they've been removed
-        // this should invoke staticFlowPusher.rowsDeleted()
-        storage.deleteRow(StaticFlowEntryPusher.TABLE_NAME, "TestRule1");
-        storage.deleteRow(StaticFlowEntryPusher.TABLE_NAME, "TestRule2");
-
-        assertEquals(1, staticFlowEntryPusher.countEntries());
-        assertEquals(2, writeCapture.getValues().size());
-
-        OFFlowMod firstDelete = (OFFlowMod) writeCapture.getValues().get(0);
-        FlowMod1 = FlowModUtils.toFlowDeleteStrict(FlowMod1);
-        verifyFlowMod(firstDelete, FlowMod1);
-
-        OFFlowMod secondDelete = (OFFlowMod) writeCapture.getValues().get(1);
-        FlowMod2 = FlowModUtils.toFlowDeleteStrict(FlowMod2);
-        verifyFlowMod(secondDelete, FlowMod2);
-
-        // add rules back to make sure that staticFlowPusher.rowsInserted() works
-        writeCapture.reset();
-        FlowMod2 = FlowModUtils.toFlowAdd(FlowMod2);
-        FlowMod2 = FlowMod2.createBuilder().setXid(12).build();
-        storage.insertRow(StaticFlowEntryPusher.TABLE_NAME, TestRule2);
-        assertEquals(2, staticFlowEntryPusher.countEntries());
-        assertEquals(1, writeCaptureList.getValues().size());
-        List<OFMessage> outList =
-            writeCaptureList.getValues().get(0);
-        assertEquals(1, outList.size());
-        OFFlowMod firstAdd = (OFFlowMod) outList.get(0);
-        verifyFlowMod(firstAdd, FlowMod2);
-        writeCapture.reset();
-        writeCaptureList.reset();
-
-        // now try an overwriting update, calling staticFlowPusher.rowUpdated()
-        TestRule3.put(COLUMN_DL_VLAN, 333);
-        storage.updateRow(StaticFlowEntryPusher.TABLE_NAME, TestRule3);
-        assertEquals(2, staticFlowEntryPusher.countEntries());
-        assertEquals(1, writeCaptureList.getValues().size());
-
-        outList = writeCaptureList.getValues().get(0);
-        assertEquals(2, outList.size());
-        OFFlowMod removeFlowMod = (OFFlowMod) outList.get(0);
-        FlowMod3 = FlowModUtils.toFlowDeleteStrict(FlowMod3);
-        verifyFlowMod(removeFlowMod, FlowMod3);
-        FlowMod3 = FlowModUtils.toFlowAdd(FlowMod3);
-        FlowMod3 = FlowMod3.createBuilder().setMatch(MatchUtils.fromString("eth_dst=00:20:30:40:50:60,eth_vlan_vid=333", factory.getVersion())).setXid(14).build();
-        OFFlowMod updateFlowMod = (OFFlowMod) outList.get(1);
-        verifyFlowMod(updateFlowMod, FlowMod3);
-        writeCaptureList.reset();
-
-        // now try an action modifying update, calling staticFlowPusher.rowUpdated()
-        TestRule3.put(COLUMN_ACTIONS, "output=controller,pop_vlan"); // added pop-vlan
-        storage.updateRow(StaticFlowEntryPusher.TABLE_NAME, TestRule3);
-        assertEquals(2, staticFlowEntryPusher.countEntries());
-        assertEquals(1, writeCaptureList.getValues().size());
-
-        outList = writeCaptureList.getValues().get(0);
-        assertEquals(1, outList.size());
-        OFFlowMod modifyFlowMod = (OFFlowMod) outList.get(0);
-        FlowMod3 = FlowModUtils.toFlowModifyStrict(FlowMod3);
-        List<OFAction> modifiedActions = FlowMod3.getActions();
-        modifiedActions.add(factory.actions().popVlan()); // add the new action to what we should expect
-        FlowMod3 = FlowMod3.createBuilder().setActions(modifiedActions).setXid(19).build();
-        verifyFlowMod(modifyFlowMod, FlowMod3);
-    }
-
-
-    IStorageSourceService createStorageWithFlowEntries() {
-        return populateStorageWithFlowEntries();
-    }
-
-    IStorageSourceService populateStorageWithFlowEntries() {
-        Set<String> indexedColumns = new HashSet<String>();
-        indexedColumns.add(COLUMN_NAME);
-        storage.createTable(StaticFlowEntryPusher.TABLE_NAME, indexedColumns);
-        storage.setTablePrimaryKeyName(StaticFlowEntryPusher.TABLE_NAME, COLUMN_NAME);
-
-        storage.insertRow(StaticFlowEntryPusher.TABLE_NAME, TestRule1);
-        storage.insertRow(StaticFlowEntryPusher.TABLE_NAME, TestRule2);
-        storage.insertRow(StaticFlowEntryPusher.TABLE_NAME, TestRule3);
-
-        return storage;
-    }
-
-    @Test
-    public void testHARoleChanged() throws IOException {
-
-        assert(staticFlowEntryPusher.entry2dpid.containsValue(TestSwitch1DPID));
-        assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod1));
-        assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod2));
-        assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod3));
-
-        /* FIXME: what's the right behavior here ??
+	static String TestSwitch1DPID = "00:00:00:00:00:00:00:01";
+	static int TotalTestRules = 3;
+
+	static OFFactory factory = OFFactories.getFactory(OFVersion.OF_13);
+
+	/***
+	 * Create TestRuleXXX and the corresponding FlowModXXX
+	 * for X = 1..3
+	 */
+	static Map<String,Object> TestRule1;
+	static OFFlowMod FlowMod1;
+	static {
+		FlowMod1 = factory.buildFlowModify().build();
+		TestRule1 = new HashMap<String,Object>();
+		TestRule1.put(COLUMN_NAME, "TestRule1");
+		TestRule1.put(COLUMN_SWITCH, TestSwitch1DPID);
+		// setup match
+		Match match;
+		TestRule1.put(COLUMN_DL_DST, "00:20:30:40:50:60");
+		match = MatchUtils.fromString("eth_dst=00:20:30:40:50:60", factory.getVersion());
+		// setup actions
+		List<OFAction> actions = new LinkedList<OFAction>();
+		TestRule1.put(COLUMN_ACTIONS, "output=1");
+		actions.add(factory.actions().output(OFPort.of(1), Integer.MAX_VALUE));
+		// done
+		FlowMod1 = FlowMod1.createBuilder().setMatch(match)
+				.setActions(actions)
+				.setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
+				.setBufferId(OFBufferId.NO_BUFFER)
+				.setOutPort(OFPort.ANY)
+				.setPriority(Integer.MAX_VALUE)
+				.setXid(4)
+				.build();
+	}
+
+	static Map<String,Object> TestRule2;
+	static OFFlowMod FlowMod2;
+
+	static {
+		FlowMod2 = factory.buildFlowModify().build();
+		TestRule2 = new HashMap<String,Object>();
+		TestRule2.put(COLUMN_NAME, "TestRule2");
+		TestRule2.put(COLUMN_SWITCH, TestSwitch1DPID);
+		// setup match
+		Match match;        
+		TestRule2.put(COLUMN_DL_TYPE, "0x800");
+		TestRule2.put(COLUMN_NW_DST, "192.168.1.0/24");
+		match = MatchUtils.fromString("eth_type=0x800,ipv4_dst=192.168.1.0/24", factory.getVersion());
+		// setup actions
+		List<OFAction> actions = new LinkedList<OFAction>();
+		TestRule2.put(COLUMN_ACTIONS, "output=1");
+		actions.add(factory.actions().output(OFPort.of(1), Integer.MAX_VALUE));
+		// done
+		FlowMod2 = FlowMod2.createBuilder().setMatch(match)
+				.setActions(actions)
+				.setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
+				.setBufferId(OFBufferId.NO_BUFFER)
+				.setOutPort(OFPort.ANY)
+				.setPriority(Integer.MAX_VALUE)
+				.setXid(5)
+				.build();
+	}
+
+
+	static Map<String,Object> TestRule3;
+	static OFFlowMod FlowMod3;
+	private StaticFlowEntryPusher staticFlowEntryPusher;
+	private IOFSwitchService switchService;
+	private IOFSwitch mockSwitch;
+	private MockDebugCounterService debugCounterService;
+	private Capture<OFMessage> writeCapture;
+	private Capture<List<OFMessage>> writeCaptureList;
+	private long dpid;
+	private MemoryStorageSource storage;
+	static {
+		FlowMod3 = factory.buildFlowModify().build();
+		TestRule3 = new HashMap<String,Object>();
+		TestRule3.put(COLUMN_NAME, "TestRule3");
+		TestRule3.put(COLUMN_SWITCH, TestSwitch1DPID);
+		// setup match
+		Match match;
+		TestRule3.put(COLUMN_DL_DST, "00:20:30:40:50:60");
+		TestRule3.put(COLUMN_DL_VLAN, 96);
+		match = MatchUtils.fromString("eth_dst=00:20:30:40:50:60,eth_vlan_vid=96", factory.getVersion());
+		// setup actions
+		TestRule3.put(COLUMN_ACTIONS, "output=controller");
+		List<OFAction> actions = new LinkedList<OFAction>();
+		actions.add(factory.actions().output(OFPort.CONTROLLER, Integer.MAX_VALUE));
+		// done
+		FlowMod3 = FlowMod3.createBuilder().setMatch(match)
+				.setActions(actions)
+		        .setFlags(Collections.singleton(OFFlowModFlags.SEND_FLOW_REM))
+				.setBufferId(OFBufferId.NO_BUFFER)
+				.setOutPort(OFPort.ANY)
+				.setPriority(Integer.MAX_VALUE)
+				.setXid(6)
+				.build();
+	}
+
+	private void verifyFlowMod(OFFlowMod testFlowMod, OFFlowMod goodFlowMod) {
+		verifyMatch(testFlowMod, goodFlowMod);
+		verifyActions(testFlowMod, goodFlowMod);
+		// dont' bother testing the cookie; just copy it over
+		goodFlowMod = goodFlowMod.createBuilder().setCookie(testFlowMod.getCookie()).build();
+		// .. so we can continue to use .equals()
+		assertTrue(OFMessageUtils.equalsIgnoreXid(goodFlowMod, testFlowMod));
+	}
+
+
+	private void verifyMatch(OFFlowMod testFlowMod, OFFlowMod goodFlowMod) {
+		assertEquals(goodFlowMod.getMatch(), testFlowMod.getMatch());
+	}
+
+
+	private void verifyActions(OFFlowMod testFlowMod, OFFlowMod goodFlowMod) {
+		List<OFAction> goodActions = goodFlowMod.getActions();
+		List<OFAction> testActions = testFlowMod.getActions();
+		assertNotNull(goodActions);
+		assertNotNull(testActions);
+		assertEquals(goodActions.size(), testActions.size());
+		// assumes actions are marshalled in same order; should be safe
+		for(int i = 0; i < goodActions.size(); i++) {
+			assertEquals(goodActions.get(i), testActions.get(i));
+		}
+	}
+
+
+	@Override
+	public void setUp() throws Exception {
+		super.setUp();
+		debugCounterService = new MockDebugCounterService();
+		staticFlowEntryPusher = new StaticFlowEntryPusher();
+		switchService = getMockSwitchService();
+		storage = new MemoryStorageSource();
+		dpid = HexString.toLong(TestSwitch1DPID);
+
+		mockSwitch = createNiceMock(IOFSwitch.class);
+		writeCapture = new Capture<OFMessage>(CaptureType.ALL);
+		writeCaptureList = new Capture<List<OFMessage>>(CaptureType.ALL);
+
+		mockSwitch.write(capture(writeCapture));
+		expectLastCall().anyTimes();
+		mockSwitch.write(capture(writeCaptureList));
+		expectLastCall().anyTimes();
+		mockSwitch.flush();
+		expectLastCall().anyTimes();
+		expect(mockSwitch.getOFFactory()).andReturn(factory).anyTimes();
+		replay(mockSwitch);
+
+		FloodlightModuleContext fmc = new FloodlightModuleContext();
+		fmc.addService(IStorageSourceService.class, storage);
+		fmc.addService(IOFSwitchService.class, getMockSwitchService());
+		fmc.addService(IDebugCounterService.class, debugCounterService);
+
+		MockFloodlightProvider mockFloodlightProvider = getMockFloodlightProvider();
+		Map<DatapathId, IOFSwitch> switchMap = new HashMap<DatapathId, IOFSwitch>();
+		switchMap.put(DatapathId.of(dpid), mockSwitch);
+		getMockSwitchService().setSwitches(switchMap);
+		fmc.addService(IFloodlightProviderService.class, mockFloodlightProvider);
+		RestApiServer restApi = new RestApiServer();
+		fmc.addService(IRestApiService.class, restApi);
+		fmc.addService(IOFSwitchService.class, switchService);
+
+		restApi.init(fmc);
+		debugCounterService.init(fmc);
+		storage.init(fmc);
+		staticFlowEntryPusher.init(fmc);
+		debugCounterService.init(fmc);
+		storage.startUp(fmc);
+
+		createStorageWithFlowEntries();
+
+		staticFlowEntryPusher.startUp(fmc);    // again, to hack unittest
+	}
+
+	@Test
+	public void testStaticFlowPush() throws Exception {
+
+		// verify that flowpusher read all three entries from storage
+		assertEquals(TotalTestRules, staticFlowEntryPusher.countEntries());
+
+		// if someone calls mockSwitch.getOutputStream(), return mockOutStream instead
+		//expect(mockSwitch.getOutputStream()).andReturn(mockOutStream).anyTimes();
+
+		// if someone calls getId(), return this dpid instead
+		resetToNice(mockSwitch);
+		mockSwitch.write(capture(writeCapture));
+		expectLastCall().anyTimes();
+		mockSwitch.write(capture(writeCaptureList));
+		expectLastCall().anyTimes();
+		mockSwitch.flush();
+		expectLastCall().anyTimes();
+		expect(mockSwitch.getOFFactory()).andReturn(factory).anyTimes();
+		expect(mockSwitch.getId()).andReturn(DatapathId.of(dpid)).anyTimes();
+		replay(mockSwitch);
+
+		// hook the static pusher up to the fake switch
+		staticFlowEntryPusher.switchAdded(DatapathId.of(dpid));
+
+		verify(mockSwitch);
+
+		// Verify that the switch has gotten some flow_mods
+		assertEquals(true, writeCapture.hasCaptured());
+		assertEquals(TotalTestRules, writeCapture.getValues().size());
+
+		// Order assumes how things are stored in hash bucket;
+		// should be fixed because OFMessage.hashCode() is deterministic
+		OFFlowMod firstFlowMod = (OFFlowMod) writeCapture.getValues().get(2);
+		verifyFlowMod(firstFlowMod, FlowMod1);
+		OFFlowMod secondFlowMod = (OFFlowMod) writeCapture.getValues().get(1);
+		verifyFlowMod(secondFlowMod, FlowMod2);
+		OFFlowMod thirdFlowMod = (OFFlowMod) writeCapture.getValues().get(0);
+		verifyFlowMod(thirdFlowMod, FlowMod3);
+
+		writeCapture.reset();
+
+		// delete two rules and verify they've been removed
+		// this should invoke staticFlowPusher.rowsDeleted()
+		storage.deleteRow(StaticFlowEntryPusher.TABLE_NAME, "TestRule1");
+		storage.deleteRow(StaticFlowEntryPusher.TABLE_NAME, "TestRule2");
+
+		assertEquals(1, staticFlowEntryPusher.countEntries());
+		assertEquals(2, writeCapture.getValues().size());
+
+		OFFlowMod firstDelete = (OFFlowMod) writeCapture.getValues().get(0);
+		FlowMod1 = FlowModUtils.toFlowDeleteStrict(FlowMod1);
+		verifyFlowMod(firstDelete, FlowMod1);
+
+		OFFlowMod secondDelete = (OFFlowMod) writeCapture.getValues().get(1);
+		FlowMod2 = FlowModUtils.toFlowDeleteStrict(FlowMod2);
+		verifyFlowMod(secondDelete, FlowMod2);
+
+		// add rules back to make sure that staticFlowPusher.rowsInserted() works
+		writeCapture.reset();
+		FlowMod2 = FlowModUtils.toFlowAdd(FlowMod2);
+		FlowMod2 = FlowMod2.createBuilder().setXid(12).build();
+		storage.insertRow(StaticFlowEntryPusher.TABLE_NAME, TestRule2);
+		assertEquals(2, staticFlowEntryPusher.countEntries());
+		assertEquals(1, writeCaptureList.getValues().size());
+		List<OFMessage> outList =
+				writeCaptureList.getValues().get(0);
+		assertEquals(1, outList.size());
+		OFFlowMod firstAdd = (OFFlowMod) outList.get(0);
+		verifyFlowMod(firstAdd, FlowMod2);
+		writeCapture.reset();
+		writeCaptureList.reset();
+
+		// now try an overwriting update, calling staticFlowPusher.rowUpdated()
+		TestRule3.put(COLUMN_DL_VLAN, 333);
+		storage.updateRow(StaticFlowEntryPusher.TABLE_NAME, TestRule3);
+		assertEquals(2, staticFlowEntryPusher.countEntries());
+		assertEquals(1, writeCaptureList.getValues().size());
+
+		outList = writeCaptureList.getValues().get(0);
+		assertEquals(2, outList.size());
+		OFFlowMod removeFlowMod = (OFFlowMod) outList.get(0);
+		FlowMod3 = FlowModUtils.toFlowDeleteStrict(FlowMod3);
+		verifyFlowMod(removeFlowMod, FlowMod3);
+		FlowMod3 = FlowModUtils.toFlowAdd(FlowMod3);
+		FlowMod3 = FlowMod3.createBuilder().setMatch(MatchUtils.fromString("eth_dst=00:20:30:40:50:60,eth_vlan_vid=333", factory.getVersion())).setXid(14).build();
+		OFFlowMod updateFlowMod = (OFFlowMod) outList.get(1);
+		verifyFlowMod(updateFlowMod, FlowMod3);
+		writeCaptureList.reset();
+
+		// now try an action modifying update, calling staticFlowPusher.rowUpdated()
+		TestRule3.put(COLUMN_ACTIONS, "output=controller,pop_vlan"); // added pop-vlan
+		storage.updateRow(StaticFlowEntryPusher.TABLE_NAME, TestRule3);
+		assertEquals(2, staticFlowEntryPusher.countEntries());
+		assertEquals(1, writeCaptureList.getValues().size());
+
+		outList = writeCaptureList.getValues().get(0);
+		assertEquals(1, outList.size());
+		OFFlowMod modifyFlowMod = (OFFlowMod) outList.get(0);
+		FlowMod3 = FlowModUtils.toFlowModifyStrict(FlowMod3);
+		List<OFAction> modifiedActions = FlowMod3.getActions();
+		modifiedActions.add(factory.actions().popVlan()); // add the new action to what we should expect
+		FlowMod3 = FlowMod3.createBuilder().setActions(modifiedActions).setXid(19).build();
+		verifyFlowMod(modifyFlowMod, FlowMod3);
+	}
+
+
+	IStorageSourceService createStorageWithFlowEntries() {
+		return populateStorageWithFlowEntries();
+	}
+
+	IStorageSourceService populateStorageWithFlowEntries() {
+		Set<String> indexedColumns = new HashSet<String>();
+		indexedColumns.add(COLUMN_NAME);
+		storage.createTable(StaticFlowEntryPusher.TABLE_NAME, indexedColumns);
+		storage.setTablePrimaryKeyName(StaticFlowEntryPusher.TABLE_NAME, COLUMN_NAME);
+
+		storage.insertRow(StaticFlowEntryPusher.TABLE_NAME, TestRule1);
+		storage.insertRow(StaticFlowEntryPusher.TABLE_NAME, TestRule2);
+		storage.insertRow(StaticFlowEntryPusher.TABLE_NAME, TestRule3);
+
+		return storage;
+	}
+
+	@Test
+	public void testHARoleChanged() throws IOException {
+
+		assert(staticFlowEntryPusher.entry2dpid.containsValue(TestSwitch1DPID));
+		assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod1));
+		assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod2));
+		assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod3));
+
+		/* FIXME: what's the right behavior here ??
         // Send a notification that we've changed to slave
         mfp.dispatchRoleChanged(Role.SLAVE);
         // Make sure we've removed all our entries
@@ -378,6 +383,6 @@ public class StaticFlowTests extends FloodlightTestCase {
         assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod1));
         assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod2));
         assert(staticFlowEntryPusher.entriesFromStorage.containsValue(FlowMod3));
-        */
-    }
+		 */
+	}
 }