diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
index 6b48b00..c2b84ab 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
@@ -24,8 +24,8 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * An optical layer intent for connectivity from one transponder port to another
- * transponder port. No traffic selector or traffic treatment are needed.
+ * An optical layer intent for connectivity between two OCh ports.
+ * No traffic selector or traffic treatment are needed.
  */
 public final class OpticalConnectivityIntent extends Intent {
     private final ConnectPoint src;
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 0013c0d..5e1eacc 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
@@ -15,11 +15,9 @@
  */
 package org.onosproject.net.intent;
 
-import java.util.Collection;
-
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Link;
+import org.onosproject.net.OchSignal;
 import org.onosproject.net.Path;
 
 import com.google.common.base.MoreObjects;
@@ -32,27 +30,27 @@
     private final ConnectPoint src;
     private final ConnectPoint dst;
     private final Path path;
-
+    private final OchSignal lambda;
 
     private OpticalPathIntent(ApplicationId appId,
                               Key key,
                               ConnectPoint src,
                               ConnectPoint dst,
                               Path path,
+                              OchSignal lambda,
                               int priority) {
-        super(appId,
-                key,
-                ImmutableSet.copyOf(path.links()),
-                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);
     }
 
     protected OpticalPathIntent() {
         this.src = null;
         this.dst = null;
         this.path = null;
+        this.lambda = null;
     }
 
     /**
@@ -72,6 +70,7 @@
         private ConnectPoint src;
         private ConnectPoint dst;
         private Path path;
+        private OchSignal lambda;
         Key key;
 
         @Override
@@ -123,6 +122,17 @@
         }
 
         /**
+         * Sets the optical channel (lambda) for the intent that will be built.
+         *
+         * @param lambda the optical channel
+         * @return this builder
+         */
+        public Builder lambda(OchSignal lambda) {
+            this.lambda = lambda;
+            return this;
+        }
+
+        /**
          * Builds an optical path intent from the accumulated parameters.
          *
          * @return optical path intent
@@ -135,6 +145,7 @@
                     src,
                     dst,
                     path,
+                    lambda,
                     priority
             );
         }
@@ -153,6 +164,10 @@
         return path;
     }
 
+    public OchSignal lambda() {
+        return lambda;
+    }
+
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
@@ -163,11 +178,7 @@
                 .add("ingressPort", src)
                 .add("egressPort", dst)
                 .add("path", path)
+                .add("lambda", lambda)
                 .toString();
     }
-
-
-    public Collection<Link> requiredLinks() {
-        return path.links();
-    }
 }
