protected static ArrayList<ConnectionInformation> readSettings() {
    ArrayList<ConnectionInformation> conInfoList = new ArrayList<ConnectionInformation>();

    ArrayList<Settings> settingsList = SettingsReader.readSettings(settings_file);

    try {

      if (settingsList == null) {
        SimpleIO.createFolder(settings_folder);
        SimpleIO.createFile(settings_file);
        createSettings();
        logger.error("Populate settings.conf before running.");
        System.exit(1);
      }

    } catch (IOException e) {
      logger.error("I/O error", e.getCause());
    }

    ConnectionInformation connectionInformation;
    Profile profile;

    for (Settings settings : settingsList) {
      try {
        connectionInformation = new ConnectionInformation();
        connectionInformation.setServeralias(settings.getSetting("server_alias"));
        connectionInformation.setHostname(settings.getSetting("hostname"));
        connectionInformation.setPort(settings.getSetting("port"));
        connectionInformation.setIpv6(Boolean.parseBoolean(settings.getSetting("ipv6")));

        String bindAddress = settings.getSetting("bind_address");
        if (bindAddress != null && !bindAddress.isEmpty()) {
          connectionInformation.setBindAddress(bindAddress);
        }

        String channels = settings.getSetting("channels");
        if (channels != null) {
          for (String channel : channels.split(",")) {
            connectionInformation.addChannel(channel);
          }
        }

        profile =
            new Profile(
                settings.getSetting("nickname"),
                settings.getSetting("alt_nickname"),
                settings.getSetting("realname"),
                settings.getSetting("ident"),
                settings.getSetting("email"));
        profile.setQuitMessage(settings.getSetting("quitmsg"));
        connectionInformation.setProfile(profile);

        if (connectionInformation.isValid() && profile.isValid()) {
          conInfoList.add(connectionInformation);
          logger.info("Settings are in order, connecting..");
        } else {
          logger.error("Settings need to be populated properly.");
        }
      } catch (UnknownHostException unknownHostException) {
        logger.error(
            String.format(
                "Can't bind to selected hostname, skipping this connection entry. exception '%s'",
                unknownHostException.getMessage()));
      }
    }

    return conInfoList;
  }