@Override
  protected FileHeader getNewHeader(FileHeader oldHeader) {

    FileHeader result = new FileHeader();

    FileHeader newHeader = getFileHeader();

    FileHeaderTransformer transformer = getTransformer();

    boolean modified = false;

    // by default, reuse the old header
    result.setDescription(oldHeader.getDescription());
    result.setCopyrightFirstYear(oldHeader.getCopyrightFirstYear());
    result.setCopyrightLastYear(oldHeader.getCopyrightLastYear());
    result.setCopyrightHolder(oldHeader.getCopyrightHolder());
    result.setLicense(oldHeader.getLicense());

    if (isUpdateDescription() && !transformer.isDescriptionEquals(oldHeader, newHeader)) {

      // can update description and it has changed

      if (log.isDebugEnabled()) {
        log.debug(
            "description has changed from ["
                + oldHeader.getDescription()
                + "] to ["
                + newHeader.getDescription()
                + "]");
      }

      // description has changed, mark header to be updated
      modified = true;

      // use the new description
      result.setDescription(newHeader.getDescription());
    }

    if (isUpdateCopyright() && !transformer.isCopyrightEquals(oldHeader, newHeader)) {

      // can update copyright and it has changed

      if (log.isDebugEnabled()) {
        log.debug(
            "copyright has changed from ["
                + oldHeader.getCopyright()
                + "] to ["
                + newHeader.getCopyright()
                + "]");
      }

      // description has changed, mark header to be updated
      modified = true;

      // use the new copyright
      result.setCopyrightFirstYear(result.getCopyrightFirstYear());
      result.setCopyrightLastYear(result.getCopyrightLastYear());
      result.setCopyrightHolder(result.getCopyrightHolder());
    }

    if (isUpdateLicense() && !transformer.isLicenseEquals(oldHeader, newHeader)) {

      // can update license and it has changed

      if (log.isDebugEnabled()) {
        log.debug(
            "license has changed from ["
                + oldHeader.getLicense()
                + "] to ["
                + newHeader.getLicense()
                + "]");
      }

      // description has changed, mark header to be updated
      modified = true;

      // use the new license
      result.setLicense(newHeader.getLicense());
    }

    if (!modified) {

      // nothing has to be updated, so return a {@code null} result
      result = null;
    }

    return result;
  }