diff --git a/src/main/java/net/floodlightcontroller/packet/IPv4.java b/src/main/java/net/floodlightcontroller/packet/IPv4.java
index afc31425dc5106b9587d03088bfe0135e0b2331d..870d17ae10641d6d645ba0fab2e08404b18818e5 100644
--- a/src/main/java/net/floodlightcontroller/packet/IPv4.java
+++ b/src/main/java/net/floodlightcontroller/packet/IPv4.java
@@ -378,8 +378,9 @@ public class IPv4 extends BasePacket {
         }
 
         IPacket payload;
-        isFragment = ((this.flags & IPV4_FLAGS_MOREFRAG) != 0) ||
-                (this.fragmentOffset != 0);
+        isFragment = ((this.flags & IPV4_FLAGS_DONTFRAG) == 0) &&
+                ((this.flags & IPV4_FLAGS_MOREFRAG) != 0 ||
+                this.fragmentOffset != 0);
         if (!isFragment && IPv4.protocolClassMap.containsKey(this.protocol)) {
             Class<? extends IPacket> clazz = IPv4.protocolClassMap.get(this.protocol);
             try {
diff --git a/src/test/java/net/floodlightcontroller/packet/IPv4Test.java b/src/test/java/net/floodlightcontroller/packet/IPv4Test.java
index c62b77602b2124eb9305162ba9e0e7ccd48df6cf..c9a86b03c73e3d7a7ba374c18f5f10c475dfbe06 100644
--- a/src/test/java/net/floodlightcontroller/packet/IPv4Test.java
+++ b/src/test/java/net/floodlightcontroller/packet/IPv4Test.java
@@ -143,4 +143,22 @@ public class IPv4Test {
         assertTrue(packet2.isFragment());
         assertTrue(Arrays.equals(pktSerializedLastFrag, pktSerialized2));
     }
+
+    @Test
+    public void testDeserializeDontFragment() {
+        // IP packet with more frag bit set
+        byte[] pktSerializedDontFrag = new byte[] { 0x45, 0x00,
+                0x00, 0x2e, 0x41, (byte) 0xbe, 0x60, 0x00, 0x40, 0x06,
+                (byte) 0xd4, (byte) 0xf0, (byte) 0xc0, (byte) 0xa8, 0x02, (byte) 0xdb, (byte) 0xd0, 0x55,
+                (byte) 0x90, 0x42, (byte) 0xd5, 0x48, 0x01, (byte) 0xbb, (byte) 0xe3, 0x50,
+                (byte) 0xb2, 0x2f, (byte) 0xfc, (byte) 0xf8, (byte) 0xa8, 0x2c, 0x50, 0x18,
+                (byte) 0xff, (byte) 0xff, 0x24, 0x3c, 0x00, 0x00, 0x14, 0x03,
+                0x01, 0x00, 0x01, 0x01,
+        };
+        IPv4 packet1 = new IPv4();
+        packet1.deserialize(pktSerializedDontFrag, 0, pktSerializedDontFrag.length);
+        byte[] pktSerialized1 = packet1.serialize();
+        assertTrue(!packet1.isFragment());
+        assertTrue(Arrays.equals(pktSerializedDontFrag, pktSerialized1));
+    }
 }