int main(int argc, char* argv[])
{
    // init a logger
    Logger logger("Runtime");

    // Check the usage
    std::string programName(argv[0]);
    if (argc == 1) {
        JOYNR_LOG_INFO(logger, "USAGE: No settings provided. Starting with default settings.");
        JOYNR_LOG_INFO(logger, "USAGE: {}  <file.settings>...", programName);
    }

    // Object that holds all the settings
    Settings settings;

    // Merge all the settings files into the settings object
    for (int i = 1; i < argc; i++) {

        std::string settingsFileName(argv[i]);

        // Read the settings file
        JOYNR_LOG_INFO(logger, "Loading settings file: {}", settingsFileName);
        Settings currentSettings(settingsFileName);

        // Check for errors
        if (!currentSettings.isLoaded()) {
            JOYNR_LOG_FATAL(logger, "Settings file \"{}\" doesn't exist.", settingsFileName);
            return 1;
        }

        // Merge
        Settings::merge(currentSettings, settings, true);
    }

    // create the cluster controller runtime
    JoynrClusterControllerRuntime* clusterControllerRuntime =
            JoynrClusterControllerRuntime::create(&settings);

    // run the cluster controller forever
    clusterControllerRuntime->runForever();
}