diff --git a/libcnary/Makefile.am b/libcnary/Makefile.am
index bba9ada..5a26fb5 100644
--- a/libcnary/Makefile.am
+++ b/libcnary/Makefile.am
@@ -8,11 +8,7 @@
 		       node.c \
 		       list.c \
 		       node_list.c \
-		       iterator.c \
-		       node_iterator.c \
 		       include/node.h \
 		       include/list.h \
 		       include/node_list.h \
-		       include/iterator.h \
-		       include/node_iterator.h \
 		       include/object.h
diff --git a/libcnary/include/iterator.h b/libcnary/include/iterator.h
deleted file mode 100644
index a33c4ff..0000000
--- a/libcnary/include/iterator.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * iterator.h
- *
- *  Created on: Mar 8, 2011
- *      Author: posixninja
- *
- * Copyright (c) 2011 Joshua Hill. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef ITERATOR_H_
-#define ITERATOR_H_
-
-struct list_t;
-struct object_t;
-
-typedef struct iterator_t {
-	struct object_t*(*next)(struct iterator_t* iterator);
-	int(*bind)(struct iterator_t* iterator, struct list_t* list);
-
-	unsigned int count;
-	unsigned int position;
-
-	struct list_t* list;
-	struct object_t* end;
-	struct object_t* begin;
-	struct object_t* value;
-} iterator_t;
-
-void iterator_destroy(struct iterator_t* iterator);
-struct iterator_t* iterator_create(struct list_t* list);
-
-struct object_t* iterator_next(struct iterator_t* iterator);
-int iterator_bind(struct iterator_t* iterator, struct list_t* list);
-
-#endif /* ITERATOR_H_ */
diff --git a/libcnary/include/node_iterator.h b/libcnary/include/node_iterator.h
deleted file mode 100644
index d3bce3a..0000000
--- a/libcnary/include/node_iterator.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * node_iterator.h
- *
- *  Created on: Mar 8, 2011
- *      Author: posixninja
- *
- * Copyright (c) 2011 Joshua Hill. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef NODE_ITERATOR_H_
-#define NODE_ITERATOR_H_
-
-#include "iterator.h"
-#include "node_list.h"
-
-// This class implements the abstract iterator class
-typedef struct node_iterator_t {
-	// Super class
-	struct iterator_t super;
-
-	// Local members
-	struct node_t*(*next)(struct node_iterator_t* iterator);
-	int(*bind)(struct node_iterator_t* iterator, struct node_list_t* list);
-
-	unsigned int count;
-	unsigned int position;
-
-	struct node_list_t* list;
-	struct node_t* end;
-	struct node_t* begin;
-	struct node_t* value;
-
-} node_iterator_t;
-
-void node_iterator_destroy(node_iterator_t* iterator);
-node_iterator_t* node_iterator_create(node_list_t* list);
-
-struct node_t* node_iterator_next(struct node_iterator_t* iterator);
-int node_iterator_bind(struct node_iterator_t* iterator, struct node_list_t* list);
-
-#endif /* NODE_ITERATOR_H_ */
diff --git a/libcnary/iterator.c b/libcnary/iterator.c
deleted file mode 100644
index 492a8ae..0000000
--- a/libcnary/iterator.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * iterator.c
- *
- *  Created on: Mar 8, 2011
- *      Author: posixninja
- *
- * Copyright (c) 2011 Joshua Hill. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "list.h"
-#include "object.h"
-#include "iterator.h"
-
-void iterator_destroy(iterator_t* iterator) {
-	if(iterator) {
-		free(iterator);
-	}
-}
-
-iterator_t* iterator_create(list_t* list) {
-	iterator_t* iterator = (iterator_t*) malloc(sizeof(iterator_t));
-	if(iterator == NULL) {
-		return NULL;
-	}
-	memset(iterator, '\0', sizeof(iterator_t));
-
-	if(list != NULL) {
-		// Create and bind to list
-
-	} else {
-		// Empty Iterator
-	}
-
-	return iterator;
-}
-
-object_t* iterator_next(iterator_t* iterator) {
-	return NULL;
-}
-
-int iterator_bind(iterator_t* iterator, list_t* list) {
-	return -1;
-}
diff --git a/libcnary/node.c b/libcnary/node.c
index 4b550dd..c24ca7a 100644
--- a/libcnary/node.c
+++ b/libcnary/node.c
@@ -26,7 +26,6 @@
 
 #include "node.h"
 #include "node_list.h"
