diff --git a/core/api/src/main/java/org/onosproject/net/OchSignalType.java b/core/api/src/main/java/org/onosproject/net/OchSignalType.java
index d9dd786..9caf3f3 100644
--- a/core/api/src/main/java/org/onosproject/net/OchSignalType.java
+++ b/core/api/src/main/java/org/onosproject/net/OchSignalType.java
@@ -21,9 +21,9 @@
  */
 public enum OchSignalType {
     /**
-     * Represents fix grid.
+     * Represents fixed grid.
      */
-    FIX_GRID,
+    FIXED_GRID,
 
     /**
      * Represents flex grid.
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 33f30ef..a163cea 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
@@ -389,6 +389,7 @@
      * @param sigType optical signal type (8 bits unsigned integer)
      * @return match criterion
      */
+    @Deprecated
     public static Criterion matchOpticalSignalType(short sigType) {
         return new OpticalSignalTypeCriterion(sigType, Type.OCH_SIGTYPE);
     }
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/OpticalSignalTypeCriterion.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/OpticalSignalTypeCriterion.java
index d6e8ebf..ecf605f 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/OpticalSignalTypeCriterion.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/OpticalSignalTypeCriterion.java
@@ -23,6 +23,7 @@
  * Implementation of optical signal type criterion (8 bits unsigned
  * integer).
  */
+@Deprecated
 public final class OpticalSignalTypeCriterion implements Criterion {
     private static final short MASK = 0xff;
     private final short signalType;         // Signal type value: 8 bits
diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java
index 5e1eacc..1290a34 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java
@@ -18,6 +18,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.OchSignal;
+import org.onosproject.net.OchSignalType;
 import org.onosproject.net.Path;
 
 import com.google.common.base.MoreObjects;
@@ -31,6 +32,7 @@
     private final ConnectPoint dst;
     private final Path path;
     private final OchSignal lambda;
+    private final OchSignalType signalType;
 
     private OpticalPathIntent(ApplicationId appId,
                               Key key,
@@ -38,12 +40,14 @@
                               ConnectPoint dst,
                               Path path,
                               OchSignal lambda,
+                              OchSignalType signalType,
                               int priority) {
         super(appId, key, ImmutableSet.copyOf(path.links()), priority);
         this.src = checkNotNull(src);
         this.dst = checkNotNull(dst);
         this.path = checkNotNull(path);
         this.lambda = checkNotNull(lambda);
+        this.signalType = checkNotNull(signalType);
     }
 
     protected OpticalPathIntent() {
@@ -51,6 +55,7 @@
         this.dst = null;
         this.path = null;
         this.lambda = null;
+        this.signalType = null;
     }
 
     /**
@@ -71,6 +76,7 @@
         private ConnectPoint dst;
         private Path path;
         private OchSignal lambda;
+        private OchSignalType signalType;
         Key key;
 
         @Override
@@ -133,6 +139,17 @@
         }
 
         /**
+         * Sets the optical signal type for the intent that will be built.
+         *
+         * @param signalType the optical signal type
+         * @return this builder
+         */
+        public Builder signalType(OchSignalType signalType) {
+            this.signalType = signalType;
+            return this;
+        }
+
+        /**
          * Builds an optical path intent from the accumulated parameters.
          *
          * @return optical path intent
@@ -146,6 +163,7 @@
                     dst,
                     path,
                     lambda,
+                    signalType,
                     priority
             );
         }
@@ -168,6 +186,10 @@
         return lambda;
     }
 
+    public OchSignalType signalType() {
+        return signalType;
+    }
+
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
@@ -179,6 +201,7 @@
                 .add("egressPort", dst)
                 .add("path", path)
                 .add("lambda", lambda)
+                .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 a705e12..bad60a0 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
@@ -221,8 +221,8 @@
     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 matchOchSignalType1 = Criteria.matchOchSignalType(OchSignalType.FIXED_GRID);
+    Criterion sameAsMatchOchSignalType1 = Criteria.matchOchSignalType(OchSignalType.FIXED_GRID);
     Criterion matchOchSignalType2 = Criteria.matchOchSignalType(OchSignalType.FLEX_GRID);
 
     Criterion matchIndexedLambda1 = Criteria.matchLambda(Lambda.indexedLambda(1));
diff --git a/core/api/src/test/java/org/onosproject/net/intent/OpticalPathIntentTest.java b/core/api/src/test/java/org/onosproject/net/intent/OpticalPathIntentTest.java
index 3296336..36e018a 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/OpticalPathIntentTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/OpticalPathIntentTest.java
@@ -18,7 +18,7 @@
 import org.hamcrest.Matchers;
 import org.junit.Before;
 import org.junit.Test;
-import org.onosproject.net.OchSignal;
+import org.onosproject.net.OchSignalType;
 import org.onosproject.net.Path;
 
 import com.google.common.testing.EqualsTester;
@@ -39,7 +39,6 @@
     OpticalPathIntent intent1;
     OpticalPathIntent intent2;
     Path defaultPath;
-    OchSignal lambda;
 
     @Before
     public void opticalPathIntentTestSetUp() {
@@ -50,6 +49,7 @@
                 .dst(connectPoint("two", 2))
                 .path(defaultPath)
                 .lambda(createLambda())
+                .signalType(OchSignalType.FIXED_GRID)
                 .priority(PRIORITY)
                 .build();
 
@@ -59,6 +59,7 @@
                 .dst(connectPoint("one", 2))
                 .path(defaultPath)
                 .lambda(createLambda())
+                .signalType(OchSignalType.FIXED_GRID)
                 .priority(PRIORITY)
                 .build();
     }
@@ -83,7 +84,7 @@
     }
 
     /**
-     * Checks that the optical path ntent objects are created correctly.
+     * Checks that the optical path intent objects are created correctly.
      */
     @Test
     public void testContents() {
