public void updateCritters() {

		if (firstRun)
			firstRun = false;
		else {
			activeCritterList.clear();
			activeCritterList.addAll(inactiveCritterHash.keySet());
		}

		inactiveCritterHash.clear();
		int roundCounter = 0;

		int[] sequence = generateRandomSequence(activeCritterList.size());
		for (int i : sequence) {

			Point point = null;
			try {
				point = activeCritterList.get(i);
			} catch (IndexOutOfBoundsException e) {
				System.out.println("size = " + activeCritterList.size());
				for (int j : sequence)
					System.out.print(j + " ");
				System.exit(1);
			}

			if (!inactiveCritterHash.containsKey(point)) {
				try {
					boolean result = performActionOnCritterAt(point);
					if (!result) {
						inactiveCritterHash.put(point, getCritterAt(point));
						updateCritterView(point);
					}
				} catch (NullPointerException e) {
					System.out.println("i value = " + i);
					System.out.println(point);
					e.printStackTrace();
					System.exit(1);
				}
				if (DEBUG) {
					System.out.println("After action...");
					System.out.print(getCritterAt(point));
					System.out.println("---------------");
				}
				++roundCounter;
			}
		}

		if (DEBUG)
			System.out.println("Round count = " + roundCounter);

	}