diff --git a/features/features.xml b/features/features.xml
index cad8e6a..09dd249 100644
--- a/features/features.xml
+++ b/features/features.xml
@@ -40,9 +40,9 @@
         <bundle>mvn:io.dropwizard.metrics/metrics-json/3.1.2</bundle>
         <bundle>mvn:com.eclipsesource.minimal-json/minimal-json/0.9.4</bundle>
 
-        <bundle>mvn:com.esotericsoftware/kryo/3.0.3</bundle>
-        <bundle>mvn:com.esotericsoftware/reflectasm/1.11.0</bundle>
-        <bundle>mvn:org.ow2.asm/asm/5.0.3</bundle>
+        <bundle>mvn:com.esotericsoftware/kryo/4.0.0</bundle>
+        <bundle>mvn:com.esotericsoftware/reflectasm/1.11.3</bundle>
+        <bundle>mvn:org.ow2.asm/asm/5.0.4</bundle>
         <bundle>mvn:com.esotericsoftware/minlog/1.3.0</bundle>
         <bundle>mvn:org.objenesis/objenesis/2.2</bundle>
 
diff --git a/lib/BUCK b/lib/BUCK
index b6895f5..c5b609c 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Thu Aug 11 12:54:15 PDT 2016. Do not edit this file manually. *****
+# ***** This file was auto-generated at Tue Aug 16 15:39:29 PDT 2016. Do not edit this file manually. *****
 osgi_feature_group(
   name = 'COMPILE',
   visibility = ['PUBLIC'],
@@ -124,10 +124,10 @@
 
 remote_jar (
   name = 'asm',
-  out = 'asm-5.0.3.jar',
-  url = 'mvn:org.ow2.asm:asm:jar:5.0.3',
-  sha1 = 'dcc2193db20e19e1feca8b1240dbbc4e190824fa',
-  maven_coords = 'org.ow2.asm:asm:5.0.3',
+  out = 'asm-5.0.4.jar',
+  url = 'mvn:org.ow2.asm:asm:jar:5.0.4',
+  sha1 = '0da08b8cce7bbf903602a25a3a163ae252435795',
+  maven_coords = 'org.ow2.asm:asm:5.0.4',
   visibility = [ 'PUBLIC' ],
 )
 
@@ -628,10 +628,10 @@
 
 remote_jar (
   name = 'kryo',
-  out = 'kryo-3.0.3.jar',
-  url = 'mvn:com.esotericsoftware:kryo:jar:3.0.3',
-  sha1 = '01ebca99f633ef31484176a727093e78c7fa43e7',
-  maven_coords = 'com.esotericsoftware:kryo:3.0.3',
+  out = 'kryo-4.0.0.jar',
+  url = 'mvn:com.esotericsoftware:kryo:jar:4.0.0',
+  sha1 = '9f5c64c1315ec79bee0f56bb88e4ae94b65048ce',
+  maven_coords = 'com.esotericsoftware:kryo:4.0.0',
   visibility = [ 'PUBLIC' ],
 )
 
diff --git a/lib/deps.json b/lib/deps.json
index ec745b8..fec42a8 100644
--- a/lib/deps.json
+++ b/lib/deps.json
@@ -85,7 +85,7 @@
   "artifacts": {
     "gmetric4j": "mvn:info.ganglia.gmetric4j:gmetric4j:1.0.10",
     "aopalliance-repackaged": "mvn:org.glassfish.hk2.external:aopalliance-repackaged:2.4.0-b34",
-    "asm": "mvn:org.ow2.asm:asm:5.0.3",
+    "asm": "mvn:org.ow2.asm:asm:5.0.4",
     "atomix": "mvn:io.atomix:atomix-all:1.0.0-rc9",
     "commons-codec": "mvn:commons-codec:commons-codec:1.10",
     "commons-collections": "mvn:commons-collections:commons-collections:3.2.2",
@@ -141,7 +141,7 @@
     "jsch": "mvn:com.jcraft:jsch:0.1.53",
     "jsr305": "mvn:com.google.code.findbugs:jsr305:3.0.1",
     "junit": "mvn:junit:junit:4.12",
-    "kryo": "mvn:com.esotericsoftware:kryo:3.0.3",
+    "kryo": "mvn:com.esotericsoftware:kryo:4.0.0",
     "mapdb": "mvn:org.mapdb:mapdb:1.0.9",
     "metrics-core": "mvn:io.dropwizard.metrics:metrics-core:3.1.0",
     "metrics-ganglia": "mvn:io.dropwizard.metrics:metrics-ganglia:3.1.2",
diff --git a/lib/pom.xml b/lib/pom.xml
index e7cb764..118586c 100644
--- a/lib/pom.xml
+++ b/lib/pom.xml
@@ -263,18 +263,17 @@
             <dependency>
                 <groupId>com.esotericsoftware</groupId>
                 <artifactId>kryo</artifactId>
-                <version>3.0.3</version>
+                <version>4.0.0</version>
             </dependency>
             <dependency>
                 <groupId>com.esotericsoftware</groupId>
                 <artifactId>reflectasm</artifactId>
-                <version>1.11.0</version>
-                <type>bundle</type>
+                <version>1.11.3</version>
             </dependency>
             <dependency>
                 <groupId>org.ow2.asm</groupId>
                 <artifactId>asm</artifactId>
-                <version>5.0.3</version>
+                <version>5.0.4</version>
             </dependency>
             <dependency>
                 <groupId>com.esotericsoftware</groupId>
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java
index d915ddd..5b67a5c 100644
--- a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java
+++ b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java
@@ -174,6 +174,7 @@
             writer.write(String.format(
                     "# ***** This file was auto-generated at %s. Do not edit this file manually. *****\n",
                     new Date().toString()));
+            writer.write("# ***** Use onos-lib-gen *****\n");
             libraries.forEach(library -> writer.print(library.getBuckFragment()));
             artifacts.forEach(artifact -> writer.print(artifact.getBuckFragment()));
             writer.flush();
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 5fb1afc..7328c8d 100644
--- a/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java
+++ b/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java
@@ -21,6 +21,7 @@
 import com.esotericsoftware.kryo.io.ByteBufferInput;
 import com.esotericsoftware.kryo.io.ByteBufferOutput;
 import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
 import com.esotericsoftware.kryo.pool.KryoCallback;
 import com.esotericsoftware.kryo.pool.KryoFactory;
 import com.esotericsoftware.kryo.pool.KryoPool;
@@ -271,19 +272,12 @@
      * @return serialized bytes
      */
     public byte[] serialize(final Object obj, final int bufferSize) {
-        ByteBufferOutput out = new ByteBufferOutput(bufferSize, MAX_BUFFER_SIZE);
-        try {
-            Kryo kryo = borrow();
-            try {
-                kryo.writeClassAndObject(out, obj);
-                out.flush();
-                return out.toBytes();
-            } finally {
-                release(kryo);
-            }
-        } finally {
-            out.release();
-        }
+        Output out = new Output(bufferSize, MAX_BUFFER_SIZE);
+        return pool.run(kryo -> {
+            kryo.writeClassAndObject(out, obj);
+            out.flush();
+            return out.toBytes();
+        });
     }
 
     /**
