diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
index 7e873d1..4f8fcbe 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
@@ -250,6 +250,8 @@
             ConnectPoint dstCP = new ConnectPoint(dst.elementId(), ochPorts.getRight().number());
 
             // Create optical connectivity intent
+            // In this case the channel and path optionally specified in this circuit intent
+            // are used to create the connectivity intent
             connectivityIntent = OpticalConnectivityIntent.builder()
                     .appId(appId)
                     // TODO New top-level Intent created and submitted
@@ -261,6 +263,8 @@
                     .priority(OPTICAL_CONNECTIVITY_INTENT_PRIORITY)
                     .signalType(ochPorts.getLeft().signalType())
                     .bidirectional(intent.isBidirectional())
+                    .ochSignal(intent.ochSignal())
+                    .suggestedPath(intent.suggestedPath())
                     .resourceGroup(intent.resourceGroup())
                     .build();
 
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/util/OpticalIntentUtility.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/util/OpticalIntentUtility.java
index 53c6cec..7956f57 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/util/OpticalIntentUtility.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/util/OpticalIntentUtility.java
@@ -38,6 +38,9 @@
 import static org.onosproject.net.optical.device.OpticalDeviceServiceView.opticalView;
 
 import org.slf4j.Logger;
+
+import java.util.Optional;
+
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -103,6 +106,8 @@
                         .dst(egress)
                         .signalType(signalType)
                         .bidirectional(bidirectional)
