diff --git a/nest/rt-table.c b/nest/rt-table.c
index 50ddc141d..3f8c7a83f 100644
--- a/nest/rt-table.c
+++ b/nest/rt-table.c
@@ -3573,9 +3573,12 @@ rt_update_hostentry(rtable *tab, struct hostentry *he)
     {
       struct rte_storage *e = n->routes;
       ea_list *a = e->rte.attrs;
-      pxlen = n->n.addr->pxlen;
+      u32 pref = rt_get_preference(&e->rte);
 
-      if (ea_find(a, &ea_gen_hostentry))
+      for (struct rte_storage *ee = n->routes; ee; ee = ee->next)
+	if (rte_is_valid(&ee->rte) &&
+	    (rt_get_preference(&ee->rte) >= pref) &&
+	    ea_find(ee->rte.attrs, &ea_gen_hostentry))
 	{
 	  /* Recursive route should not depend on another recursive route */
 	  log(L_WARN "Next hop address %I resolvable through recursive route for %N",
@@ -3583,6 +3586,8 @@ rt_update_hostentry(rtable *tab, struct hostentry *he)
 	  goto done;
 	}
 
+      pxlen = n->n.addr->pxlen;
+
       eattr *nhea = ea_find(a, &ea_gen_nexthop);
       ASSERT_DIE(nhea);
       struct nexthop_adata *nhad = (void *) nhea->u.ptr;