diff --git a/src/vnet/fib/fib_entry_src_interface.c b/src/vnet/fib/fib_entry_src_interface.c
index 1400360..88154ef 100644
--- a/src/vnet/fib/fib_entry_src_interface.c
+++ b/src/vnet/fib/fib_entry_src_interface.c
@@ -66,17 +66,22 @@
      */
     if (!(FIB_ENTRY_FLAG_LOCAL & src->fes_entry_flags))
     {
-        adj = adj_get(fib_path_list_get_adj(
-			  src->fes_pl,
-			  fib_entry_get_default_chain_type(entry)));
+        adj_index_t ai;
 
-	if (IP_LOOKUP_NEXT_GLEAN == adj->lookup_next_index)
+        ai = fib_path_list_get_adj(src->fes_pl,
+                                   fib_entry_get_default_chain_type(entry));
+        if (INDEX_INVALID != ai)
         {
-            /*
-             * the connected prefix will link to a glean on a non-p2p
-             * u.interface.
-             */
-            adj->sub_type.glean.receive_addr = entry->fe_prefix.fp_addr;
+            adj = adj_get(ai);
+
+            if (IP_LOOKUP_NEXT_GLEAN == adj->lookup_next_index)
+            {
+                /*
+                 * the connected prefix will link to a glean on a non-p2p
+                 * u.interface.
+                 */
+                adj->sub_type.glean.receive_addr = entry->fe_prefix.fp_addr;
+            }
         }
     }
 }
diff --git a/src/vnet/fib/fib_path.c b/src/vnet/fib/fib_path.c
index 60ba92b..1eb195d 100644
--- a/src/vnet/fib/fib_path.c
+++ b/src/vnet/fib/fib_path.c
@@ -645,10 +645,16 @@
     ASSERT(0);
 }
 
-static const adj_index_t
+static void
 fib_path_attached_next_hop_get_adj (fib_path_t *path,
-				    vnet_link_t link)
+				    vnet_link_t link,
+                                    dpo_id_t *dpo)
 {
+    fib_protocol_t nh_proto;
+    adj_index_t ai;
+
+    nh_proto = dpo_proto_to_fib(path->fp_nh_proto);
+
     if (vnet_sw_interface_is_p2p(vnet_get_main(),
 				 path->attached_next_hop.fp_interface))
     {
@@ -658,18 +664,18 @@
 	 * the subnet address (the attached route) links to the
 	 * auto-adj (see below), we want that adj here too.
 	 */
-	return (adj_nbr_add_or_lock(dpo_proto_to_fib(path->fp_nh_proto),
-				    link,
-				    &zero_addr,
-				    path->attached_next_hop.fp_interface));
+	ai = adj_nbr_add_or_lock(nh_proto, link, &zero_addr,
+                                 path->attached_next_hop.fp_interface);
     }
     else
     {
-	return (adj_nbr_add_or_lock(dpo_proto_to_fib(path->fp_nh_proto),
-				    link,
-				    &path->attached_next_hop.fp_nh,
-				    path->attached_next_hop.fp_interface));
+	ai = adj_nbr_add_or_lock(nh_proto, link,
+                                 &path->attached_next_hop.fp_nh,
+                                 path->attached_next_hop.fp_interface);
     }
+
+    dpo_set(dpo, DPO_ADJACENCY, vnet_link_to_dpo_proto(link), ai);
+    adj_unlock(ai);
 }
 
 static void
@@ -679,12 +685,11 @@
      * resolve directly via the adjacency discribed by the
      * interface and next-hop
      */
