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 091ebc5..a1dcc1c 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
@@ -15,10 +15,12 @@
  */
 package org.onosproject.net.intent;
 
+import java.util.Collections;
+
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.ConnectPoint;
 
-import java.util.Collections;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * An optical layer intent for connectivity from one transponder port to another
@@ -33,32 +35,90 @@
      * connection points.
      *
      * @param appId application identification
-     * @param src the source transponder port
-     * @param dst the destination transponder port
-     */
-    public OpticalConnectivityIntent(ApplicationId appId,
-                                     ConnectPoint src, ConnectPoint dst) {
-
-        this(appId, null, src, dst);
-    }
-
-    /**
-     * Creates an optical connectivity intent between the specified
-     * connection points.
-     *
-     * @param appId application identification
      * @param key intent key
      * @param src the source transponder port
      * @param dst the destination transponder port
      */
-    public OpticalConnectivityIntent(ApplicationId appId,
+    protected OpticalConnectivityIntent(ApplicationId appId,
                                      Key key,
-                                     ConnectPoint src, ConnectPoint dst) {
-        super(appId, key, Collections.emptyList(), DEFAULT_INTENT_PRIORITY);
-        this.src = src;
-        this.dst = dst;
+                                     ConnectPoint src,
+                                     ConnectPoint dst,
+                                     int priority) {
+        super(appId, key, Collections.emptyList(), priority);
+        this.src = checkNotNull(src);
+        this.dst = checkNotNull(dst);
     }
 
+    /**
+     * Returns a new optical connectivity intent builder.
+     *
+     * @return host to host intent builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+
+    /**
+     * Builder for optical connectivity intents.
+     */
+    public static class Builder extends Intent.Builder {
+        private ConnectPoint src;
+        private ConnectPoint dst;
+
+        @Override
+        public Builder appId(ApplicationId appId) {
+            return (Builder) super.appId(appId);
+        }
+
+        @Override
+        public Builder key(Key key) {
+            return (Builder) super.key(key);
+        }
+
+        @Override
+        public Builder priority(int priority) {
+            return (Builder) super.priority(priority);
+        }
+
+        /**
+         * Sets the source for the intent that will be built.
+         *
+         * @param src source to use for built intent
+         * @return this builder
+         */
+        public Builder src(ConnectPoint src) {
+            this.src = src;
+            return this;
+        }
+
+        /**
+         * Sets the destination for the intent that will be built.
+         *
+         * @param dst dest to use for built intent
+         * @return this builder
+         */
+        public Builder dst(ConnectPoint dst) {
+            this.dst = dst;
+            return this;
+        }
+
+        /**
+         * Builds an optical connectivity intent from the accumulated parameters.
+         *
+         * @return point to point intent
+         */
+        public OpticalConnectivityIntent build() {
+
+            return new OpticalConnectivityIntent(
+                    appId,
+                    key,
+                    src,
+                    dst,
+                    priority
+            );
+        }
+    }
 
     /**
      * Constructor for serializer.
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 4843877..754d433 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,14 +15,15 @@
  */
 package org.onosproject.net.intent;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
+
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
 
-import java.util.Collection;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableSet;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -33,12 +34,16 @@
     private final Path path;
 
 
-    public OpticalPathIntent(ApplicationId appId,
-            ConnectPoint src,
-            ConnectPoint dst,
-            Path path) {
-        super(appId, null, ImmutableSet.copyOf(path.links()),
-                Intent.DEFAULT_INTENT_PRIORITY);
+    private OpticalPathIntent(ApplicationId appId,
+                              Key key,
+                              ConnectPoint src,
+                              ConnectPoint dst,
+                              Path path,
+                              int priority) {
+        super(appId,
+                key,
+                ImmutableSet.copyOf(path.links()),
+                priority);
         this.src = checkNotNull(src);
         this.dst = checkNotNull(dst);
         this.path = checkNotNull(path);
@@ -50,6 +55,92 @@
         this.path = null;
     }
 
+    /**
+     * Returns a new optical connectivity intent builder.
+     *
+     * @return host to host intent builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+
+    /**
+     * Builder for optical path intents.
+     */
+    public static class Builder extends Intent.Builder {
+        private ConnectPoint src;
+        private ConnectPoint dst;
+        private Path path;
+        Key key;
+
+        @Override
+        public Builder appId(ApplicationId appId) {
+            return (Builder) super.appId(appId);
+        }
+
+        @Override
+        public Builder key(Key key) {
+            return (Builder) super.key(key);
+        }
+
+        @Override
+        public Builder priority(int priority) {
+            return (Builder) super.priority(priority);
+        }
+
+        /**
+         * Sets the source for the intent that will be built.
+         *
+         * @param src source to use for built intent
+         * @return this builder
+         */
+        public Builder src(ConnectPoint src) {
+            this.src = src;
+            return this;
+        }
+
+        /**
+         * Sets the destination for the intent that will be built.
+         *
+         * @param dst dest to use for built intent
+         * @return this builder
+         */
+        public Builder dst(ConnectPoint dst) {
+            this.dst = dst;
+            return this;
+        }
+
+        /**
+         * Sets the path for the intent that will be built.
+         *
+         * @param path path to use for built intent
+         * @return this builder
+         */
+        public Builder path(Path path) {
+            this.path = path;
+            return this;
+        }
+
+        /**
+         * Builds an optical path intent from the accumulated parameters.
+         *
+         * @return optical path intent
+         */
+        public OpticalPathIntent build() {
+
+            return new OpticalPathIntent(
+                    appId,
+                    key,
+                    src,
+                    dst,
+                    path,
+                    priority
+            );
+        }
+    }
+
+
     public ConnectPoint src() {
         return src;
     }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
index eeb2244..e4bc823 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
@@ -15,7 +15,9 @@
  */
 package org.onosproject.net.intent.impl.compiler;
 
-import com.google.common.collect.ImmutableList;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -36,8 +38,7 @@
 import org.onosproject.net.topology.TopologyEdge;
 import org.onosproject.net.topology.TopologyService;
 
-import java.util.List;
-import java.util.Set;
+import com.google.common.collect.ImmutableList;
 
 /**
  * An intent compiler for {@link org.onosproject.net.intent.OpticalConnectivityIntent}.
@@ -67,10 +68,12 @@
                                 Set<LinkResourceAllocations> resources) {
         // TODO: compute multiple paths using the K-shortest path algorithm
         Path path = calculateOpticalPath(intent.getSrc(), intent.getDst());
-        Intent newIntent = new OpticalPathIntent(intent.appId(),
-                                                 intent.getSrc(),
-                                                 intent.getDst(),
-                                                 path);
+        Intent newIntent = OpticalPathIntent.builder()
+                .appId(intent.appId())
+                .src(intent.getSrc())
+                .dst(intent.getDst())
+                .path(path)
+                .build();
         return ImmutableList.of(newIntent);
     }
 
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/OpticalPathIntentInstallerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/OpticalPathIntentInstallerTest.java
index 198341f..4aad8a5 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/OpticalPathIntentInstallerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/OpticalPathIntentInstallerTest.java
@@ -57,10 +57,11 @@
                 new IntentInstallerTest.MockIntentManager(OpticalPathIntent.class);
         installer.resourceService = new IntentTestsMocks.MockResourceService();
 
-        intent = new OpticalPathIntent(APP_ID,
-                d1p1,
-                d3p1,
-                new DefaultPath(PID, links, hops));
+        intent = OpticalPathIntent.builder().appId(APP_ID)
+                .src(d1p1)
+                .dst(d3p1)
+                .path(new DefaultPath(PID, links, hops))
+                .build();
     }
 
     /**
