diff --git a/apps/route-service/app/src/main/java/org/onosproject/routeservice/cli/RoutesListCommand.java b/apps/route-service/app/src/main/java/org/onosproject/routeservice/cli/RoutesListCommand.java
index 9c7eae0..665b432 100644
--- a/apps/route-service/app/src/main/java/org/onosproject/routeservice/cli/RoutesListCommand.java
+++ b/apps/route-service/app/src/main/java/org/onosproject/routeservice/cli/RoutesListCommand.java
@@ -43,8 +43,8 @@
     private static final String SOURCE = "Source";
     private static final String NODE = "Node";
 
-    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_ROUTE = "%-1s %-1s  %-18s %-15s %s (%s)";
+    private static final String FORMAT_ROUTE6 = "%-1s %-1s  %-43s %-39s %s (%s)";
 
     private static final String FORMAT_TABLE = "Table: %s";
     private static final String FORMAT_TOTAL = "   Total: %d";
@@ -60,6 +60,7 @@
             result.set("routes6", json(service.getRoutes(new RouteTableId("ipv6"))));
             print("%s", result);
         } else {
+            print("B: Best route, R: Resolved route\n");
             service.getRouteTables().forEach(id -> {
                 Collection<RouteInfo> tableRoutes = service.getRoutes(id);
 
@@ -68,7 +69,7 @@
 
                 // Print header
                 print(FORMAT_TABLE, id);
-                print(format, "", NETWORK, NEXTHOP, SOURCE, NODE);
+                print(format, "B", "R", NETWORK, NEXTHOP, SOURCE, NODE);
 
                 // Print routing entries
                 tableRoutes.stream()
@@ -83,8 +84,10 @@
 
     private void print(String format, RouteInfo routeInfo) {
         routeInfo.allRoutes().stream()
-                .sorted(Comparator.comparing(r -> r.nextHop()))
-                .forEach(r -> print(format, isBestRoute(routeInfo.bestRoute(), r) ? ">" : "",
+                .sorted(Comparator.comparing(ResolvedRoute::nextHop))
+                .forEach(r -> print(format,
+                        isBestRoute(routeInfo.bestRoute(), r) ? ">" : "",
+                        isResolvedRoute(r) ? "*" : "",
                         r.prefix(), r.nextHop(), r.route().source(), r.route().sourceNode()));
     }
 
@@ -92,6 +95,10 @@
         return Objects.equals(bestRoute.orElse(null), route);
     }
 
+    private boolean isResolvedRoute(ResolvedRoute route) {
+        return route.nextHopMac() != null && route.nextHopVlan() != null;
+    }
+
     /**
      * Produces a JSON array of routes.
      *
