public UpdateResult updateVersion() {
    List<File> changedPoms = new ArrayList<File>();
    List<String> errors = new ArrayList<String>();
    for (ReleasableModule module : reactor.getModulesInBuildOrder()) {
      try {
        MavenProject project = module.getProject();
        if (module.willBeReleased()) {
          log.info("Going to release " + module.getArtifactId() + " " + module.getNewVersion());
        }

        List<String> errorsForCurrentPom = alterModel(project, module.getNewVersion());
        errors.addAll(errorsForCurrentPom);

        File pom = project.getFile().getCanonicalFile();
        changedPoms.add(pom);
        Writer fileWriter = new FileWriter(pom);

        Model originalModel = project.getOriginalModel();
        try {
          MavenXpp3Writer pomWriter = new MavenXpp3Writer();
          pomWriter.write(fileWriter, originalModel);
        } finally {
          fileWriter.close();
        }
      } catch (Exception e) {
        return new UpdateResult(changedPoms, errors, e);
      }
    }
    return new UpdateResult(changedPoms, errors, null);
  }