@Override
	public StateBuffer execute(StateBuffer in) {
		StateBuffer out = new StateBuffer();
		for(State s : in.getStates()) {
			move.clearCache();
			if (move.isCachable())
			  curGb.restore(s);
			for(int delay = 0; delay <= maxDelay; delay++) {
				if (!move.isCachable())
				  curGb.restore(s);
				move.prepare(delay,useCache);
				if (move.doMove()) {
				  State newS = curGb.createState(true);
				  newS.delayStepCount += delay;
					out.addState(newS);
				}
			}
		}
		return out;
	}