diff --git a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java
index dbe58fe..b885f8a 100644
--- a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java
+++ b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java
@@ -362,6 +362,24 @@
         }
     }
 
+    private boolean routeInDhcpStore(IpPrefix prefix) {
+
+        if (dhcpStore != null) {
+            Collection<FpmRecord> dhcpRecords = dhcpStore.getFpmRecords();
+            return dhcpRecords.stream().anyMatch(record -> record.ipPrefix().equals(prefix));
+        }
+        return false;
+    }
+
+    private boolean routeInRipStore(IpPrefix prefix) {
+
+        if (ripStore != null) {
+            Collection<FpmRecord> ripRecords = ripStore.getFpmRecords();
+            return ripRecords.stream().anyMatch(record -> record.ipPrefix().equals(prefix));
+        }
+        return false;
+    }
+
     private void fpmMessage(FpmPeer peer, FpmHeader fpmMessage) {
         if (fpmMessage.type() == FpmHeader.FPM_TYPE_KEEPALIVE) {
             return;
@@ -400,6 +418,14 @@
 
         IpPrefix prefix = IpPrefix.valueOf(dstAddress, rtNetlink.dstLength());
 
+        // Ignore routes that we sent.
+        if ((prefix.isIp4() && (gateway.equals(pdPushNextHopIPv4))) ||
+            gateway.equals(pdPushNextHopIPv6)) {
+            if (routeInDhcpStore(prefix) || routeInRipStore(prefix)) {
+                return;
+            }
+        }
+
         List<Route> updates = new LinkedList<>();
         List<Route> withdraws = new LinkedList<>();
 
diff --git a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/cli/FpmConnectionsList.java b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/cli/FpmConnectionsList.java
index 33ff5d6..f55f00e 100644
--- a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/cli/FpmConnectionsList.java
+++ b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/cli/FpmConnectionsList.java
@@ -41,9 +41,8 @@
     protected void execute() {
         FpmInfoService fpmInfo = get(FpmInfoService.class);
 
-        if (fpmInfo.isPdPushEnabled()) {
-            print("PD Pushing is enabled/disbled.");
-        }
+        print(String.format("PD Pushing is %s.", fpmInfo.isPdPushEnabled() ? "enabled" : "disabled"));
+
         fpmInfo.peers().entrySet().stream()
                 .sorted(Comparator.<Map.Entry<FpmPeer, FpmPeerInfo>, IpAddress>comparing(e -> e.getKey().address())
                         .thenComparing(e -> e.getKey().port()))
