diff --git a/net/api/src/main/java/org/onlab/onos/event/AbstractListenerRegistry.java b/net/api/src/main/java/org/onlab/onos/event/AbstractListenerRegistry.java
index 5e6011a..9710306 100644
--- a/net/api/src/main/java/org/onlab/onos/event/AbstractListenerRegistry.java
+++ b/net/api/src/main/java/org/onlab/onos/event/AbstractListenerRegistry.java
@@ -45,7 +45,7 @@
         for (L listener : listeners) {
             try {
                 listener.event(event);
-            } catch (Throwable error) {
+            } catch (Exception error) {
                 reportProblem(event, error);
             }
         }
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/event/impl/SimpleEventDispatcher.java b/net/core/trivial/src/main/java/org/onlab/onos/event/impl/SimpleEventDispatcher.java
index da919e4..3834676 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/event/impl/SimpleEventDispatcher.java
+++ b/net/core/trivial/src/main/java/org/onlab/onos/event/impl/SimpleEventDispatcher.java
@@ -82,7 +82,7 @@
                         log.warn("No sink registered for event class {}",
                                  event.getClass());
                     }
-                } catch (Throwable e) {
+                } catch (Exception e) {
                     log.warn("Error encountered while dispatching event:", e);
                 }
             }
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
index b713f00..9df00b0 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
@@ -141,7 +141,6 @@
         public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
             checkNotNull(deviceId, DEVICE_ID_NULL);
             checkNotNull(portDescriptions, "Port descriptions list cannot be null");
-            // FIXME: fix the interface to accept DeviceId separately
             log.info("Device {} ports updated: {}", portDescriptions);
             List<DeviceEvent> events = store.updatePorts(deviceId, portDescriptions);
             for (DeviceEvent event : events) {
diff --git a/utils/misc/src/main/java/org/onlab/graph/AdjacencyListsGraph.java b/utils/misc/src/main/java/org/onlab/graph/AdjacencyListsGraph.java
index a5a1300..e1e0524 100644
--- a/utils/misc/src/main/java/org/onlab/graph/AdjacencyListsGraph.java
+++ b/utils/misc/src/main/java/org/onlab/graph/AdjacencyListsGraph.java
@@ -22,8 +22,6 @@
     private final ImmutableSetMultimap<V, E> sources;
     private final ImmutableSetMultimap<V, E> destinations;
 
-    private final Set<E> noEdges = ImmutableSet.of();
-
     /**
      * Creates a graph comprising of the specified vertexes and edges.
      *
diff --git a/utils/misc/src/main/java/org/onlab/graph/BreadthFirstSearch.java b/utils/misc/src/main/java/org/onlab/graph/BreadthFirstSearch.java
index 2346ff6..c02afea 100644
--- a/utils/misc/src/main/java/org/onlab/graph/BreadthFirstSearch.java
+++ b/utils/misc/src/main/java/org/onlab/graph/BreadthFirstSearch.java
@@ -21,8 +21,8 @@
         result.costs.put(src, 0.0);
         frontier.add(src);
 
-        search:
-        while (!frontier.isEmpty()) {
+        boolean reachedEnd = false;
+        while (!reachedEnd && !frontier.isEmpty()) {
             // Prepare the next frontier.
             Set<V> next = new HashSet<>();
 
@@ -40,10 +40,15 @@
                                             true);
                         // If we have reached our intended destination, bail.
                         if (nextVertex.equals(dst)) {
-                            break search;
+                            reachedEnd = true;
+                            break;
                         }
                         next.add(nextVertex);
                     }
+
+                    if (reachedEnd) {
+                        break;
+                    }
                 }
             }
 
diff --git a/utils/misc/src/main/java/org/onlab/graph/Heap.java b/utils/misc/src/main/java/org/onlab/graph/Heap.java
index da1ef45..21eeb85 100644
--- a/utils/misc/src/main/java/org/onlab/graph/Heap.java
+++ b/utils/misc/src/main/java/org/onlab/graph/Heap.java
@@ -25,9 +25,6 @@
  */
 public class Heap<T> {
 
-    private static final String E_HEAP_READONLY = "Heap iterator is read-only";
-    private static final String E_HEAP_END = "Heap iterator reached end of heap";
-
     private final List<T> data;
     private final Comparator<T> comparator;
 
