docs: public void startSynchronization() throws IOException, ServiceException,
              AuthenticationException, NotFoundException, RedmineException, ParseException {
  
          // retrieve new issues
          final List<EditableAcraReport> listReports = retrieveUnsyncedElements();
  
          // update Chiliproject
          for (final EditableAcraReport report : listReports) {
  
              final Issue issue = getIssueForStack(report.getStacktraceMD5());
  
              try {
                  if (null == issue) {
                      LOGGER.debug("Got a new bugreport: reportId={}", report.getId());
                      for (final AcraReportHandler handler : reportHandlers) {
                          handler.onNewReport(report);
                      }
                  } else if (ChiliprojectUtils.isSynchronized(report, issue)) {
                      LOGGER.debug("Got a bugreport already synchronized: reportId={}",
                              report.getId());
                      for (final AcraReportHandler handler : reportHandlers) {
                          handler.onKnownIssueAlreadySynchronized(report, issue);
                      }
                  } else {
                      LOGGER.debug(
                              "Got a new bugreport with a stacktrace similar to an existing ticket: reportId={}",
                              report.getId());
                      for (final AcraReportHandler handler : reportHandlers) {
                          handler.onKnownIssueNotSynchronized(report, issue);
                      }
                  }
              } catch (final SynchronizationException e) {
                  report.mergeSyncStatus(SyncStatus.FAILURE);
                  LOGGER.error("Unable to synchronize ACRA report " + report.getId(), e);
              }
          }
  
          try {
              for (final AcraReportHandler handler : reportHandlers) {
                  handler.onFinishReceivingNewReports();
              }
          } catch (final SynchronizationException e) {
              for (final EditableAcraReport report : listReports) {
                  report.mergeSyncStatus(SyncStatus.FAILURE);
              }
              LOGGER.error("Unable to finalize ACRA report synchronization");
          }
  
          // update/set stack_trace_md5 cells
          for (final EditableAcraReport report : listReports) {
              if (SyncStatus.SUCCESS.equals(report.getStatus())) {
                  report.commitStacktraceMD5();
              }
          }
      }