diff --git a/routingtable/adjRIBOut/adj_rib_out.go b/routingtable/adjRIBOut/adj_rib_out.go
index 7aa1eb77932c6e2cbaace1f3989849e8f6edcc83..289dc7da1202cafd259aa93aa24f69b8f0e784fc 100644
--- a/routingtable/adjRIBOut/adj_rib_out.go
+++ b/routingtable/adjRIBOut/adj_rib_out.go
@@ -138,28 +138,30 @@ func (a *AdjRIBOut) RemovePath(pfx bnet.Prefix, p *route.Path) bool {
 		return false
 	}
 
-	q := p
+	sentPath := p
 	if a.addPathTX {
-		for _, q := range r.Paths() {
-			if q.Select(p) == 0 {
-				a.rt.RemovePath(pfx, q)
-
-				// try to find the PathID
-				pathID, err := a.pathIDManager.releasePath(p)
-				if err != nil {
-					log.Warningf("Unable to release path for prefix %s: %v", pfx.String(), err)
-					return true
-				}
-
-				p = p.Copy()
-				p.BGPPath.PathIdentifier = pathID
+		for _, sentPath := range r.Paths() {
+			if sentPath.Select(p) != 0 {
+				continue
 			}
+
+			a.rt.RemovePath(pfx, sentPath)
+
+			_, err := a.pathIDManager.releasePath(p)
+			if err != nil {
+				log.Warningf("Unable to release path for prefix %s: %v", pfx.String(), err)
+				return true
+			}
+		}
+
+		if sentPath == p {
+			return false
 		}
 	} else {
 		a.rt.RemovePath(pfx, p)
 	}
 
-	a.removePathFromClients(pfx, q)
+	a.removePathFromClients(pfx, sentPath)
 	return true
 }