diff --git a/.gitignore b/.gitignore
index aeb0dd73cfa475e0201e0be90a255c6240b0ba04..ad6e64ae7652599743f9625971681d5529b7b232 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,5 @@
 target
 thrift
 logback.xml
+*.swp
+*.pyc
diff --git a/src/main/java/net/floodlightcontroller/packet/Ethernet.java b/src/main/java/net/floodlightcontroller/packet/Ethernet.java
index 123c9e0d0eff5bb16e51f5d043b53f52b2130ce3..e547812efb87464ec4492d7f96f24de6218fead1 100644
--- a/src/main/java/net/floodlightcontroller/packet/Ethernet.java
+++ b/src/main/java/net/floodlightcontroller/packet/Ethernet.java
@@ -329,6 +329,8 @@ public class Ethernet extends BasePacket {
         int result = super.hashCode();
         result = prime * result + destinationMACAddress.hashCode();
         result = prime * result + etherType;
+        result = prime * result + vlanID;
+        result = prime * result + priorityCode;
         result = prime * result + (pad ? 1231 : 1237);
         result = prime * result + sourceMACAddress.hashCode();
         return result;
diff --git a/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java b/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java
index fe5b938d74d2754e446b25f9c8e663f1d2d4bb5b..32525a8c8b5654fae27ee345295864aceada1a71 100644
--- a/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java
+++ b/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java
@@ -70,7 +70,8 @@ public abstract class ForwardingBase implements
     
     // for broadcast loop suppression
     protected boolean broadcastCacheFeature = true;
-    public final int prime = 2633;  // for hash calculation
+    public final int prime1 = 2633;  // for hash calculation
+    public final static int prime2 = 4357;  // for hash calculation
     public TimedCache<Long> broadcastCache =
     		new TimedCache<Long>(100, 5*1000);  // 5 seconds interval;
 
@@ -506,8 +507,8 @@ public abstract class ForwardingBase implements
             		IFloodlightProviderService.CONTEXT_PI_PAYLOAD);
         
         Long broadcastHash;
-        broadcastHash = topology.getL2DomainId(sw.getId())
-        		* prime + eth.hashCode();
+        broadcastHash = topology.getL2DomainId(sw.getId()) * prime1 +
+                        pi.getInPort() * prime2 + eth.hashCode();
         if (broadcastCache.update(broadcastHash)) {
             sw.updateBroadcastCache(broadcastHash, pi.getInPort());
             return true;
@@ -521,16 +522,15 @@ public abstract class ForwardingBase implements
         
         // If the feature is disabled, always return false;
         if (!broadcastCacheFeature) return false;
-        
+
         // Get the hash of the Ethernet packet.
         Ethernet eth =
                 IFloodlightProviderService.bcStore.get(cntx, IFloodlightProviderService.CONTEXT_PI_PAYLOAD);
 
-        // some FORWARD_OR_FLOOD packets are unicast with unknown destination mac
-        // if (eth.isBroadcast() || eth.isMulticast())
-            return sw.updateBroadcastCache(new Long(eth.hashCode()), pi.getInPort());
+        long hash =  pi.getInPort() * prime2 + eth.hashCode();
 
-        // return false;
+        // some FORWARD_OR_FLOOD packets are unicast with unknown destination mac
+        return sw.updateBroadcastCache(hash, pi.getInPort());
     }
 
     public static boolean
diff --git a/src/main/python/PythonClient.pyc b/src/main/python/PythonClient.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..74e21796c0214b59f7eac77f59a555ac984f9a87
Binary files /dev/null and b/src/main/python/PythonClient.pyc differ
diff --git a/src/main/python/PythonServer.pyc b/src/main/python/PythonServer.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f35adf23c4ac5ad54a53e13ac0c1680709c19111
Binary files /dev/null and b/src/main/python/PythonServer.pyc differ
diff --git a/src/main/python/compileall.pyc b/src/main/python/compileall.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..620605f5aa8dba8f01cf4a2d3c0ed6121d13a84b
Binary files /dev/null and b/src/main/python/compileall.pyc differ
diff --git a/src/main/python/debugserver.pyc b/src/main/python/debugserver.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..20978335075f593f87f73ea6011b5184e227423e
Binary files /dev/null and b/src/main/python/debugserver.pyc differ