-    dpo_set(&path->fp_dpo,
-	    DPO_ADJACENCY,
-	    path->fp_nh_proto,
-	    fib_path_attached_next_hop_get_adj(
-		 path,
-		 dpo_proto_to_link(path->fp_nh_proto)));
+    fib_path_attached_next_hop_get_adj(path,
+                                       dpo_proto_to_link(path->fp_nh_proto),
+                                       &path->fp_dpo);
+
+    ASSERT(dpo_is_adj(&path->fp_dpo));
 
     /*
      * become a child of the adjacency so we receive updates
@@ -702,10 +707,15 @@
     }
 }
 
-static const adj_index_t
+static void
 fib_path_attached_get_adj (fib_path_t *path,
-                           vnet_link_t link)
+                           vnet_link_t link,
+                           dpo_id_t *dpo)
 {
+    fib_protocol_t nh_proto;
+
+    nh_proto = dpo_proto_to_fib(path->fp_nh_proto);
+
     if (vnet_sw_interface_is_p2p(vnet_get_main(),
                                  path->attached.fp_interface))
     {
@@ -713,17 +723,28 @@
          * point-2-point interfaces do not require a glean, since
          * there is nothing to ARP. Install a rewrite/nbr adj instead
          */
-        return (adj_nbr_add_or_lock(dpo_proto_to_fib(path->fp_nh_proto),
-                                    link,
-                                    &zero_addr,
-                                    path->attached.fp_interface));
+        adj_index_t ai;
+
+        ai = adj_nbr_add_or_lock(nh_proto, link, &zero_addr,
+                                 path->attached.fp_interface);
+
+        dpo_set(dpo, DPO_ADJACENCY, vnet_link_to_dpo_proto(link), ai);
+        adj_unlock(ai);
+    }
+    else if (vnet_sw_interface_is_nbma(vnet_get_main(),
+                                       path->attached.fp_interface))
+    {
+        dpo_copy(dpo, drop_dpo_get(path->fp_nh_proto));
     }
     else
     {
-        return (adj_glean_add_or_lock(dpo_proto_to_fib(path->fp_nh_proto),
-                                      link,
-                                      path->attached.fp_interface,
-                                      NULL));
+        adj_index_t ai;
+
+        ai = adj_glean_add_or_lock(nh_proto, link,
+                                   path->attached.fp_interface,
+                                   NULL);
+        dpo_set(dpo, DPO_ADJACENCY_GLEAN, vnet_link_to_dpo_proto(link), ai);
+        adj_unlock(ai);
     }
 }
 
@@ -910,14 +931,10 @@
         bier_table_ecmp_unlock(path->fp_via_bier_tbl);
         break;
     case FIB_PATH_TYPE_ATTACHED_NEXT_HOP:
-	adj_child_remove(path->fp_dpo.dpoi_index,
-			 path->fp_sibling);
-        adj_unlock(path->fp_dpo.dpoi_index);
-        break;
     case FIB_PATH_TYPE_ATTACHED:
-        adj_child_remove(path->fp_dpo.dpoi_index,
-                         path->fp_sibling);
-        adj_unlock(path->fp_dpo.dpoi_index);
+	if (dpo_is_adj(&path->fp_dpo))
+            adj_child_remove(path->fp_dpo.dpoi_index,
+                             path->fp_sibling);
         break;
     case FIB_PATH_TYPE_UDP_ENCAP:
 	udp_encap_unlock(path->fp_dpo.dpoi_index);
@@ -1089,25 +1106,22 @@
              * restack the DPO to pick up the correct DPO sub-type
              */
             uword if_is_up;
-            adj_index_t ai;
 
             if_is_up = vnet_sw_interface_is_up(
                            vnet_get_main(),
                            path->attached_next_hop.fp_interface);
 
-            ai = fib_path_attached_next_hop_get_adj(
-                     path,
-                     dpo_proto_to_link(path->fp_nh_proto));
+            fib_path_attached_next_hop_get_adj(
+                path,
+                dpo_proto_to_link(path->fp_nh_proto),
+                &path->fp_dpo);
 
             path->fp_oper_flags &= ~FIB_PATH_OPER_FLAG_RESOLVED;
