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();
+    }
+}
