public Set entrySet() /* Modified for final JDK1.2 API */
		{
			final Collection entries = map.entrySet();

			return new AbstractSet() {
				public int size() {
					return entries.size();
				}

				public boolean contains(final Object a) {
					return entries.contains(a);
				}

				public boolean remove(final Object a) {
					final Map.Entry e = (Map.Entry) a;

					removingNode++;
					Graph.this.removeNode(e.getKey());
					removingNode--;

					return entries.remove(a);
				}

				public void clear() {
					final Iterator iter = entries.iterator();

					while (iter.hasNext()) {
						final Map.Entry e = (Map.Entry) iter.next();
						removingNode++;
						Graph.this.removeNode(e.getKey());
						removingNode--;
						iter.remove();
					}
				}

				public Iterator iterator() {
					final Iterator iter = entries.iterator();

					return new Iterator() {
						int nodeModCount = Graph.this.nodeModCount;

						Map.Entry last;

						public boolean hasNext() {
							if (nodeModCount != Graph.this.nodeModCount) {
								throw new ConcurrentModificationException();
							}

							return iter.hasNext();
						}

						public Object next() {
							if (nodeModCount != Graph.this.nodeModCount) {
								throw new ConcurrentModificationException();
							}

							last = (Map.Entry) iter.next();
							return last;
						}

						public void remove() {
							if (nodeModCount != Graph.this.nodeModCount) {
								throw new ConcurrentModificationException();
							}

							removingNode++;
							Graph.this.removeNode(last.getKey());
							removingNode--;
							iter.remove();

							nodeModCount = Graph.this.nodeModCount;
						}
					};
				}
			};
		}