diff --git a/core/api/src/main/java/org/onlab/onos/net/DefaultLink.java b/core/api/src/main/java/org/onlab/onos/net/DefaultLink.java
index 1f7783c..e937bf3 100644
--- a/core/api/src/main/java/org/onlab/onos/net/DefaultLink.java
+++ b/core/api/src/main/java/org/onlab/onos/net/DefaultLink.java
@@ -16,7 +16,7 @@
     private final Type type;
 
     /**
-     * Creates a link description using the supplied information.
+     * Creates an infrastructure link using the supplied information.
      *
      * @param providerId provider identity
      * @param src        link source
diff --git a/core/api/src/main/java/org/onlab/onos/net/DefaultPath.java b/core/api/src/main/java/org/onlab/onos/net/DefaultPath.java
new file mode 100644
index 0000000..63c9e88
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/DefaultPath.java
@@ -0,0 +1,71 @@
+package org.onlab.onos.net;
+
+import com.google.common.collect.ImmutableList;
+import org.onlab.onos.net.provider.ProviderId;
+
+import java.util.List;
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Default implementation of a network path.
+ */
+public class DefaultPath extends DefaultLink implements Path {
+
+    private final List<Link> links;
+    private final double cost;
+
+    /**
+     * Creates a path from the specified source and destination using the
+     * supplied list of links.
+     *
+     * @param providerId provider identity
+     * @param links      contiguous links that comprise the path
+     * @param cost       unit-less path cost
+     */
+    public DefaultPath(ProviderId providerId, List<Link> links, double cost) {
+        super(providerId, source(links), destination(links), Type.INDIRECT);
+        this.links = ImmutableList.copyOf(links);
+        this.cost = cost;
+    }
+
+    @Override
+    public List<Link> links() {
+        return links;
+    }
+
+    @Override
+    public double cost() {
+        return cost;
+    }
+
+    // Returns the source of the first link.
+    private static ConnectPoint source(List<Link> links) {
+        checkNotNull(links, "List of path links cannot be null");
+        checkArgument(!links.isEmpty(), "List of path links cannot be empty");
+        return links.get(0).src();
+    }
+
+    // Returns the destination of the last link.
+    private static ConnectPoint destination(List<Link> links) {
+        checkNotNull(links, "List of path links cannot be null");
+        checkArgument(!links.isEmpty(), "List of path links cannot be empty");
+        return links.get(links.size() - 1).dst();
+    }
+
+    @Override
+    public int hashCode() {
+        return 31 * super.hashCode() + Objects.hash(links);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof DefaultPath) {
+            final DefaultPath other = (DefaultPath) obj;
+            return Objects.equals(this.links, other.links);
+        }
+        return false;
+    }
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/Path.java b/core/api/src/main/java/org/onlab/onos/net/Path.java
index 22a363a..acf8170 100644
--- a/core/api/src/main/java/org/onlab/onos/net/Path.java
+++ b/core/api/src/main/java/org/onlab/onos/net/Path.java
@@ -17,4 +17,11 @@
      */
     List<Link> links();
 
+    /**
+     * Returns the path cost as a unit-less value.
+     *
+     * @return unit-less path cost
+     */
+    double cost();
+
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/ClusterId.java b/core/api/src/main/java/org/onlab/onos/net/topology/ClusterId.java
index af8f122..502eee1 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/ClusterId.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/ClusterId.java
@@ -27,6 +27,15 @@
         return new ClusterId(id);
     }
 
