diff --git a/core/api/src/main/java/org/onosproject/net/NshContextHeader.java b/core/api/src/main/java/org/onosproject/net/NshContextHeader.java
new file mode 100644
index 0000000..745b616
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/NshContextHeader.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2015 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;
+
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+
+/*
+ * Representation of NSH context header value
+ */
+public final class NshContextHeader {
+
+    private final int nshContextHeader;
+
+    /**
+     * Default constructor.
+     *
+     * @param nshContextHeader nsh context header value.
+     */
+    private NshContextHeader(int nshContextHeader) {
+        this.nshContextHeader = nshContextHeader;
+    }
+
+    /**
+     * Returns the NshContextHeader by setting its value.
+     *
+     * @param nshContextHeader nsh context header value.
+     * @return NshContextHeader
+     */
+    public static NshContextHeader of(int nshContextHeader) {
+        return new NshContextHeader(nshContextHeader);
+    }
+
+
+    /**
+     * Returns nsh context header value.
+     *
+     * @return the nsh context header
+     */
+    public int nshContextHeader() {
+        return nshContextHeader;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(nshContextHeader);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof NshContextHeader)) {
+            return false;
+        }
+        final NshContextHeader other = (NshContextHeader) obj;
+        return   Objects.equals(this.nshContextHeader, other.nshContextHeader);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("nshContextHeader", nshContextHeader)
+                .toString();
+    }
+}
+
diff --git a/core/api/src/main/java/org/onosproject/net/NshServiceIndex.java b/core/api/src/main/java/org/onosproject/net/NshServiceIndex.java
new file mode 100644
index 0000000..7e0c914
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/NshServiceIndex.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2015 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;
+
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+
+/*
+ * Representation of NSH Service index
+ */
+public final class NshServiceIndex {
+    private static final short MASK = 0xFF;
+    private final short serviceIndex;
+
+    /**
+     * Default constructor.
+     *
+     * @param serviceIndex nsh service index
+     */
+    private NshServiceIndex(short serviceIndex) {
+        this.serviceIndex = (short) (serviceIndex & MASK);
+    }
+
+    /**
+     * Returns the NshServiceIndex by setting its value.
+     *
+     * @param serviceIndex nsh service index
+     * @return NshServiceIndex
+     */
+    public static NshServiceIndex of(short serviceIndex) {
+        return new NshServiceIndex(serviceIndex);
+    }
+
+
+    /**
+     * Returns nsh service index value.
+     *
+     * @return the nsh service index
+     */
+    public short serviceIndex() {
+        return serviceIndex;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(serviceIndex);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof NshServiceIndex)) {
+            return false;
+        }
+        final NshServiceIndex other = (NshServiceIndex) obj;
+        return   Objects.equals(this.serviceIndex, other.serviceIndex);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("serviceIndex", serviceIndex)
+                .toString();
+    }
+}
+
diff --git a/core/api/src/main/java/org/onosproject/net/NshServicePathId.java b/core/api/src/main/java/org/onosproject/net/NshServicePathId.java
new file mode 100644
index 0000000..16fbc4e
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/NshServicePathId.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2015 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;
+
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+
+/*
+ * Representation of NSH Service path Identifier
+ */
+public final class NshServicePathId {
+
+    private final int servicePathId;
+
+    /**
+     * Default constructor.
+     *
+     * @param servicePathId nsh service path identifier
+     */
+    private NshServicePathId(int servicePathId) {
+        this.servicePathId = servicePathId;
+    }
+
+    /**
+     * Returns the NshServicePathId by setting its value.
+     *
+     * @param servicePathId nsh service path identifier
+     * @return NshServicePathId
+     */
+    public static NshServicePathId of(int servicePathId) {
+        return new NshServicePathId(servicePathId);
+    }
+
+
+    /**
+     * Returns nsh context service path identifier.
+     *
+     * @return the nsh context service path id
+     */
+    public int servicePathId() {
+        return servicePathId;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(servicePathId);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof NshServicePathId)) {
+            return false;
+        }
+        final NshServicePathId other = (NshServicePathId) obj;
+        return   Objects.equals(this.servicePathId, other.servicePathId);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("servicePathId", servicePathId)
+                .toString();
+    }
+}
+
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 982e5b1..fa8f092 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
@@ -32,7 +32,13 @@
      * These numbers have no impact on the actual OF type id.
      */
     public enum ExtensionSelectorTypes {
-        PLACEHOLDER(0); // TODO remove when actual extensions are added
+        NICIRA_MATCH_NSH_SPI(0),
+        NICIRA_MATCH_NSH_SI(1),
+        NICIRA_MATCH_NSH_CH1(2),
+        NICIRA_MATCH_NSH_CH2(3),
+        NICIRA_MATCH_NSH_CH3(4),
+        NICIRA_MATCH_NSH_CH4(5);
+
 
         private ExtensionSelectorType type;
 
