diff --git a/core/api/src/main/java/org/onosproject/net/IndexedLambda.java b/core/api/src/main/java/org/onosproject/net/IndexedLambda.java
index e350b47..5a0077b 100644
--- a/core/api/src/main/java/org/onosproject/net/IndexedLambda.java
+++ b/core/api/src/main/java/org/onosproject/net/IndexedLambda.java
@@ -22,20 +22,29 @@
  */
 public class IndexedLambda implements Lambda {
 
-    private final long lambda;
+    private final long index;
 
     /**
      * Creates an instance representing the wavelength specified by the given index number.
      *
-     * @param lambda index number of wavelength
+     * @param index index number of wavelength
      */
-    IndexedLambda(long lambda) {
-        this.lambda = lambda;
+    IndexedLambda(long index) {
+        this.index = index;
+    }
+
+    /**
+     * Returns the index number of lambda.
+     *
+     * @return the index number of lambda
+     */
+    public long index() {
+        return index;
     }
 
     @Override
     public int hashCode() {
-        return (int) (lambda ^ (lambda >>> 32));
+        return (int) (index ^ (index >>> 32));
     }
 
     @Override
@@ -48,13 +57,13 @@
         }
 
         final IndexedLambda that = (IndexedLambda) obj;
-        return this.lambda == that.lambda;
+        return this.index == that.index;
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
-                .add("lambda", lambda)
+                .add("lambda", index)
                 .toString();
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
index f9894da..9fdd98a 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
@@ -21,10 +21,13 @@
 import org.onlab.packet.MplsLabel;
 import org.onlab.packet.VlanId;
 import org.onosproject.core.GroupId;
+import org.onosproject.net.IndexedLambda;
+import org.onosproject.net.Lambda;
 import org.onosproject.net.OchSignal;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.instructions.L0ModificationInstruction.L0SubType;
 import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
+import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModOchSignalInstruction;
 import org.onosproject.net.flow.instructions.L3ModificationInstruction.L3SubType;
 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction;
@@ -81,7 +84,9 @@
      *
      * @param lambda the lambda to modify to
      * @return a l0 modification
+     * @deprecated in Cardinal Release. Use {@link #modL0Lambda(Lambda)} instead.
      */
+    @Deprecated
     public static L0ModificationInstruction modL0Lambda(short lambda) {
         checkNotNull(lambda, "L0 lambda cannot be null");
         return new ModLambdaInstruction(L0SubType.LAMBDA, lambda);
@@ -93,9 +98,16 @@
      * @param lambda OCh signal
      * @return an L0 modification
      */
-    public static L0ModificationInstruction modL0OchSignal(OchSignal lambda) {
+    public static L0ModificationInstruction modL0Lambda(Lambda lambda) {
         checkNotNull(lambda, "L0 OCh signal cannot be null");
-        return new L0ModificationInstruction.ModOchSignalInstruction(lambda);
+
+        if (lambda instanceof IndexedLambda) {
+            return new ModLambdaInstruction(L0SubType.LAMBDA, (short) ((IndexedLambda) lambda).index());
+        } else if (lambda instanceof OchSignal) {
+            return new ModOchSignalInstruction((OchSignal) lambda);
+        } else {
+            throw new UnsupportedOperationException(String.format("Unsupported type: %s", lambda));
+        }
     }
 
     /**
