public Kernel getProperKernel() {
    apiMatchedOnce = false;
    baseMatchedOnce = false;

    if (kernelSet.isEmpty()) {
      return null;
    }

    Iterator<Kernel> iterator = kernelSet.iterator();

    while (iterator.hasNext()) {
      Kernel k = iterator.next();
      try {
        boolean a =
            k.getBASE()
                .contains(preferences.getString(Keys.KEY_SETTINGS_ROMBASE, "").toUpperCase());
        boolean b =
            k.getAPI().contains(preferences.getString(Keys.KEY_SETTINGS_ROMAPI, "").toUpperCase());
        if (a) baseMatchedOnce = true;
        if (b) apiMatchedOnce = true;
        if (a & b) {
          if (!k.isTestBuild() || preferences.getBoolean(Keys.KEY_SETTINGS_LOOKFORBETA, false)) {
            return k;
          }
        }
      } catch (NullPointerException ignored) {
      }
    }

    return null;
  }