-            if (if_is_up && adj_is_up(ai))
+            if (if_is_up && adj_is_up(path->fp_dpo.dpoi_index))
             {
                 path->fp_oper_flags |= FIB_PATH_OPER_FLAG_RESOLVED;
             }
 
-            dpo_set(&path->fp_dpo, DPO_ADJACENCY, path->fp_nh_proto, ai);
-            adj_unlock(ai);
-
             if (!if_is_up)
             {
                 /*
@@ -1927,11 +1941,9 @@
         {
             path->fp_oper_flags &= ~FIB_PATH_OPER_FLAG_RESOLVED;
         }
-        dpo_set(&tmp,
-                DPO_ADJACENCY,
-                path->fp_nh_proto,
-                fib_path_attached_get_adj(path,
-                                          dpo_proto_to_link(path->fp_nh_proto)));
+        fib_path_attached_get_adj(path,
+                                  dpo_proto_to_link(path->fp_nh_proto),
+                                  &tmp);
 
         /*
          * re-fetch after possible mem realloc
@@ -1943,9 +1955,12 @@
          * become a child of the adjacency so we receive updates
          * when the interface state changes
          */
-        path->fp_sibling = adj_child_add(path->fp_dpo.dpoi_index,
-                                         FIB_NODE_TYPE_PATH,
-                                         fib_path_get_index(path));
+        if (dpo_is_adj(&path->fp_dpo))
+        {
+            path->fp_sibling = adj_child_add(path->fp_dpo.dpoi_index,
+                                             FIB_NODE_TYPE_PATH,
+                                             fib_path_get_index(path));
+        }
         dpo_reset(&tmp);
 	break;
     }
@@ -2213,7 +2228,6 @@
 
     path = fib_path_get(path_index);
 
-    ASSERT(dpo_is_adj(&path->fp_dpo));
     if (dpo_is_adj(&path->fp_dpo))
     {
 	return (path->fp_dpo.dpoi_index);
@@ -2432,21 +2446,11 @@
 	    case FIB_FORW_CHAIN_TYPE_NSH:
 	    case FIB_FORW_CHAIN_TYPE_MCAST_IP4:
 	    case FIB_FORW_CHAIN_TYPE_MCAST_IP6:
-	    {
-		adj_index_t ai;
-
-		/*
-		 * get a appropriate link type adj.
-		 */
-		ai = fib_path_attached_next_hop_get_adj(
+		fib_path_attached_next_hop_get_adj(
 		         path,
-			 fib_forw_chain_type_to_link_type(fct));
-		dpo_set(dpo, DPO_ADJACENCY,
-			fib_forw_chain_type_to_dpo_proto(fct), ai);
-		adj_unlock(ai);
-
+			 fib_forw_chain_type_to_link_type(fct),
+                         dpo);
 		break;
-	    }
 	    case FIB_FORW_CHAIN_TYPE_BIER:
 		break;
 	    }
@@ -2549,20 +2553,10 @@
 	    case FIB_FORW_CHAIN_TYPE_ETHERNET:
 	    case FIB_FORW_CHAIN_TYPE_NSH:
             case FIB_FORW_CHAIN_TYPE_BIER:
-                {
-                    adj_index_t ai;
-
-                    /*
-                     * get a appropriate link type adj.
-                     */
-                    ai = fib_path_attached_get_adj(
-                            path,
-                            fib_forw_chain_type_to_link_type(fct));
-                    dpo_set(dpo, DPO_ADJACENCY,
-                            fib_forw_chain_type_to_dpo_proto(fct), ai);
-                    adj_unlock(ai);
-                    break;
-                }
+                fib_path_attached_get_adj(path,
+                                          fib_forw_chain_type_to_link_type(fct),
+                                          dpo);
+                break;
 	    case FIB_FORW_CHAIN_TYPE_MCAST_IP4:
 	    case FIB_FORW_CHAIN_TYPE_MCAST_IP6:
                 {
