public Iterator generateNames(final Identifier ident) {
		return new Iterator() {
			int pos = 0;
			Iterator backing = null;

			public boolean hasNext() {
				return true;
			}

			public Object next() {
				if (pos < keywords.length)
					return keywords[pos++];

				if (backing == null)
					backing = backup.generateNames(ident);

				return backing.next();
			}

			public void remove() {
				throw new UnsupportedOperationException();
			}
		};
	}