private void goThere(final int nextPos) {
    navigatedNow = true;
    final Place next = history.get(nextPos);
    final Place from = getCurrent();
    fireStarted(from, next);
    try {
      final ActionCallback callback = root.navigateTo(next, false);
      assert callback != null;
      callback.doWhenDone(() -> {
        synchronized (this) {
          currentPos = nextPos;
        }
      }).doWhenProcessed(() -> {
        navigatedNow = false;
        fireFinished(from, next);
      });
    }
    catch (Throwable e) {
      navigatedNow = false;
      throw new RuntimeException(e);
    }
  }
private void goThere(final int nextPos)