+                        .ochSignal(Optional.ofNullable(signal))
+                        .suggestedPath(Optional.ofNullable(suggestedPath))
                         .build();
             } else if (Type.OTN.equals(srcDevice.type())) {
                 intent = OpticalOduIntent.builder()
@@ -125,8 +130,8 @@
                     .dst(egress)
                     .signalType(signalType)
                     .bidirectional(bidirectional)
-                    .ochSignal(signal)
-                    .suggestedPath(suggestedPath)
+                    .ochSignal(Optional.ofNullable(signal))
+                    .suggestedPath(Optional.ofNullable(suggestedPath))
                     .build();
         } else {
             log.debug("Unable to create optical intent between connect points {} and {}", ingress, egress);
@@ -146,13 +151,13 @@
      * @param bidirectional if this argument is true, the optical link created
      * will be bidirectional, otherwise the link will be unidirectional.
      * @param signal optical signal
-     * @param path suggested path for the intent
+     * @param suggestedPath suggested path for the intent
      *
      * @return created intent
      */
     public static Intent createExplicitOpticalIntent(ConnectPoint ingress, ConnectPoint
             egress, DeviceService deviceService, Key key, ApplicationId appId, boolean
-                                                     bidirectional, OchSignal signal, Path path) {
+                                                     bidirectional, OchSignal signal, Path suggestedPath) {
 
         Intent intent = null;
 
@@ -188,6 +193,8 @@
                         .dst(egress)
                         .signalType(signalType)
                         .bidirectional(bidirectional)
+                        .ochSignal(Optional.ofNullable(signal))
+                        .suggestedPath(Optional.ofNullable(suggestedPath))
                         .build();
             } else if (Type.OTN.equals(srcDevice.type())) {
                 intent = OpticalOduIntent.builder()
@@ -212,8 +219,8 @@
                     .dst(egress)
                     .signalType(signalType)
                     .bidirectional(bidirectional)
-                    .ochSignal(signal)
-                    .suggestedPath(path)
+                    .ochSignal(Optional.ofNullable(signal))
+                    .suggestedPath(Optional.ofNullable(suggestedPath))
                     .build();
         } else {
             log.error("Unable to create explicit optical intent between connect points {} and {}", ingress, egress);
diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
index 2a29a31..e630b49 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
@@ -21,8 +21,11 @@
 import org.onosproject.net.CltSignalType;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.ResourceGroup;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.Path;
 
 import java.util.Collections;
+import java.util.Optional;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -37,6 +40,9 @@
     private final CltSignalType signalType;
     private final boolean isBidirectional;
 
+    private final Optional<OchSignal> ochSignal;
+    private final Optional<Path> suggestedPath;
+
     /**
      * Creates an optical circuit intent between the specified
      * connection points.
@@ -47,17 +53,28 @@
      * @param dst the destination transponder port
      * @param signalType ODU signal type
      * @param isBidirectional indicate if intent is bidirectional
+     * @param ochSignal optional suggested signal
+     * @param suggestedPath optional suggested path
      * @param priority priority to use for flows from this intent
      * @param resourceGroup resource group for this intent
      */
-    protected OpticalCircuitIntent(ApplicationId appId, Key key, ConnectPoint src, ConnectPoint dst,
-                                   CltSignalType signalType, boolean isBidirectional, int priority,
+    protected OpticalCircuitIntent(ApplicationId appId,
+                                   Key key,
+                                   ConnectPoint src,
+                                   ConnectPoint dst,
+                                   CltSignalType signalType,
+                                   boolean isBidirectional,
+                                   Optional<OchSignal> ochSignal,
+                                   Optional<Path> suggestedPath,
+                                   int priority,
                                    ResourceGroup resourceGroup) {
         super(appId, key, Collections.emptyList(), priority, resourceGroup);
         this.src = checkNotNull(src);
         this.dst = checkNotNull(dst);
         this.signalType = checkNotNull(signalType);
         this.isBidirectional = isBidirectional;
+        this.ochSignal = ochSignal;
+        this.suggestedPath = suggestedPath;
     }
 
     /**
@@ -78,6 +95,8 @@
         private ConnectPoint dst;
         private CltSignalType signalType;
         private boolean isBidirectional;
+        private Optional<OchSignal> ochSignal = Optional.empty();
+        private Optional<Path> suggestedPath = Optional.empty();
 
         @Override
         public Builder appId(ApplicationId appId) {
@@ -144,6 +163,28 @@
         }
 
         /**
+         * Sets the OCh signal of the intent.
+         *
+         * @param ochSignal the lambda
+         * @return this builder
+         */
+        public OpticalCircuitIntent.Builder ochSignal(Optional<OchSignal> ochSignal) {
+            this.ochSignal = ochSignal;
+            return this;
+        }
+
+        /**
+         * Sets the suggestedPath of the intent.
+         *
+         * @param suggestedPath the path
+         * @return this builder
+         */
+        public OpticalCircuitIntent.Builder suggestedPath(Optional<Path> suggestedPath) {
+            this.suggestedPath = suggestedPath;
+            return this;
+        }
+
+        /**
          * Builds an optical circuit intent from the accumulated parameters.
          *
          * @return point to point intent
@@ -157,6 +198,8 @@
                     dst,
                     signalType,
                     isBidirectional,
+                    ochSignal,
+                    suggestedPath,
                     priority,
                     resourceGroup
             );
@@ -172,6 +215,8 @@
         this.dst = null;
         this.signalType = null;
         this.isBidirectional = false;
+        this.ochSignal = null;
+        this.suggestedPath = null;
     }
 
     /**
@@ -210,6 +255,25 @@
         return isBidirectional;
     }
 
+    /**
+     * Returns the OCh signal of the intent.
+     *
+     * @return the lambda
+     */
+
+    public Optional<OchSignal> ochSignal() {
+        return ochSignal;
+    }
+
+    /**
+     * Returns the suggestedPath of the intent.
+     *
+     * @return the suggestedPath
+     */
+    public Optional<Path> suggestedPath() {
+        return suggestedPath;
+    }
+
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
@@ -222,6 +286,8 @@
                 .add("dst", dst)
                 .add("signalType", signalType)
                 .add("isBidirectional", isBidirectional)
+                .add("ochSignal", ochSignal)
+                .add("suggestedPath", suggestedPath)
                 .add("resourceGroup", resourceGroup())
                 .toString();
     }
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 59247e1..f96a0ba 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
@@ -169,8 +169,8 @@
          * @param ochSignal the lambda
          * @return this builder
          */
-        public Builder ochSignal(OchSignal ochSignal) {
-            this.ochSignal = Optional.ofNullable(ochSignal);
+        public Builder ochSignal(Optional<OchSignal> ochSignal) {
+            this.ochSignal = ochSignal;
             return this;
         }
 
@@ -180,8 +180,8 @@
          * @param suggestedPath the path
          * @return this builder
          */
-        public Builder suggestedPath(Path suggestedPath) {
-            this.suggestedPath = Optional.ofNullable(suggestedPath);
+        public Builder suggestedPath(Optional<Path> suggestedPath) {
+            this.suggestedPath = suggestedPath;
             return this;
         }
 
