diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java b/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java
index fe2d34a..41cd045 100644
--- a/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java
+++ b/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java
@@ -37,7 +37,7 @@
     }
 
     @Override
-    public ConnectPoint connectPoint() {
+    public HostLocation hostLocation() {
         return hostLocation;
     }
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/DeviceId.java b/net/api/src/main/java/org/onlab/onos/net/DeviceId.java
index 19577a1..ef8c5ab 100644
--- a/net/api/src/main/java/org/onlab/onos/net/DeviceId.java
+++ b/net/api/src/main/java/org/onlab/onos/net/DeviceId.java
@@ -27,7 +27,7 @@
      * @param string device URI string
      */
     public static DeviceId deviceId(String string) {
-        return new DeviceId(URI.create(string));
+        return deviceId(URI.create(string));
     }
 
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java b/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java
index 356592d3..b1d5f7f 100644
--- a/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java
+++ b/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java
@@ -17,8 +17,8 @@
      * Returns the connection point where the host attaches to the
      * network infrastructure.
      *
-     * @return host connection point
+     * @return host location point
      */
-    ConnectPoint connectPoint();
+    HostLocation hostLocation();
 
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/HostId.java b/net/api/src/main/java/org/onlab/onos/net/HostId.java
index a7f550b..3e274b3 100644
--- a/net/api/src/main/java/org/onlab/onos/net/HostId.java
+++ b/net/api/src/main/java/org/onlab/onos/net/HostId.java
@@ -27,7 +27,7 @@
      * @param string device URI string
      */
     public static HostId hostId(String string) {
-        return new HostId(URI.create(string));
+        return hostId(URI.create(string));
     }
 
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java b/net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
new file mode 100644
index 0000000..89ef577
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
@@ -0,0 +1,10 @@
+package org.onlab.onos.net.topology;
+
+import org.onlab.graph.EdgeWeight;
+
+/**
+ * Entity capable of determining cost or weight of a specified topology
+ * graph edge.
+ */
+public interface LinkWeight extends EdgeWeight<TopoVertex, TopoEdge> {
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
new file mode 100644
index 0000000..ef94eca
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
@@ -0,0 +1,18 @@
+package org.onlab.onos.net.topology;
+
+import org.onlab.graph.Edge;
+import org.onlab.onos.net.Link;
+
+/**
+ * Represents an edge in the topology graph.
+ */
+public interface TopoEdge extends Edge<TopoVertex> {
+
+    /**
+     * Returns the associated infrastructure link.
+     *
+     * @return backing infrastructure link
+     */
+    Link link();
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
new file mode 100644
index 0000000..d5a8b95
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
@@ -0,0 +1,18 @@
+package org.onlab.onos.net.topology;
+
+import org.onlab.graph.Vertex;
+import org.onlab.onos.net.DeviceId;
+
+/**
+ * Represents a vertex in the topology graph.
+ */
+public interface TopoVertex extends Vertex {
+
+    /**
+     * Returns the associated infrastructure device identification.
+     *
+     * @return device identifier
+     */
+    DeviceId deviceId();
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java
new file mode 100644
index 0000000..e58c784
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java
@@ -0,0 +1,10 @@
+package org.onlab.onos.net.topology;
+
+/**
+ * Representation of an SCC (strongly-connected component) in a network topology.
+ */
+public interface TopologyCluster {
+
+    // TODO: add stuff in here: id, deviceCount, linkCount
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
index 4e1211a..a6962a2 100644
--- a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
+++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
@@ -1,7 +1,13 @@
 package org.onlab.onos.net.topology;
 
+import org.onlab.graph.Graph;
+import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.Path;
 import org.onlab.onos.net.Topology;
 
+import java.util.Set;
+
 /**
  * Service for providing network topology information.
  */
@@ -14,13 +20,64 @@
      */
     Topology currentTopology();
 
-    // TODO: Figure out hot to best export graph traversal methods via Graph/Vertex/Edge
-    // TODO: figure out how we want this to be presented, via Topology or via TopologyService
-    // Set<TopologyCluster> getClusters(Topology topology);
-    // Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst);
-    // Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight);
-    // boolean isInfrastructure(Topology topology, ConnectPoint connectPoint);
-    // boolean isInBroadcastTree(Topology topology, ConnectPoint connectPoint);
+    /**
+     * Returns the set of clusters in the specified topology.
+     *
+     * @param topology topology descriptor
+     * @return set of topology clusters
+     */
+    Set<TopologyCluster> getClusters(Topology topology);
+
+    /**
+     * Returns the graph view of the specified topology.
+     *
+     * @param topology topology descriptor
+     * @return topology graph view
+     */
+    Graph<TopoVertex, TopoEdge> getGraph(Topology topology);
+
+    /**
+     * Returns the set of all shortest paths, in terms of hop-count, between
+     * the specified source and destination devices.
+     *
+     * @param topology topology descriptor
+     * @param src      source device
+     * @param dst      destination device
+     * @return set of all shortest paths between the two devices
+     */
+    Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst);
+
+    /**
+     * Returns the set of all shortest paths, computed using the supplied
+     * edge-weight entity, between the specified source and destination devices.
+     *
+     * @param topology topology descriptor
+     * @param src      source device
+     * @param dst      destination device
+     * @return set of all shortest paths between the two devices
+     */
+    Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst,
+                       LinkWeight weight);
+
+    /**
+     * Indicates whether the specified connection point is part of the network
+     * infrastructure or part of network edge.
+     *
+     * @param topology     topology descriptor
+     * @param connectPoint connection point
+     * @return true of connection point is in infrastructure; false if edge
+     */
+    boolean isInfrastructure(Topology topology, ConnectPoint connectPoint);
+
+
+    /**
+     * Indicates whether the specified connection point allows broadcast.
+     *
+     * @param topology     topology descriptor
+     * @param connectPoint connection point
+     * @return true if broadcast is permissible
+     */
+    boolean isInBroadcastTree(Topology topology, ConnectPoint connectPoint);
 
     /**
      * Adds the specified topology listener.
diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java b/net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java
new file mode 100644
index 0000000..368ff16
--- /dev/null
+++ b/net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java
@@ -0,0 +1,58 @@
+package org.onlab.onos.net;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import org.onlab.onos.net.provider.ProviderId;
+
+import static org.junit.Assert.assertEquals;
+import static org.onlab.onos.net.DefaultLinkTest.cp;
+import static org.onlab.onos.net.DeviceId.deviceId;
+import static org.onlab.onos.net.HostId.hostId;
+import static org.onlab.onos.net.PortNumber.portNumber;
+
+/**
+ * Test of the default edge link model entity.
+ */
+public class DefaultEdgeLinkTest {
+
+    private static final ProviderId PID = new ProviderId("foo");
+    private static final DeviceId DID1 = deviceId("of:foo");
+    private static final HostId HID1 = hostId("nic:foobar");
+    private static final HostId HID2 = hostId("nic:barfoo");
+    private static final PortNumber P0 = portNumber(0);
+    private static final PortNumber P1 = portNumber(1);
+
+    @Test
+    public void testEquality() {
+        EdgeLink l1 = new DefaultEdgeLink(PID, cp(HID1, P0),
+                                          new HostLocation(DID1, P1, 123L), true);
+        EdgeLink l2 = new DefaultEdgeLink(PID, cp(HID1, P0),
+                                          new HostLocation(DID1, P1, 123L), true);
+
+        EdgeLink l3 = new DefaultEdgeLink(PID, cp(HID2, P0),
+                                          new HostLocation(DID1, P1, 123L), false);
+        EdgeLink l4 = new DefaultEdgeLink(PID, cp(HID2, P0),
+                                          new HostLocation(DID1, P1, 123L), false);
+
+        EdgeLink l5 = new DefaultEdgeLink(PID, cp(HID1, P0),
+                                          new HostLocation(DID1, P1, 123L), false);
+
+        new EqualsTester().addEqualityGroup(l1, l2)
+                .addEqualityGroup(l3, l4)
+                .addEqualityGroup(l5)
+                .testEquals();
+    }
+
+    @Test
+    public void basics() {
+        HostLocation hostLocation = new HostLocation(DID1, P1, 123L);
+        EdgeLink link = new DefaultEdgeLink(PID, cp(HID1, P0), hostLocation, false);
+        assertEquals("incorrect src", cp(HID1, P0), link.src());
+        assertEquals("incorrect dst", hostLocation, link.dst());
+        assertEquals("incorrect type", Link.Type.EDGE, link.type());
+        assertEquals("incorrect hostId", HID1, link.hostId());
+        assertEquals("incorrect connect point", hostLocation, link.hostLocation());
+        assertEquals("incorrect time", 123L, link.hostLocation().time());
+    }
+
+}
diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java b/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java
index 37757af..ec8511e 100644
--- a/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java
+++ b/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java
@@ -21,7 +21,7 @@
     private static final PortNumber P1 = portNumber(1);
     private static final PortNumber P2 = portNumber(2);
 
-    public static ConnectPoint cp(DeviceId id, PortNumber pn) {
+    public static ConnectPoint cp(ElementId id, PortNumber pn) {
         return new ConnectPoint(id, pn);
     }
 
diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java b/net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java
new file mode 100644
index 0000000..e9d3da6
--- /dev/null
+++ b/net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java
@@ -0,0 +1,47 @@
+package org.onlab.onos.net;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import org.onlab.onos.net.provider.ProviderId;
+
+import static org.junit.Assert.assertEquals;
+import static org.onlab.onos.net.Device.Type.SWITCH;
+import static org.onlab.onos.net.DeviceId.deviceId;
+import static org.onlab.onos.net.PortNumber.portNumber;
+
+/**
+ * Test of the default port model entity.
+ */
+public class DefaultPortTest {
+
+    private static final ProviderId PID = new ProviderId("foo");
+    private static final DeviceId DID1 = deviceId("of:foo");
+    private static final DeviceId DID2 = deviceId("of:bar");
+    private static final PortNumber P1 = portNumber(1);
+    private static final PortNumber P2 = portNumber(2);
+
+    @Test
+    public void testEquality() {
+        Device device = new DefaultDevice(PID, DID1, SWITCH, "m", "h", "s", "n");
+        Port p1 = new DefaultPort(device, portNumber(1), true);
+        Port p2 = new DefaultPort(device, portNumber(1), true);
+        Port p3 = new DefaultPort(device, portNumber(2), true);
+        Port p4 = new DefaultPort(device, portNumber(2), true);
+        Port p5 = new DefaultPort(device, portNumber(1), false);
+
+        new EqualsTester().addEqualityGroup(p1, p2)
+                .addEqualityGroup(p3, p4)
+                .addEqualityGroup(p5)
+                .testEquals();
+    }
+
+    @Test
+    public void basics() {
+        Device device = new DefaultDevice(PID, DID1, SWITCH, "m", "h", "s", "n");
+        Port port = new DefaultPort(device, portNumber(1), true);
+        assertEquals("incorrect element", device, port.element());
+        assertEquals("incorrect number", portNumber(1), port.number());
+        assertEquals("incorrect state", true, port.isEnabled());
+    }
+
+}
diff --git a/net/api/src/test/java/org/onlab/onos/net/HostIdTest.java b/net/api/src/test/java/org/onlab/onos/net/HostIdTest.java
new file mode 100644
index 0000000..3adcabc
--- /dev/null
+++ b/net/api/src/test/java/org/onlab/onos/net/HostIdTest.java
@@ -0,0 +1,22 @@
+package org.onlab.onos.net;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+
+import static org.onlab.onos.net.HostId.hostId;
+
+/**
+ * Test of the host identifier.
+ */
+public class HostIdTest extends ElementIdTest {
+
+    @Test
+    public void basics() {
+        new EqualsTester()
+                .addEqualityGroup(hostId("nic:foo"),
+                                  hostId("nic:foo"))
+                .addEqualityGroup(hostId("nic:bar"))
+                .testEquals();
+    }
+
+}
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 2914673..29c119d 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
@@ -27,11 +27,8 @@
 import org.slf4j.Logger;
 
 import java.util.List;
-import java.util.concurrent.ExecutorService;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static java.util.concurrent.Executors.newSingleThreadExecutor;
-import static org.onlab.util.Tools.namedThreads;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -56,9 +53,6 @@
 
     private final SimpleDeviceStore store = new SimpleDeviceStore();
 
-    private final ExecutorService executor =
-            newSingleThreadExecutor(namedThreads("onos-device-%d"));
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected EventDeliveryService eventDispatcher;
 
@@ -139,7 +133,7 @@
             Device device = event.subject();
             DeviceProvider provider = getProvider(device.providerId());
             if (provider != null) {
-                triggerRoleSelection(device, provider);
+                provider.roleChanged(device, newRole);
             }
             post(event);
         }
@@ -168,11 +162,12 @@
             log.info("Device {} connected", deviceId);
             DeviceEvent event = store.createOrUpdateDevice(provider().id(),
                                                            deviceId, deviceDescription);
-            post(event);
 
             // If there was a change of any kind, trigger role selection process.
             if (event != null) {
-                triggerRoleSelection(event.subject(), provider());
+                Device device = event.subject();
+                provider().roleChanged(device, store.getRole(device.id()));
+                post(event);
             }
         }
 
@@ -210,22 +205,6 @@
         }
     }
 
-    /**
-     * Triggers asynchronous role selection.
-     *
-     * @param device   device
-     * @param provider device provider
-     */
-    private void triggerRoleSelection(final Device device,
-                                      final DeviceProvider provider) {
-        executor.execute(new Runnable() {
-            @Override
-            public void run() {
-                provider.roleChanged(device, store.getRole(device.id()));
-            }
-        });
-    }
-
     // Posts the specified event to the local event dispatcher.
     private void post(DeviceEvent event) {
         if (event != null && eventDispatcher != null) {
diff --git a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java b/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java
index 398e9cb..bcece2d 100644
--- a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java
+++ b/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java
@@ -148,8 +148,6 @@
         admin.setRole(DID1, MastershipRole.STANDBY);
         validateEvents(DEVICE_ADDED, DEVICE_MASTERSHIP_CHANGED);
         assertEquals("incorrect role", MastershipRole.STANDBY, service.getRole(DID1));
-
-        Thread.sleep(200); // FIXME: replace this with more reliable and faster testing means!!!
         assertEquals("incorrect device", DID1, provider.deviceReceived.id());
         assertEquals("incorrect role", MastershipRole.STANDBY, provider.roleReceived);
     }
