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 be4b90d..6e9a228 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
@@ -25,6 +25,7 @@
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.MplsLabel;
 import org.onlab.packet.VlanId;
+import org.onosproject.net.tunnel.OchSignalType;
 
 /**
  * Factory class to create various traffic selection criteria.
@@ -391,6 +392,16 @@
         return new OpticalSignalTypeCriterion(sigType, Type.OCH_SIGTYPE);
     }
 
+    /**
+     * Create a match on OCh (Optical Channel) signal type.
+     *
+     * @param signalType OCh signal type
+     * @return match criterion
+     */
+    public static Criterion matchOchSignalType(OchSignalType signalType) {
+        return new OchSignalTypeCriterion(signalType);
+    }
+
     public static Criterion dummy() {
         return new DummyCriterion();
     }
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalTypeCriterion.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalTypeCriterion.java
new file mode 100644
index 0000000..551fe24
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalTypeCriterion.java
@@ -0,0 +1,78 @@
+/*
+ * 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 com.google.common.base.MoreObjects;
+import org.onosproject.net.tunnel.OchSignalType;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Implementation of OCh (Optical Channel) singal type criterion.
+ */
+public class OchSignalTypeCriterion implements Criterion {
+
+    private final OchSignalType signalType;
+
+    /**
+     * Creates a criterion with the specified value.
+     *
+     * @param signalType OCh signal type
+     */
+    OchSignalTypeCriterion(OchSignalType signalType) {
+        this.signalType = checkNotNull(signalType);
+    }
+
+    @Override
+    public Type type() {
+        return Type.OCH_SIGTYPE;
+    }
+
+    /**
+     * Returns the OCh signal type to match.
+     *
+     * @return the OCh signal type to match
+     */
+    public OchSignalType signalType() {
+        return signalType;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(signalType);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof OchSignalTypeCriterion)) {
+            return false;
+        }
+        final OchSignalTypeCriterion that = (OchSignalTypeCriterion) obj;
+        return Objects.equals(this.signalType, that.signalType);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("signalType", signalType)
+                .toString();
+    }
+}
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 97badd3..0098d9c 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
@@ -27,6 +27,7 @@
 import org.onlab.packet.VlanId;
 
 import com.google.common.testing.EqualsTester;
+import org.onosproject.net.tunnel.OchSignalType;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
@@ -220,6 +221,10 @@
     Criterion sameAsMatchLambda1 = Criteria.matchLambda(lambda1);
     Criterion matchLambda2 = Criteria.matchLambda(lambda2);
 
+    Criterion matchOchSignalType1 = Criteria.matchOchSignalType(OchSignalType.FIX_GRID);
+    Criterion sameAsMatchOchSignalType1 = Criteria.matchOchSignalType(OchSignalType.FIX_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));
@@ -1057,6 +1062,17 @@
                 .testEquals();
     }
 
+    /**
+     * Test the equals() method of the OchSignalTypeCriterion class.
+     */
+    @Test
+    public void testOchSignalTypeCriterionEquals() {
+        new EqualsTester()
+                .addEqualityGroup(matchOchSignalType1, sameAsMatchOchSignalType1)
+                .addEqualityGroup(matchOchSignalType2)
+                .testEquals();
+    }
+
     // OpticalSignalTypeCriterion class
 
     /**
