diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java
index cb153a8..b942132 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java
@@ -24,7 +24,6 @@
 import org.onlab.packet.TpPort;
 import org.onlab.packet.VlanId;
 import org.onosproject.net.DeviceId;
-import org.onosproject.net.IndexedLambda;
 import org.onosproject.net.Lambda;
 import org.onosproject.net.OchSignal;
 import org.onosproject.net.OchSignalType;
@@ -460,9 +459,7 @@
      * @return match criterion
      */
     public static Criterion matchLambda(Lambda lambda) {
-        if (lambda instanceof IndexedLambda) {
-            return new IndexedLambdaCriterion((IndexedLambda) lambda);
-        } else if (lambda instanceof OchSignal) {
+        if (lambda instanceof OchSignal) {
             return new OchSignalCriterion((OchSignal) lambda);
         } else {
             throw new UnsupportedOperationException(String.format("Unsupported type of Lambda: %s", lambda));
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java
deleted file mode 100644
index 3311544..0000000
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.flow.criteria;
-
-import org.onosproject.net.IndexedLambda;
-
-import java.util.Objects;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Implementation of indexed lambda criterion.
- *
- * @deprecated in Emu (ONOS 1.4).
- */
-@Deprecated
-public class IndexedLambdaCriterion implements Criterion {
-
-    private final IndexedLambda lambda;
-
-    /**
-     * Creates a criterion with the specified value.
-     *
-     * @param lambda lambda index number
-     */
-    IndexedLambdaCriterion(IndexedLambda lambda) {
-        this.lambda = checkNotNull(lambda);
-    }
-
-    @Override
-    public Type type() {
-        // TODO: consider defining a new specific type
-        // Now OCH_SIGID is used due to compatibility concerns
-        return Type.OCH_SIGID;
-    }
-
-    /**
-     * Returns the indexed lambda to match.
-     *
-     * @return the indexed lambda to match
-     */
-    public IndexedLambda lambda() {
-        return lambda;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(type().ordinal(), lambda);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof IndexedLambdaCriterion)) {
-            return false;
-        }
-        final IndexedLambdaCriterion that = (IndexedLambdaCriterion) obj;
-        return Objects.equals(this.lambda, that.lambda);
-    }
-
-    @Override
-    public String toString() {
-        return type().toString() + SEPARATOR + lambda;
-    }
-}
diff --git a/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficSelectorTest.java b/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficSelectorTest.java
index 10c5a63..b6f3fa9 100644
--- a/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficSelectorTest.java
+++ b/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficSelectorTest.java
@@ -28,7 +28,9 @@
 import org.onlab.packet.MplsLabel;
 import org.onlab.packet.TpPort;
 import org.onlab.packet.VlanId;
-import org.onosproject.net.IndexedLambda;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.criteria.Criteria;
 import org.onosproject.net.flow.criteria.Criterion;
@@ -59,17 +61,14 @@
      */
     @Test
     public void testEquals() {
-        final short one = 1;
-        final short two = 2;
-
         final TrafficSelector selector1 = DefaultTrafficSelector.builder()
-                .add(Criteria.matchLambda(new IndexedLambda(one)))
+                .add(Criteria.matchLambda(new OchSignal(GridType.FLEX, ChannelSpacing.CHL_100GHZ, 1, 1)))
                 .build();
         final TrafficSelector sameAsSelector1 = DefaultTrafficSelector.builder()
-                .add(Criteria.matchLambda(new IndexedLambda(one)))
+                .add(Criteria.matchLambda(new OchSignal(GridType.FLEX, ChannelSpacing.CHL_100GHZ, 1, 1)))
                 .build();
         final TrafficSelector selector2 = DefaultTrafficSelector.builder()
-                .add(Criteria.matchLambda(new IndexedLambda(two)))
+                .add(Criteria.matchLambda(new OchSignal(GridType.FLEX, ChannelSpacing.CHL_50GHZ, 1, 1)))
                 .build();
 
         new EqualsTester()
@@ -265,7 +264,7 @@
         assertThat(selector, hasCriterionWithType(Type.IPV6_EXTHDR));
 
         selector = DefaultTrafficSelector.builder()
-                .add(Criteria.matchLambda(new IndexedLambda(shortValue))).build();
+                .add(Criteria.matchLambda(new OchSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 1, 1))).build();
         assertThat(selector, hasCriterionWithType(Type.OCH_SIGID));
     }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java b/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java
