diff --git a/ospf6d/ChangeLog b/ospf6d/ChangeLog
index dc48ab7..bc04cc9 100644
--- a/ospf6d/ChangeLog
+++ b/ospf6d/ChangeLog
@@ -1,3 +1,13 @@
+2005-04-07 Paul Jakma <paul@dishone.st>
+
+	* (global) Fix up list loops to match changes in lib/linklist,
+	  and some basic auditing of usage.
+	* ospf6_abr.c: (ospf6_abr_examin_brouter) change to a single
+	  scan of the area list, rather than scanning all areas first for
+	  INTER_ROUTER and then again for INTER_NETWORK. According to
+	  16.2, the scan should be area specific anyway, and further
+	  ospf6d does not seem to implement 16.3 anyway.
+
 2005-04-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
 	* ospf6_interface.[ch]: (ospf6_interface_lookup_by_name) Remove unused
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c
index 8bacfcd..7eb8f09 100644
--- a/ospf6d/ospf6_abr.c
+++ b/ospf6d/ospf6_abr.c
@@ -56,12 +56,9 @@
   struct ospf6_area *oa;
   int area_count = 0;
 
-  for (node = listhead (o->area_list); node; nextnode (node))
-    {
-      oa = OSPF6_AREA (getdata (node));
-      if (IS_AREA_ENABLED (oa))
-        area_count++;
-    }
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, node, oa))
+    if (IS_AREA_ENABLED (oa))
+      area_count++;
 
   if (area_count > 1)
     return 1;
@@ -73,12 +70,10 @@
 {
   struct ospf6_area *oa;
   struct ospf6_route *ro;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
-  for (node = listhead (area->ospf6->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (area->ospf6->area_list, node, nnode, oa))
     {
-      oa = OSPF6_AREA (getdata (node));
-
       /* update B bit for each area */
       OSPF6_ROUTER_LSA_SCHEDULE (oa);
 
@@ -111,7 +106,7 @@
   struct ospf6_area *oa;
   struct ospf6_route *ro;
   struct ospf6_lsa *old;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
   /* Withdraw all summary prefixes previously originated */
   for (ro = ospf6_route_head (area->summary_prefix); ro;
@@ -136,13 +131,9 @@
     }
 
   /* Schedule Router-LSA for each area (ABR status may change) */
-  for (node = listhead (area->ospf6->area_list); node; nextnode (node))
-    {
-      oa = OSPF6_AREA (getdata (node));
-
-      /* update B bit for each area */
-      OSPF6_ROUTER_LSA_SCHEDULE (oa);
-    }
+  for (ALL_LIST_ELEMENTS (area->ospf6->area_list, node, nnode, oa))
+    /* update B bit for each area */
+    OSPF6_ROUTER_LSA_SCHEDULE (oa);
 }
 
 /* RFC 2328 12.4.3. Summary-LSAs */
@@ -470,7 +461,7 @@
 void
 ospf6_abr_originate_summary (struct ospf6_route *route)
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_area *oa;
   struct ospf6_route *range = NULL;
 
@@ -482,11 +473,8 @@
         ospf6_abr_range_update (range);
     }
 
-  for (node = listhead (ospf6->area_list); node; nextnode (node))
-    {
-      oa = (struct ospf6_area *) getdata (node);
-      ospf6_abr_originate_summary_to_area (route, oa);
-    }
+  for (ALL_LIST_ELEMENTS (ospf6->area_list, node, nnode, oa))
+    ospf6_abr_originate_summary_to_area (route, oa);
 }
 
 /* RFC 2328 16.2. Calculating the inter-area routes */
@@ -656,22 +644,17 @@
 {
   struct ospf6_lsa *lsa;
   struct ospf6_area *oa;
-  struct listnode *node;
+  struct listnode *node, *nnode;
   u_int16_t type;
 
-  type = htons (OSPF6_LSTYPE_INTER_ROUTER);
-  for (node = listhead (ospf6->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (ospf6->area_list, node, nnode, oa))
     {
-      oa = OSPF6_AREA (getdata (node));
+      type = htons (OSPF6_LSTYPE_INTER_ROUTER);
       for (lsa = ospf6_lsdb_type_router_head (type, router_id, oa->lsdb); lsa;
            lsa = ospf6_lsdb_type_router_next (type, router_id, lsa))
         ospf6_abr_examin_summary (lsa, oa);
-    }
 
-  type = htons (OSPF6_LSTYPE_INTER_PREFIX);
-  for (node = listhead (ospf6->area_list); node; nextnode (node))
-    {
-      oa = OSPF6_AREA (getdata (node));
+      type = htons (OSPF6_LSTYPE_INTER_PREFIX);
       for (lsa = ospf6_lsdb_type_router_head (type, router_id, oa->lsdb); lsa;
            lsa = ospf6_lsdb_type_router_next (type, router_id, lsa))
         ospf6_abr_examin_summary (lsa, oa);
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c
index 2a738cb..57070e1 100644
--- a/ospf6d/ospf6_area.c
+++ b/ospf6d/ospf6_area.c
@@ -175,7 +175,7 @@
 void
 ospf6_area_delete (struct ospf6_area *oa)
 {
-  struct listnode *n;
+  struct listnode *n, *nnode;
   struct ospf6_interface *oi;
 
   ospf6_route_table_delete (oa->range_table);
@@ -183,9 +183,8 @@
   ospf6_route_table_delete (oa->summary_router);
 
   /* ospf6 interface list */
-  for (n = listhead (oa->if_list); n; nextnode (n))
+  for (ALL_LIST_ELEMENTS (oa->if_list, n, nnode, oi))
     {
-      oi = (struct ospf6_interface *) getdata (n);
       ospf6_interface_delete (oi);
     }
   list_delete (oa->if_list);
@@ -217,12 +216,9 @@
   struct ospf6_area *oa;
   struct listnode *n;
 
-  for (n = listhead (ospf6->area_list); n; nextnode (n))
-    {
-      oa = (struct ospf6_area *) getdata (n);
-      if (oa->area_id == area_id)
-        return oa;
-    }
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, n, oa))
+    if (oa->area_id == area_id)
+      return oa;
 
   return (struct ospf6_area *) NULL;
 }
@@ -240,31 +236,25 @@
 void
 ospf6_area_enable (struct ospf6_area *oa)
 {
-  struct listnode *i;
+  struct listnode *node, *nnode;
   struct ospf6_interface *oi;
 
   SET_FLAG (oa->flag, OSPF6_AREA_ENABLE);
 
-  for (i = listhead (oa->if_list); i; nextnode (i))
-    {
-      oi = (struct ospf6_interface *) getdata (i);
-      ospf6_interface_enable (oi);
-    }
+  for (ALL_LIST_ELEMENTS (oa->if_list, node, nnode, oi))
+    ospf6_interface_enable (oi);
 }
 
 void
 ospf6_area_disable (struct ospf6_area *oa)
 {
-  struct listnode *i;
+  struct listnode *node, *nnode;
   struct ospf6_interface *oi;
 
   UNSET_FLAG (oa->flag, OSPF6_AREA_ENABLE);
 
-  for (i = listhead (oa->if_list); i; nextnode (i))
-    {
-      oi = (struct ospf6_interface *) getdata (i);
-      ospf6_interface_disable (oi);
-    }
+  for (ALL_LIST_ELEMENTS (oa->if_list, node, nnode, oi))
+    ospf6_interface_disable (oi);
 }
 
 
@@ -279,11 +269,9 @@
            oa->lsdb->count, VNL);
 
   vty_out (vty, "     Interface attached to this area:");
