return new Iterable<A>() {public Iterator<A> iterator() {
			final int[] i = {-1};
			final AtomicReference<Iterator<A>> ref = new AtomicReference<Iterator<A>>();
			
			return new Iterator<A>() {

				@Override
				public boolean hasNext() {
					while (true) {
						
						if (ref.get() == null) {
							if (i[0] < iterables.length - 1) {
								Iterable<A> iterable = iterables[++i[0]];
								if (iterable != null) {
									ref.set(iterable.iterator());
								}
								continue;
							} else {
								return false;
							}
						} else {
							if (ref.get().hasNext()) {
								return true;
							} else {
								ref.set(null);
								continue;
							}
						}
					}
				}

				@Override
				public A next() {
					return ref.get().next();
				}

				@Override
				public void remove() {
				}
			};
		}}