diff --git a/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpRouteSelector.java b/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpRouteSelector.java
index 96f3a92..2c73dc0 100644
--- a/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpRouteSelector.java
+++ b/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpRouteSelector.java
@@ -17,6 +17,7 @@
 package org.onosproject.routing.bgp;
 
 import org.onlab.packet.IpPrefix;
+import org.onosproject.cluster.ClusterService;
 import org.onosproject.incubator.net.routing.Route;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,14 +33,17 @@
         LoggerFactory.getLogger(BgpRouteSelector.class);
 
     private BgpSessionManager bgpSessionManager;
+    private ClusterService clusterService;
 
     /**
      * Constructor.
      *
      * @param bgpSessionManager the BGP Session Manager to use
+     * @param clusterService the cluster service
      */
-    BgpRouteSelector(BgpSessionManager bgpSessionManager) {
+    BgpRouteSelector(BgpSessionManager bgpSessionManager, ClusterService clusterService) {
         this.bgpSessionManager = bgpSessionManager;
+        this.clusterService = clusterService;
     }
 
     /**
@@ -82,7 +86,7 @@
                                            Collection<Route> withdraws) {
         if (routeUpdate != null) {
             Route route = new Route(Route.Source.BGP, routeUpdate.routeEntry().prefix(),
-                    routeUpdate.routeEntry().nextHop());
+                    routeUpdate.routeEntry().nextHop(), clusterService.getLocalNode().id());
             if (routeUpdate.type().equals(RouteUpdate.Type.UPDATE)) {
                 updates.add(route);
             } else if (routeUpdate.type().equals(RouteUpdate.Type.DELETE)) {
diff --git a/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java b/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
index a8cf5d8..e9e851b 100644
--- a/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
+++ b/apps/routing/common/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
@@ -37,6 +37,7 @@
 import org.onlab.packet.Ip4Prefix;
 import org.onlab.packet.Ip6Prefix;
 import org.onlab.packet.IpPrefix;
+import org.onosproject.cluster.ClusterService;
 import org.onosproject.incubator.net.routing.Route;
 import org.onosproject.incubator.net.routing.RouteAdminService;
 import org.osgi.service.component.ComponentContext;
@@ -66,6 +67,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected RouteAdminService routeService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected ClusterService clusterService;
+
     boolean isShutdown = true;
     private Channel serverChannel;     // Listener for incoming BGP connections
     private ServerBootstrap serverBootstrap;
@@ -74,7 +78,7 @@
             new ConcurrentHashMap<>();
     private Ip4Address myBgpId;        // Same BGP ID for all peers
 
-    private BgpRouteSelector bgpRouteSelector = new BgpRouteSelector(this);
+    private BgpRouteSelector bgpRouteSelector;
     private ConcurrentMap<Ip4Prefix, BgpRouteEntry> bgpRoutes4 =
             new ConcurrentHashMap<>();
     private ConcurrentMap<Ip6Prefix, BgpRouteEntry> bgpRoutes6 =
@@ -85,6 +89,7 @@
 
     @Activate
     protected void activate(ComponentContext context) {
+        bgpRouteSelector = new BgpRouteSelector(this, clusterService);
         readComponentConfiguration(context);
         start();
         log.info("BgpSessionManager started");
diff --git a/apps/routing/common/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java b/apps/routing/common/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
index 9f9ad3c..3bbad0c 100644
--- a/apps/routing/common/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
+++ b/apps/routing/common/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
@@ -34,6 +34,10 @@
 import org.onlab.junit.TestUtils.TestUtilsException;
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.Ip4Prefix;
+import org.onlab.packet.IpAddress;
+import org.onosproject.cluster.ClusterService;
+import org.onosproject.cluster.DefaultControllerNode;
+import org.onosproject.cluster.NodeId;
 import org.onosproject.incubator.net.routing.RouteAdminService;
 import org.osgi.service.component.ComponentContext;
 
@@ -80,6 +84,9 @@
     private static final long DEFAULT_MULTI_EXIT_DISC = 20;
     private static final long BETTER_MULTI_EXIT_DISC = 30;
 
+    private static final NodeId NODE_ID = new NodeId("local");
+    private static final IpAddress LOCAL = IpAddress.valueOf("127.0.0.1");
+
     BgpRouteEntry.AsPath asPathShort;
     BgpRouteEntry.AsPath asPathLong;
 
@@ -255,6 +262,12 @@
         replay(routeService);
         bgpSessionManager.routeService = routeService;
 
+        ClusterService clusterService = createMock(ClusterService.class);
+        expect(clusterService.getLocalNode())
+                .andReturn(new DefaultControllerNode(NODE_ID, LOCAL)).anyTimes();
+        replay(clusterService);
+        bgpSessionManager.clusterService = clusterService;
+
         // NOTE: We use port 0 to bind on any available port
         ComponentContext componentContext = createMock(ComponentContext.class);
         getDictionaryMock(componentContext);
diff --git a/apps/routing/fibinstaller/src/main/java/org/onosproject/routing/fibinstaller/FibInstaller.java b/apps/routing/fibinstaller/src/main/java/org/onosproject/routing/fibinstaller/FibInstaller.java
index bbf2c36..18e28c3 100644
--- a/apps/routing/fibinstaller/src/main/java/org/onosproject/routing/fibinstaller/FibInstaller.java
+++ b/apps/routing/fibinstaller/src/main/java/org/onosproject/routing/fibinstaller/FibInstaller.java
@@ -267,7 +267,7 @@
     }
 
     private synchronized void deleteRoute(ResolvedRoute route) {
-        deleteRoute(new Route(Route.Source.UNDEFINED, route.prefix(), route.nextHop()));
+        deleteRoute(route.route());
     }
 
     private void deleteRoute(Route route) {
diff --git a/apps/routing/fpm/src/main/java/org/onosproject/routing/fpm/FpmManager.java b/apps/routing/fpm/src/main/java/org/onosproject/routing/fpm/FpmManager.java
index c85cd9c..4f7e488 100644
--- a/apps/routing/fpm/src/main/java/org/onosproject/routing/fpm/FpmManager.java
+++ b/apps/routing/fpm/src/main/java/org/onosproject/routing/fpm/FpmManager.java
@@ -244,7 +244,7 @@
                 // We ignore interface routes with no gateway for now.
                 return;
             }
-            route = new Route(Route.Source.FPM, prefix, gateway);
+            route = new Route(Route.Source.FPM, prefix, gateway, clusterService.getLocalNode().id());
 
 
             Route oldRoute = fpmRoutes.get(peer).put(prefix, route);
@@ -262,7 +262,7 @@
                 return;
             }
 
-            route = new Route(Route.Source.FPM, prefix, existing.nextHop());
+            route = new Route(Route.Source.FPM, prefix, existing.nextHop(), clusterService.getLocalNode().id());
 
             withdraws.add(route);
             break;
diff --git a/cli/src/main/java/org/onosproject/cli/net/RoutesListCommand.java b/cli/src/main/java/org/onosproject/cli/net/RoutesListCommand.java
index b24ee5d..afb405d 100644
--- a/cli/src/main/java/org/onosproject/cli/net/RoutesListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/RoutesListCommand.java
@@ -41,9 +41,10 @@
     private static final String NETWORK = "Network";
     private static final String NEXTHOP = "Next Hop";
     private static final String SOURCE = "Source";
+    private static final String NODE = "Node";
 
-    private static final String FORMAT_ROUTE = "%-1s   %-18s %-15s %-10s";
-    private static final String FORMAT_ROUTE6 = "%-1s   %-43s %-39s %-10s";
+    private static final String FORMAT_ROUTE = "%-1s   %-18s %-15s %s (%s)";
+    private static final String FORMAT_ROUTE6 = "%-1s   %-43s %-39s %s (%s)";
 
     private static final String FORMAT_TABLE = "Table: %s";
     private static final String FORMAT_TOTAL = "   Total: %d";
@@ -67,7 +68,7 @@
 
                 // Print header
                 print(FORMAT_TABLE, id);
-                print(format, "", NETWORK, NEXTHOP, SOURCE);
+                print(format, "", NETWORK, NEXTHOP, SOURCE, NODE);
 
                 // Print routing entries
                 tableRoutes.stream()
@@ -84,11 +85,9 @@
         routeInfo.allRoutes().stream()
                 .sorted(Comparator.comparing(r -> r.nextHop()))
                 .forEach(r -> print(format, isBestRoute(routeInfo.bestRoute(), r) ? ">" : "",
-                        r.prefix(), r.nextHop(), r.route().source()));
+                        r.prefix(), r.nextHop(), r.route().source(), r.route().sourceNode()));
     }
 
-
-
     private boolean isBestRoute(Optional<ResolvedRoute> bestRoute, ResolvedRoute route) {
         return Objects.equals(bestRoute.orElse(null), route);
     }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/routing/Route.java b/incubator/api/src/main/java/org/onosproject/incubator/net/routing/Route.java
index 0ae4952..31fe8b7 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/routing/Route.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/routing/Route.java
@@ -18,6 +18,7 @@
 
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
+import org.onosproject.cluster.NodeId;
 
 import java.util.Objects;
 
@@ -33,6 +34,8 @@
     private static final String VERSION_MISMATCH =
             "Prefix and next hop must be in the same address family";
 
+    private static final NodeId UNDEFINED = new NodeId("-");
+
     /**
      * Source of the route.
      */
@@ -61,15 +64,28 @@
     private final Source source;
     private final IpPrefix prefix;
     private final IpAddress nextHop;
+    private final NodeId sourceNode;
 
     /**
      * Creates a route.
      *
      * @param source route source
      * @param prefix IP prefix
-     * @param nextHop net hop IP address
+     * @param nextHop next hop IP address
      */
     public Route(Source source, IpPrefix prefix, IpAddress nextHop) {
+        this(source, prefix, nextHop, UNDEFINED);
+    }
+
+    /**
+     * Creates a route.
+     *
+     * @param source route source
+     * @param prefix IP prefix
+     * @param nextHop next hop IP address
+     * @param sourceNode ONOS node the route was sourced from
+     */
+    public Route(Source source, IpPrefix prefix, IpAddress nextHop, NodeId sourceNode) {
         checkNotNull(prefix);
         checkNotNull(nextHop);
         checkArgument(prefix.version().equals(nextHop.version()), VERSION_MISMATCH);
@@ -77,6 +93,7 @@
         this.source = checkNotNull(source);
         this.prefix = prefix;
         this.nextHop = nextHop;
+        this.sourceNode = checkNotNull(sourceNode);
     }
 
     /**
@@ -106,6 +123,15 @@
         return nextHop;
     }
 
+    /**
+     * Returns the ONOS node the route was sourced from.
+     *
+     * @return ONOS node ID
+     */
+    public NodeId sourceNode() {
+        return sourceNode;
+    }
+
     @Override
     public int hashCode() {
         return Objects.hash(prefix, nextHop);
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
index 539b2cb..6ab1f03 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
@@ -204,7 +204,7 @@
     @Override
     public Route longestPrefixMatch(IpAddress ip) {
         return longestPrefixLookup(ip)
-                .map(r -> new Route(Route.Source.STATIC, r.prefix(), r.nextHop()))
+                .map(ResolvedRoute::route)
                 .orElse(null);
     }
 