index 8b18ae6..40940fa 100644
--- a/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java
+++ b/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java
@@ -256,10 +256,6 @@
     Criterion sameAsMatchOchSignalType1 = Criteria.matchOchSignalType(OchSignalType.FIXED_GRID);
     Criterion matchOchSignalType2 = Criteria.matchOchSignalType(OchSignalType.FLEX_GRID);
 
-    Criterion matchIndexedLambda1 = Criteria.matchLambda(Lambda.indexedLambda(1));
-    Criterion sameAsMatchIndexedLambda1 = Criteria.matchLambda(Lambda.indexedLambda(1));
-    Criterion matchIndexedLambda2 = Criteria.matchLambda(Lambda.indexedLambda(2));
-
     Criterion matchOchSignal1 =
             Criteria.matchLambda(Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 4, 8));
     Criterion sameAsMatchOchSignal1 =
@@ -1147,14 +1143,6 @@
     }
 
     @Test
-    public void testIndexedLambdaCriterionEquals() {
-        new EqualsTester()
-                .addEqualityGroup(matchIndexedLambda1, sameAsMatchIndexedLambda1)
-                .addEqualityGroup(matchIndexedLambda2)
-                .testEquals();
-    }
-
-    @Test
     public void testOchSignalCriterionEquals() {
         new EqualsTester()
                 .addEqualityGroup(matchOchSignal1, sameAsMatchOchSignal1)
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
index ae1abf1..515a69e 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
@@ -51,7 +51,6 @@
 import org.onosproject.net.flow.criteria.IcmpTypeCriterion;
 import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion;
 import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion;
-import org.onosproject.net.flow.criteria.IndexedLambdaCriterion;
 import org.onosproject.net.flow.criteria.MplsCriterion;
 import org.onosproject.net.flow.criteria.OchSignalCriterion;
 import org.onosproject.net.flow.criteria.OchSignalTypeCriterion;
@@ -387,7 +386,7 @@
 
         checkCommonData(rule);
 
-        assertThat(rule.selector().criteria().size(), is(36));
+        assertThat(rule.selector().criteria().size(), is(35));
 
         rule.selector().criteria()
                 .stream()
@@ -516,10 +515,6 @@
         assertThat(((IPv6ExthdrFlagsCriterion) criterion).exthdrFlags(),
                 is(99));
 
-        criterion = getCriterion(Criterion.Type.OCH_SIGID);
-        assertThat(((IndexedLambdaCriterion) criterion).lambda(),
-                is(Lambda.indexedLambda(122)));
-
         criterion = getCriterion(Criterion.Type.TUNNEL_ID);
         assertThat(((TunnelIdCriterion) criterion).tunnelId(),
                 is(100L));
diff --git a/core/common/src/test/resources/org/onosproject/codec/impl/criteria-flow.json b/core/common/src/test/resources/org/onosproject/codec/impl/criteria-flow.json
index 0e8cfbc..1dab68c 100644
--- a/core/common/src/test/resources/org/onosproject/codec/impl/criteria-flow.json
+++ b/core/common/src/test/resources/org/onosproject/codec/impl/criteria-flow.json
@@ -38,7 +38,6 @@
             {"type":"IPV6_ND_TLL", "mac":"00:11:22:33:44:57"},
             {"type":"MPLS_LABEL", "label":123},
             {"type":"IPV6_EXTHDR", "exthdrFlags":99},
-            {"type":"OCH_SIGID", "lambda":122},
             {"type":"TUNNEL_ID", "tunnelId":100},
             {"type":"OCH_SIGTYPE", "ochSignalType":"FIXED_GRID"},
             {"type":"ODU_SIGTYPE", "oduSignalType":"ODU4"},
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
index 01d4592..7c556cd 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
@@ -126,7 +126,6 @@
 import org.onosproject.net.flow.criteria.IcmpTypeCriterion;
 import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion;
 import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion;
-import org.onosproject.net.flow.criteria.IndexedLambdaCriterion;
 import org.onosproject.net.flow.criteria.LambdaCriterion;
 import org.onosproject.net.flow.criteria.MetadataCriterion;
 import org.onosproject.net.flow.criteria.MplsBosCriterion;
@@ -356,7 +355,6 @@
                     TunnelIdCriterion.class,
                     IPv6ExthdrFlagsCriterion.class,
                     LambdaCriterion.class,
-                    IndexedLambdaCriterion.class,
                     OchSignalCriterion.class,
                     OchSignalTypeCriterion.class,
                     OduSignalIdCriterion.class,
