diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index df37783..e304868 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -184,10 +184,8 @@
   struct connected *connected;
   struct listnode *node;
 
-  for (node = listhead (ifp->connected); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (ifp->connected, node, connected))
     {
-      connected = getdata (node);
-
       p = (struct prefix_ipv4 *) connected->address;
 
       if (p->family == AF_INET)
diff --git a/bgpd/bgp_nexthop.c b/bgpd/bgp_nexthop.c
index 76c1c2a..df55f32 100644
--- a/bgpd/bgp_nexthop.c
+++ b/bgpd/bgp_nexthop.c
@@ -419,7 +419,7 @@
   struct bgp_info *bi;
   struct bgp_info *next;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   int valid;
   int current;
   int changed;
@@ -437,7 +437,7 @@
     return;
 
   /* Maximum prefix check */
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (peer->status != Established)
 	continue;
@@ -723,13 +723,10 @@
   struct connected *ifc;
   struct prefix *p;
 
-  for (node = listhead (iflist); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
-      ifp = getdata (node);
-
-      for (node2 = listhead (ifp->connected); node2; nextnode (node2))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, node2, ifc))
 	{
-	  ifc = getdata (node2);
 	  p = ifc->address;
 
 	  if (p && p->family == AF_INET 
@@ -1033,7 +1030,7 @@
   struct bgp *bgp;
   struct bgp_node *rn;
   struct bgp_static *bgp_static;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   int valid;
   u_int32_t metric;
   struct in_addr nexthop;
@@ -1046,7 +1043,7 @@
   if (BGP_DEBUG (events, EVENTS))
     zlog_debug ("Import timer expired.");
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
     {
       for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	for (safi = SAFI_UNICAST; safi < SAFI_MPLS_VPN; safi++)
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 8f7577b..9fa23e5 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -1121,7 +1121,7 @@
 bgp_collision_detect (struct peer *new, struct in_addr remote_id)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct bgp *bgp;
 
   bgp = bgp_get_default ();
@@ -1137,7 +1137,7 @@
      OPEN message, then the local system performs the following
      collision resolution procedure: */
 
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       /* Under OpenConfirm status, local peer structure already hold
          remote router ID. */
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 9009638..4f3847d 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -1158,7 +1158,7 @@
   struct bgp_info_pair old_and_new;
   struct attr attr;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   p = &rn->p;
 
@@ -1170,7 +1170,7 @@
   if (CHECK_FLAG(rsclient->sflags, PEER_STATUS_GROUP))
   {
     group = rsclient->group;
-    LIST_LOOP(group->peer, rsclient, nn)
+    for (ALL_LIST_ELEMENTS (group->peer, node, nnode, rsclient))
       {
         /* Nothing to do. */
         if (old_select && old_select == new_select)
@@ -1203,7 +1203,7 @@
   struct bgp_info *new_select;
   struct bgp_info *old_select;
   struct bgp_info_pair old_and_new;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct peer *peer;
   struct attr attr;
 
@@ -1235,7 +1235,7 @@
 
 
   /* Check each BGP peer. */
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       bgp_process_announce_selected (peer, new_select, rn, &attr, afi, safi);
     }
@@ -1954,7 +1954,7 @@
             struct prefix_rd *prd, u_char *tag, int soft_reconfig)
 {
   struct peer *rsclient;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct bgp *bgp;
   int ret;
 
@@ -1964,7 +1964,7 @@
   bgp = peer->bgp;
 
   /* Process the update for each RS-client. */
-  LIST_LOOP(bgp->rsclient, rsclient, nn)
+  for (ALL_LIST_ELEMENTS (bgp->rsclient, node, nnode, rsclient))
     {
       if (CHECK_FLAG (rsclient->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT))
         bgp_update_rsclient (rsclient, afi, safi, attr, peer, p, type,
@@ -1984,12 +1984,12 @@
   struct bgp_node *rn;
   struct bgp_info *ri;
   struct peer *rsclient;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   bgp = peer->bgp;
 
   /* Process the withdraw for each RS-client. */
-  LIST_LOOP (bgp->rsclient, rsclient, nn)
+  for (ALL_LIST_ELEMENTS (bgp->rsclient, node, nnode, rsclient))
     {
       if (CHECK_FLAG (rsclient->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT))
         bgp_withdraw_rsclient (rsclient, afi, safi, peer, p, type, sub_type, prd, tag);
@@ -2316,7 +2316,7 @@
   struct bgp_node *rn;
   struct bgp_table *table;
   struct peer *rsclient;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (safi != SAFI_MPLS_VPN)
     bgp_clear_route_table (peer, afi, safi, NULL, NULL);
@@ -2326,7 +2326,7 @@
       if ((table = rn->info) != NULL)
        bgp_clear_route_table (peer, afi, safi, table, NULL);
 
-  LIST_LOOP (peer->bgp->rsclient, rsclient, nn)
+  for (ALL_LIST_ELEMENTS (peer->bgp->rsclient, node, nnode, rsclient))
     {
       if (CHECK_FLAG(rsclient->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT))
         bgp_clear_route_table (peer, afi, safi, NULL, rsclient);
@@ -2389,12 +2389,12 @@
 bgp_cleanup_routes ()
 {
   struct bgp *bgp;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct bgp_node *rn;
   struct bgp_table *table;
   struct bgp_info *ri;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
     {
       table = bgp->rib[AFI_IP][SAFI_UNICAST];
 
@@ -2884,11 +2884,11 @@
                   struct bgp_static *bgp_static, afi_t afi, safi_t safi)
 {
   struct peer *rsclient;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   bgp_static_update_main (bgp, p, bgp_static, afi, safi);
 
-  LIST_LOOP(bgp->rsclient, rsclient, nn)
+  for (ALL_LIST_ELEMENTS (bgp->rsclient, node, nnode, rsclient))
     {
       bgp_static_update_rsclient (rsclient, p, bgp_static, afi, safi);
     }
@@ -4558,7 +4558,7 @@
 		      u_int32_t metric, u_char type)
 {
   struct bgp *bgp;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct bgp_info *new;
   struct bgp_info *bi;
   struct bgp_info info;
@@ -4577,7 +4577,7 @@
   attr.med = metric;
   attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_MULTI_EXIT_DISC);
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
     {
       afi = family2afi (p->family);
 
@@ -4673,12 +4673,12 @@
 bgp_redistribute_delete (struct prefix *p, u_char type)
 {
   struct bgp *bgp;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   afi_t afi;
   struct bgp_node *rn;
   struct bgp_info *ri;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
     {
       afi = family2afi (p->family);
 
@@ -5590,7 +5590,7 @@
   struct bgp_info *ri;
   struct prefix *p;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   char buf1[INET6_ADDRSTRLEN];
   char buf2[INET6_ADDRSTRLEN];
   int count = 0;
@@ -5649,7 +5649,7 @@
   vty_out (vty, ")%s", VTY_NEWLINE);
 
   /* advertised peer */
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (bgp_adj_out_lookup (peer, p, afi, safi, rn))
 	{
diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c
index b11aaf2..060c68c 100644
--- a/bgpd/bgp_routemap.c
+++ b/bgpd/bgp_routemap.c
@@ -108,7 +108,7 @@
   union sockunion *su2;
   struct peer_group *group;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (type == RMAP_BGP)
     {
@@ -147,7 +147,7 @@
       else
         {
           group = peer->group;
-          LIST_LOOP (group->peer, peer, nn)
+          for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
             {
               if (sockunion_same (su, &peer->su))
                 return RMAP_MATCH;
@@ -2181,7 +2181,8 @@
   afi_t afi;
   safi_t safi;
   int direct;
-  struct listnode *nn, *nm;
+  struct listnode *node, *nnode;
+  struct listnode *mnode, *mnnode;
   struct bgp *bgp;
   struct peer *peer;
   struct peer_group *group;
@@ -2190,9 +2191,9 @@
   struct bgp_static *bgp_static;
 
   /* For neighbor route-map updates. */
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
     {
-      LIST_LOOP (bgp->peer, peer, nm)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -2214,7 +2215,7 @@
 		  filter->usmap.map = NULL;
 	      }
 	}
-      LIST_LOOP (bgp->group, group, nm)
+      for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -2239,9 +2240,9 @@
     }
 
   /* For default-originate route-map updates. */
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
     {
-      LIST_LOOP (bgp->peer, peer, nm)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -2256,7 +2257,7 @@
     }
 
   /* For network route-map updates. */
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
     {
       for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -2273,7 +2274,7 @@
     }
 
   /* For redistribute route-map updates. */
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
     {
       for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
 	{
diff --git a/bgpd/bgp_snmp.c b/bgpd/bgp_snmp.c
index f2d554d..344358e 100644
--- a/bgpd/bgp_snmp.c
+++ b/bgpd/bgp_snmp.c
@@ -280,7 +280,7 @@
 {
   struct bgp *bgp;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node;
   struct in_addr addr;
   int ret;
 
@@ -288,7 +288,7 @@
   if (! bgp)
     return NULL;
 
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS_RO (bgp->peer, node, peer))
     {
       ret = inet_pton (AF_INET, peer->host, &addr);
       if (ret > 0)
@@ -305,7 +305,7 @@
 {
   struct bgp *bgp;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node;
   struct in_addr *p;
   union sockunion su;
   int ret;
@@ -316,7 +316,7 @@
   if (! bgp)
     return NULL;
 
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS_RO (bgp->peer, node, peer))
     {
       ret = inet_pton (AF_INET, peer->host, &su.sin.sin_addr);
       if (ret > 0)
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index c4b1ef5..52025b7 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -1996,7 +1996,7 @@
   struct bgp *bgp;
   struct peer *peer;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct bgp_filter *pfilter;
   struct bgp_filter *gfilter;
 
@@ -2032,7 +2032,7 @@
       group = peer->group;
       gfilter = &peer->filter[afi][safi];
 
-      LIST_LOOP(group->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
         {
           pfilter = &peer->filter[afi][safi];
 
@@ -2078,7 +2078,7 @@
   struct bgp *bgp;
   struct peer *peer;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   bgp = vty->index;
 
@@ -2094,7 +2094,7 @@
     {
       group = peer->group;
 
-      LIST_LOOP (group->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
         {
           ret = peer_af_flag_unset (peer, afi, safi, PEER_FLAG_RSERVER_CLIENT);
           if (ret < 0)
@@ -3967,12 +3967,12 @@
 {
   int ret;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   /* Clear all neighbors. */
   if (sort == clear_all)
     {
-      LIST_LOOP (bgp->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  if (stype == BGP_CLEAR_SOFT_NONE)
 	    ret = peer_clear (peer);
@@ -4028,7 +4028,7 @@
 	  return -1; 
 	}
 
-      LIST_LOOP (group->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
 	{
 	  if (stype == BGP_CLEAR_SOFT_NONE)
 	    {
@@ -4049,7 +4049,7 @@
 
   if (sort == clear_external)
     {
-      LIST_LOOP (bgp->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  if (peer_sort (peer) == BGP_PEER_IBGP) 
 	    continue;
@@ -4081,7 +4081,7 @@
 	}
       as = (as_t) as_ul;
 
-      LIST_LOOP (bgp->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  if (peer->as != as) 
 	    continue;
@@ -6425,7 +6425,7 @@
 bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   int count = 0;
   char timebuf[BGP_UPTIME_LEN];
   int len;
@@ -6433,7 +6433,7 @@
   /* Header string for each address family. */
   static char header[] = "Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd";
 
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (peer->afc[afi][safi])
 	{
@@ -7319,11 +7319,11 @@
 bgp_show_neighbor (struct vty *vty, struct bgp *bgp,
 		   enum show_type type, union sockunion *su)
 {
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct peer *peer;
   int find = 0;
 
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       switch (type)
 	{
@@ -7667,13 +7667,13 @@
   char rmbuf[14];
   const char *rmname;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   int len;
   int count = 0;
 
   if (CHECK_FLAG (rsclient->sflags, PEER_STATUS_GROUP))
     {
-      LIST_LOOP (rsclient->group->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (rsclient->group->peer, node, nnode, peer))
         {
           count++;
           bgp_write_rsclient_summary (vty, peer, afi, safi);
@@ -7732,13 +7732,13 @@
                            afi_t afi, safi_t safi)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   int count = 0;
 
   /* Header string for each address family. */
   static char header[] = "Neighbor        V    AS  Export-Policy  Import-Policy  Up/Down  State";
 
-  LIST_LOOP (bgp->rsclient, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->rsclient, node, nnode, peer))
     {
       if (peer->afc[afi][safi] &&
          CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT))
diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index 176e447..0c0c8c0 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -46,16 +46,16 @@
 bgp_router_id_update (int command, struct zclient *zclient, zebra_size_t length)
 {
   struct prefix router_id;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct bgp *bgp;
 
   zebra_router_id_update_read(zclient->ibuf,&router_id);
   router_id_zebra = router_id.u.prefix4;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
     {
       if (!bgp->router_id_static.s_addr)
-      bgp_router_id_set (bgp, &router_id.u.prefix4);
+        bgp_router_id_set (bgp, &router_id.u.prefix4);
     }
 
   return 0;
@@ -92,7 +92,7 @@
   struct stream *s;
   struct interface *ifp;
   struct connected *c;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
   s = zclient->ibuf;
   ifp = zebra_interface_state_read (s);
@@ -100,11 +100,8 @@
   if (! ifp)
     return 0;
 
-  for (node = listhead (ifp->connected); node; nextnode (node))
-    {
-      c = getdata (node);
-      bgp_connected_add (c);
-    }
+  for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, c))
+    bgp_connected_add (c);
 
   return 0;
 }
@@ -115,32 +112,29 @@
   struct stream *s;
   struct interface *ifp;
   struct connected *c;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
   s = zclient->ibuf;
   ifp = zebra_interface_state_read (s);
   if (! ifp)
     return 0;
 
-  for (node = listhead (ifp->connected); node; nextnode (node))
-    {
-      c = getdata (node);
-      bgp_connected_delete (c);
-    }
+  for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, c))
+    bgp_connected_delete (c);
 
   /* Fast external-failover (Currently IPv4 only) */
   {
-    struct listnode *nn, *nm;
+    struct listnode *mnode;
     struct bgp *bgp;
     struct peer *peer;
     struct interface *peer_if;
 
-    LIST_LOOP (bm->bgp, bgp, nn)
+    for (ALL_LIST_ELEMENTS_RO (bm->bgp, mnode, bgp))
       {
 	if (CHECK_FLAG (bgp->flags, BGP_FLAG_NO_FAST_EXT_FAILOVER))
 	  continue;
 
-	LIST_LOOP (bgp->peer, peer, nm)
+	for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	  {
 	    if (peer->ttl != 1)
 	      continue;
@@ -319,13 +313,10 @@
   p.prefix = *addr;
   p.prefixlen = IPV4_MAX_BITLEN;
 
-  for (ifnode = listhead (iflist); ifnode; nextnode (ifnode))
+  for (ALL_LIST_ELEMENTS_RO (iflist, ifnode, ifp))
     {
-      ifp = getdata (ifnode);
-
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
 	{
-	  connected = getdata (cnode);
 	  cp = connected->address;
 	    
 	  if (cp->family == AF_INET)
@@ -345,13 +336,10 @@
   struct connected *connected;
   struct prefix *cp; 
   
-  for (ifnode = listhead (iflist); ifnode; nextnode (ifnode))
+  for (ALL_LIST_ELEMENTS_RO (iflist, ifnode, ifp))
     {
-      ifp = getdata (ifnode);
-
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
 	{
-	  connected = getdata (cnode);
 	  cp = connected->address;
 	    
 	  if (cp->family == AF_INET)
@@ -377,13 +365,10 @@
   p.prefix = *addr;
   p.prefixlen = IPV6_MAX_BITLEN;
 
-  for (ifnode = listhead (iflist); ifnode; nextnode (ifnode))
+  for (ALL_LIST_ELEMENTS_RO (iflist, ifnode, ifp))
     {
-      ifp = getdata (ifnode);
-
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
 	{
-	  connected = getdata (cnode);
 	  cp = connected->address;
 	    
 	  if (cp->family == AF_INET6)
@@ -403,13 +388,10 @@
   struct connected *connected;
   struct prefix *cp; 
 
-  for (ifnode = listhead (iflist); ifnode; nextnode (ifnode))
+  for (ALL_LIST_ELEMENTS_RO (iflist, ifnode, ifp))
     {
-      ifp = getdata (ifnode);
-
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
 	{
-	  connected = getdata (cnode);
 	  cp = connected->address;
 	    
 	  if (cp->family == AF_INET6)
@@ -427,9 +409,8 @@
   struct connected *connected;
   struct prefix *cp; 
   
-  for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+  for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
     {
-      connected = getdata (cnode);
       cp = connected->address;
 	    
       if (cp->family == AF_INET6)
@@ -449,9 +430,8 @@
   struct connected *connected;
   struct prefix *cp; 
   
-  for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+  for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
     {
-      connected = getdata (cnode);
       cp = connected->address;
 	    
       if (cp->family == AF_INET6)
@@ -591,15 +571,12 @@
   p.prefix = *addr;
   p.prefixlen = IPV6_MAX_BITLEN;
 
-  for (ifnode = listhead (iflist); ifnode; nextnode (ifnode))
+  for (ALL_LIST_ELEMENTS_RO (iflist, ifnode, ifp))
     {
-      ifp = getdata (ifnode);
-
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
 	{
 	  struct prefix *cp; 
 
-	  connected = getdata (cnode);
 	  cp = connected->address;
 	    
 	  if (cp->family == AF_INET6)
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index f3caf46..d1e8d96 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -160,7 +160,7 @@
 bgp_router_id_set (struct bgp *bgp, struct in_addr *id)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (bgp_config_check (bgp, BGP_CONFIG_ROUTER_ID)
       && IPV4_ADDR_SAME (&bgp->router_id, id))
@@ -170,7 +170,7 @@
   bgp_config_set (bgp, BGP_CONFIG_ROUTER_ID);
 
   /* Set all peer's local identifier with this value. */
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       IPV4_ADDR_COPY (&peer->local_id, id);
 
@@ -189,7 +189,7 @@
 bgp_cluster_id_set (struct bgp *bgp, struct in_addr *cluster_id)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (bgp_config_check (bgp, BGP_CONFIG_CLUSTER_ID)
       && IPV4_ADDR_SAME (&bgp->cluster_id, cluster_id))
@@ -199,7 +199,7 @@
   bgp_config_set (bgp, BGP_CONFIG_CLUSTER_ID);
 
   /* Clear all IBGP peer. */
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (peer_sort (peer) != BGP_PEER_IBGP)
 	continue;
@@ -218,7 +218,7 @@
 bgp_cluster_id_unset (struct bgp *bgp)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! bgp_config_check (bgp, BGP_CONFIG_CLUSTER_ID))
     return 0;
@@ -227,7 +227,7 @@
   bgp_config_unset (bgp, BGP_CONFIG_CLUSTER_ID);
 
   /* Clear all IBGP peer. */
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (peer_sort (peer) != BGP_PEER_IBGP)
 	continue;
@@ -267,7 +267,7 @@
 bgp_confederation_id_set (struct bgp *bgp, as_t as)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   int already_confed;
 
   if (as == 0)
@@ -281,7 +281,7 @@
   /* If we were doing confederation already, this is just an external
      AS change.  Just Reset EBGP sessions, not CONFED sessions.  If we
      were not doing confederation before, reset all EBGP sessions.  */
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       /* We're looking for peers who's AS is not local or part of our
 	 confederation.  */
@@ -328,12 +328,12 @@
 bgp_confederation_id_unset (struct bgp *bgp)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   bgp->confed_id = 0;
   bgp_config_unset (bgp, BGP_CONFIG_CONFEDERATION);
       
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       /* We're looking for peers who's AS is not local */
       if (peer_sort (peer) != BGP_PEER_IBGP)
@@ -374,7 +374,7 @@
 bgp_confederation_peers_add (struct bgp *bgp, as_t as)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! bgp)
     return BGP_ERR_INVALID_BGP;
@@ -398,7 +398,7 @@
 
   if (bgp_config_check (bgp, BGP_CONFIG_CONFEDERATION))
     {
-      LIST_LOOP (bgp->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  if (peer->as == as)
 	    {
@@ -424,7 +424,7 @@
   int i;
   int j;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! bgp)
     return -1;
@@ -454,7 +454,7 @@
      CONFED */
   if (bgp_config_check (bgp, BGP_CONFIG_CONFEDERATION))
     {
-      LIST_LOOP (bgp->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  if (peer->as == as)
 	    {
@@ -980,13 +980,13 @@
 {
   struct peer_group *group;
   struct peer *peer1;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
     {
       group = peer->group;
 
-      LIST_LOOP (group->peer, peer1, nn)
+      for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer1))
 	{
 	  if (peer1->af_group[afi][safi])
 	    return BGP_ERR_PEER_GROUP_MEMBER_EXISTS;
@@ -1233,9 +1233,9 @@
 peer_group_lookup (struct bgp *bgp, const char *name)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
-  LIST_LOOP (bgp->group, group, nn)
+  for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
     {
       if (strcmp (group->name, name) == 0)
 	return group;
@@ -1528,7 +1528,7 @@
 {
   struct peer_group *group;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   group = peer_group_lookup (bgp, group_name);
   if (! group)
@@ -1541,7 +1541,7 @@
      number must be updated to same number.  */
   peer_as_change (group->conf, *as);
 
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (peer->as != *as)
 	peer_as_change (peer, *as);
@@ -1555,11 +1555,11 @@
 {
   struct bgp *bgp;
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   bgp = group->bgp;
 
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       peer->group = NULL;
       peer_delete (peer);
@@ -1584,12 +1584,12 @@
 peer_group_remote_as_delete (struct peer_group *group)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! group->conf->as)
     return 0;
 
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       peer->group = NULL;
       peer_delete (peer);
@@ -1819,7 +1819,7 @@
 bgp_get_default ()
 {
   if (bm->bgp->head)
-    return bm->bgp->head->data;
+    return (listgetdata (listhead (bm->bgp)));
   return NULL;
 }
 
@@ -1828,9 +1828,9 @@
 bgp_lookup (as_t as, const char *name)
 {
   struct bgp *bgp;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
     if (bgp->as == as
 	&& ((bgp->name == NULL && name == NULL) 
 	    || (bgp->name && name && strcmp (bgp->name, name) == 0)))
@@ -1843,9 +1843,9 @@
 bgp_lookup_by_name (const char *name)
 {
   struct bgp *bgp;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
     if ((bgp->name == NULL && name == NULL)
 	|| (bgp->name && name && strcmp (bgp->name, name) == 0))
       return bgp;
@@ -1912,7 +1912,7 @@
 bgp_delete (struct bgp *bgp)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node;
   struct listnode *next;
   afi_t afi;
   safi_t safi;
@@ -1930,12 +1930,8 @@
   bgp->group->del = (void (*)(void *)) peer_group_delete;
   list_delete (bgp->group);
 
-  for (nn = bgp->peer->head; nn; nn = next)
-    {
-      peer = nn->data;
-      next = nn->next;
-      peer_delete (peer);
-    }
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, next, peer))
+    peer_delete (peer);
 
   bgp->rsclient->del = (void (*)(void *)) peer_delete;
   list_delete (bgp->rsclient);
@@ -1964,7 +1960,7 @@
 peer_lookup (struct bgp *bgp, union sockunion *su)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! bgp)
     bgp = bgp_get_default ();
@@ -1972,7 +1968,7 @@
   if (! bgp)
     return NULL;
   
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (sockunion_same (&peer->su, su)
 	  && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
@@ -1986,14 +1982,14 @@
 		       struct in_addr *remote_id, int *as)
 {
   struct peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct bgp *bgp;
 
   bgp = bgp_get_default ();
   if (! bgp)
     return NULL;
 
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (sockunion_same (&peer->su, su)
 	  && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
@@ -2005,7 +2001,7 @@
 	    *as = 1;
 	}
     }
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (sockunion_same (&peer->su, su)
 	  &&  ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
@@ -2231,7 +2227,7 @@
   int found;
   int size;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct peer_flag_action action;
 
   memset (&action, 0, sizeof (struct peer_flag_action));
@@ -2288,7 +2284,7 @@
   /* peer-group member updates. */
   group = peer->group;
 
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (set && CHECK_FLAG (peer->flags, flag) == flag)
 	continue;
@@ -2333,7 +2329,7 @@
 {
   int found;
   int size;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct peer_group *group;
   struct peer_flag_action action;
 
@@ -2411,7 +2407,7 @@
     {
       group = peer->group;
       
-      LIST_LOOP (group->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
 	{
 	  if (! peer->af_group[afi][safi])
 	    continue;
@@ -2467,7 +2463,7 @@
 peer_ebgp_multihop_set (struct peer *peer, int ttl)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (peer_sort (peer) == BGP_PEER_IBGP)
     return 0;
@@ -2482,7 +2478,7 @@
   else
     {
       group = peer->group;
-      LIST_LOOP (group->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
 	{
 	  if (peer_sort (peer) == BGP_PEER_IBGP)
 	    continue;
@@ -2500,7 +2496,7 @@
 peer_ebgp_multihop_unset (struct peer *peer)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (peer_sort (peer) == BGP_PEER_IBGP)
     return 0;
@@ -2518,7 +2514,7 @@
   else
     {
       group = peer->group;
-      LIST_LOOP (group->peer, peer, nn)
+      for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
 	{
 	  if (peer_sort (peer) == BGP_PEER_IBGP)
 	    continue;
@@ -2560,7 +2556,7 @@
 peer_update_source_if_set (struct peer *peer, const char *ifname)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (peer->update_if)
     {
@@ -2595,7 +2591,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (peer->update_if)
 	{
@@ -2630,7 +2626,7 @@
 peer_update_source_addr_set (struct peer *peer, union sockunion *su)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (peer->update_source)
     {
@@ -2664,7 +2660,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (peer->update_source)
 	{
@@ -2699,7 +2695,7 @@
 {
   union sockunion *su;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP)
       && ! peer->update_source
@@ -2746,7 +2742,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (! peer->update_source && ! peer->update_if)
 	continue;
@@ -2780,7 +2776,7 @@
 			    const char *rmap)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   /* Adress family must be activated.  */
   if (! peer->afc[afi][safi])
@@ -2814,7 +2810,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       SET_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE);
 
@@ -2836,7 +2832,7 @@
 peer_default_originate_unset (struct peer *peer, afi_t afi, safi_t safi)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   /* Adress family must be activated.  */
   if (! peer->afc[afi][safi])
@@ -2865,7 +2861,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       UNSET_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE);
 
@@ -2899,7 +2895,7 @@
 peer_weight_set (struct peer *peer, u_int16_t weight)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   SET_FLAG (peer->config, PEER_CONFIG_WEIGHT);
   peer->weight = weight;
@@ -2909,7 +2905,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       peer->weight = group->conf->weight;
     }
@@ -2920,7 +2916,7 @@
 peer_weight_unset (struct peer *peer)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   /* Set default weight. */
   if (peer_group_active (peer))
@@ -2935,7 +2931,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       peer->weight = 0;
     }
@@ -2946,7 +2942,7 @@
 peer_timers_set (struct peer *peer, u_int32_t keepalive, u_int32_t holdtime)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   /* Not for peer group memeber.  */
   if (peer_group_active (peer))
@@ -2974,7 +2970,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       SET_FLAG (peer->config, PEER_CONFIG_TIMER);
       peer->holdtime = group->conf->holdtime;
@@ -2987,7 +2983,7 @@
 peer_timers_unset (struct peer *peer)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (peer_group_active (peer))
     return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
@@ -3002,7 +2998,7 @@
 
   /* peer-group member updates. */
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       UNSET_FLAG (peer->config, PEER_CONFIG_TIMER);
       peer->holdtime = 0;
@@ -3106,7 +3102,7 @@
 peer_allowas_in_set (struct peer *peer, afi_t afi, safi_t safi, int allow_num)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (allow_num < 1 || allow_num > 10)
     return BGP_ERR_INVALID_VALUE;
@@ -3122,7 +3118,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (peer->allowas_in[afi][safi] != allow_num)
 	{
@@ -3139,7 +3135,7 @@
 peer_allowas_in_unset (struct peer *peer, afi_t afi, safi_t safi)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_ALLOWAS_IN))
     {
@@ -3151,7 +3147,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_ALLOWAS_IN))
 	{
@@ -3167,7 +3163,7 @@
 {
   struct bgp *bgp = peer->bgp;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (peer_sort (peer) != BGP_PEER_EBGP
       && peer_sort (peer) != BGP_PEER_INTERNAL)
@@ -3205,7 +3201,7 @@
     }
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       peer->change_local_as = as;
       if (no_prepend)
@@ -3230,7 +3226,7 @@
 peer_local_as_unset (struct peer *peer)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (peer_group_active (peer))
     return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
@@ -3256,7 +3252,7 @@
     }
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       peer->change_local_as = 0;
       UNSET_FLAG (peer->flags, PEER_FLAG_LOCAL_AS_NO_PREPEND);
@@ -3280,7 +3276,7 @@
 {
   struct bgp_filter *filter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3305,7 +3301,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3327,7 +3323,7 @@
   struct bgp_filter *filter;
   struct bgp_filter *gfilter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3364,7 +3360,7 @@
     return 0;
 
     group = peer->group;
-    LIST_LOOP (group->peer, peer, nn)
+    for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
       {
 	filter = &peer->filter[afi][safi];
 
@@ -3387,15 +3383,16 @@
   afi_t afi;
   safi_t safi;
   int direct;
-  struct listnode *nn, *nm;
+  struct listnode *mnode, *mnnode;
+  struct listnode *node, *nnode;
   struct bgp *bgp;
   struct peer *peer;
   struct peer_group *group;
   struct bgp_filter *filter;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
     {
-      LIST_LOOP (bgp->peer, peer, nm)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -3412,7 +3409,7 @@
 		  }
 	      }
 	}
-      LIST_LOOP (bgp->group, group, nm)
+      for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -3439,7 +3436,7 @@
 {
   struct bgp_filter *filter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3464,7 +3461,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3485,7 +3482,7 @@
   struct bgp_filter *filter;
   struct bgp_filter *gfilter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3522,7 +3519,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3542,7 +3539,8 @@
 void
 peer_prefix_list_update (struct prefix_list *plist)
 {
-  struct listnode *nn, *nm;
+  struct listnode *mnode, *mnnode;
+  struct listnode *node, *nnode;
   struct bgp *bgp;
   struct peer *peer;
   struct peer_group *group;
@@ -3551,9 +3549,9 @@
   safi_t safi;
   int direct;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
     {
-      LIST_LOOP (bgp->peer, peer, nm)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -3570,7 +3568,7 @@
 		  }
 	      }
 	}
-      LIST_LOOP (bgp->group, group, nm)
+      for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -3596,7 +3594,7 @@
 {
   struct bgp_filter *filter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3618,7 +3616,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3639,7 +3637,7 @@
   struct bgp_filter *filter;
   struct bgp_filter *gfilter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3678,7 +3676,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3700,15 +3698,16 @@
   afi_t afi;
   safi_t safi;
   int direct;
-  struct listnode *nn, *nm;
+  struct listnode *mnode, *mnnode;
+  struct listnode *node, *nnode;
   struct bgp *bgp;
   struct peer *peer;
   struct peer_group *group;
   struct bgp_filter *filter;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
     {
-      LIST_LOOP (bgp->peer, peer, nm)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -3725,7 +3724,7 @@
 		  }
 	      }
 	}
-      LIST_LOOP (bgp->group, group, nm)
+      for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
 	{
 	  for (afi = AFI_IP; afi < AFI_MAX; afi++)
 	    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@@ -3752,7 +3751,7 @@
 {
   struct bgp_filter *filter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3777,7 +3776,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3799,7 +3798,7 @@
   struct bgp_filter *filter;
   struct bgp_filter *gfilter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3836,7 +3835,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3858,7 +3857,7 @@
 {
   struct bgp_filter *filter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3878,7 +3877,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3899,7 +3898,7 @@
 {
   struct bgp_filter *filter;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3918,7 +3917,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       filter = &peer->filter[afi][safi];
 
@@ -3939,7 +3938,7 @@
 			 int warning, u_int16_t restart)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -3957,7 +3956,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (! peer->af_group[afi][safi])
 	continue;
@@ -3978,7 +3977,7 @@
 peer_maximum_prefix_unset (struct peer *peer, afi_t afi, safi_t safi)
 {
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   if (! peer->afc[afi][safi])
     return BGP_ERR_PEER_INACTIVE;
@@ -4014,7 +4013,7 @@
     return 0;
 
   group = peer->group;
-  LIST_LOOP (group->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
     {
       if (! peer->af_group[afi][safi])
 	continue;
@@ -4606,13 +4605,13 @@
   int write = 0;
   struct peer *peer;
   struct peer_group *group;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
   bgp_config_write_network (vty, bgp, afi, safi, &write);
 
   bgp_config_write_redistribute (vty, bgp, afi, safi, &write);
 
-  LIST_LOOP (bgp->group, group, nn)
+  for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
     {
       if (group->conf->afc[afi][safi])
 	{
@@ -4620,7 +4619,7 @@
 	  bgp_config_write_peer (vty, bgp, group->conf, afi, safi);
 	}
     }
-  LIST_LOOP (bgp->peer, peer, nn)
+  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
     {
       if (peer->afc[afi][safi])
 	{
@@ -4644,7 +4643,8 @@
   struct bgp *bgp;
   struct peer_group *group;
   struct peer *peer;
-  struct listnode *nn, *nm, *no;
+  struct listnode *node, *nnode;
+  struct listnode *mnode, *mnnode;
 
   /* BGP Multiple instance. */
   if (bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
@@ -4661,7 +4661,7 @@
     }
 
   /* BGP configuration. */
-  LIST_LOOP (bm->bgp, bgp, nn)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
     {
       if (write)
 	vty_out (vty, "!%s", VTY_NEWLINE);
@@ -4789,13 +4789,13 @@
 		 bgp->default_holdtime, VTY_NEWLINE);
 
       /* peer-group */
-      LIST_LOOP (bgp->group, group, nm)
+      for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
 	{
 	  bgp_config_write_peer (vty, bgp, group->conf, AFI_IP, SAFI_UNICAST);
 	}
 
       /* Normal neighbor configuration. */
-      LIST_LOOP (bgp->peer, peer, no)
+      for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
 	{
 	  if (! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
 	    bgp_config_write_peer (vty, bgp, peer, AFI_IP, SAFI_UNICAST);
@@ -4887,15 +4887,15 @@
 {
   struct bgp *bgp;
   struct peer *peer;
-  struct listnode *nn;
-  struct listnode *mm;
+  struct listnode *node, *nnode;
+  struct listnode *mnode, *mnnode;
 
-  LIST_LOOP (bm->bgp, bgp, nn)
-    LIST_LOOP (bgp->peer, peer, mm)
+  for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
+    for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
       if (peer->status == Established)
           bgp_notify_send (peer, BGP_NOTIFY_CEASE,
                            BGP_NOTIFY_CEASE_PEER_UNCONFIG);
-
+  
   bgp_cleanup_routes ();
 }
 
