private synchronized void refreshServices() {
    printers = peer.getAllPrinterNames();
    if (printers == null) {
      // In Windows it is safe to assume no default if printers == null so we
      // don't get the default.
      printServices = new PrintService[0];
      return;
    }

    PrintService[] newServices = new PrintService[printers.length];
    PrintService defService = getDefaultPrintService();
    for (int p = 0; p < printers.length; p++) {
      if (defService != null && printers[p].equals(defService.getName())) {
        newServices[p] = defService;
      } else {
        if (printServices == null) {
          newServices[p] = new Win32PrintService(printers[p], peer);
        } else {
          int j;
          for (j = 0; j < printServices.length; j++) {
            if ((printServices[j] != null) && (printers[p].equals(printServices[j].getName()))) {
              newServices[p] = printServices[j];
              printServices[j] = null;
              break;
            }
          }
          if (j == printServices.length) {
            newServices[p] = new Win32PrintService(printers[p], peer);
          }
        }
      }
    }

    printServices = newServices;
  }
  public synchronized PrintService getDefaultPrintService() {
    SecurityManager security = System.getSecurityManager();
    if (security != null) {
      security.checkPrintJobAccess();
    }

    // Windows does not have notification for a change in default
    // so we always get the latest.
    defaultPrinter = peer.getDefaultPrinterName();
    if (defaultPrinter == null) {
      return null;
    }

    if ((defaultPrintService != null) && defaultPrintService.getName().equals(defaultPrinter)) {

      return defaultPrintService;
    }

    // Not the same as default so proceed to get new PrintService.

    // clear defaultPrintService
    defaultPrintService = null;

    if (printServices != null) {
      for (int j = 0; j < printServices.length; j++) {
        if (defaultPrinter.equals(printServices[j].getName())) {
          defaultPrintService = printServices[j];
          break;
        }
      }
    }

    if (defaultPrintService == null) {
      defaultPrintService = new Win32PrintService(defaultPrinter, peer);
    }
    return defaultPrintService;
  }