diff --git a/ospfd/ospf_snmp.c b/ospfd/ospf_snmp.c
index c1994ab..4ed1fab 100644
--- a/ospfd/ospf_snmp.c
+++ b/ospfd/ospf_snmp.c
@@ -499,13 +499,10 @@
   if (ospf == NULL)
     return 0;
 
-  for (node = listhead (ospf->oiflist); node; nextnode (node))
-    {
-      oi = getdata (node);
+  for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
+    if (oi && oi->address)
+      return 1;
 
-      if (oi && oi->address)
-	return 1;
-    }
   return 0;
 }
 
@@ -624,16 +621,14 @@
       node = listhead (ospf->areas);
       if (node)
 	{
-	  area = getdata (node);
+	  area = listgetdata (node);
 	  *area_id = area->area_id;
 	  return area;
 	}
       return NULL;
     }
-  for (node = listhead (ospf->areas); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
     {
-      area = getdata (node);
-
       if (ntohl (area->area_id.s_addr) > ntohl (area_id->s_addr))
 	{
 	  *area_id = area->area_id;
@@ -757,10 +752,8 @@
   if (ospf == NULL)
     return NULL;
 
-  for (node = listhead (ospf->areas); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
     {
-      area = getdata (node);
-
       if (area->external_routing == OSPF_AREA_STUB)
 	{
 	  if (first)
@@ -1401,14 +1394,14 @@
 void
 ospf_snmp_if_delete (struct interface *ifp)
 {
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct ospf_snmp_if *osif;
 
-  LIST_LOOP (ospf_snmp_iflist, osif, nn)
+  for (ALL_LIST_ELEMENTS (ospf_snmp_iflist, node, nnode, osif))
     {
       if (osif->ifp == ifp)
 	{
-	  list_delete_node (ospf_snmp_iflist, nn);
+	  list_delete_node (ospf_snmp_iflist, node);
 	  ospf_snmp_if_free (osif);
 	  return;
 	}
@@ -1418,7 +1411,7 @@
 void
 ospf_snmp_if_update (struct interface *ifp)
 {
-  struct listnode *nn;
+  struct listnode *node;
   struct listnode *pn;
   struct connected *ifc;
   struct prefix *p;
@@ -1433,7 +1426,7 @@
   ifindex = 0;
 
   /* Lookup first IPv4 address entry. */
-  LIST_LOOP (ifp->connected, ifc, nn)
+  for (ALL_LIST_ELEMENTS_RO (ifp->connected, node, ifc))
     {
       if (CONNECTED_POINTOPOINT_HOST(ifc))
 	p = ifc->destination;
@@ -1451,7 +1444,7 @@
 
   /* Add interface to the list. */
   pn = NULL;
-  LIST_LOOP (ospf_snmp_iflist, osif, nn)
+  for (ALL_LIST_ELEMENTS_RO (ospf_snmp_iflist, node, osif))
     {
       if (addr)
 	{
@@ -1464,7 +1457,7 @@
 	  if (osif->addr.s_addr != 0 || osif->ifindex > ifindex)
 	    break;
 	}
-      pn = nn;
+      pn = node;
     }
 
   osif = ospf_snmp_if_new ();
@@ -1480,10 +1473,10 @@
 struct interface *
 ospf_snmp_if_lookup (struct in_addr *ifaddr, unsigned int *ifindex)
 {
-  struct listnode *nn;
+  struct listnode *node;
   struct ospf_snmp_if *osif;
 
-  LIST_LOOP (ospf_snmp_iflist, osif, nn)
+  for (ALL_LIST_ELEMENTS_RO (ospf_snmp_iflist, node, osif))
     {  
       if (ifaddr->s_addr)
 	{
@@ -1511,7 +1504,7 @@
       nn = listhead (ospf_snmp_iflist);
       if (nn)
 	{
-	  osif = getdata (nn);
+	  osif = listgetdata (nn);
 	  *ifaddr = osif->addr;
 	  *ifindex = osif->ifindex;
 	  return osif->ifp;
@@ -1519,7 +1512,7 @@
       return NULL;
     }
 
-  LIST_LOOP (ospf_snmp_iflist, osif, nn)
+  for (ALL_LIST_ELEMENTS_RO (ospf_snmp_iflist, nn, osif))
     {
       if (ifaddr->s_addr)
 	{
@@ -2051,12 +2044,12 @@
 ospf_snmp_nbr_lookup (struct ospf *ospf, struct in_addr *nbr_addr,
 		      unsigned int *ifindex)
 {
-  struct listnode *nn;
+  struct listnode *node, *nnode;
   struct ospf_interface *oi;
   struct ospf_neighbor *nbr;
   struct route_node *rn;
 
-  LIST_LOOP (ospf->oiflist, oi, nn)
+  for (ALL_LIST_ELEMENTS (ospf->oiflist, node, nnode, oi))
     {
       for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
 	if ((nbr = rn->info) != NULL
@@ -2086,7 +2079,8 @@
   struct ospf *ospf = ospf;
 
   ospf = ospf_lookup ();
-  LIST_LOOP (ospf->oiflist, oi, nn)
+
+  for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, nn, oi))
     {
       for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
 	if ((nbr = rn->info) != NULL
