diff --git a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshContextHeader.java b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshContextHeader.java
index c826798..a6d50a0 100644
--- a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshContextHeader.java
+++ b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshContextHeader.java
@@ -16,13 +16,15 @@
 
 package org.onosproject.driver.extensions;
 
-import com.google.common.base.MoreObjects;
+import java.util.Objects;
+
 import org.onlab.util.KryoNamespace;
+import org.onosproject.net.NshContextHeader;
 import org.onosproject.net.flow.AbstractExtension;
 import org.onosproject.net.flow.instructions.ExtensionTreatment;
 import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
 
-import java.util.Objects;
+import com.google.common.base.MoreObjects;
 
 /**
  * Nicira set NSH Context header extension instruction.
@@ -30,7 +32,7 @@
 public class NiciraSetNshContextHeader extends AbstractExtension implements
         ExtensionTreatment {
 
-    private int nshCh;
+    private NshContextHeader nshCh;
     private ExtensionTreatmentType type;
 
     private final KryoNamespace appKryo = new KryoNamespace.Builder().build();
@@ -41,7 +43,7 @@
      * @param type extension treatment type
      */
     NiciraSetNshContextHeader(ExtensionTreatmentType type) {
-        this.nshCh = 0;
+        this.nshCh = NshContextHeader.of(0);
         this.type = type;
     }
 
@@ -51,7 +53,7 @@
      * @param nshCh nsh context header
      * @param type extension treatment type
      */
