public void engineNextBytes (byte[] bytes) {
		int    index  = 0;
		int    todo;
		byte[] output = this.remainder;

		// First use remainder from last time
		int rC = this.remCount;
		if (rC > 0) {
			todo = (bytes.length - index) < (4 - rC) ? (bytes.length - index) : (4 - rC);
			for (int i = 0; i < todo; i++, rC++)
				bytes[i] = output[rC];

			this.remCount += todo;
			index         += todo;
		}

		// If we need more bytes, get them
		while (index < bytes.length) {
			output = ISAACEngine.toByteArray (this.isaac.nextInt ());

			todo = (bytes.length - index) > 4 ? 4 : (bytes.length - index);
			for (int i = 0; i < todo; i++, index++)
				bytes[index] = output[i];

			this.remCount += todo;
		}

		// Store remainder for next time
		this.remainder = output;
		this.remCount %= 4;
	}