diff --git a/src/main/java/net/onrc/onos/core/newintent/IntentMap.java b/src/main/java/net/onrc/onos/core/newintent/IntentMap.java
index 325b3d8..09d3a23 100644
--- a/src/main/java/net/onrc/onos/core/newintent/IntentMap.java
+++ b/src/main/java/net/onrc/onos/core/newintent/IntentMap.java
@@ -1,8 +1,5 @@
 package net.onrc.onos.core.newintent;
 
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
 import com.hazelcast.core.EntryEvent;
 import com.hazelcast.core.EntryListener;
 import com.hazelcast.core.IMap;
@@ -32,9 +29,7 @@
  */
 class IntentMap<V> {
     private static final Logger log = LoggerFactory.getLogger(IntentMap.class);
-    private static final int MAX_BUFFER_SIZE = 64 * 1024;
 
-    private final KryoFactory factory = new KryoFactory();
     private final Class<V> valueType;
     private final IMap<String, byte[]> map;
 
@@ -61,7 +56,7 @@
         checkNotNull(id);
         checkNotNull(value);
 
-        map.set(id.toString(), serializeValue(value));
+        map.set(id.toString(), KryoFactory.serialize(value));
     }
 
     /**
@@ -78,7 +73,7 @@
             return null;
         }
 
-        return deserializeValue(bytes);
+        return KryoFactory.deserialize(bytes);
     }
 
     /**
@@ -100,7 +95,7 @@
     public Collection<V> values() {
         Collection<V> values = new ArrayList<>();
         for (byte[] bytes: map.values()) {
-            V value = deserializeValue(bytes);
+            V value = KryoFactory.deserialize(bytes);
             if (value == null) {
                 continue;
             }
@@ -153,7 +148,7 @@
                                 internalEvent.getMember(),
                                 internalEvent.getEventType().getType(),
                                 IntentId.valueOf(internalEvent.getKey()),
-                                deserializeValue(internalEvent.getValue())
+                                KryoFactory.<V>deserialize(internalEvent.getValue())
                         );
                 return converted;
             }
@@ -168,53 +163,4 @@
     void destroy() {
         map.destroy();
     }
-
-    // NOTE: this method was copied from HazelcastEventChannel due to necessity of quick hack
-    // TODO: remove the code duplication
-    /**
-     * Serialize the value.
-     *
-     * @param value the value to serialize.
-     * @return the serialized value.
-     */
-    private byte[] serializeValue(V value) {
-        //
-        // Encode the value
-        //
-        byte[] buffer = new byte[MAX_BUFFER_SIZE];
-        Kryo kryo = factory.newKryo();
-        try {
-            Output output = new Output(buffer, -1);
-            kryo.writeClassAndObject(output, value);
-            return output.toBytes();
-        } finally {
-            factory.deleteKryo(kryo);
-        }
-    }
-
-    // NOTE: this method was copied from HazelcastEventChannel due to necessity of quick hack
-    // TODO: remove the code duplication
-    /**
-     * Deserialize the value.
-     *
-     * @param bytes the buffer with the serialized value.
-     * @return the deserialized value.
-     */
-    private V deserializeValue(byte[] bytes) {
-        V value;
-
-        Kryo kryo = factory.newKryo();
-        try {
-            Input input = new Input(bytes);
-            Object objValue = kryo.readClassAndObject(input);
-            value = valueType.cast(objValue);
-        } catch (ClassCastException e) {
-            log.error("Received notification value cast failed", e);
-            return null;
-        } finally {
-            factory.deleteKryo(kryo);
-        }
-
-        return value;
-    }
 }
