diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4AddressSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4AddressSerializer.java
index 2370ad9..b33a204 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4AddressSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4AddressSerializer.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.store.serializers;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import org.onlab.packet.Ip4Address;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
@@ -45,6 +47,7 @@
     @Override
     public Ip4Address read(Kryo kryo, Input input, Class<Ip4Address> type) {
         final int octLen = input.readInt();
+        checkArgument(octLen == Ip4Address.BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         return Ip4Address.valueOf(octs);
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4PrefixSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4PrefixSerializer.java
index 029ffb1..134b6cb 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4PrefixSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4PrefixSerializer.java
@@ -15,8 +15,10 @@
  */
 package org.onosproject.store.serializers;
 
-import org.onlab.packet.Ip4Prefix;
+import static com.google.common.base.Preconditions.checkArgument;
 
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.Ip4Prefix;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
 import com.esotericsoftware.kryo.io.Input;
@@ -49,6 +51,7 @@
     public Ip4Prefix read(Kryo kryo, Input input,
             Class<Ip4Prefix> type) {
         int octLen = input.readInt();
+        checkArgument(octLen <= Ip4Address.BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         int prefLen = input.readInt();
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6AddressSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6AddressSerializer.java
index f8101f9..6cccd01e 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6AddressSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6AddressSerializer.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.store.serializers;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import org.onlab.packet.Ip6Address;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
@@ -45,6 +47,7 @@
     @Override
     public Ip6Address read(Kryo kryo, Input input, Class<Ip6Address> type) {
         final int octLen = input.readInt();
+        checkArgument(octLen == Ip6Address.BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         return Ip6Address.valueOf(octs);
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6PrefixSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6PrefixSerializer.java
index 91ba5a2..89c301a 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6PrefixSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6PrefixSerializer.java
@@ -15,8 +15,10 @@
  */
 package org.onosproject.store.serializers;
 
-import org.onlab.packet.Ip6Prefix;
+import static com.google.common.base.Preconditions.checkArgument;
 
+import org.onlab.packet.Ip6Address;
+import org.onlab.packet.Ip6Prefix;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
 import com.esotericsoftware.kryo.io.Input;
@@ -49,6 +51,7 @@
     public Ip6Prefix read(Kryo kryo, Input input,
             Class<Ip6Prefix> type) {
         int octLen = input.readInt();
+        checkArgument(octLen <= Ip6Address.BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         int prefLen = input.readInt();
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpAddressSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpAddressSerializer.java
index cb85fec..864d107 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpAddressSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpAddressSerializer.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.store.serializers;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import org.onlab.packet.IpAddress;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
@@ -44,6 +46,7 @@
     @Override
     public IpAddress read(Kryo kryo, Input input, Class<IpAddress> type) {
         final int octLen = input.readInt();
+        checkArgument(octLen <= IpAddress.INET6_BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         // Use the address size to decide whether it is IPv4 or IPv6 address
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpPrefixSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpPrefixSerializer.java
index cf0a20b..8e9a0e8 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpPrefixSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpPrefixSerializer.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.store.serializers;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
 
@@ -49,6 +51,7 @@
     public IpPrefix read(Kryo kryo, Input input,
             Class<IpPrefix> type) {
         int octLen = input.readInt();
+        checkArgument(octLen <= IpAddress.INET6_BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         int prefLen = input.readInt();
diff --git a/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java b/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java
index 9977e35..f5d2f9b 100644
--- a/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java
+++ b/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java
@@ -15,6 +15,8 @@
  */
 package org.onlab.util;
 
+import static org.slf4j.LoggerFactory.getLogger;
+
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
@@ -22,6 +24,7 @@
 import java.util.List;
 
 import org.apache.commons.lang3.tuple.Pair;
+import org.slf4j.Logger;
 
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
@@ -58,6 +61,8 @@
      */
     public static final int INITIAL_ID = 11;
 
+    private static final Logger log = getLogger(KryoNamespace.class);
+
 
     private final KryoPool pool = new KryoPool.Builder(this)
                                         .softReferences()
@@ -101,6 +106,12 @@
          */
         public Builder nextId(final int id) {
             if (!types.isEmpty()) {
+                if (id != FLOATING_ID && id < blockHeadId + types.size()) {
+
+                    log.warn("requested nextId {} could potentially overlap" +
+                             "with existing registrations {}+{} ",
+                             id, blockHeadId, types.size());
+                }
                 blocks.add(new RegistrationBlock(this.blockHeadId, types));
                 types = new ArrayList<>();
             }