+    /**
+     * Returns the backing integer index.
+     *
+     * @return backing integer index
+     */
+    public int index() {
+        return id;
+    }
+
     @Override
     public int hashCode() {
         return Objects.hash(id);
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/GraphDescription.java b/core/api/src/main/java/org/onlab/onos/net/topology/GraphDescription.java
new file mode 100644
index 0000000..2b846a0
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/GraphDescription.java
@@ -0,0 +1,34 @@
+package org.onlab.onos.net.topology;
+
+import com.google.common.collect.ImmutableSet;
+import org.onlab.onos.net.Description;
+
+/**
+ * Describes attribute(s) of a network graph.
+ */
+public interface GraphDescription extends Description {
+
+    /**
+     * Returns the creation timestamp of the graph description. This is
+     * expressed in system nanos to allow proper sequencing.
+     *
+     * @return graph description creation timestamp
+     */
+    long timestamp();
+
+    /**
+     * Returns the set of topology graph vertexes.
+     *
+     * @return set of graph vertexes
+     */
+    ImmutableSet<TopologyVertex> vertexes();
+
+    /**
+     * Returns the set of topology graph edges.
+     *
+     * @return set of graph edges
+     */
+    ImmutableSet<TopologyEdge> edges();
+
+}
+
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java b/core/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
index 89ef577..5e18dfb 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
@@ -6,5 +6,5 @@
  * Entity capable of determining cost or weight of a specified topology
  * graph edge.
  */
-public interface LinkWeight extends EdgeWeight<TopoVertex, TopoEdge> {
+public interface LinkWeight extends EdgeWeight<TopologyVertex, TopologyEdge> {
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyDescription.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyDescription.java
deleted file mode 100644
index bcb199d..0000000
--- a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyDescription.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.onlab.onos.net.topology;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSetMultimap;
-import org.onlab.graph.Graph;
-import org.onlab.onos.net.Description;
-import org.onlab.onos.net.DeviceId;
-import org.onlab.onos.net.Link;
-
-import static org.onlab.graph.GraphPathSearch.Result;
-
-/**
- * Describes attribute(s) of a network topology.
- */
-public interface TopologyDescription extends Description {
-
-    /**
-     * Returns the creation timestamp of the topology description. This is
-     * expressed in system nanos to allow proper sequencing.
-     *
-     * @return topology description creation timestamp
-     */
-    long timestamp();
-
-    /**
-     * Returns the topology graph in immutable form.
-     *
-     * @return network graph
-     */
-    Graph<TopoVertex, TopoEdge> graph();
-
-    /**
-     * Returns an immutable map of path search results for each source device.
-     *
-     * @return map of path search result for each source node
-     */
-    ImmutableMap<DeviceId, Result<TopoVertex, TopoEdge>> pathsBySource();
-
-    /**
-     * Returns the set of topology SCC clusters.
-     *
-     * @return set of SCC clusters
-     */
-    ImmutableSet<TopologyCluster> clusters();
-
-    /**
-     * Returns an immutable set multi-map of devices for each cluster.
-     *
-     * @return set multi-map of devices that belong to each cluster
-     */
-    ImmutableSetMultimap<TopologyCluster, DeviceId> devicesByCluster();
-
-    /**
-     * Returns an immutable set multi-map of links for each cluster.
-     *
-     * @return set multi-map of links that belong to each cluster
-     */
-    ImmutableSetMultimap<TopologyCluster, Link> linksByCluster();
-
-}
-
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyEdge.java
similarity index 82%
rename from core/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyEdge.java
index ef94eca..d9cd6f4 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyEdge.java
@@ -6,7 +6,7 @@
 /**
  * Represents an edge in the topology graph.
  */
-public interface TopoEdge extends Edge<TopoVertex> {
+public interface TopologyEdge extends Edge<TopologyVertex> {
 
     /**
      * Returns the associated infrastructure link.
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyGraph.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyGraph.java
new file mode 100644
index 0000000..70139cd
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyGraph.java
@@ -0,0 +1,10 @@
+package org.onlab.onos.net.topology;
+
+import org.onlab.graph.Graph;
+
+/**
+ * Represents an immutable topology graph.
+ */
+public interface TopologyGraph extends Graph<TopologyVertex, TopologyEdge> {
+
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
index 0e03767..c81a871 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
@@ -10,16 +10,13 @@
  */
 public interface TopologyProviderService extends ProviderService<TopologyProvider> {
 
-    // What can be conveyed in a topology that isn't by individual
-    // providers?
-
     /**
      * Signals the core that some aspect of the topology has changed.
      *
-     * @param topoDescription information about topology
-     * @param reasons         events that triggered topology change
+     * @param graphDescription information about the network graph
+     * @param reasons          events that triggered topology change
      */
-    void topologyChanged(TopologyDescription topoDescription,
+    void topologyChanged(GraphDescription graphDescription,
                          List<Event> reasons);
 
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
index 149804b..d8470e7 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
@@ -1,6 +1,5 @@
 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;
@@ -41,7 +40,7 @@
      * @param topology topology descriptor
      * @return topology graph view
      */
-    Graph<TopoVertex, TopoEdge> getGraph(Topology topology);
+    TopologyGraph getGraph(Topology topology);
 
     /**
      * Returns the set of all shortest paths, precomputed in terms of hop-count,
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyVertex.java
similarity index 86%
rename from core/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyVertex.java
index d5a8b95..96a918f 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyVertex.java
@@ -6,7 +6,7 @@
 /**
  * Represents a vertex in the topology graph.
  */
-public interface TopoVertex extends Vertex {
+public interface TopologyVertex extends Vertex {
 
     /**
      * Returns the associated infrastructure device identification.
