@Override
  public Windows getWindows() {

    Windows ret = new Windows();
    WebDriver d = getDriver();
    ret.setCurrent(d.getWindowHandle());
    ret.setAll(d.getWindowHandles());
    return ret;
  }
  @Override
  public String waitForNewWindow(final Windows windows, int seconds) {
    WebDriver d = getDriver();
    LOGGER.debug("waitForNewWindow: existing=" + windows.getAll());
    waitFor(
        seconds,
        new ExpectedCondition<Boolean>() {
          public Boolean apply(WebDriver d) {
            return (d.getWindowHandles().size() > windows.getAll().size());
          }
        });
    Set<String> handles = d.getWindowHandles();
    LOGGER.debug("waitForNewWindow: handles=" + handles);

    handles.removeAll(windows.getAll());
    if (handles.size() > 0) {
      String handle = handles.iterator().next();
      LOGGER.debug("waitForNewWindow: found new window - handle=" + handle);
      return handle;
    }
    LOGGER.debug("waitForNewWindow: did not find new window");
    return null;
  }