-  for (i = listhead (oa->if_list); i; nextnode (i))
-    {
-      oi = (struct ospf6_interface *) getdata (i);
-      vty_out (vty, " %s", oi->interface->name);
-    }
+  for (ALL_LIST_ELEMENTS_RO (oa->if_list, i, oi))
+    vty_out (vty, " %s", oi->interface->name);
+  
   vty_out (vty, "%s", VNL);
 }
 
@@ -415,10 +403,8 @@
   struct ospf6_route *range;
   char buf[128];
 
-  for (node = listhead (ospf6->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
     {
-      oa = OSPF6_AREA (getdata (node));
-
       for (range = ospf6_route_head (oa->range_table); range;
            range = ospf6_route_next (range))
         {
@@ -444,9 +430,9 @@
   struct prefix prefix;
 
   ospf6_linkstate_prefix (ospf6->router_id, htonl (0), &prefix);
-  for (node = listhead (ospf6->area_list); node; nextnode (node))
+
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
     {
-      oa = (struct ospf6_area *) getdata (node);
       route = ospf6_route_lookup (&prefix, oa->spf_table);
       if (route == NULL)
         {
diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c
index c9fc5c1..564efb2 100644
--- a/ospf6d/ospf6_asbr.c
+++ b/ospf6d/ospf6_asbr.c
@@ -444,7 +444,7 @@
   struct prefix prefix_id;
   struct route_node *node;
   char pbuf[64], ibuf[16];
-  struct listnode *lnode;
+  struct listnode *lnode, *lnnode;
   struct ospf6_area *oa;
 
   if (! ospf6_zebra_is_redistribute (type))
@@ -574,11 +574,8 @@
   ospf6_as_external_lsa_originate (route);
 
   /* Router-Bit (ASBR Flag) may have to be updated */
-  for (lnode = listhead (ospf6->area_list); lnode; nextnode (lnode))
-    {
-      oa = (struct ospf6_area *) getdata (lnode);
-      OSPF6_ROUTER_LSA_SCHEDULE (oa);
-    }
+  for (ALL_LIST_ELEMENTS (ospf6->area_list, lnode, lnnode, oa))
+    OSPF6_ROUTER_LSA_SCHEDULE (oa);
 }
 
 void
@@ -590,7 +587,7 @@
   struct ospf6_lsa *lsa;
   struct prefix prefix_id;
   char pbuf[64], ibuf[16];
-  struct listnode *lnode;
+  struct listnode *lnode, *lnnode;
   struct ospf6_area *oa;
 
   match = ospf6_route_lookup (prefix, ospf6->external_table);
@@ -642,11 +639,8 @@
   XFREE (MTYPE_OSPF6_EXTERNAL_INFO, info);
 
   /* Router-Bit (ASBR Flag) may have to be updated */
-  for (lnode = listhead (ospf6->area_list); lnode; nextnode (lnode))
-    {
-      oa = (struct ospf6_area *) getdata (lnode);
-      OSPF6_ROUTER_LSA_SCHEDULE (oa);
-    }
+  for (ALL_LIST_ELEMENTS (ospf6->area_list, lnode, lnnode, oa))
+    OSPF6_ROUTER_LSA_SCHEDULE (oa);
 }
 
 DEFUN (ospf6_redistribute,
diff --git a/ospf6d/ospf6_flood.c b/ospf6d/ospf6_flood.c
index 9971ef1..39b7c1f 100644
--- a/ospf6d/ospf6_flood.c
+++ b/ospf6d/ospf6_flood.c
@@ -245,7 +245,7 @@
 ospf6_flood_interface (struct ospf6_neighbor *from,
                        struct ospf6_lsa *lsa, struct ospf6_interface *oi)
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
   struct ospf6_lsa *req;
   int retrans_added = 0;
@@ -259,10 +259,8 @@
     }
 
   /* (1) For each neighbor */
-  for (node = listhead (oi->neighbor_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
     {
-      on = (struct ospf6_neighbor *) getdata (node);
-
       if (is_debug)
         zlog_debug ("To neighbor %s", on->name);
 
@@ -380,9 +378,8 @@
   else
     {
       /* reschedule retransmissions to all neighbors */
-      for (node = listhead (oi->neighbor_list); node; nextnode (node))
+      for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
         {
-          on = (struct ospf6_neighbor *) getdata (node);
           THREAD_OFF (on->thread_send_lsupdate);
           on->thread_send_lsupdate =
             thread_add_event (master, ospf6_lsupdate_send_neighbor, on, 0);
@@ -394,13 +391,11 @@
 ospf6_flood_area (struct ospf6_neighbor *from,
                   struct ospf6_lsa *lsa, struct ospf6_area *oa)
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_interface *oi;
 
-  for (node = listhead (oa->if_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (oa->if_list, node, nnode, oi))
     {
-      oi = OSPF6_INTERFACE (getdata (node));
-
       if (OSPF6_LSA_SCOPE (lsa->header->type) == OSPF6_SCOPE_LINKLOCAL &&
           oi != OSPF6_INTERFACE (lsa->lsdb->data))
         continue;
@@ -419,13 +414,11 @@
 ospf6_flood_process (struct ospf6_neighbor *from,
                      struct ospf6_lsa *lsa, struct ospf6 *process)
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_area *oa;
 
-  for (node = listhead (process->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (process->area_list, node, nnode, oa))
     {
-      oa = OSPF6_AREA (getdata (node));
-
       if (OSPF6_LSA_SCOPE (lsa->header->type) == OSPF6_SCOPE_AREA &&
           oa != OSPF6_AREA (lsa->lsdb->data))
         continue;
@@ -450,13 +443,12 @@
 void
 ospf6_flood_clear_interface (struct ospf6_lsa *lsa, struct ospf6_interface *oi)
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
   struct ospf6_lsa *rem;
 
-  for (node = listhead (oi->neighbor_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
     {
-      on = OSPF6_NEIGHBOR (getdata (node));
       rem = ospf6_lsdb_lookup (lsa->header->type, lsa->header->id,
                                lsa->header->adv_router, on->retrans_list);
       if (rem && ! ospf6_lsa_compare (rem, lsa))
@@ -474,13 +466,11 @@
 void
 ospf6_flood_clear_area (struct ospf6_lsa *lsa, struct ospf6_area *oa)
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_interface *oi;
 
-  for (node = listhead (oa->if_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (oa->if_list, node, nnode, oi))
     {
-      oi = OSPF6_INTERFACE (getdata (node));
-
       if (OSPF6_LSA_SCOPE (lsa->header->type) == OSPF6_SCOPE_LINKLOCAL &&
           oi != OSPF6_INTERFACE (lsa->lsdb->data))
         continue;
@@ -498,13 +488,11 @@
 void
 ospf6_flood_clear_process (struct ospf6_lsa *lsa, struct ospf6 *process)
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_area *oa;
 
-  for (node = listhead (process->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (process->area_list, node, nnode, oa))
     {
-      oa = OSPF6_AREA (getdata (node));
-
       if (OSPF6_LSA_SCOPE (lsa->header->type) == OSPF6_SCOPE_AREA &&
           oa != OSPF6_AREA (lsa->lsdb->data))
         continue;
@@ -725,21 +713,13 @@
     return 0;
 
   process = from->ospf6_if->area->ospf6;
-  for (i = listhead (process->area_list); i; nextnode (i))
-    {
-      oa = OSPF6_AREA (getdata (i));
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          oi = OSPF6_INTERFACE (getdata (j));
-          for (k = listhead (oi->neighbor_list); k; nextnode (k))
-            {
-              on = OSPF6_NEIGHBOR (getdata (k));
-              if (on->state == OSPF6_NEIGHBOR_EXCHANGE ||
-                  on->state == OSPF6_NEIGHBOR_LOADING)
-                count++;
-            }
-        }
-    }
+
+  for (ALL_LIST_ELEMENTS_RO (process->area_list, i, oa))
+    for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
+      for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, k, on))
+        if (on->state == OSPF6_NEIGHBOR_EXCHANGE ||
+            on->state == OSPF6_NEIGHBOR_LOADING)
+          count++;
 
   if (count == 0)
     return 1;
diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c
index d4180d9..0614e44 100644
--- a/ospf6d/ospf6_interface.c
+++ b/ospf6d/ospf6_interface.c
@@ -151,14 +151,12 @@
 void
 ospf6_interface_delete (struct ospf6_interface *oi)
 {
-  struct listnode *n;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
 
-  for (n = listhead (oi->neighbor_list); n; nextnode (n))
-    {
-      on = (struct ospf6_neighbor *) getdata (n);
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
       ospf6_neighbor_delete (on);
-    }
+  
   list_delete (oi->neighbor_list);
 
   THREAD_OFF (oi->thread_send_hello);
@@ -199,16 +197,14 @@
 void
 ospf6_interface_disable (struct ospf6_interface *oi)
 {
-  struct listnode *i;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
 
   SET_FLAG (oi->flag, OSPF6_INTERFACE_DISABLE);
 
-  for (i = listhead (oi->neighbor_list); i; nextnode (i))
-    {
-      on = (struct ospf6_neighbor *) getdata (i);
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
       ospf6_neighbor_delete (on);
-    }
+
   list_delete_all_node (oi->neighbor_list);
 
   ospf6_lsdb_remove_all (oi->lsdb);
@@ -228,10 +224,8 @@
   struct in6_addr *l = (struct in6_addr *) NULL;
 
   /* for each connected address */
-  for (n = listhead (ifp->connected); n; nextnode (n))
+  for (ALL_LIST_ELEMENTS_RO (ifp->connected, n, c))
     {
-      c = (struct connected *) getdata (n);
-
       /* if family not AF_INET6, ignore */
       if (c->address->family != AF_INET6)
         continue;
@@ -318,7 +312,7 @@
   struct ospf6_interface *oi;
   struct ospf6_route *route;
   struct connected *c;
-  struct listnode *i;
+  struct listnode *node, *nnode;
 
   oi = (struct ospf6_interface *) ifp->info;
   if (oi == NULL)
@@ -333,10 +327,9 @@
 
   /* update "route to advertise" interface route table */
   ospf6_route_remove_all (oi->route_connected);
-  for (i = listhead (oi->interface->connected); i; nextnode (i))
-    {
-      c = (struct connected *) getdata (i);
 
+  for (ALL_LIST_ELEMENTS (oi->interface->connected, node, nnode, c))
+    {
       if (c->address->family != AF_INET6)
         continue;
 
@@ -498,7 +491,7 @@
 static u_char
 dr_election (struct ospf6_interface *oi)
 {
-  struct listnode *i;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on, *drouter, *bdrouter, myself;
   struct ospf6_neighbor *best_drouter, *best_bdrouter;
   u_char next_state = 0;
@@ -517,20 +510,16 @@
   myself.router_id = oi->area->ospf6->router_id;
 
   /* Electing BDR (2) */
-  for (i = listhead (oi->neighbor_list); i; nextnode (i))
-    {
-      on = (struct ospf6_neighbor *) getdata (i);
-      bdrouter = better_bdrouter (bdrouter, on);
-    }
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
+    bdrouter = better_bdrouter (bdrouter, on);
+  
   best_bdrouter = bdrouter;
   bdrouter = better_bdrouter (best_bdrouter, &myself);
 
   /* Electing DR (3) */
-  for (i = listhead (oi->neighbor_list); i; nextnode (i))
-    {
-      on = (struct ospf6_neighbor *) getdata (i);
-      drouter = better_drouter (drouter, on);
-    }
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
+    drouter = better_drouter (drouter, on);
+
   best_drouter = drouter;
   drouter = better_drouter (best_drouter, &myself);
   if (drouter == NULL)
@@ -576,9 +565,8 @@
 		    (drouter ? drouter->name : "0.0.0.0"),
 		    (bdrouter ? bdrouter->name : "0.0.0.0"));
 
-      for (i = listhead (oi->neighbor_list); i; nextnode (i))
+      for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, node, on))
         {
-          on = (struct ospf6_neighbor *) getdata (i);
           if (on->state < OSPF6_NEIGHBOR_TWOWAY)
             continue;
           /* Schedule AdjOK. */
@@ -724,7 +712,7 @@
 interface_down (struct thread *thread)
 {
   struct ospf6_interface *oi;
-  struct listnode *n;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
 
   oi = (struct ospf6_interface *) THREAD_ARG (thread);
@@ -740,11 +728,9 @@
 
   ospf6_interface_state_change (OSPF6_INTERFACE_DOWN, oi);
 
-  for (n = listhead (oi->neighbor_list); n; nextnode (n))
-    {
-      on = (struct ospf6_neighbor *) getdata (n);
-      ospf6_neighbor_delete (on);
-    }
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
+    ospf6_neighbor_delete (on);
+  
   list_delete_all_node (oi->neighbor_list);
 
   return 0;
@@ -790,9 +776,9 @@
     oi = (struct ospf6_interface *) ifp->info;
 
   vty_out (vty, "  Internet Address:%s", VNL);
-  for (i = listhead (ifp->connected); i; nextnode (i))
+
+  for (ALL_LIST_ELEMENTS_RO (ifp->connected, i, c))
     {
-      c = (struct connected *)getdata (i);
       p = c->address;
       prefix2str (p, strbuf, sizeof (strbuf));
       switch (p->family)
@@ -896,11 +882,8 @@
     }
   else
     {
-      for (i = listhead (iflist); i; nextnode (i))
-        {
-          ifp = (struct interface *) getdata (i);
-          ospf6_interface_show (vty, ifp);
-        }
+      for (ALL_LIST_ELEMENTS_RO (iflist, i, ifp))
+        ospf6_interface_show (vty, ifp);
     }
 
   return CMD_SUCCESS;
@@ -992,9 +975,8 @@
   struct ospf6_interface *oi;
   struct interface *ifp;
 
-  for (i = listhead (iflist); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (iflist, i, ifp))
     {
-      ifp = (struct interface *) getdata (i);
       oi = (struct ospf6_interface *) ifp->info;
       if (oi == NULL)
         continue;
@@ -1045,7 +1027,7 @@
   struct ospf6_interface *oi;
   struct interface *ifp;
   unsigned int ifmtu, iobuflen;
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
 
   ifp = (struct interface *) vty->index;
@@ -1084,9 +1066,8 @@
     oi->ifmtu = ifmtu;
 
   /* re-establish adjacencies */
-  for (node = listhead (oi->neighbor_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
     {
-      on = (struct ospf6_neighbor *) getdata (node);
       THREAD_OFF (on->inactivity_timer);
       thread_execute (master, inactivity_timer, on, 0);
     }
@@ -1106,7 +1087,7 @@
   struct ospf6_interface *oi;
   struct interface *ifp;
   unsigned int iobuflen;
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
 
   ifp = (struct interface *) vty->index;
@@ -1133,9 +1114,8 @@
     oi->ifmtu = ifp->mtu;
 
   /* re-establish adjacencies */
-  for (node = listhead (oi->neighbor_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
     {
-      on = (struct ospf6_neighbor *) getdata (node);
       THREAD_OFF (on->inactivity_timer);
       thread_execute (master, inactivity_timer, on, 0);
     }
@@ -1355,7 +1335,7 @@
 {
   struct ospf6_interface *oi;
   struct interface *ifp;
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
 
   ifp = (struct interface *) vty->index;
@@ -1369,9 +1349,8 @@
   SET_FLAG (oi->flag, OSPF6_INTERFACE_PASSIVE);
   THREAD_OFF (oi->thread_send_hello);
 
-  for (node = listhead (oi->neighbor_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
     {
-      on = (struct ospf6_neighbor *) getdata (node);
       THREAD_OFF (on->inactivity_timer);
       thread_execute (master, inactivity_timer, on, 0);
     }
@@ -1490,9 +1469,8 @@
   struct ospf6_interface *oi;
   struct interface *ifp;
 
-  for (i = listhead (iflist); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (iflist, i, ifp))
     {
-      ifp = (struct interface *) getdata (i);
       oi = (struct ospf6_interface *) ifp->info;
       if (oi == NULL)
         continue;
diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c
index e784411..21693db 100644
--- a/ospf6d/ospf6_intra.c
+++ b/ospf6d/ospf6_intra.c
@@ -109,7 +109,8 @@
   struct ospf6_lsa *lsa;
 
   u_int32_t link_state_id = 0;
-  struct listnode *i, *j;
+  struct listnode *node, *nnode;
+  struct listnode *j;
   struct ospf6_interface *oi;
   struct ospf6_neighbor *on, *drouter = NULL;
   struct ospf6_router_lsa *router_lsa;
@@ -151,10 +152,8 @@
   lsdesc = (struct ospf6_router_lsdesc *)
     ((caddr_t) router_lsa + sizeof (struct ospf6_router_lsa));
 
-  for (i = listhead (oa->if_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS (oa->if_list, node, nnode, oi))
     {
-      oi = (struct ospf6_interface *) getdata (i);
-
       /* Interfaces in state Down or Loopback are not described */
       if (oi->state == OSPF6_INTERFACE_DOWN ||
           oi->state == OSPF6_INTERFACE_LOOPBACK)
@@ -162,12 +161,10 @@
 
       /* Nor are interfaces without any full adjacencies described */
       count = 0;
-      for (j = listhead (oi->neighbor_list); j; nextnode (j))
-        {
-          on = (struct ospf6_neighbor *) getdata (j);
-          if (on->state == OSPF6_NEIGHBOR_FULL)
-            count++;
-        }
+      for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, j, on))
+        if (on->state == OSPF6_NEIGHBOR_FULL)
+          count++;
+      
       if (count == 0)
         continue;
 
@@ -215,9 +212,8 @@
       /* Point-to-Point interfaces */
       if (if_is_pointopoint (oi->interface))
         {
-          for (j = listhead (oi->neighbor_list); j; nextnode (j))
+          for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, j, on))
             {
-              on = (struct ospf6_neighbor *) getdata (j);
               if (on->state != OSPF6_NEIGHBOR_FULL)
                 continue;
 
@@ -383,12 +379,11 @@
 
   /* If none of neighbor is adjacent to us */
   count = 0;
-  for (i = listhead (oi->neighbor_list); i; nextnode (i))
-    {
-      on = (struct ospf6_neighbor *) getdata (i);
-      if (on->state == OSPF6_NEIGHBOR_FULL)
-        count++;
-    }
+  
+  for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, i, on))
+    if (on->state == OSPF6_NEIGHBOR_FULL)
+      count++;
+  
   if (count == 0)
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (NETWORK))
@@ -425,10 +420,8 @@
   lsdesc++;
 
   /* Walk through the neighbors */
-  for (i = listhead (oi->neighbor_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, i, on))
     {
-      on = (struct ospf6_neighbor *) getdata (i);
-
       if (on->state != OSPF6_NEIGHBOR_FULL)
         continue;
 
@@ -725,10 +718,8 @@
 
   route_advertise = ospf6_route_table_create ();
 
-  for (i = listhead (oa->if_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (oa->if_list, i, oi))
     {
-      oi = (struct ospf6_interface *) getdata (i);
-
       if (oi->state == OSPF6_INTERFACE_DOWN)
         {
           if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
@@ -737,12 +728,11 @@
         }
 
       full_count = 0;
-      for (j = listhead (oi->neighbor_list); j; nextnode (j))
-        {
-          on = (struct ospf6_neighbor *) getdata (j);
-          if (on->state == OSPF6_NEIGHBOR_FULL)
-            full_count++;
-        }
+
+      for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, j, on))
+        if (on->state == OSPF6_NEIGHBOR_FULL)
+          full_count++;
+
       if (oi->state != OSPF6_INTERFACE_LOOPBACK &&
           oi->state != OSPF6_INTERFACE_POINTTOPOINT &&
           full_count != 0)
@@ -891,12 +881,10 @@
     }
 
   full_count = 0;
-  for (i = listhead (oi->neighbor_list); i; nextnode (i))
-    {
-      on = (struct ospf6_neighbor *) getdata (i);
-      if (on->state == OSPF6_NEIGHBOR_FULL)
-        full_count++;
-    }
+  for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, i, on))
+    if (on->state == OSPF6_NEIGHBOR_FULL)
+      full_count++;
+  
   if (full_count == 0)
     {
       if (IS_OSPF6_DEBUG_ORIGINATE (INTRA_PREFIX))
diff --git a/ospf6d/ospf6_message.c b/ospf6d/ospf6_message.c
index 1486b69..a4e5d67 100644
--- a/ospf6d/ospf6_message.c
+++ b/ospf6d/ospf6_message.c
@@ -1388,7 +1388,7 @@
   struct ospf6_header *oh;
   struct ospf6_hello *hello;
   u_char *p;
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_neighbor *on;
 
   oi = (struct ospf6_interface *) THREAD_ARG (thread);
@@ -1422,10 +1422,8 @@
 
   p = (char *)((caddr_t) hello + sizeof (struct ospf6_hello));
 
-  for (node = listhead (oi->neighbor_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
     {
-      on = (struct ospf6_neighbor *) getdata (node);
-
       if (on->state < OSPF6_NEIGHBOR_INIT)
         continue;
 
diff --git a/ospf6d/ospf6_neighbor.c b/ospf6d/ospf6_neighbor.c
index 5e71c7b..dd46ebc 100644
--- a/ospf6d/ospf6_neighbor.c
+++ b/ospf6d/ospf6_neighbor.c
@@ -61,12 +61,10 @@
   struct listnode *n;
   struct ospf6_neighbor *on;
 
-  for (n = listhead (oi->neighbor_list); n; nextnode (n))
-    {
-      on = (struct ospf6_neighbor *) getdata (n);
-      if (on->router_id == router_id)
-        return on;
-    }
+  for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, n, on))
+    if (on->router_id == router_id)
+      return on;
+  
   return (struct ospf6_neighbor *) NULL;
 }
 
@@ -795,19 +793,11 @@
              "RouterID", "State", "Duration", "DR", "BDR", "I/F",
              "State", VNL);
 
-  for (i = listhead (ospf6->area_list); i; nextnode (i))
-    {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          oi = (struct ospf6_interface *) getdata (j);
-          for (k = listhead (oi->neighbor_list); k; nextnode (k))
-            {
-              on = (struct ospf6_neighbor *) getdata (k);
-              (*showfunc) (vty, on);
-            }
-        }
-    }
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, i, oa))
+    for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
+      for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, k, on))
+        (*showfunc) (vty, on);
+
   return CMD_SUCCESS;
 }
 
@@ -849,20 +839,11 @@
       return CMD_SUCCESS;
     }
 
-  for (i = listhead (ospf6->area_list); i; nextnode (i))
-    {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          oi = (struct ospf6_interface *) getdata (j);
-          for (k = listhead (oi->neighbor_list); k; nextnode (k))
-            {
-              on = (struct ospf6_neighbor *) getdata (k);
-              if (on->router_id == router_id)
-                (*showfunc) (vty, on);
-            }
-        }
-    }
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, i, oa))
+    for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
+      for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, k, on))
+        (*showfunc) (vty, on);
+  
   return CMD_SUCCESS;
 }
 
diff --git a/ospf6d/ospf6_snmp.c b/ospf6d/ospf6_snmp.c
index 3cc4f2d..09fa27c 100644
--- a/ospf6d/ospf6_snmp.c
+++ b/ospf6d/ospf6_snmp.c
@@ -318,9 +318,8 @@
 	      inet_ntoa (* (struct in_addr *) &area_id),
 	      exact, len, *length);
 
-  for (node = listhead (ospf6->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
     {
-      oa = (struct ospf6_area *) getdata (node);
       if (area == NULL)
         {
           if (len == 0) /* return first area entry */
@@ -435,10 +434,8 @@
     }
   else
     {
-      for (node = listhead (ospf6->area_list); node; nextnode (node))
+      for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
         {
-          oa = (struct ospf6_area *) getdata (node);
-
           if (lsa)
             continue;
           if (ntohl (oa->area_id) < ntohl (area_id.s_addr))
diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c
index d212c43..08c1eb7 100644
--- a/ospf6d/ospf6_spf.c
+++ b/ospf6d/ospf6_spf.c
@@ -281,7 +281,7 @@
   struct ospf6_route *route;
   int i, j;
   struct ospf6_vertex *prev, *w;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
   if (IS_OSPF6_DEBUG_SPF (PROCESS))
     zlog_debug ("SPF install %s hops %d cost %d",
@@ -322,7 +322,7 @@
       prev = (struct ospf6_vertex *) route->route_option;
       if (prev->hops > v->hops)
         {
-          LIST_LOOP (prev->child_list, w, node)
+          for (ALL_LIST_ELEMENTS (prev->child_list, node, nnode, w))
             {
               assert (w->parent == prev);
               w->parent = v;
@@ -502,9 +502,8 @@
   snprintf (p, end - p, " Area %s: %d", oa->name, oa->lsdb->count);
   p = (buffer + strlen (buffer) < end ? buffer + strlen (buffer) : end);
 
-  for (node = listhead (oa->if_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (oa->if_list, node, oi))
     {
-      oi = (struct ospf6_interface *) getdata (node);
       snprintf (p, end - p, " I/F %s: %d",
                 oi->interface->name, oi->lsdb->count);
       p = (buffer + strlen (buffer) < end ? buffer + strlen (buffer) : end);
@@ -556,7 +555,7 @@
 ospf6_spf_display_subtree (struct vty *vty, const char *prefix, int rest,
                            struct ospf6_vertex *v)
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct ospf6_vertex *c;
   char *next_prefix;
   int len;
@@ -575,7 +574,7 @@
   snprintf (next_prefix, len, "%s%s", prefix, (rest ? "|  " : "   "));
 
   restnum = listcount (v->child_list);
-  LIST_LOOP (v->child_list, c, node)
+  for (ALL_LIST_ELEMENTS (v->child_list, node, nnode, c))
     {
       restnum--;
       ospf6_spf_display_subtree (vty, next_prefix, restnum, c);
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c
index b0fe5ca..b3d4516 100644
--- a/ospf6d/ospf6_top.c
+++ b/ospf6d/ospf6_top.c
@@ -143,14 +143,11 @@
 void
 ospf6_delete (struct ospf6 *o)
 {
-  struct listnode *i;
+  struct listnode *node, *nnode;
   struct ospf6_area *oa;
 
-  for (i = listhead (o->area_list); i; nextnode (i))
-    {
-      oa = (struct ospf6_area *) getdata (i);
-      ospf6_area_delete (oa);
-    }
+  for (ALL_LIST_ELEMENTS (o->area_list, node, nnode, oa))
+    ospf6_area_delete (oa);
 
   ospf6_lsdb_delete (o->lsdb);
   ospf6_lsdb_delete (o->lsdb_self);
@@ -167,34 +164,29 @@
 void
 ospf6_enable (struct ospf6 *o)
 {
-  struct listnode *i;
+  struct listnode *node, *nnode;
   struct ospf6_area *oa;
 
   if (CHECK_FLAG (o->flag, OSPF6_DISABLED))
     {
       UNSET_FLAG (o->flag, OSPF6_DISABLED);
-      for (i = listhead (o->area_list); i; nextnode (i))
-        {
-          oa = (struct ospf6_area *) getdata (i);
-          ospf6_area_enable (oa);
-        }
+      for (ALL_LIST_ELEMENTS (o->area_list, node, nnode, oa))
+        ospf6_area_enable (oa);
     }
 }
 
 void
 ospf6_disable (struct ospf6 *o)
 {
-  struct listnode *i;
+  struct listnode *node, *nnode;
   struct ospf6_area *oa;
 
   if (! CHECK_FLAG (o->flag, OSPF6_DISABLED))
     {
       SET_FLAG (o->flag, OSPF6_DISABLED);
-      for (i = listhead (o->area_list); i; nextnode (i))
-        {
-          oa = (struct ospf6_area *) getdata (i);
-          ospf6_area_disable (oa);
-        }
+      
+      for (ALL_LIST_ELEMENTS (o->area_list, node, nnode, oa))
+        ospf6_area_disable (oa);
 
       ospf6_lsdb_remove_all (o->lsdb);
       ospf6_route_remove_all (o->route_table);
@@ -213,15 +205,12 @@
 
   o->maxage_remover = (struct thread *) NULL;
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
         {
-          oi = (struct ospf6_interface *) getdata (j);
-          for (k = listhead (oi->neighbor_list); k; nextnode (k))
+          for (ALL_LIST_ELEMENTS_RO (oi->neighbor_list, k, on))
             {
-              on = (struct ospf6_neighbor *) getdata (k);
               if (on->state != OSPF6_NEIGHBOR_EXCHANGE &&
                   on->state != OSPF6_NEIGHBOR_LOADING)
                 continue;
@@ -231,14 +220,11 @@
         }
     }
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          oi = (struct ospf6_interface *) getdata (j);
-          OSPF6_LSDB_MAXAGE_REMOVER (oi->lsdb);
-        }
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
+        OSPF6_LSDB_MAXAGE_REMOVER (oi->lsdb);
+      
       OSPF6_LSDB_MAXAGE_REMOVER (oa->lsdb);
     }
   OSPF6_LSDB_MAXAGE_REMOVER (o->lsdb);
@@ -466,11 +452,9 @@
   /* Areas */
   vty_out (vty, " Number of areas in this router is %u%s",
            listcount (o->area_list), VNL);
-  for (n = listhead (o->area_list); n; nextnode (n))
-    {
-      oa = (struct ospf6_area *) getdata (n);
-      ospf6_area_show (vty, oa);
-    }
+
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, n, oa))
+    ospf6_area_show (vty, oa);
 }
 
 /* show top level structures */
@@ -629,15 +613,11 @@
   ospf6_redistribute_config_write (vty);
   ospf6_area_config_write (vty);
 
-  for (j = listhead (ospf6->area_list); j; nextnode (j))
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, j, oa))
     {
-      oa = (struct ospf6_area *) getdata (j);
-      for (k = listhead (oa->if_list); k; nextnode (k))
-        {
-          oi = (struct ospf6_interface *) getdata (k);
-          vty_out (vty, " interface %s area %s%s",
-                   oi->interface->name, oa->name, VNL);
-        }
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, k, oi))
+        vty_out (vty, " interface %s area %s%s",
+                 oi->interface->name, oa->name, VNL);
     }
   vty_out (vty, "!%s", VNL);
   return 0;
diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index d10d1df..e8fba97 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -187,19 +187,16 @@
 
   level = parse_show_level (argc, argv);
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
       vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
       ospf6_lsdb_show (vty, level, NULL, NULL, NULL, oa->lsdb);
     }
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
         {
-          oi = (struct ospf6_interface *) getdata (j);
           vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                    oi->interface->name, oa->name, VNL, VNL);
           ospf6_lsdb_show (vty, level, NULL, NULL, NULL, oi->lsdb);
@@ -262,21 +259,18 @@
   switch (OSPF6_LSA_SCOPE (type))
     {
       case OSPF6_SCOPE_AREA:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
             vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
             ospf6_lsdb_show (vty, level, &type, NULL, NULL, oa->lsdb);
           }
         break;
 
       case OSPF6_SCOPE_LINKLOCAL:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
-            for (j = listhead (oa->if_list); j; nextnode (j))
+            for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
               {
-                oi = (struct ospf6_interface *) getdata (j);
                 vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                          oi->interface->name, oa->name, VNL, VNL);
                 ospf6_lsdb_show (vty, level, &type, NULL, NULL, oi->lsdb);
@@ -353,19 +347,16 @@
   argv++;
   level = parse_show_level (argc, argv);
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
       vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
       ospf6_lsdb_show (vty, level, NULL, &id, NULL, oa->lsdb);
     }
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
         {
-          oi = (struct ospf6_interface *) getdata (j);
           vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                    oi->interface->name, oa->name, VNL, VNL);
           ospf6_lsdb_show (vty, level, NULL, &id, NULL, oi->lsdb);
@@ -452,19 +443,16 @@
   argv++;
   level = parse_show_level (argc, argv);
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
       vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
       ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oa->lsdb);
     }
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
         {
-          oi = (struct ospf6_interface *) getdata (j);
           vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                    oi->interface->name, oa->name, VNL, VNL);
           ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oi->lsdb);
@@ -569,21 +557,18 @@
   switch (OSPF6_LSA_SCOPE (type))
     {
       case OSPF6_SCOPE_AREA:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
             vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
             ospf6_lsdb_show (vty, level, &type, &id, NULL, oa->lsdb);
           }
         break;
 
       case OSPF6_SCOPE_LINKLOCAL:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
-            for (j = listhead (oa->if_list); j; nextnode (j))
+            for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
               {
-                oi = (struct ospf6_interface *) getdata (j);
                 vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                          oi->interface->name, oa->name, VNL, VNL);
                 ospf6_lsdb_show (vty, level, &type, &id, NULL, oi->lsdb);
@@ -728,21 +713,18 @@
   switch (OSPF6_LSA_SCOPE (type))
     {
       case OSPF6_SCOPE_AREA:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
             vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
             ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oa->lsdb);
           }
         break;
 
       case OSPF6_SCOPE_LINKLOCAL:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
-            for (j = listhead (oa->if_list); j; nextnode (j))
+            for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
               {
-                oi = (struct ospf6_interface *) getdata (j);
                 vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                          oi->interface->name, oa->name, VNL, VNL);
                 ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oi->lsdb);
@@ -881,19 +863,16 @@
   argv++;
   level = parse_show_level (argc, argv);
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
       vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
       ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oa->lsdb);
     }
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
         {
-          oi = (struct ospf6_interface *) getdata (j);
           vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                    oi->interface->name, oa->name, VNL, VNL);
           ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oi->lsdb);
@@ -967,19 +946,16 @@
   argv++;
   level = parse_show_level (argc, argv);
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
       vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
       ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oa->lsdb);
     }
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
         {
-          oi = (struct ospf6_interface *) getdata (j);
           vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                    oi->interface->name, oa->name, VNL, VNL);
           ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oi->lsdb);
@@ -1071,21 +1047,18 @@
   switch (OSPF6_LSA_SCOPE (type))
     {
       case OSPF6_SCOPE_AREA:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
             vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
             ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb);
           }
         break;
 
       case OSPF6_SCOPE_LINKLOCAL:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
-            for (j = listhead (oa->if_list); j; nextnode (j))
+            for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
               {
-                oi = (struct ospf6_interface *) getdata (j);
                 vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                          oi->interface->name, oa->name, VNL, VNL);
                 ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb);
@@ -1196,21 +1169,18 @@
   switch (OSPF6_LSA_SCOPE (type))
     {
       case OSPF6_SCOPE_AREA:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
             vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
             ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb);
           }
         break;
 
       case OSPF6_SCOPE_LINKLOCAL:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
-            for (j = listhead (oa->if_list); j; nextnode (j))
+            for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
               {
-                oi = (struct ospf6_interface *) getdata (j);
                 vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                          oi->interface->name, oa->name, VNL, VNL);
                 ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb);
