diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
index 31148ab..fead3bd 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
@@ -24,6 +24,7 @@
 import org.onlab.packet.MplsLabel;
 import org.onlab.packet.VlanId;
 import org.onosproject.core.GroupId;
+import org.onosproject.net.IndexedLambda;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.instructions.Instruction;
 import org.onosproject.net.flow.instructions.Instructions;
@@ -323,7 +324,7 @@
 
         @Override
         public Builder setLambda(short lambda) {
-            return add(Instructions.modL0Lambda(lambda));
+            return add(Instructions.modL0Lambda(new IndexedLambda(lambda)));
         }
 
         @Override
diff --git a/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficTreatmentTest.java b/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficTreatmentTest.java
index b540796..fcf6d9c 100644
--- a/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficTreatmentTest.java
+++ b/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficTreatmentTest.java
@@ -20,6 +20,7 @@
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
+import org.onosproject.net.IndexedLambda;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.instructions.Instruction;
 import org.onosproject.net.flow.instructions.Instructions;
@@ -46,7 +47,7 @@
     public void testTreatmentBuilderConstructors() {
         final TrafficTreatment treatment1 =
                 DefaultTrafficTreatment.builder()
-                        .add(Instructions.modL0Lambda((short) 4))
+                        .add(Instructions.modL0Lambda(new IndexedLambda(4)))
                         .build();
         final TrafficTreatment treatment2 =
                 DefaultTrafficTreatment.builder(treatment1).build();
@@ -59,7 +60,7 @@
     @Test
     public void testBuilderMethods() {
         final Instruction instruction1 =
-                Instructions.modL0Lambda((short) 4);
+                Instructions.modL0Lambda(new IndexedLambda(4));
 
         final TrafficTreatment.Builder builder1 =
                 DefaultTrafficTreatment.builder()
@@ -101,17 +102,19 @@
      */
     @Test
     public void testEquals() {
+        final IndexedLambda lambda1 = new IndexedLambda(4);
+        final IndexedLambda lambda2 = new IndexedLambda(5);
         final TrafficTreatment treatment1 =
                 DefaultTrafficTreatment.builder()
-                        .add(Instructions.modL0Lambda((short) 4))
-                        .build();
+                        .add(Instructions.modL0Lambda(lambda1))
+                                .build();
         final TrafficTreatment sameAsTreatment1 =
                 DefaultTrafficTreatment.builder()
-                        .add(Instructions.modL0Lambda((short) 4))
+                        .add(Instructions.modL0Lambda(lambda1))
                         .build();
         final TrafficTreatment treatment2 =
                 DefaultTrafficTreatment.builder()
-                        .add(Instructions.modL0Lambda((short) 2))
+                        .add(Instructions.modL0Lambda(lambda2))
                         .build();
         new EqualsTester()
                 .addEqualityGroup(treatment1, sameAsTreatment1)
diff --git a/core/api/src/test/java/org/onosproject/net/flow/instructions/InstructionsTest.java b/core/api/src/test/java/org/onosproject/net/flow/instructions/InstructionsTest.java
index 344f9b7..aa33e4f 100644
--- a/core/api/src/test/java/org/onosproject/net/flow/instructions/InstructionsTest.java
+++ b/core/api/src/test/java/org/onosproject/net/flow/instructions/InstructionsTest.java
@@ -18,6 +18,7 @@
 import org.junit.Test;
 import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.GridType;
+import org.onosproject.net.IndexedLambda;
 import org.onosproject.net.Lambda;
 import org.onosproject.net.PortNumber;
 import org.onlab.packet.IpAddress;
@@ -180,8 +181,8 @@
 
     //  ModLambdaInstruction
 
-    private final short lambda1 = 1;
-    private final short lambda2 = 2;
+    private final IndexedLambda lambda1 = new IndexedLambda(1);
+    private final IndexedLambda lambda2 = new IndexedLambda(2);
     private final Instruction lambdaInstruction1 = Instructions.modL0Lambda(lambda1);
     private final Instruction sameAsLambdaInstruction1 = Instructions.modL0Lambda(lambda1);
     private final Instruction lambdaInstruction2 = Instructions.modL0Lambda(lambda2);
@@ -196,7 +197,7 @@
                 checkAndConvert(instruction,
                         Instruction.Type.L0MODIFICATION,
                         L0ModificationInstruction.ModLambdaInstruction.class);
-        assertThat(lambdaInstruction.lambda(), is(equalTo(lambda1)));
+        assertThat(lambdaInstruction.lambda(), is(equalTo((short) lambda1.index())));
     }
 
     /**
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
index 29af34a..bafbc0f 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
@@ -26,6 +26,7 @@
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.GridType;
+import org.onosproject.net.IndexedLambda;
 import org.onosproject.net.Lambda;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.instructions.Instruction;
@@ -101,7 +102,7 @@
     public void modLambdaInstructionTest() {
         final L0ModificationInstruction.ModLambdaInstruction instruction =
                 (L0ModificationInstruction.ModLambdaInstruction)
-                        Instructions.modL0Lambda((short) 55);
+                        Instructions.modL0Lambda(new IndexedLambda(55));
         final ObjectNode instructionJson =
                 instructionCodec.encode(instruction, context);
         assertThat(instructionJson, matchesInstruction(instruction));
