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))
