diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/BitSetSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/BitSetSerializer.java
new file mode 100644
index 0000000..769fed1
--- /dev/null
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/BitSetSerializer.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2017-present 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.onosproject.store.serializers;
+
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.Serializer;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
+import java.util.BitSet;
+
+/**
+ * Kryo serializer for {@link BitSet}.
+ */
+public class BitSetSerializer extends Serializer<BitSet> {
+
+    /**
+     * Creates {@link BitSet} serializer instance.
+     */
+    public BitSetSerializer() {
+        super(false, false);
+    }
+
+    @Override
+    public void write(Kryo kryo, Output output, BitSet bitSet) {
+        final int len = bitSet.length();
+
+        output.writeInt(len, true);
+
+        byte[] bytes = bitSet.toByteArray();
+        output.writeInt(bytes.length, true);
+        output.writeBytes(bitSet.toByteArray());
+    }
+
+    @Override
+    public BitSet read(Kryo kryo, Input input, Class<BitSet> aClass) {
+        final int len = input.readInt(true);
+        int bytesize = input.readInt(true);
+        byte[] bytes = input.readBytes(bytesize);
+        return BitSet.valueOf(bytes);
+
+    }
+}
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
index c086cb8..ec53007 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
@@ -231,6 +231,7 @@
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.BitSet;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -569,6 +570,7 @@
             .register(ProtectionEndpointIntent.class)
             .register(ProtectedTransportIntent.class)
             .register(MarkerResource.class)
+            .register(new BitSetSerializer(), BitSet.class)
             .build("API");
 
     /**
diff --git a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
index dc45570..cd2b765 100644
--- a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
+++ b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
@@ -84,6 +84,7 @@
 
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import java.util.BitSet;
 import java.util.Collections;
 import java.time.Duration;
 
@@ -444,4 +445,17 @@
         }
     }
 
+    @Test
+    public void testBitSet() {
+        BitSet bs = new BitSet(32);
+        bs.set(2);
+        bs.set(8);
+        bs.set(12);
+        bs.set(18);
+        bs.set(25);
+        bs.set(511);
+
+        testSerializedEquals(bs);
+    }
+
 }
