diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java
index dad75cb..94de7d9 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java
@@ -40,7 +40,9 @@
         NICIRA_MATCH_NSH_CH4(5),
         NICIRA_MATCH_ENCAP_ETH_TYPE(6),
         OFDPA_MATCH_VLAN_VID(16),
-        BMV2_MATCH_PARAMS(128);
+        BMV2_MATCH_PARAMS(128),
+
+        UNRESOLVED_TYPE(200);
 
         private ExtensionSelectorType type;
 
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
new file mode 100644
index 0000000..e5bc0c4
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2016-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.net.flow.criteria;
+
+import org.onosproject.net.flow.AbstractExtension;
+import java.util.Arrays;
+import java.util.Objects;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+
+/**
+ * Unresolved extension selector.
+ */
+public class UnresolvedExtensionSelector extends AbstractExtension implements ExtensionSelector {
+
+    private byte[] bytes;
+    private ExtensionSelectorType unresolvedSelectorType;
+
+    /**
+     * Creates a new unresolved extension selector with given data in byte form.
+     *
+     * @param type unresolved extension data type
+     */
+    public UnresolvedExtensionSelector(byte[] arraybyte, ExtensionSelectorType type) {
+        this.bytes = arraybyte;
+        this.unresolvedSelectorType = type;
+    }
+
+    @Override
+    public byte[] serialize() {
+        return bytes;
+    }
+
+    @Override
+    public void deserialize(byte[] data) {
+         bytes = data;
+    }
+
+    @Override
+    public ExtensionSelectorType type() {
+        return ExtensionSelectorType.ExtensionSelectorTypes.UNRESOLVED_TYPE.type();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(bytes);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof UnresolvedExtensionSelector) {
+            UnresolvedExtensionSelector that = (UnresolvedExtensionSelector) obj;
+            return Arrays.equals(bytes, that.bytes);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(type().toString())
+                .add("bytes", bytes)
+                .add("unresolvedSelectorType", unresolvedSelectorType)
+                .toString();
+    }
+}
+
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java
index a8df465..f036638 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java
@@ -62,7 +62,9 @@
         NICIRA_ENCAP_ETH_DST(122),
         NICIRA_ENCAP_ETH_TYPE(123),
         BMV2_ACTION(128),
-        OPLINK_ATTENUATION(130);
+        OPLINK_ATTENUATION(130),
+
+        UNRESOLVED_TYPE(200);
 
         private ExtensionTreatmentType type;
 
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
new file mode 100644
index 0000000..bf8c18b
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2015-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.net.flow.instructions;
+
+import com.google.common.base.MoreObjects;
+import org.onosproject.net.flow.AbstractExtension;
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * Unresolved extension treatment.
+ */
+public class UnresolvedExtensionTreatment extends AbstractExtension implements ExtensionTreatment {
+
+    private byte[] bytes;
+    private ExtensionTreatmentType unresolvedTreatmentType;
+
+    /**
+     * Creates a new unresolved extension treatment with given data in byte form.
+     *
+     * @param type unresolved extension data type
+     */
+    public UnresolvedExtensionTreatment(byte[] arraybyte, ExtensionTreatmentType type) {
+        this.bytes = arraybyte;
+        this.unresolvedTreatmentType = type;
+    }
+
+    @Override
+    public ExtensionTreatmentType type() {
+        return ExtensionTreatmentType.ExtensionTreatmentTypes.UNRESOLVED_TYPE.type();
+    }
+
+    @Override
+    public void deserialize(byte[] data) {
+        bytes = data;
+    }
+
+    @Override
+    public byte[] serialize() {
+        return bytes;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(bytes);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof UnresolvedExtensionTreatment) {
+            UnresolvedExtensionTreatment that = (UnresolvedExtensionTreatment) obj;
+            return Arrays.equals(bytes, that.bytes);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("bytes", bytes)
+                .add("unresolvedTreatmentType", unresolvedTreatmentType)
+                .toString();
+    }
+}
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/ExtensionCriterionSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/ExtensionCriterionSerializer.java
index c9e51b5..8e5eb90 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/ExtensionCriterionSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/ExtensionCriterionSerializer.java
@@ -21,6 +21,7 @@
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 import org.onlab.osgi.DefaultServiceDirectory;
+import org.onlab.util.ItemNotFoundException;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.behaviour.ExtensionSelectorResolver;
 import org.onosproject.net.driver.DefaultDriverData;