-    NiciraSetNshContextHeader(int nshCh, ExtensionTreatmentType type) {
+    NiciraSetNshContextHeader(NshContextHeader nshCh, ExtensionTreatmentType type) {
         this.nshCh = nshCh;
         this.type = type;
     }
@@ -61,7 +63,7 @@
      *
      * @return nsh context header
      */
-    public int nshCh() {
+    public NshContextHeader nshCh() {
         return nshCh;
     }
 
@@ -72,12 +74,12 @@
 
     @Override
     public void deserialize(byte[] data) {
-        nshCh = appKryo.deserialize(data);
+        nshCh = NshContextHeader.of(appKryo.deserialize(data));
     }
 
     @Override
     public byte[] serialize() {
-        return appKryo.serialize(nshCh);
+        return appKryo.serialize(nshCh.nshContextHeader());
     }
 
     @Override
diff --git a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSi.java b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSi.java
index 1480508..dec66c9 100644
--- a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSi.java
+++ b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSi.java
@@ -16,13 +16,15 @@
 
 package org.onosproject.driver.extensions;
 
-import com.google.common.base.MoreObjects;
+import java.util.Objects;
+
 import org.onlab.util.KryoNamespace;
+import org.onosproject.net.NshServiceIndex;
 import org.onosproject.net.flow.AbstractExtension;
 import org.onosproject.net.flow.instructions.ExtensionTreatment;
 import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
 
-import java.util.Objects;
+import com.google.common.base.MoreObjects;
 
 /**
  * Nicira set NSH SI extension instruction.
@@ -30,7 +32,7 @@
 public class NiciraSetNshSi extends AbstractExtension implements
         ExtensionTreatment {
 
-    private byte nshSi;
+    private NshServiceIndex nshSi;
 
     private final KryoNamespace appKryo = new KryoNamespace.Builder().build();
 
@@ -38,7 +40,7 @@
      * Creates a new set nsh si instruction.
      */
     NiciraSetNshSi() {
-        nshSi = 0;
+        nshSi = NshServiceIndex.of((short) 0);
     }
 
     /**
@@ -46,7 +48,7 @@
      *
      * @param nshSi nsh service index
      */
-    NiciraSetNshSi(byte nshSi) {
+    NiciraSetNshSi(NshServiceIndex nshSi) {
         this.nshSi = nshSi;
     }
 
@@ -55,7 +57,7 @@
      *
      * @return nsh service index
      */
-    public byte nshSi() {
+    public NshServiceIndex nshSi() {
         return nshSi;
     }
 
@@ -66,12 +68,12 @@
 
     @Override
     public void deserialize(byte[] data) {
-        nshSi = appKryo.deserialize(data);
+        nshSi = NshServiceIndex.of(appKryo.deserialize(data));
     }
 
     @Override
     public byte[] serialize() {
-        return appKryo.serialize(nshSi);
+        return appKryo.serialize(nshSi.serviceIndex());
     }
 
     @Override
diff --git a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSpi.java b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSpi.java
index 1a47173..72eef0d 100644
--- a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSpi.java
+++ b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSpi.java
@@ -16,13 +16,15 @@
 
 package org.onosproject.driver.extensions;
 
-import com.google.common.base.MoreObjects;
+import java.util.Objects;
+
 import org.onlab.util.KryoNamespace;
+import org.onosproject.net.NshServicePathId;
 import org.onosproject.net.flow.AbstractExtension;
 import org.onosproject.net.flow.instructions.ExtensionTreatment;
 import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
 
-import java.util.Objects;
+import com.google.common.base.MoreObjects;
 
 /**
  * Nicira set NSH SPI extension instruction.
@@ -30,7 +32,7 @@
 public class NiciraSetNshSpi extends AbstractExtension implements
         ExtensionTreatment {
 
-    private int nshSpi;
+    private NshServicePathId nshSpi;
 
     private final KryoNamespace appKryo = new KryoNamespace.Builder().build();
 
@@ -38,24 +40,24 @@
      * Creates a new set nsh spi instruction.
      */
     NiciraSetNshSpi() {
-        nshSpi = 0;
+        nshSpi = NshServicePathId.of(0);
     }
 
     /**
      * Creates a new set nsh spi instruction with given spi.
      *
-     * @param nshSpi nsh service path index
+     * @param nshSpi nsh service path id
      */
-    NiciraSetNshSpi(int nshSpi) {
+    NiciraSetNshSpi(NshServicePathId nshSpi) {
         this.nshSpi = nshSpi;
     }
 
     /**
-     * Gets the nsh service path index.
+     * Gets the nsh service path id.
      *
-     * @return nsh service path index
+     * @return nsh service path id
      */
-    public int nshSpi() {
+    public NshServicePathId nshSpi() {
         return nshSpi;
     }
 
@@ -66,12 +68,12 @@
 
     @Override
     public void deserialize(byte[] data) {
-        nshSpi = appKryo.deserialize(data);
+        nshSpi = NshServicePathId.of(appKryo.deserialize(data));
     }
 
     @Override
     public byte[] serialize() {
-        return appKryo.serialize(nshSpi);
+        return appKryo.serialize(nshSpi.servicePathId());
     }
 
     @Override
@@ -95,7 +97,7 @@
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("nshSpi", nshSpi)
+                .add("nshSpi", nshSpi.toString())
                 .toString();
     }
 }
diff --git a/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshContextHeaderTest.java b/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshContextHeaderTest.java
index 45d6d94..5993acf 100644
--- a/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshContextHeaderTest.java
+++ b/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshContextHeaderTest.java
@@ -20,6 +20,7 @@
 import static org.hamcrest.Matchers.notNullValue;
 
 import org.junit.Test;
+import org.onosproject.net.NshContextHeader;
 import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
 
 import com.google.common.testing.EqualsTester;
@@ -29,15 +30,15 @@
  */
 public class NiciraSetNshContextHeaderTest {
 
-    final NiciraSetNshContextHeader nshCh1 = new NiciraSetNshContextHeader(10,
+    final NiciraSetNshContextHeader nshCh1 = new NiciraSetNshContextHeader(NshContextHeader.of(10),
                                                                            ExtensionTreatmentType.
                                                                            ExtensionTreatmentTypes.
                                                                            NICIRA_SET_NSH_CH1.type());
-    final NiciraSetNshContextHeader sameAsNshCh1 = new NiciraSetNshContextHeader(10,
+    final NiciraSetNshContextHeader sameAsNshCh1 = new NiciraSetNshContextHeader(NshContextHeader.of(10),
                                                                                  ExtensionTreatmentType.
                                                                                  ExtensionTreatmentTypes.
                                                                                  NICIRA_SET_NSH_CH1.type());
-    final NiciraSetNshContextHeader nshCh2 = new NiciraSetNshContextHeader(20,
+    final NiciraSetNshContextHeader nshCh2 = new NiciraSetNshContextHeader(NshContextHeader.of(20),
                                                                            ExtensionTreatmentType.
                                                                            ExtensionTreatmentTypes.
                                                                            NICIRA_SET_NSH_CH1.type());
@@ -55,12 +56,12 @@
      */
     @Test
     public void testConstruction() {
-        final NiciraSetNshContextHeader niciraSetNshCh = new NiciraSetNshContextHeader(10,
+        final NiciraSetNshContextHeader niciraSetNshCh = new NiciraSetNshContextHeader(NshContextHeader.of(10),
                                                                                        ExtensionTreatmentType.
                                                                                        ExtensionTreatmentTypes.
                                                                                        NICIRA_SET_NSH_CH1.type());
         assertThat(niciraSetNshCh, is(notNullValue()));
-        assertThat(niciraSetNshCh.nshCh(), is(10));
+        assertThat(niciraSetNshCh.nshCh().nshContextHeader(), is(10));
         assertThat(niciraSetNshCh.type(), is(ExtensionTreatmentType.
                                              ExtensionTreatmentTypes.
                                              NICIRA_SET_NSH_CH1.type()));
diff --git a/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshSiTest.java b/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshSiTest.java
index 8541e9f..7113417 100644
--- a/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshSiTest.java
+++ b/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshSiTest.java
@@ -20,6 +20,7 @@
 import static org.hamcrest.Matchers.notNullValue;
 
 import org.junit.Test;
+import org.onosproject.net.NshServiceIndex;
 
 import com.google.common.testing.EqualsTester;
 
@@ -28,9 +29,9 @@
  */
 public class NiciraSetNshSiTest {
 
-    final NiciraSetNshSi nshSi1 = new NiciraSetNshSi((byte) 10);
-    final NiciraSetNshSi sameAsNshSi1 = new NiciraSetNshSi((byte) 10);
-    final NiciraSetNshSi nshSi2 = new NiciraSetNshSi((byte) 20);
+    final NiciraSetNshSi nshSi1 = new NiciraSetNshSi(NshServiceIndex.of((short) 10));
+    final NiciraSetNshSi sameAsNshSi1 = new NiciraSetNshSi(NshServiceIndex.of((short) 10));
+    final NiciraSetNshSi nshSi2 = new NiciraSetNshSi(NshServiceIndex.of((short) 20));
 
     /**
      * Checks the operation of equals() methods.
@@ -45,8 +46,8 @@
      */
     @Test
     public void testConstruction() {
-        final NiciraSetNshSi niciraSetNshSi = new NiciraSetNshSi((byte) 15);
+        final NiciraSetNshSi niciraSetNshSi = new NiciraSetNshSi(NshServiceIndex.of((short) 15));
         assertThat(niciraSetNshSi, is(notNullValue()));
-        assertThat(niciraSetNshSi.nshSi(), is((byte) 15));
+        assertThat(niciraSetNshSi.nshSi().serviceIndex(), is((short) 15));
     }
 }
diff --git a/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshSpiTest.java b/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshSpiTest.java
index 197e3bf..5650c82 100644
--- a/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshSpiTest.java
+++ b/drivers/src/test/java/org/onosproject/driver/extensions/NiciraSetNshSpiTest.java
@@ -20,6 +20,7 @@
 import static org.hamcrest.Matchers.notNullValue;
 
 import org.junit.Test;
+import org.onosproject.net.NshServicePathId;
 
 import com.google.common.testing.EqualsTester;
 
@@ -28,9 +29,9 @@
  */
 public class NiciraSetNshSpiTest {
 
-    final NiciraSetNshSpi nshSpi1 = new NiciraSetNshSpi(10);
-    final NiciraSetNshSpi sameAsNshSpi1 = new NiciraSetNshSpi(10);
-    final NiciraSetNshSpi nshSpi2 = new NiciraSetNshSpi(20);
+    final NiciraSetNshSpi nshSpi1 = new NiciraSetNshSpi(NshServicePathId.of(10));
+    final NiciraSetNshSpi sameAsNshSpi1 = new NiciraSetNshSpi(NshServicePathId.of(10));
+    final NiciraSetNshSpi nshSpi2 = new NiciraSetNshSpi(NshServicePathId.of(20));
 
     /**
      * Checks the operation of equals() methods.
@@ -45,8 +46,8 @@
      */
     @Test
     public void testConstruction() {
-        final NiciraSetNshSpi niciraSetNshSpi = new NiciraSetNshSpi(10);
+        final NiciraSetNshSpi niciraSetNshSpi = new NiciraSetNshSpi(NshServicePathId.of(10));
         assertThat(niciraSetNshSpi, is(notNullValue()));
-        assertThat(niciraSetNshSpi.nshSpi(), is(10));
+        assertThat(niciraSetNshSpi.nshSpi().servicePathId(), is(10));
     }
 }
