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 7cf4411..59247e1 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
@@ -22,6 +22,7 @@
 import org.onosproject.net.OchSignal;
 import org.onosproject.net.OduSignalType;
 import org.onosproject.net.ResourceGroup;
+import org.onosproject.net.Path;
 
 import java.util.Collections;
 import java.util.Optional;
@@ -31,6 +32,7 @@
 /**
  * An optical layer intent for connectivity between two OCh ports.
  * No traffic selector or traffic treatment are needed.
+ * OchSignal and suggestedPath are optional.
  */
 @Beta
 public final class OpticalConnectivityIntent extends Intent {
@@ -38,7 +40,9 @@
     private final ConnectPoint dst;
     private final OduSignalType signalType;
     private final boolean isBidirectional;
+
     private final Optional<OchSignal> ochSignal;
+    private final Optional<Path> suggestedPath;
 
     /**
      * Creates an optical connectivity intent between the specified
@@ -51,6 +55,7 @@
      * @param signalType signal type
      * @param isBidirectional indicates if intent is unidirectional
      * @param ochSignal optional OCh signal
+     * @param suggestedPath optional suggested path
      * @param priority priority to use for flows from this intent
      * @param resourceGroup resource group of this intent
      */
@@ -61,6 +66,7 @@
                                         OduSignalType signalType,
                                         boolean isBidirectional,
                                         Optional<OchSignal> ochSignal,
+                                        Optional<Path> suggestedPath,
                                         int priority,
                                         ResourceGroup resourceGroup) {
         super(appId, key, Collections.emptyList(), priority, resourceGroup);
@@ -69,6 +75,7 @@
         this.signalType = checkNotNull(signalType);
         this.isBidirectional = isBidirectional;
         this.ochSignal = ochSignal;
+        this.suggestedPath = suggestedPath;
     }
 
     /**
@@ -90,6 +97,7 @@
         private OduSignalType signalType;
         private boolean isBidirectional;
         private Optional<OchSignal> ochSignal = Optional.empty();
+        private Optional<Path> suggestedPath = Optional.empty();
 
         @Override
         public Builder appId(ApplicationId appId) {
@@ -167,6 +175,17 @@
         }
 
         /**
+         * Sets the suggestedPath of the intent.
+         *
+         * @param suggestedPath the path
+         * @return this builder
+         */
+        public Builder suggestedPath(Path suggestedPath) {
+            this.suggestedPath = Optional.ofNullable(suggestedPath);
+            return this;
+        }
+
+        /**
          * Builds an optical connectivity intent from the accumulated parameters.
          *
          * @return point to point intent
@@ -181,6 +200,7 @@
                     signalType,
                     isBidirectional,
                     ochSignal,
+                    suggestedPath,
                     priority,
                     resourceGroup
             );
@@ -197,6 +217,7 @@
         this.signalType = null;
         this.isBidirectional = false;
         this.ochSignal = null;
+        this.suggestedPath = null;
     }
 
     /**
@@ -240,10 +261,20 @@
      *
      * @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)
@@ -257,6 +288,7 @@
                 .add("signalType", signalType)
                 .add("isBidirectional", isBidirectional)
                 .add("ochSignal", ochSignal)
+                .add("suggestedPath", suggestedPath)
                 .add("resourceGroup", resourceGroup())
                 .toString();
     }
