@Override
  public Element getState() {
    final Element element = new Element("state");

    // store only 'true' values
    if (internal) {
      Element internalElement = new Element(INTERNAL);
      internalElement.setText(Boolean.toString(internal));
      element.addContent(internalElement);
    }

    for (Map.Entry<String, Long> entry : lastModifications.entrySet()) {
      final Element update = new Element(MODIFY);
      update.setAttribute(RECORDER_ID, entry.getKey());
      update.setAttribute(LAST_MODIFIED, String.valueOf(entry.getValue()));
      element.addContent(update);
    }

    for (Map.Entry<String, EventsSchemePathSettings> entry : recorderToPathSettings.entrySet()) {
      final Element path = new Element(PATH);
      path.setAttribute(RECORDER_ID, entry.getKey());
      EventsSchemePathSettings value = entry.getValue();
      path.setAttribute(CUSTOM_PATH, value.getCustomPath());
      path.setAttribute(USE_CUSTOM_PATH, String.valueOf(value.isUseCustomPath()));
      element.addContent(path);
    }

    for (Map.Entry<String, EventLogExternalOptions> entry : options.entrySet()) {
      Element options = new Element(OPTIONS);
      options.setAttribute(RECORDER_ID, entry.getKey());
      for (Element option : entry.getValue().serialize()) {
        options.addContent(option);
      }
      element.addContent(options);
    }

    return element;
  }
@Override
  public Element getState()