public void undo() throws CommandExecutionException {
		if(!this.pastOperations.isEmpty()) {
			T command = this.pastOperations.remove(this.pastOperations.size() - 1);
			try {
				this.historyStrategy.undo(command);
				this.futureOperations.add(0, command);
				
				this.commandInformation.get(command).setFuture(true);
				this.eventBus.post(new HistoryCommandReplayedEvent<>(this));
			} catch(Throwable thr) {
				this.doClear();
				this.eventBus.post(new HistoryChangedEvent<>(this));
				throw new CommandExecutionException(thr);
			}
		}
	}