diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
index 6b3d40a..919719c 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
@@ -26,6 +26,9 @@
 import org.onlab.packet.VlanId;
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.GridType;
+import org.onosproject.net.Lambda;
 import org.onosproject.net.OchSignalType;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.criteria.Criteria;
@@ -406,8 +409,9 @@
      * Tests lambda criterion.
      */
     @Test
-    public void matchLambdaTest() {
-        Criterion criterion = Criteria.matchLambda((short) 40000);
+    public void matchOchSignal() {
+        Lambda ochSignal = Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 4, 8);
+        Criterion criterion = Criteria.matchLambda(ochSignal);
         ObjectNode result = criterionCodec.encode(criterion, context);
         assertThat(result, matchesCriterion(criterion));
     }
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
index df0f3c6..8233826 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
@@ -15,8 +15,10 @@
  */
 package org.onosproject.codec.impl;
 
+import com.google.common.base.Joiner;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.onosproject.net.OchSignal;
 import org.onosproject.net.flow.criteria.Criterion;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -34,9 +36,9 @@
 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.LambdaCriterion;
 import org.onosproject.net.flow.criteria.MetadataCriterion;
 import org.onosproject.net.flow.criteria.MplsCriterion;
+import org.onosproject.net.flow.criteria.OchSignalCriterion;
 import org.onosproject.net.flow.criteria.OchSignalTypeCriterion;
 import org.onosproject.net.flow.criteria.PortCriterion;
 import org.onosproject.net.flow.criteria.SctpPortCriterion;
@@ -45,6 +47,8 @@
 import org.onosproject.net.flow.criteria.VlanIdCriterion;
 import org.onosproject.net.flow.criteria.VlanPcpCriterion;
 
+import java.util.Objects;
+
 /**
  * Hamcrest matcher for criterion objects.
  */
@@ -448,16 +452,29 @@
     }
 
     /**
-     * Matches a lambda criterion object.
+     * Matches an Och signal criterion object.
      *
      * @param criterion criterion to match
      * @return true if the JSON matches the criterion, false otherwise.
      */
-    private boolean matchCriterion(LambdaCriterion criterion) {
-        final int lambda = criterion.lambda();
-        final int jsonLambda = jsonCriterion.get("lambda").intValue();
-        if (lambda != jsonLambda) {
-            description.appendText("lambda was " + Integer.toString(lambda));
+    private boolean matchCriterion(OchSignalCriterion criterion) {
+        final OchSignal ochSignal = criterion.lambda();
+        final JsonNode jsonOchSignal = jsonCriterion.get("ochSignalId");
+        String jsonGridType = jsonOchSignal.get("gridType").textValue();
+        String jsonChannelSpacing = jsonOchSignal.get("channelSpacing").textValue();
+        int jsonSpacingMultiplier = jsonOchSignal.get("spacingMultiplier").intValue();
+        int jsonSlotGranularity = jsonOchSignal.get("slotGranularity").intValue();
+
+        boolean equality = Objects.equals(ochSignal.gridType().name(), jsonGridType)
+                && Objects.equals(ochSignal.channelSpacing().name(), jsonChannelSpacing)
+                && Objects.equals(ochSignal.spacingMultiplier(), jsonSpacingMultiplier)
+                && Objects.equals(ochSignal.slotGranularity(), jsonSlotGranularity);
+
+        if (!equality) {
+            String joined = Joiner.on(", ")
+                    .join(jsonGridType, jsonChannelSpacing, jsonSpacingMultiplier, jsonSlotGranularity);
+
+            description.appendText("och signal id was " + joined);
             return false;
         }
         return true;
@@ -572,7 +589,7 @@
                         (IPv6ExthdrFlagsCriterion) criterion);
 
             case OCH_SIGID:
-                return matchCriterion((LambdaCriterion) criterion);
+                return matchCriterion((OchSignalCriterion) criterion);
 
             case OCH_SIGTYPE:
                 return matchCriterion((OchSignalTypeCriterion) criterion);
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
index 2c2e488..95866bf 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
@@ -27,9 +27,12 @@
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.DefaultApplicationId;
+import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.GridType;
 import org.onosproject.net.HostId;
+import org.onosproject.net.Lambda;
 import org.onosproject.net.NetTestTools;
 import org.onosproject.net.OchSignalType;
 import org.onosproject.net.PortNumber;
@@ -138,11 +141,12 @@
         DeviceId did1 = did("device1");
         DeviceId did2 = did("device2");
         DeviceId did3 = did("device3");
+        Lambda ochSignal = Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 4, 8);
         final TrafficSelector selector = DefaultTrafficSelector.builder()
                 .matchIPProtocol((byte) 3)
                 .matchMplsLabel(MplsLabel.mplsLabel(4))
                 .add(Criteria.matchOchSignalType(OchSignalType.FIXED_GRID))
-                .matchLambda((short) 6)
+                .add(Criteria.matchLambda(ochSignal))
                 .matchEthDst(MacAddress.BROADCAST)
                 .matchIPDst(IpPrefix.valueOf("1.2.3.4/24"))
                 .build();
