diff --git a/routingtable/adjRIBOut/adj_rib_out.go b/routingtable/adjRIBOut/adj_rib_out.go
index e211479b0480a338259a0dccce1a66b060ebcfe1..a2179fc02d3d9cff82bc67f95ba1e86fa2a293bd 100644
--- a/routingtable/adjRIBOut/adj_rib_out.go
+++ b/routingtable/adjRIBOut/adj_rib_out.go
@@ -69,19 +69,21 @@ func (a *AdjRIBOut) AddPath(pfx bnet.Prefix, p *route.Path) error {
 	a.mu.Lock()
 	defer a.mu.Unlock()
 
-	if !a.neighbor.CapAddPathRX {
+	// AddPathRX capable neighbor
+	if a.neighbor.CapAddPathRX {
+		pathID, err := a.pathIDManager.addPath(p)
+		if err != nil {
+			return fmt.Errorf("Unable to get path ID: %v", err)
+		}
+
+		p.BGPPath.PathIdentifier = pathID
+		a.rt.AddPath(pfx, p)
+	} else {
+		// rt.ReplacePath will add this path to the rt in any case, so no rt.AddPath here!
 		oldPaths := a.rt.ReplacePath(pfx, p)
 		a.removePathsFromClients(pfx, oldPaths)
 	}
 
-	pathID, err := a.pathIDManager.addPath(p)
-	if err != nil {
-		return fmt.Errorf("Unable to get path ID: %v", err)
-	}
-
-	p.BGPPath.PathIdentifier = pathID
-	a.rt.AddPath(pfx, p)
-
 	for _, client := range a.ClientManager.Clients() {
 		err := client.AddPath(pfx, p)
 		if err != nil {
@@ -166,3 +168,17 @@ func (a *AdjRIBOut) Print() string {
 
 	return ret
 }
+
+// Dump all routes present in this AdjRIBOut
+func (a *AdjRIBOut) Dump() string {
+	a.mu.RLock()
+	defer a.mu.RUnlock()
+
+	ret := fmt.Sprintf("DUMPING ADJ-RIB-OUT:\n")
+	routes := a.rt.Dump()
+	for _, r := range routes {
+		ret += fmt.Sprintf("%s\n", r.Print())
+	}
+
+	return ret
+}