*/
		public ListIterator listIterator(final int index) {
			final ListIterator iter = super.listIterator(index);

			return new ListIterator() {
				Object last = null;

				public boolean hasNext() {
					return iter.hasNext();
				}

				public Object next() {
					last = iter.next();
					return last;
				}

				public boolean hasPrevious() {
					return iter.hasPrevious();
				}

				public Object previous() {
					last = iter.previous();
					return last;
				}

				public int nextIndex() {
					return iter.nextIndex();
				}

				public int previousIndex() {
					return iter.previousIndex();
				}

				public void add(final Object obj) {
					Assert.isTrue(obj instanceof Stmt);
					((Stmt) obj).setParent(Tree.this);
					last = null;
					iter.add(obj);
				}

				public void set(final Object obj) {
					if (last == null) {
						throw new NoSuchElementException();
					}

					Assert.isTrue(obj instanceof Stmt);
					((Stmt) obj).setParent(Tree.this);

					((Stmt) last).cleanup();
					last = null;

					iter.set(obj);
				}

				public void remove() {
					if (last == null) {
						throw new NoSuchElementException();
					}

					((Stmt) last).cleanup();
					last = null;

					iter.remove();
				}
			};
		}