diff --git a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
index 96bacc5..efe64b1 100644
--- a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
+++ b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
@@ -206,7 +206,6 @@
                 src = p2pIntent.ingressPoint();
                 dst = p2pIntent.egressPoint();
             } else {
-                log.error("Unsupported intent type: {}", intent.getClass());
                 return;
             }
 
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddOpticalIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddOpticalIntentCommand.java
index 97341d7..c76bc3d 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddOpticalIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddOpticalIntentCommand.java
@@ -20,6 +20,7 @@
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.OchPort;
 import org.onosproject.net.OduCltPort;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.OduSignalType;
 import org.onosproject.net.Port;
 import org.onosproject.net.device.DeviceService;
@@ -28,6 +29,10 @@
 import org.onosproject.net.intent.OpticalCircuitIntent;
 import org.onosproject.net.intent.OpticalConnectivityIntent;
 
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
 /**
  * Installs optical connectivity or circuit intents, depending on given port types.
  */
@@ -45,13 +50,37 @@
               required = true, multiValued = false)
     String egressDeviceString = null;
 
+    private ConnectPoint createConnectPoint(String devicePortString) {
+        String[] splitted = devicePortString.split("/");
+
+        checkArgument(splitted.length == 2,
+                "Connect point must be in \"deviceUri/portNumber\" format");
+
+        DeviceId deviceId = DeviceId.deviceId(splitted[0]);
+
+        DeviceService deviceService = get(DeviceService.class);
+
+        List<Port> ports = deviceService.getPorts(deviceId);
+
+        for (Port port : ports) {
+            if (splitted[1].equals(port.number().name())) {
+                return new ConnectPoint(deviceId, port.number());
+            }
+        }
+
+        return null;
+    }
+
     @Override
     protected void execute() {
         IntentService service = get(IntentService.class);
 
-        ConnectPoint ingress = ConnectPoint.deviceConnectPoint(ingressDeviceString);
+        ConnectPoint ingress = createConnectPoint(ingressDeviceString);
+        ConnectPoint egress = createConnectPoint(egressDeviceString);
 
-        ConnectPoint egress = ConnectPoint.deviceConnectPoint(egressDeviceString);
+        if (ingress == null || egress == null) {
+            print("Could not create optical intent");
+        }
 
         DeviceService deviceService = get(DeviceService.class);
         Port srcPort = deviceService.getPort(ingress.deviceId(), ingress.port());
diff --git a/core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceStore.java b/core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceStore.java
index 31cab02..a52a843 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceStore.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceStore.java
@@ -22,10 +22,17 @@
 import java.util.Set;
 
 public interface DeviceResourceStore {
+    /**
+     * Returns unallocated ports on the given device.
+     *
+     * @param deviceId device ID
+     * @return set of unallocated ports
+     */
     Set<Port> getFreePorts(DeviceId deviceId);
 
     /**
      * Allocates the given ports to the given intent.
+     *
      * @param ports set of ports to allocate
      * @param intentId intent ID
      * @return true if allocation was successful, false otherwise
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 4d8077e..144f2df 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
@@ -265,7 +265,8 @@
                 if (edge.link().type() != Link.Type.OPTICAL) {
                     return -1;
                 }
-                return edge.link().annotations().value("optical.type").equals("WDM") ? +1 : -1;
+                //return edge.link().annotations().value("optical.type").equals("WDM") ? +1 : -1;
+                return 1;
             }
         };
 
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
index 8d6b5b6..ef836b5 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
@@ -37,6 +37,7 @@
 import org.onosproject.mastership.MastershipService;
 import org.onosproject.mastership.MastershipTerm;
 import org.onosproject.mastership.MastershipTermService;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.AnnotationsUtil;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DefaultDevice;
@@ -1007,6 +1008,26 @@
                                  chassisId, annotations);
     }
 
+    private Port buildTypedPort(Device device, PortNumber number, boolean isEnabled,
+                                 PortDescription description, Annotations annotations) {
+        switch (description.type()) {
+            case OMS:
+                OmsPortDescription omsDesc = (OmsPortDescription) description;
+                return new OmsPort(device, number, isEnabled, omsDesc.minFrequency(),
+                        omsDesc.maxFrequency(), omsDesc.grid(), annotations);
+            case OCH:
+                OchPortDescription ochDesc = (OchPortDescription) description;
+                return new OchPort(device, number, isEnabled, ochDesc.signalType(),
+                        ochDesc.isTunable(), ochDesc.lambda(), annotations);
+            case ODUCLT:
+                OduCltPortDescription oduDesc = (OduCltPortDescription) description;
+                return new OduCltPort(device, number, isEnabled, oduDesc.signalType(), annotations);
+            default:
+                return new DefaultPort(device, number, isEnabled, description.type(),
+                        description.portSpeed(), annotations);
+        }
+    }
+
     /**
      * Returns a Port, merging description given from multiple Providers.
      *
@@ -1048,25 +1069,7 @@
                 }
                 annotations = merge(annotations, otherPortDesc.value().annotations());
                 PortDescription other = otherPortDesc.value();
-                switch (other.type()) {
-                    case OMS:
-                        OmsPortDescription omsPortDesc = (OmsPortDescription) otherPortDesc.value();
-                        updated = new OmsPort(device, number, isEnabled, omsPortDesc.minFrequency(),
-                                              omsPortDesc.maxFrequency(), omsPortDesc.grid(), annotations);
-                        break;
-                    case OCH:
-                        OchPortDescription ochPortDesc = (OchPortDescription) otherPortDesc.value();
-                        updated = new OchPort(device, number, isEnabled, ochPortDesc.signalType(),
-                                              ochPortDesc.isTunable(), ochPortDesc.lambda(), annotations);
-                        break;
-                    case ODUCLT:
-                        OduCltPortDescription oduCltPortDesc = (OduCltPortDescription) otherPortDesc.value();
-                        updated = new OduCltPort(device, number, isEnabled, oduCltPortDesc.signalType(), annotations);
-                        break;
-                    default:
-                        updated = new DefaultPort(
-                                device, number, isEnabled, other.type(), other.portSpeed(), annotations);
-                }
+                updated = buildTypedPort(device, number, isEnabled, other, annotations);
                 newest = otherPortDesc.timestamp();
             }
         }
@@ -1075,7 +1078,7 @@
         }
         PortDescription current = portDesc.value();
         return updated == null
-                ? new DefaultPort(device, number, isEnabled, current.type(), current.portSpeed(), annotations)
+                ? buildTypedPort(device, number, isEnabled, current, annotations)
                 : updated;
     }
 
