diff --git a/isisd/isisd.c b/isisd/isisd.c
index 229f135..c2bb906 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -144,9 +144,9 @@
 isis_area_lookup (const char *area_tag)
 {
   struct isis_area *area;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
-  LIST_LOOP (isis->area_list, area, node)
+  for (ALL_LIST_ELEMENTS (isis->area_list, node, nnode, area))
     if ((area->area_tag == NULL && area_tag == NULL) ||
 	(area->area_tag && area_tag
 	 && strcmp (area->area_tag, area_tag) == 0))
@@ -185,7 +185,7 @@
 isis_area_destroy (struct vty *vty, const char *area_tag)
 {
   struct isis_area *area;
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct isis_circuit *circuit;
 
   area = isis_area_lookup (area_tag);
@@ -198,13 +198,9 @@
 
   if (area->circuit_list)
     {
-      node = listhead (area->circuit_list);
-      while (node)
-	{
-	  circuit = getdata (node);
-	  nextnode (node);
-	  isis_circuit_del (circuit);
-	}
+      for (ALL_LIST_ELEMENTS (area->circuit_list, node, nnode, circuit))
+        isis_circuit_del (circuit);
+      
       list_delete (area->circuit_list);
     }
   listnode_delete (isis->area_list, area);
@@ -225,7 +221,7 @@
   struct isis_area *area;
   struct area_addr *addr;
   struct area_addr *addrp;
-  struct listnode *node;
+  struct listnode *node, *nnode;
 
   u_char buff[255];
   area = vty->index;
@@ -284,7 +280,7 @@
 	}
 
       /* now we see that we don't already have this address */
-      LIST_LOOP (area->area_addrs, addrp, node)
+      for (ALL_LIST_ELEMENTS (area->area_addrs, node, nnode, addrp))
       {
 	if ((addrp->addr_len + ISIS_SYS_ID_LEN + 1) == (addr->addr_len))
 	  {
@@ -318,7 +314,7 @@
 {
   struct isis_area *area;
   struct area_addr addr, *addrp = NULL;
-  struct listnode *node;
+  struct listnode *node, *nnode;
   u_char buff[255];
 
   area = vty->index;
@@ -338,7 +334,7 @@
 
   memcpy (addr.area_addr, buff, (int) addr.addr_len);
 
-  LIST_LOOP (area->area_addrs, addrp, node)
+  for (ALL_LIST_ELEMENTS (area->area_addrs, node, nnode, addrp))
     if (addrp->addr_len == addr.addr_len &&
 	!memcmp (addrp->area_addr, addr.area_addr, addr.addr_len))
     break;
@@ -362,7 +358,7 @@
 int
 show_clns_neigh (struct vty *vty, char detail)
 {
-  struct listnode *node_area, *node_circ;
+  struct listnode *anode, *annode, *cnode, *cnnode;
   struct isis_area *area;
   struct isis_circuit *circuit;
   struct list *db;
@@ -374,20 +370,16 @@
       return CMD_SUCCESS;
     }
 
-  for (node_area = listhead (isis->area_list); node_area;
-       nextnode (node_area))
+  for (ALL_LIST_ELEMENTS (isis->area_list, anode, annode, area))
     {
-      area = getdata (node_area);
       vty_out (vty, "Area %s:%s", area->area_tag, VTY_NEWLINE);
 
       if (detail == ISIS_UI_LEVEL_BRIEF)
 	vty_out (vty, "  System Id           Interface   L  State        "
 		 "Holdtime SNPA%s", VTY_NEWLINE);
 
-      for (node_circ = listhead (area->circuit_list); node_circ;
-	   nextnode (node_circ))
+      for (ALL_LIST_ELEMENTS (area->circuit_list, cnode, cnnode, circuit))
 	{
-	  circuit = getdata (node_circ);
 	  if (circuit->circ_type == CIRCUIT_T_BROADCAST)
 	    {
 	      for (i = 0; i < 2; i++)
@@ -902,16 +894,15 @@
        "show isis database",
        SHOW_STR "IS-IS information\n" "IS-IS link state database\n")
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct isis_area *area;
   int level, lsp_count;
 
   if (isis->area_list->count == 0)
     return CMD_SUCCESS;
 
-  for (node = listhead (isis->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (isis->area_list, node, nnode, area))
     {
-      area = getdata (node);
       vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null",
 	       VTY_NEWLINE);
       for (level = 0; level < ISIS_LEVELS; level++)
@@ -941,16 +932,15 @@
        "IS-IS information\n"
        "IS-IS link state database\n")
 {
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct isis_area *area;
   int level, lsp_count;
 
   if (isis->area_list->count == 0)
     return CMD_SUCCESS;
 
-  for (node = listhead (isis->area_list); node; nextnode (node))
+  for (ALL_LIST_ELEMENTS (isis->area_list, node, nnode, area))
     {
-      area = getdata (node);
       vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null",
 	       VTY_NEWLINE);
       for (level = 0; level < ISIS_LEVELS; level++)
@@ -1222,7 +1212,7 @@
    * Put the is-type back to default. Which is level-1-2 on first
    * circuit for the area level-1 for the rest
    */
-  if (getdata (listhead (isis->area_list)) == area)
+  if (listgetdata (listhead (isis->area_list)) == area)
     type = IS_LEVEL_1_AND_2;
   else
     type = IS_LEVEL_1;
@@ -1603,10 +1593,10 @@
        "CLNS neighbor adjacencies\n")
 {
   struct isis_area *area;
-  struct listnode *node;
+  struct listnode *node, *nnode;
   struct listnode *node2;
   struct arc *arc;
-  LIST_LOOP (isis->area_list, area, node)
+  for (ALL_LIST_ELEMENTS (isis->area_list, node, nnode, area))
   {
     if (area->topology)
       {
@@ -1852,10 +1842,10 @@
   if (isis != NULL)
     {
       struct isis_area *area;
-      struct listnode *node;
-      struct listnode *node2;
+      struct listnode *node, *nnode;
+      struct listnode *node2, *nnode2;
 
-      LIST_LOOP (isis->area_list, area, node)
+      for (ALL_LIST_ELEMENTS (isis->area_list, node, nnode, area))
       {
 	/* ISIS - Area name */
 	vty_out (vty, "router isis %s%s", area->area_tag, VTY_NEWLINE);
@@ -1864,7 +1854,7 @@
 	if (listcount (area->area_addrs) > 0)
 	  {
 	    struct area_addr *area_addr;
-	    LIST_LOOP (area->area_addrs, area_addr, node2)
+	    for (ALL_LIST_ELEMENTS (area->area_addrs, node2, nnode2, area_addr))
 	    {
 	      vty_out (vty, " net %s%s",
 		       isonet_print (area_addr->area_addr,
