diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/IntentManager.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/IntentManager.java
index 3a3d476..a877b76 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/IntentManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/IntentManager.java
@@ -258,7 +258,10 @@
             log.warn("Unable to compile intent {} due to:", intent.id(), e);
 
             // If compilation failed, mark the intent as failed.
-            store.setState(intent, FAILED);
+            IntentEvent event = store.setState(intent, FAILED);
+            if (event != null) {
+                eventDispatcher.post(event);
+            }
         }
     }
 
diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/OpticalConnectivityIntentCompiler.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/OpticalConnectivityIntentCompiler.java
index b76cc3b..8fcf75b 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/OpticalConnectivityIntentCompiler.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/OpticalConnectivityIntentCompiler.java
@@ -71,7 +71,7 @@
         // TODO: compute multiple paths using the K-shortest path algorithm
         List<Intent> retList = new ArrayList<>();
         log.info("The system is comipling the OpticalConnectivityIntent:" + intent.toString());
-        Path path = calculatePath(intent.getSrcConnectPoint(), intent.getDst());
+        Path path = calculateOpticalPath(intent.getSrcConnectPoint(), intent.getDst());
         if (path == null) {
             return retList;
         } else {
@@ -96,24 +96,17 @@
         return retList;
     }
 
-    private Path calculatePath(ConnectPoint start, ConnectPoint end) {
+    private Path calculateOpticalPath(ConnectPoint start, ConnectPoint end) {
         // TODO: support user policies
         Topology topology = topologyService.currentTopology();
         LinkWeight weight = new LinkWeight() {
             @Override
             public double weight(TopologyEdge edge) {
-                boolean isOptical = false;
-
                 Link.Type lt = edge.link().type();
-
-                //String t = edge.link().annotations().value("linkType");
                 if (lt == Link.Type.OPTICAL) {
-                   isOptical = true;
-                }
-                if (isOptical) {
-                    return 1; // optical links
+                    return 1.0;
                 } else {
-                    return 10000; // packet links
+                    return 1000.0;
                 }
             }
         };
@@ -123,20 +116,20 @@
                 end.deviceId(),
                 weight);
 
+        ArrayList<Path> localPaths = new ArrayList<>();
         Iterator<Path> itr = paths.iterator();
         while (itr.hasNext()) {
             Path path = itr.next();
-            // log.info(String.format("total link number.:%d", path.links().size()));
-            if (path.cost() >= 10000) {
-                itr.remove();
+            if (path.cost() >= 1000) {
+                continue;
             }
+            localPaths.add(path);
         }
 
-        if (paths.isEmpty()) {
-            log.info("No optical path found from " + start + " to " + end);
-            return null;
+        if (localPaths.isEmpty()) {
+            throw new PathNotFoundException("No fiber path from " + start + " to " + end);
         } else {
-            return paths.iterator().next();
+            return localPaths.iterator().next();
         }
 
     }
diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/PointToPointIntentCompiler.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/PointToPointIntentCompiler.java
index 25d50cc..8cd0e14 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/PointToPointIntentCompiler.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/PointToPointIntentCompiler.java
@@ -17,10 +17,19 @@
 import org.onlab.onos.net.intent.PathIntent;
 import org.onlab.onos.net.intent.PointToPointIntent;
 import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.onos.net.topology.LinkWeight;
+//import org.onlab.onos.net.topology.LinkWeight;
 import org.onlab.onos.net.topology.PathService;
+import org.onlab.onos.net.topology.Topology;
+import org.onlab.onos.net.topology.TopologyEdge;
+//import org.onlab.onos.net.topology.Topology;
+//import org.onlab.onos.net.topology.TopologyEdge;
+import org.onlab.onos.net.topology.TopologyService;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Iterator;
+//import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -41,6 +50,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected HostService hostService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected TopologyService topologyService;
+
     @Activate
     public void activate() {
         intentManager.registerCompiler(PointToPointIntent.class, this);
@@ -87,11 +99,39 @@
      * @throws PathNotFoundException if a path cannot be found
      */
     private Path getPath(ConnectPoint one, ConnectPoint two) {
-        Set<Path> paths = pathService.getPaths(one.deviceId(), two.deviceId());
-        if (paths.isEmpty()) {
-            throw new PathNotFoundException("No path from " + one + " to " + two);
+        // Set<Path> paths = pathService.getPaths(one.deviceId(), two.deviceId());
+       Topology topology = topologyService.currentTopology();
+        LinkWeight weight = new LinkWeight() {
+            @Override
+            public double weight(TopologyEdge edge) {
+                Link.Type lt = edge.link().type();
+                if (lt == Link.Type.OPTICAL) {
+                    return 1000.0;
+                } else {
+                    return 1.0;
+                }
+            }
+        };
+
+        Set<Path> paths = topologyService.getPaths(topology,
+                one.deviceId(),
+                two.deviceId(),
+                weight);
+
+        ArrayList<Path> localPaths = new ArrayList<>();
+        Iterator<Path> itr = paths.iterator();
+        while (itr.hasNext()) {
+            Path path = itr.next();
+            if (path.cost() >= 1000) {
+                continue;
+            }
+            localPaths.add(path);
+        }
+
+        if (localPaths.isEmpty()) {
+            throw new PathNotFoundException("No packet path from " + one + " to " + two);
         }
         // TODO: let's be more intelligent about this eventually
-        return paths.iterator().next();
+        return localPaths.iterator().next();
     }
 }