@@ -1282,19 +1252,16 @@
 
   adv_router = o->router_id;
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
       vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
       ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oa->lsdb);
     }
 
-  for (i = listhead (o->area_list); i; nextnode (i))
+  for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
     {
-      oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
+      for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
         {
-          oi = (struct ospf6_interface *) getdata (j);
           vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                    oi->interface->name, oa->name, VNL, VNL);
           ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oi->lsdb);
@@ -1362,21 +1329,18 @@
   switch (OSPF6_LSA_SCOPE (type))
     {
       case OSPF6_SCOPE_AREA:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
             vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
             ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oa->lsdb);
           }
         break;
 
       case OSPF6_SCOPE_LINKLOCAL:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
-            for (j = listhead (oa->if_list); j; nextnode (j))
+            for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
               {
-                oi = (struct ospf6_interface *) getdata (j);
                 vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                          oi->interface->name, oa->name, VNL, VNL);
                 ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oi->lsdb);
@@ -1478,21 +1442,18 @@
   switch (OSPF6_LSA_SCOPE (type))
     {
       case OSPF6_SCOPE_AREA:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
             vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
             ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb);
           }
         break;
 
       case OSPF6_SCOPE_LINKLOCAL:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
-            for (j = listhead (oa->if_list); j; nextnode (j))
+            for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
               {
-                oi = (struct ospf6_interface *) getdata (j);
                 vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                          oi->interface->name, oa->name, VNL, VNL);
                 ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb);
