diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c
index ea54c14222cf..ca23716416c2 100644
--- a/bgpd/bgp_evpn.c
+++ b/bgpd/bgp_evpn.c
@@ -2496,8 +2496,11 @@ static int install_evpn_route_entry_in_vrf(struct bgp *bgp_vrf,
 		pi = bgp_create_evpn_bgp_path_info(parent_pi, dest, &attr);
 		new_pi = true;
 	} else {
-		if (attrhash_cmp(pi->attr, &attr)
-		    && !CHECK_FLAG(pi->flags, BGP_PATH_REMOVED)) {
+		if (attrhash_cmp(pi->attr, &attr) &&
+		    ((pi->extra && parent_pi->extra &&
+		      pi->extra->igpmetric == parent_pi->extra->igpmetric) ||
+		     (!pi->extra && !parent_pi->extra)) &&
+		    !CHECK_FLAG(pi->flags, BGP_PATH_REMOVED)) {
 			bgp_dest_unlock_node(dest);
 			return 0;
 		}
diff --git a/bgpd/bgp_nht.c b/bgpd/bgp_nht.c
index 19ae1372084f..a8488d77ed7d 100644
--- a/bgpd/bgp_nht.c
+++ b/bgpd/bgp_nht.c
@@ -1079,31 +1079,33 @@ void evaluate_paths(struct bgp_nexthop_cache *bnc)
 		path_valid = CHECK_FLAG(path->flags, BGP_PATH_VALID);
 		if (path_valid != bnc_is_valid_nexthop) {
 			if (path_valid) {
-				/* No longer valid, clear flag; also for EVPN
-				 * routes, unimport from VRFs if needed.
-				 */
+				/* No longer valid, clear flag */
 				bgp_aggregate_decrement(bgp_path, p, path, afi,
 							safi);
 				bgp_path_info_unset_flag(dest, path,
 							 BGP_PATH_VALID);
-				if (safi == SAFI_EVPN &&
-				    bgp_evpn_is_prefix_nht_supported(bgp_dest_get_prefix(dest)))
-					bgp_evpn_unimport_route(bgp_path,
-						afi, safi, bgp_dest_get_prefix(dest), path);
 			} else {
-				/* Path becomes valid, set flag; also for EVPN
-				 * routes, import from VRFs if needed.
-				 */
+				/* Path becomes valid, set flag */
 				bgp_path_info_set_flag(dest, path,
 						       BGP_PATH_VALID);
 				bgp_aggregate_increment(bgp_path, p, path, afi,
 							safi);
-				if (safi == SAFI_EVPN &&
-				    bgp_evpn_is_prefix_nht_supported(bgp_dest_get_prefix(dest)))
-					bgp_evpn_import_route(bgp_path,
-						afi, safi, bgp_dest_get_prefix(dest), path);
 			}
 		}
+		if ((path_valid != bnc_is_valid_nexthop ||
+		     CHECK_FLAG(path->flags, BGP_PATH_IGP_CHANGED)) &&
+		    safi == SAFI_EVPN &&
+		    bgp_evpn_is_prefix_nht_supported(
+			    bgp_dest_get_prefix(dest))) {
+			if (bnc_is_valid_nexthop)
+				bgp_evpn_import_route(bgp_path, afi, safi,
+						      bgp_dest_get_prefix(dest),
+						      path);
+			else
+				bgp_evpn_unimport_route(
+					bgp_path, afi, safi,
+					bgp_dest_get_prefix(dest), path);
+		}
 
 		bgp_process(bgp_path, dest, afi, safi);
 	}