diff --git a/of/lib/gen-src/test/java/org/projectfloodlight/openflow/protocol/ver13/OFPacketOutVer13Test.java b/of/lib/gen-src/test/java/org/projectfloodlight/openflow/protocol/ver13/OFPacketOutVer13Test.java
new file mode 100644
index 0000000..faef63f
--- /dev/null
+++ b/of/lib/gen-src/test/java/org/projectfloodlight/openflow/protocol/ver13/OFPacketOutVer13Test.java
@@ -0,0 +1,65 @@
+// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+// Copyright (c) 2011, 2012 Open Networking Foundation
+// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
+// This library was generated by the LoxiGen Compiler.
+// See the file LICENSE.txt which should have been included in the source distribution
+
+// Automatically generated by LOXI from template unit_test.java
+// Do not modify
+
+package org.projectfloodlight.openflow.protocol.ver13;
+
+import org.projectfloodlight.openflow.protocol.*;
+import org.projectfloodlight.openflow.protocol.action.*;
+import org.projectfloodlight.openflow.protocol.actionid.*;
+import org.projectfloodlight.openflow.protocol.bsntlv.*;
+import org.projectfloodlight.openflow.protocol.errormsg.*;
+import org.projectfloodlight.openflow.protocol.meterband.*;
+import org.projectfloodlight.openflow.protocol.instruction.*;
+import org.projectfloodlight.openflow.protocol.instructionid.*;
+import org.projectfloodlight.openflow.protocol.match.*;
+import org.projectfloodlight.openflow.protocol.oxm.*;
+import org.projectfloodlight.openflow.protocol.queueprop.*;
+import org.projectfloodlight.openflow.types.*;
+import org.projectfloodlight.openflow.util.*;
+import org.projectfloodlight.openflow.exceptions.*;
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.junit.Before;
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.buffer.ChannelBuffers;
+import org.hamcrest.CoreMatchers;
+
+
+
+public class OFPacketOutVer13Test {
+    OFFactory factory;
+
+    final static byte[] PACKET_OUT_SERIALIZED =
+        new byte[] { 0x4, 0xd, 0x0, 0x33, 0x12, 0x34, 0x56, 0x78, 0x0, 0x0, 0x0, 0x64, 0x0, 0x0, 0x0, 0x4, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x2, (byte) 0xff, (byte) 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x61, 0x62, 0x63 };
+
+    @Before
+    public void setup() {
+        factory = OFFactoryVer13.INSTANCE;
+    }
+
+   // FIXME: No java stanza in test_data for this class. Add for more comprehensive unit testing
+
+   @Test
+   public void testReadWrite() throws Exception {
+       ChannelBuffer input = ChannelBuffers.copiedBuffer(PACKET_OUT_SERIALIZED);
+
+       // FIXME should invoke the overall reader once implemented
+       OFPacketOut packetOut = OFPacketOutVer13.READER.readFrom(input);
+       assertEquals(PACKET_OUT_SERIALIZED.length, input.readerIndex());
+
+       // write message again
+       ChannelBuffer bb = ChannelBuffers.dynamicBuffer();
+       packetOut.writeTo(bb);
+       byte[] written = new byte[bb.readableBytes()];
+       bb.readBytes(written);
+
+       assertThat(written, CoreMatchers.equalTo(PACKET_OUT_SERIALIZED));
+   }
+
+}