@@ -1594,21 +1555,18 @@
   switch (OSPF6_LSA_SCOPE (type))
     {
       case OSPF6_SCOPE_AREA:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
             vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
             ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb);
           }
         break;
 
       case OSPF6_SCOPE_LINKLOCAL:
-        for (i = listhead (o->area_list); i; nextnode (i))
+        for (ALL_LIST_ELEMENTS_RO (o->area_list, i, oa))
           {
-            oa = (struct ospf6_area *) getdata (i);
-            for (j = listhead (oa->if_list); j; nextnode (j))
+            for (ALL_LIST_ELEMENTS_RO (oa->if_list, j, oi))
               {
-                oi = (struct ospf6_interface *) getdata (j);
                 vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
                          oi->interface->name, oa->name, VNL, VNL);
                 ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb);
@@ -1730,10 +1688,8 @@
   struct listnode *node;
   struct ospf6_area *oa;
 
-  for (node = listhead (ospf6->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
     {
-      oa = OSPF6_AREA (getdata (node));
-
       vty_out (vty, "%s        SPF Result in Area %s%s%s",
                VNL, oa->name, VNL, VNL);
       ospf6_linkstate_table_show (vty, argc, argv, oa->spf_table);
@@ -1787,10 +1743,8 @@
   sargv[sargc++] = "detail";
   sargv[sargc] = NULL;
 
-  for (node = listhead (ospf6->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
     {
-      oa = OSPF6_AREA (getdata (node));
-
       vty_out (vty, "%s        SPF Result in Area %s%s%s",
                VNL, oa->name, VNL, VNL);
       ospf6_linkstate_table_show (vty, sargc, sargv, oa->spf_table);
diff --git a/ospf6d/ospf6d.h b/ospf6d/ospf6d.h
index 6fcf200..4b718d7 100644
--- a/ospf6d/ospf6d.h
+++ b/ospf6d/ospf6d.h
@@ -50,7 +50,7 @@
 #endif /* IPV6_DROP_MEMBERSHIP */
 #endif /* ! IPV6_LEAVE_GROUP */
 
-/* cast macro */
+/* cast macro: XXX - these *must* die, ick ick. */
 #define OSPF6_PROCESS(x) ((struct ospf6 *) (x))
 #define OSPF6_AREA(x) ((struct ospf6_area *) (x))
 #define OSPF6_INTERFACE(x) ((struct ospf6_interface *) (x))
