diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
index b50681e..11de4ae 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
@@ -29,6 +29,8 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.onlab.packet.Ethernet;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.Ip6Address;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
@@ -145,10 +147,14 @@
 
     private InternalTableHandler provisionStaticTables = new InternalTableHandler();
 
-    private KryoNamespace.Builder appKryo = new KryoNamespace.Builder()
+    private KryoNamespace appKryo = new KryoNamespace.Builder()
                     .register(IpAddress.Version.class)
                     .register(IpAddress.class)
-                    .register(NextHopGroupKey.class);
+                    .register(Ip4Address.class)
+                    .register(Ip6Address.class)
+                    .register(byte[].class)
+                    .register(NextHopGroupKey.class)
+                    .build();
 
     @Activate
     protected void activate() {
@@ -219,7 +225,7 @@
                 NextHop nextHop = nextHops.get(entry.nextHopIp());
                 group = groupService.getGroup(deviceId,
                                               new DefaultGroupKey(
-                                              appKryo.build().serialize(nextHop.group())));
+                                              appKryo.serialize(nextHop.group())));
 
                 if (group == null) {
                     log.debug("Adding pending flow {}", update.entry());
@@ -317,8 +323,8 @@
                     = new DefaultGroupDescription(deviceId,
                                                   GroupDescription.Type.INDIRECT,
                                                   new GroupBuckets(Collections
-                                                                           .singletonList(bucket)),
-                                                  new DefaultGroupKey(appKryo.build().serialize(groupKey)),
+                                                           .singletonList(bucket)),
+                                                  new DefaultGroupKey(appKryo.serialize(groupKey)),
                                                   appId);
 
             groupService.addGroup(groupDescription);
@@ -340,7 +346,6 @@
 
         Group group = groupService.getGroup(deviceId,
                                             new DefaultGroupKey(appKryo.
-                                                                build().
                                                                 serialize(nextHop.group())));
 
         // FIXME disabling group deletes for now until we verify the logic is OK
@@ -714,7 +719,7 @@
                 synchronized (pendingUpdates) {
 
                     NextHopGroupKey nhGroupKey =
-                            appKryo.build().deserialize(group.appCookie().key());
+                            appKryo.deserialize(group.appCookie().key());
                     Map<FibEntry, Group> entriesToInstall =
                             pendingUpdates.removeAll(nhGroupKey)
                                     .stream()
