diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c
index f58fb33..da73724 100644
--- a/ripd/rip_interface.c
+++ b/ripd/rip_interface.c
@@ -222,17 +222,14 @@
   /* RIPv1 and non multicast interface. */
   if (if_is_pointopoint (ifp) || if_is_broadcast (ifp))
     {
-      struct listnode *cnode;
+      struct listnode *cnode, *cnnode;
+      struct connected *connected;
 
       if (IS_RIP_DEBUG_EVENT)
 	zlog_debug ("broadcast request to %s", ifp->name);
 
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS (ifp->connected, cnode, cnnode, connected))
 	{
-	  struct connected *connected;
-
-	  connected = getdata (cnode);
-
 	  if (connected->address->family == AF_INET)
 	    {
 	      memset (&to, 0, sizeof (struct sockaddr_in));
@@ -321,20 +318,19 @@
 rip_multicast_join (struct interface *ifp, int sock)
 {
   struct listnode *cnode;
+  struct connected *ifc;
 
   if (if_is_operative (ifp) && if_is_multicast (ifp))
     {
       if (IS_RIP_DEBUG_EVENT)
 	zlog_debug ("multicast join at %s", ifp->name);
 
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, ifc))
 	{
 	  struct prefix_ipv4 *p;
-	  struct connected *connected;
 	  struct in_addr group;
 	      
-	  connected = getdata (cnode);
-	  p = (struct prefix_ipv4 *) connected->address;
+	  p = (struct prefix_ipv4 *) ifc->address;
       
 	  if (p->family != AF_INET)
 	    continue;
@@ -354,21 +350,20 @@
 rip_multicast_leave (struct interface *ifp, int sock)
 {
   struct listnode *cnode;
+  struct connected *connected;
 
   if (if_is_up (ifp) && if_is_multicast (ifp))
     {
       if (IS_RIP_DEBUG_EVENT)
 	zlog_debug ("multicast leave from %s", ifp->name);
 
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
 	{
 	  struct prefix_ipv4 *p;
-	  struct connected *connected;
 	  struct in_addr group;
-	      
-	  connected = getdata (cnode);
+          
 	  p = (struct prefix_ipv4 *) connected->address;
-      
+	  
 	  if (p->family != AF_INET)
 	    continue;
       
@@ -387,18 +382,15 @@
   struct connected *connected;
   int count = 0;
 
-  for (nn = listhead (ifp->connected); nn; nextnode (nn))
-    if ((connected = getdata (nn)) != NULL)
-      {
-	struct prefix *p;
+  for (ALL_LIST_ELEMENTS_RO (ifp->connected, nn, connected))
+    {
+      struct prefix *p;
 
-	p = connected->address;
+      p = connected->address;
 
-	if (p->family == AF_INET)
-          {
-	    count++;
-	  }
-      }
+      if (p->family == AF_INET)
+        count++;
+    }
 						
   return count;
 }
@@ -411,20 +403,17 @@
 if_check_address (struct in_addr addr)
 {
   struct listnode *node;
-
-  for (node = listhead (iflist); node; nextnode (node))
+  struct interface *ifp;
+  
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
       struct listnode *cnode;
-      struct interface *ifp;
+      struct connected *connected;
 
-      ifp = getdata (node);
-
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
 	{
-	  struct connected *connected;
 	  struct prefix_ipv4 *p;
 
-	  connected = getdata (cnode);
 	  p = (struct prefix_ipv4 *) connected->address;
 
 	  if (p->family != AF_INET)
@@ -443,6 +432,7 @@
 {
   struct listnode *node;
   struct connected *connected = NULL;
+  struct interface *ifp;
   struct prefix_ipv4 *p;
   struct prefix_ipv4 pa;
 
@@ -450,17 +440,12 @@
   pa.prefix = addr;
   pa.prefixlen = IPV4_MAX_PREFIXLEN;
 
-  for (node = listhead (iflist); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
       struct listnode *cnode;
-      struct interface *ifp;
 
-      ifp = getdata (node);
-
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, connected))
 	{
-	  connected = getdata (cnode);
-
 	  if (if_is_pointopoint (ifp))
 	    {
 	      p = (struct prefix_ipv4 *) connected->address;
@@ -610,9 +595,8 @@
   struct interface *ifp;
   struct rip_interface *ri;
 
-  for (node = listhead (iflist); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
-      ifp = getdata (node);
       ri = ifp->info;
 
       ri->enable_network = 0;
@@ -634,9 +618,8 @@
   struct interface *ifp;
   struct rip_interface *ri;
 
-  for (node = listhead (iflist); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
-      ifp = getdata (node);
       ri = ifp->info;
 
       ri->enable_network = 0;
@@ -741,13 +724,10 @@
 rip_if_down_all ()
 {
   struct interface *ifp;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
-  for (node = listhead (iflist); node; nextnode (node))
-    {
-      ifp = getdata (node);
-      rip_if_down (ifp);
-    }
+  for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+    rip_if_down (ifp);
 }
 
 static void
@@ -875,33 +855,32 @@
 int
 rip_enable_network_lookup_if (struct interface *ifp)
 {
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct connected *connected;
   struct prefix_ipv4 address;
 
-  for (nn = listhead (ifp->connected); nn; nextnode (nn))
-    if ((connected = getdata (nn)) != NULL)
-      {
-	struct prefix *p; 
-	struct route_node *node;
+  for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, connected))
+    {
+      struct prefix *p; 
+      struct route_node *node;
 
-	p = connected->address;
+      p = connected->address;
 
-	if (p->family == AF_INET)
-	  {
-	    address.family = AF_INET;
-	    address.prefix = p->u.prefix4;
-	    address.prefixlen = IPV4_MAX_BITLEN;
-	    
-	    node = route_node_match (rip_enable_network,
-				     (struct prefix *)&address);
-	    if (node)
-	      {
-		route_unlock_node (node);
-		return 1;
-	      }
-	  }
-      }
+      if (p->family == AF_INET)
+        {
+          address.family = AF_INET;
+          address.prefix = p->u.prefix4;
+          address.prefixlen = IPV4_MAX_BITLEN;
+          
+          node = route_node_match (rip_enable_network,
+                                   (struct prefix *)&address);
+          if (node)
+            {
+              route_unlock_node (node);
+              return 1;
+            }
+        }
+    }
   return -1;
 }
 
@@ -1065,39 +1044,38 @@
 void
 rip_connect_set (struct interface *ifp, int set)
 {
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct connected *connected;
   struct prefix_ipv4 address;
 
-  for (nn = listhead (ifp->connected); nn; nextnode (nn))
-    if ((connected = getdata (nn)) != NULL)
-      {
-	struct prefix *p; 
-	p = connected->address;
+  for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, connected))
+    {
+      struct prefix *p; 
+      p = connected->address;
 
-	if (p->family != AF_INET)
-	  continue;
+      if (p->family != AF_INET)
+        continue;
 
-	address.family = AF_INET;
-	address.prefix = p->u.prefix4;
-	address.prefixlen = p->prefixlen;
-	apply_mask_ipv4 (&address);
+      address.family = AF_INET;
+      address.prefix = p->u.prefix4;
+      address.prefixlen = p->prefixlen;
+      apply_mask_ipv4 (&address);
 
-	if (set) {
-          /* Check once more wether this prefix is within a "network IF_OR_PREF" one */
-          if ((rip_enable_if_lookup(connected->ifp->name) >= 0) ||
-              (rip_enable_network_lookup2(connected) >= 0))
-	    rip_redistribute_add (ZEBRA_ROUTE_CONNECT, RIP_ROUTE_INTERFACE,
-				  &address, connected->ifp->ifindex, NULL);
-	} else
-	  {
-	    rip_redistribute_delete (ZEBRA_ROUTE_CONNECT, RIP_ROUTE_INTERFACE,
-				     &address, connected->ifp->ifindex);
-	    if (rip_redistribute_check (ZEBRA_ROUTE_CONNECT))
-	      rip_redistribute_add (ZEBRA_ROUTE_CONNECT, RIP_ROUTE_REDISTRIBUTE,
-				    &address, connected->ifp->ifindex, NULL);
-	  }
-      }
+      if (set) {
+        /* Check once more wether this prefix is within a "network IF_OR_PREF" one */
+        if ((rip_enable_if_lookup(connected->ifp->name) >= 0) ||
+            (rip_enable_network_lookup2(connected) >= 0))
+          rip_redistribute_add (ZEBRA_ROUTE_CONNECT, RIP_ROUTE_INTERFACE,
+                                &address, connected->ifp->ifindex, NULL);
+      } else
+        {
+          rip_redistribute_delete (ZEBRA_ROUTE_CONNECT, RIP_ROUTE_INTERFACE,
+                                   &address, connected->ifp->ifindex);
+          if (rip_redistribute_check (ZEBRA_ROUTE_CONNECT))
+            rip_redistribute_add (ZEBRA_ROUTE_CONNECT, RIP_ROUTE_REDISTRIBUTE,
+                                  &address, connected->ifp->ifindex, NULL);
+        }
+    }
 }
 
 /* Update interface status. */
@@ -1169,14 +1147,11 @@
 rip_enable_apply_all ()
 {
   struct interface *ifp;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
   /* Check each interface. */
-  for (node = listhead (iflist); node; nextnode (node))
-    {
-      ifp = getdata (node);
-      rip_enable_apply (ifp);
-    }
+  for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+    rip_enable_apply (ifp);
 }
 
 int
@@ -1294,13 +1269,10 @@
 rip_passive_interface_apply_all ()
 {
   struct interface *ifp;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
-  for (node = listhead (iflist); node; nextnode (node))
-    {
-      ifp = getdata (node);
-      rip_passive_interface_apply (ifp);
-    }
+  for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+    rip_passive_interface_apply (ifp);
 }
 
 /* Passive interface. */
@@ -2021,11 +1993,10 @@
   struct listnode *node;
   struct interface *ifp;
 
-  for (node = listhead (iflist); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
       struct rip_interface *ri;
 
-      ifp = getdata (node);
       ri = ifp->info;
 
       /* Do not display the interface if there is no
diff --git a/ripd/rip_offset.c b/ripd/rip_offset.c
index 6899c4d..61f1376 100644
--- a/ripd/rip_offset.c
+++ b/ripd/rip_offset.c
@@ -78,9 +78,9 @@
 rip_offset_list_lookup (const char *ifname)
 {
   struct rip_offset_list *offset;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
-  LIST_LOOP (rip_offset_list_master, offset, nn)
+  for (ALL_LIST_ELEMENTS (rip_offset_list_master, node, nnode, offset))
     {
       if (strcmp_safe (offset->ifname, ifname) == 0)
 	return offset;
@@ -378,10 +378,10 @@
 int
 config_write_rip_offset_list (struct vty *vty)
 {
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct rip_offset_list *offset;
 
-  LIST_LOOP (rip_offset_list_master, offset, nn)
+  for (ALL_LIST_ELEMENTS (rip_offset_list_master, node, nnode, offset))
     {
       if (! offset->ifname)
 	{
diff --git a/ripd/rip_peer.c b/ripd/rip_peer.c
index 20c2da7..51df568 100644
--- a/ripd/rip_peer.c
+++ b/ripd/rip_peer.c
@@ -53,9 +53,9 @@
 rip_peer_lookup (struct in_addr *addr)
 {
   struct rip_peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
-  LIST_LOOP (peer_list, peer, nn)
+  for (ALL_LIST_ELEMENTS (peer_list, node, nnode, peer))
     {
       if (IPV4_ADDR_SAME (&peer->addr, addr))
 	return peer;
@@ -67,9 +67,9 @@
 rip_peer_lookup_next (struct in_addr *addr)
 {
   struct rip_peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 
-  LIST_LOOP (peer_list, peer, nn)
+  for (ALL_LIST_ELEMENTS (peer_list, node, nnode, peer))
     {
       if (htonl (peer->addr.s_addr) > htonl (addr->s_addr))
 	return peer;
@@ -183,11 +183,11 @@
 rip_peer_display (struct vty *vty)
 {
   struct rip_peer *peer;
-  struct listnode *nn;
+  struct listnode *node, *nnode;
 #define RIP_UPTIME_LEN 25
   char timebuf[RIP_UPTIME_LEN];
 
-  LIST_LOOP (peer_list, peer, nn)
+  for (ALL_LIST_ELEMENTS (peer_list, node, nnode, peer))
     {
       vty_out (vty, "    %-16s %9d %9d %9d   %s%s", inet_ntoa (peer->addr),
 	       peer->recv_badpackets, peer->recv_badroutes,
diff --git a/ripd/ripd.c b/ripd/ripd.c
index afdcd83..3dd91da 100644
--- a/ripd/ripd.c
+++ b/ripd/ripd.c
@@ -365,13 +365,10 @@
 
   /* If nexthop address matches local configured address then it is
      invalid nexthop. */
-  for (node = listhead (iflist); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
-      ifp = getdata (node);
-
-      for (cnode = listhead (ifp->connected); cnode; nextnode (cnode))
+      for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, ifc))
 	{	    
-	  ifc = getdata (cnode);
 	  p = ifc->address;
 
 	  if (p->family == AF_INET
@@ -2440,7 +2437,8 @@
 void
 rip_update_process (int route_type)
 {
-  struct listnode *node, *ifnode;
+  struct listnode *node;
+  struct listnode *ifnode, *ifnnode;
   struct connected *connected;
   struct interface *ifp;
   struct rip_interface *ri;
@@ -2449,10 +2447,8 @@
   struct prefix_ipv4 *p;
 
   /* Send RIP update to each interface. */
-  for (node = listhead (iflist); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
-      ifp = getdata (node);
-
       if (if_is_loopback (ifp))
 	continue;
 
@@ -2480,8 +2476,7 @@
 	    }
 
           /* send update on each connected network */
-
-	  LIST_LOOP(ifp->connected, connected, ifnode)
+	  for (ALL_LIST_ELEMENTS (ifp->connected, ifnode, ifnnode, connected))
 	    {
 	      struct prefix_ipv4 *ifaddr;
               int done = 0;
@@ -2716,7 +2711,7 @@
 {
   struct rte *rte;
   struct rip_packet rip_packet;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
   memset (&rip_packet, 0, sizeof (rip_packet));
 
@@ -2740,7 +2735,7 @@
     }
 	
   /* send request on each connected network */
-  LIST_LOOP(ifp->connected, connected, node)
+  for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, connected))
     {
       struct prefix_ipv4 *p;
 
@@ -3533,9 +3528,8 @@
 
   vty_out (vty, "    Interface        Send  Recv   Key-chain%s", VTY_NEWLINE);
 
-  for (node = listhead (iflist); node; node = nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
     {
-      ifp = getdata (node);
       ri = ifp->info;
 
       if (ri->enable_network || ri->enable_interface)
@@ -3563,9 +3557,8 @@
 
   {
     int found_passive = 0;
-    for (node = listhead (iflist); node; node = nextnode (node))
+    for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
       {
-	ifp = getdata (node);
 	ri = ifp->info;
 
 	if ((ri->enable_network || ri->enable_interface) && ri->passive)
@@ -3761,13 +3754,10 @@
 rip_distribute_update_all (struct prefix_list *notused)
 {
   struct interface *ifp;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
-  for (node = listhead (iflist); node; nextnode (node))
-    {
-      ifp = getdata (node);
-      rip_distribute_update_interface (ifp);
-    }
+  for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+    rip_distribute_update_interface (ifp);
 }
 /* ARGSUSED */
 void
@@ -3955,13 +3945,10 @@
 rip_routemap_update (const char *notused)
 {
   struct interface *ifp;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
-  for (node = listhead (iflist); node; nextnode (node))
-    {
-      ifp = getdata (node);
-      rip_if_rmap_update_interface (ifp);
-    }
+  for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+    rip_if_rmap_update_interface (ifp);
 
   rip_routemap_update_redistribute ();
 }
