diff --git a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/DefaultOutboundPacketSerializer.java b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/DefaultOutboundPacketSerializer.java
new file mode 100644
index 0000000..3dca437
--- /dev/null
+++ b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/DefaultOutboundPacketSerializer.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2014 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onlab.onos.store.serializers;
+
+import java.nio.ByteBuffer;
+
+import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.flow.TrafficTreatment;
+import org.onlab.onos.net.packet.DefaultOutboundPacket;
+
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.Serializer;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
+/**
+ * Serializer for a default outbound packet.
+ */
+public class DefaultOutboundPacketSerializer extends Serializer<DefaultOutboundPacket> {
+
+    /**
+     * Creates {@link DefaultOutboundPacket} serializer instance.
+     */
+    public DefaultOutboundPacketSerializer() {
+        // non-null, immutable
+        super(false, true);
+    }
+
+    @Override
+    public DefaultOutboundPacket read(Kryo kryo, Input input,
+            Class<DefaultOutboundPacket> type) {
+        DeviceId sendThrough = (DeviceId) kryo.readClassAndObject(input);
+        TrafficTreatment treatment = (TrafficTreatment) kryo.readClassAndObject(input);
+        byte[] data = (byte[]) kryo.readClassAndObject(input);
+        return new DefaultOutboundPacket(sendThrough, treatment, ByteBuffer.wrap(data));
+    }
+
+    @Override
+    public void write(Kryo kryo, Output output, DefaultOutboundPacket object) {
+        kryo.writeClassAndObject(output, object.sendThrough());
+        kryo.writeClassAndObject(output, object.treatment());
+        kryo.writeClassAndObject(output, object.data().array());
+    }
+
+}
diff --git a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoNamespaces.java
index 9341cba..b91e8fc 100644
--- a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoNamespaces.java
+++ b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoNamespaces.java
@@ -74,6 +74,7 @@
 import org.onlab.onos.net.intent.PathIntent;
 import org.onlab.onos.net.intent.PointToPointIntent;
 import org.onlab.onos.net.link.DefaultLinkDescription;
+import org.onlab.onos.net.packet.DefaultOutboundPacket;
 import org.onlab.onos.net.provider.ProviderId;
 import org.onlab.onos.store.Timestamp;
 import org.onlab.packet.ChassisId;
@@ -115,6 +116,7 @@
                     HashMap.class,
                     HashSet.class,
                     LinkedList.class,
+                    byte[].class,
                     //
                     //
                     ControllerNode.State.class,
@@ -194,6 +196,7 @@
             .register(DefaultLink.class, new DefaultLinkSerializer())
             .register(MastershipTerm.class, new MastershipTermSerializer())
             .register(HostLocation.class, new HostLocationSerializer())
+            .register(DefaultOutboundPacket.class, new DefaultOutboundPacketSerializer())
 
             .build();
 
diff --git a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoSerializer.java b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoSerializer.java
index 03c3927..da37848 100644
--- a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoSerializer.java
+++ b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoSerializer.java
@@ -15,9 +15,10 @@
  */
 package org.onlab.onos.store.serializers;
 
-import org.onlab.util.KryoNamespace;
 import java.nio.ByteBuffer;
 
+import org.onlab.util.KryoNamespace;
+
 /**
  * StoreSerializer implementation using Kryo.
  */
@@ -30,7 +31,7 @@
     }
 
     /**
-     * Sets up the common serialzers pool.
+     * Sets up the common serializers pool.
      */
     protected void setupKryoPool() {
         serializerPool = KryoNamespace.newBuilder()
