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 7eaebbe..38fbc27 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
@@ -34,7 +34,8 @@
     public enum ExtensionTreatmentTypes {
         // TODO fix type numbers to include experimenter id
         NICIRA_SET_TUNNEL_DST(0),
-        NICIRA_RESUBMIT(1);
+        NICIRA_RESUBMIT(1),
+        NICIRA_SET_NSH_SPI(32);
 
         private ExtensionTreatmentType type;
 
diff --git a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraExtensionTreatmentInterpreter.java b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraExtensionTreatmentInterpreter.java
index 544888d..a7f70f9 100644
--- a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraExtensionTreatmentInterpreter.java
+++ b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraExtensionTreatmentInterpreter.java
@@ -46,6 +46,10 @@
                 ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT.type())) {
             return true;
         }
+        if (extensionTreatmentType.equals(
+                ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_NSH_SPI.type())) {
+            return true;
+        }
         return false;
     }
 
@@ -60,6 +64,9 @@
         if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT.type())) {
           // TODO this will be implemented later
         }
+        if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_NSH_SPI.type())) {
+            // TODO this will be implemented later
+        }
         return null;
     }
 
@@ -88,6 +95,9 @@
         if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT.type())) {
             return new NiciraResubmit();
         }
+        if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_NSH_SPI.type())) {
+            return new NiciraSetNshSpi();
+        }
         throw new UnsupportedOperationException(
                 "Driver does not support extension type " + type.toString());
     }
diff --git a/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSpi.java b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSpi.java
new file mode 100644
index 0000000..2535870
--- /dev/null
+++ b/drivers/src/main/java/org/onosproject/driver/extensions/NiciraSetNshSpi.java
@@ -0,0 +1,104 @@
+/*
+ * 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.driver.extensions;
+
+import java.util.Objects;
+
+import org.onlab.util.KryoNamespace;
+import org.onosproject.net.flow.instructions.AbstractExtensionTreatment;
+import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
+import org.onosproject.store.serializers.Ip4AddressSerializer;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Nicira set NSH SPI extension instruction.
+ */
+public class NiciraSetNshSpi extends AbstractExtensionTreatment {
+
+    private int nshSpi;
+
+    private final KryoNamespace appKryo = new KryoNamespace.Builder()
+    .register(new Ip4AddressSerializer(), Integer.class)
+    .register(byte[].class)
+    .build();
+
+    /**
+     * Creates a new set nsh spi instruction.
+     */
+    NiciraSetNshSpi() {
+        nshSpi = 0;
+    }
+
+    /**
+     * Creates a new set nsh spi instruction with given spi.
+     *
+     * @param nshSpi nsh service path index
+     */
+    NiciraSetNshSpi(int nshSpi) {
+        this.nshSpi = nshSpi;
+    }
+
+    /**
+     * Gets the nsh service path index.
+     *
+     * @return nsh service path index
+     */
+    public int nshSpi() {
+        return nshSpi;
+    }
+
+    @Override
+    public ExtensionTreatmentType type() {
+        return ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_NSH_SPI.type();
+    }
+
+    @Override
+    public void deserialize(byte[] data) {
+        nshSpi = appKryo.deserialize(data);
+    }
+
+    @Override
+    public byte[] serialize() {
+        return appKryo.serialize(nshSpi);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(nshSpi);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof NiciraSetNshSpi) {
+            NiciraSetNshSpi that = (NiciraSetNshSpi) obj;
+            return Objects.equals(nshSpi, that.nshSpi);
+
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("nshSpi", nshSpi)
+                .toString();
+    }
+}