-#include "node_iterator.h"
 
 void node_destroy(node_t* node) {
 	if(!node) return;
@@ -114,7 +113,6 @@
 static void _node_debug(node_t* node, unsigned int depth) {
 	unsigned int i = 0;
 	node_t* current = NULL;
-	node_iterator_t* iter = NULL;
 	for(i = 0; i < depth; i++) {
 		printf("\t");
 	}
@@ -128,11 +126,9 @@
 		if(node->parent) {
 			printf("NODE\n");
 		}
-		iter = node_iterator_create(node->children);
-		while ((current = iter->next(iter))) {
+		for (current = node_first_child(node); current; current = node_next_sibling(current)) {
 			_node_debug(current, depth+1);
 		}
-		node_iterator_destroy(iter);
 	}
 
 }
diff --git a/libcnary/node_iterator.c b/libcnary/node_iterator.c
deleted file mode 100644
index e629b73..0000000
--- a/libcnary/node_iterator.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * node_iterator.c
- *
- *  Created on: Mar 8, 2011
- *      Author: posixninja
- *
- * Copyright (c) 2011 Joshua Hill. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "node.h"
-#include "node_list.h"
-#include "node_iterator.h"
-
-void node_iterator_destroy(node_iterator_t* iterator) {
-	if(iterator) {
-		free(iterator);
-	}
-}
-
-node_iterator_t* node_iterator_create(node_list_t* list) {
-	node_iterator_t* iterator = (node_iterator_t*) malloc(sizeof(node_iterator_t));
-	if(iterator == NULL) {
-		return NULL;
-	}
-	memset(iterator, '\0', sizeof(node_iterator_t));
-
-	iterator->count = 0;
-	iterator->position = 0;
-
-	iterator->end = NULL;
-	iterator->begin = NULL;
-	iterator->value = NULL;
-
-	iterator->list = NULL;
-	iterator->next = node_iterator_next;
-	iterator->bind = node_iterator_bind;
-
-
-	if(list != NULL) {
-		iterator->bind(iterator, list);
-	}
-
-	return iterator;
-}
-
-node_t* node_iterator_next(node_iterator_t* iterator) {
-	node_t* node = iterator->value;
-	if (node) {
-		iterator->value = node->next;
-	}
-	iterator->position++;
-	return node;
-}
-
-int node_iterator_bind(node_iterator_t* iterator, node_list_t* list) {
-	iterator->position = 0;
-	iterator->end = list->end;
-	iterator->count = list->count;
-	iterator->begin = list->begin;
-	iterator->value = list->begin;
-	return 0;
-}
diff --git a/src/bplist.c b/src/bplist.c
index 69f3dca..679a5e5 100644
--- a/src/bplist.c
+++ b/src/bplist.c
@@ -39,7 +39,6 @@
 #include "ptrarray.h"
 
 #include <node.h>
-#include <node_iterator.h>
 
 /* Magic marker and size. */
 #define BPLIST_MAGIC            ((uint8_t*)"bplist")
@@ -938,12 +937,10 @@
     ptr_array_add(ser->objects, node);
 
     //now recurse on children
-    node_iterator_t *ni = node_iterator_create(node->children);
     node_t *ch;
-    while ((ch = node_iterator_next(ni))) {
+    for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
         serialize_plist(ch, data);
     }
-    node_iterator_destroy(ni);
 
     return;
 }
diff --git a/src/plist.c b/src/plist.c
index f62e6be..cd22ca6 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -36,7 +36,6 @@
 #endif
 
 #include <node.h>
-#include <node_iterator.h>
 #include <hashtable.h>
 
 extern void plist_xml_init(void);
@@ -209,12 +208,12 @@
     plist_free_data(data);
     node->data = NULL;
 
-    node_iterator_t *ni = node_iterator_create(node->children);
     node_t *ch;
-    while ((ch = node_iterator_next(ni))) {
+    for (ch = node_first_child(node); ch; ) {
+        node_t *next = node_next_sibling(ch);
         plist_free_node(ch);
+        ch = next;
     }
-    node_iterator_destroy(ni);
 
     node_destroy(node);
 
@@ -366,12 +365,10 @@
         *(plist_t*)parent_node_ptr = newnode;
     }
 
-    node_iterator_t *ni = node_iterator_create(node->children);
     node_t *ch;
-    while ((ch = node_iterator_next(ni))) {
+    for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
         plist_copy_node(ch, &newnode);
     }
-    node_iterator_destroy(ni);
 }
 
 PLIST_API plist_t plist_copy(plist_t node)
diff --git a/src/xplist.c b/src/xplist.c
index 6e64427..29b1284 100644
--- a/src/xplist.c
+++ b/src/xplist.c
@@ -40,7 +40,6 @@
 
 #include <node.h>
 #include <node_list.h>
-#include <node_iterator.h>
 
 #include "plist.h"
 #include "base64.h"
@@ -356,12 +355,10 @@
         if (node_data->type == PLIST_DICT) {
             assert((node->children->count % 2) == 0);
         }
-        node_iterator_t *ni = node_iterator_create(node->children);
         node_t *ch;
-        while ((ch = node_iterator_next(ni))) {
+        for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
             node_to_xml(ch, outbuf, depth+1);
         }
-        node_iterator_destroy(ni);
     }
 
     /* fix indent for structured types */