@@ -31,6 +32,7 @@
 import org.onosproject.net.flow.criteria.ExtensionCriterion;
 import org.onosproject.net.flow.criteria.ExtensionSelector;
 import org.onosproject.net.flow.criteria.ExtensionSelectorType;
+import org.onosproject.net.flow.criteria.UnresolvedExtensionSelector;
 
 /**
  * Serializer for extension criteria.
@@ -56,16 +58,20 @@
             Class<ExtensionCriterion> type) {
         ExtensionSelectorType exType = (ExtensionSelectorType) kryo.readClassAndObject(input);
         DeviceId deviceId = (DeviceId) kryo.readClassAndObject(input);
-
         DriverService driverService = DefaultServiceDirectory.getService(DriverService.class);
-        DriverHandler handler = new DefaultDriverHandler(
-                new DefaultDriverData(driverService.getDriver(deviceId), deviceId));
-
-        ExtensionSelectorResolver resolver = handler.behaviour(ExtensionSelectorResolver.class);
-        ExtensionSelector selector = resolver.getExtensionSelector(exType);
-
         byte[] bytes = (byte[]) kryo.readClassAndObject(input);
-        selector.deserialize(bytes);
+        ExtensionSelector selector;
+
+        try {
+            DriverHandler handler = new DefaultDriverHandler(
+                    new DefaultDriverData(driverService.getDriver(deviceId), deviceId));
+            ExtensionSelectorResolver resolver = handler.behaviour(ExtensionSelectorResolver.class);
+            selector = resolver.getExtensionSelector(exType);
+            selector.deserialize(bytes);
+        } catch (ItemNotFoundException | IllegalArgumentException e) {
+            selector = new UnresolvedExtensionSelector(bytes, exType);
+        }
+
         return Criteria.extension(selector, deviceId);
     }
 }
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/ExtensionInstructionSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/ExtensionInstructionSerializer.java
index ef55977..daf6910 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/ExtensionInstructionSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/ExtensionInstructionSerializer.java
@@ -21,6 +21,7 @@
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 import org.onlab.osgi.DefaultServiceDirectory;
+import org.onlab.util.ItemNotFoundException;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.behaviour.ExtensionTreatmentResolver;
 import org.onosproject.net.driver.DefaultDriverData;
@@ -30,6 +31,7 @@
 import org.onosproject.net.flow.instructions.ExtensionTreatment;
 import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
 import org.onosproject.net.flow.instructions.Instructions;
+import org.onosproject.net.flow.instructions.UnresolvedExtensionTreatment;
 
 /**
  * Serializer for extension instructions.
@@ -56,17 +58,19 @@
                                                          Class<Instructions.ExtensionInstructionWrapper> type) {
         ExtensionTreatmentType exType = (ExtensionTreatmentType) kryo.readClassAndObject(input);
         DeviceId deviceId = (DeviceId) kryo.readClassAndObject(input);
-
         DriverService driverService = DefaultServiceDirectory.getService(DriverService.class);
-        DriverHandler handler = new DefaultDriverHandler(
-                new DefaultDriverData(driverService.getDriver(deviceId), deviceId));
-
-        ExtensionTreatmentResolver resolver = handler.behaviour(ExtensionTreatmentResolver.class);
-        ExtensionTreatment instruction = resolver.getExtensionInstruction(exType);
-
         byte[] bytes = (byte[]) kryo.readClassAndObject(input);
+        ExtensionTreatment instruction;
 
-        instruction.deserialize(bytes);
+        try {
+            DriverHandler handler = new DefaultDriverHandler(
+                    new DefaultDriverData(driverService.getDriver(deviceId), deviceId));
+            ExtensionTreatmentResolver resolver = handler.behaviour(ExtensionTreatmentResolver.class);
+            instruction = resolver.getExtensionInstruction(exType);
+            instruction.deserialize(bytes);
+        } catch (ItemNotFoundException | IllegalArgumentException e) {
+            instruction = new UnresolvedExtensionTreatment(bytes, exType);
+        }
 
         return Instructions.extension(instruction, deviceId);
     }
