diff --git a/README.md b/README.md
index 39717a6..b97c840 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ For lists 1 widget is provided:
  * **Select2 boxes**: an autocomplete list field.
    * Limited visibility of search box by minimum list length
    * Flags icons (language, languagefield, country).
-     Requires module **Flags** and an appropriate sub-module to be enabled.
+     Requires module **Flags** to be enabled.
 
 #### Address:
 For address field there is only provided a configuration option inside the deafult widget.
diff --git a/modules/select2_bef/src/Controller/Select2BefFormStaticController.php b/modules/select2_bef/src/Controller/Select2BefFormStaticController.php
index 2a20dd7..a924789 100644
--- a/modules/select2_bef/src/Controller/Select2BefFormStaticController.php
+++ b/modules/select2_bef/src/Controller/Select2BefFormStaticController.php
@@ -68,11 +68,59 @@ class Select2BefFormStaticController {
     if ($bef[$key]['more_options']['limited_search'] == '1') {
       $form[$key]['#attributes']['data-minimum-search-length'] = $bef[$key]['more_options']['minimum_search_length'];
     }
+    // Include the flags icons if enabled in BEF settings.
+    if ($bef[$key]['more_options']['include_flags'] == '1') {
+      static::includeIcons($form, $filter->definition, $key);
+    }
     // Attach library.
     static::addLibrary($libraries);
   }
 
   /**
+   * Include flags icons.
+   *
+   * @param array &$form
+   *   Form array.
+   * @param array $filter_definition
+   *   Filter's definition data.
+   * @param string $key
+   *   Element's key.
+   */
+  protected static function includeIcons(&$form, $filter_definition, $key) {
+    // Create a map of country or language dependent classes.
+    $flags       = [];
+    // Get some additional data from the filter's definition data array.
+    $field_name  = $filter_definition['field_name'];
+    $entity_type = $filter_definition['entity_type'];
+    // Get the field's definition object to know the field's type.
+    /** @var \Drupal\Core\Field\FieldDefinitionInterface $definition */
+    $definition = \Drupal::service('entity_field.manager')
+      ->getFieldStorageDefinitions($entity_type)[$field_name];
+    // Use an appropriate mapper service relatively to the field's type.
+    $mapper = $definition->getType() == 'country'
+      ? \Drupal::service('flags.mapping.country')
+      : \Drupal::service('flags.mapping.language');
+    foreach (array_keys($form[$key]['#options']) as $key) {
+      $flags[$key] = [
+        'flag',
+        'flag-' . $mapper->map($key),
+        $mapper->getExtraClasses()[0],
+      ];
+    }
+    // Merge these values to have all countries
+    // and languages flags in the same place to prevent missing flags icons.
+    if (!isset($form['#attached']['drupalSettings']['flagsClasses'])) {
+      $form['#attached']['drupalSettings']['flagsClasses'] = [];
+    }
+    $form['#attached']['drupalSettings']['flagsClasses'] += $flags;
+    // We have to use field's column name for views,
+    // e.g. FIELD_NAME_value instead of FIELD_NAME.
+    $form['#attached']['drupalSettings']['flagsFields'][$filter_definition['field']] = TRUE;
+    // Attach the flags library.
+    $form['#attached']['library'][] = 'flags/flags';
+  }
+
+  /**
    * Handle single-autocomplete widget.
    *
    * @param array &$form
diff --git a/modules/select2_bef/src/Plugin/views/exposed_form/BetterExposedFilters.php b/modules/select2_bef/src/Plugin/views/exposed_form/BetterExposedFilters.php
index 726a428..c2dff8e 100644
--- a/modules/select2_bef/src/Plugin/views/exposed_form/BetterExposedFilters.php
+++ b/modules/select2_bef/src/Plugin/views/exposed_form/BetterExposedFilters.php
@@ -146,6 +146,7 @@ class BetterExposedFilters extends BetterExposedFiltersOrigin {
             ],
           ],
         ];
+        $this->addIncludeIconsOption($bef, $name, $settings);
       }
     }
   }
@@ -210,6 +211,39 @@ class BetterExposedFilters extends BetterExposedFiltersOrigin {
   }
 
   /**
+   * Add "Include flags icons" option if all dependencies are met.
+   *
+   * @param array &$bef
+   *   BEF options form.
+   * @param string $name
+   *   Element's name.
+   * @param array $settings
+   *   BEF settings array.
+   */
+  protected function addIncludeIconsOption(&$bef, $name, $settings) {
+    // Check if the field is of allowed type to include flags icons.
+    $types = ['language_field', 'language', 'country'];
+    if (in_array($this->getFieldType($name), $types)) {
+      if (\Drupal::moduleHandler()->moduleExists('flags')) {
+        // Add a new option to the settings form.
+        $bef[$name]['more_options']['include_flags'] = [
+          '#type'          => 'checkbox',
+          '#title'         => $this->t('Include flags icons'),
+          '#default_value' => $settings[$name]['more_options']['include_flags'],
+          '#states'        => [
+            // Make it invisible for any widgets except Select2 Boxes.
+            'visible' => [
+              ":input[name=\"exposed_form_options[bef][$name][bef_format]\"]" => [
+                'value' => 'select2boxes_autocomplete_list',
+              ],
+            ],
+          ],
+        ];
+      }
+    }
+  }
+
+  /**
    * Check if the name is a field name.
    *
    * @param string $name
@@ -236,6 +270,29 @@ class BetterExposedFilters extends BetterExposedFiltersOrigin {
   }
 
   /**
+   * Get field's type.
+   *
+   * @param string $name
+   *   Field's BEF name.
+   *
+   * @return string
+   *   Field's type.
+   */
+  protected function getFieldType($name) {
+    if (stripos($name, '_target_id') !== FALSE) {
+      $name = static::convertDatabaseFieldToFieldname($name);
+    }
+    elseif (stripos($name, '_value') !== FALSE) {
+      $name = str_replace('_value', '', $name);
+    }
+    $entity_type = $this->view->getBaseEntityType()->id();
+    /** @var \Drupal\Core\Field\FieldDefinitionInterface $field_definition */
+    $field_definition = \Drupal::service('entity_field.manager')
+      ->getFieldStorageDefinitions($entity_type)[$name];
+    return $field_definition->getType();
+  }
+
+  /**
    * Build reference bundles list.
    *
    * @param string $field
diff --git a/select2boxes.module b/select2boxes.module
index 28858c8..e1ff1d7 100644
--- a/select2boxes.module
+++ b/select2boxes.module
@@ -155,9 +155,9 @@ function select2boxes_field_widget_settings_summary_alter(&$summary, $context) {
     }
   }
   elseif ($widget->getPluginId() == 'select2boxes_autocomplete_list' || $widget->getPluginId() == 'select2boxes_autocomplete_single') {
-    /** @var \Drupal\field\Entity\FieldConfig $setting */
-    $setting = $context['field_definition'];
-    $setting = $setting->getSetting('handler_settings');
+    /** @var \Drupal\field\Entity\FieldConfig $definition */
+    $definition = $context['field_definition'];
+    $setting    = $definition->getSetting('handler_settings');
     if (!$setting['auto_create']) {
       if (!empty($settings) && $settings['limited_search'] == '1') {
         $summary[] = t('Minimum list length for search box visibility: @length', ['@length' => $settings['minimum_search_length']]);
@@ -166,11 +166,14 @@ function select2boxes_field_widget_settings_summary_alter(&$summary, $context) {
         $summary[] = t('Minimum list length for search box visibility disabled');
       }
     }
-    if ($settings['enable_flags'] == '1') {
-      $summary[] = t('Flags icons enabled');
-    }
-    else {
-      $summary[] = t('Flags icons disabled');
+    $flag_types = ['language_field', 'language', 'country'];
+    if (in_array($definition->getType(), $flag_types)) {
+      if ($settings['enable_flags'] == '1') {
+        $summary[] = t('Flags icons enabled');
+      }
+      else {
+        $summary[] = t('Flags icons disabled');
+      }
     }
   }
   elseif (in_array($widget->getPluginId(), _select2boxes_address_widgets_list())) {
diff --git a/src/Plugin/Field/FieldWidget/Select2BoxesAutocompleteListWidget.php b/src/Plugin/Field/FieldWidget/Select2BoxesAutocompleteListWidget.php
index e7e1663..6062e35 100644
--- a/src/Plugin/Field/FieldWidget/Select2BoxesAutocompleteListWidget.php
+++ b/src/Plugin/Field/FieldWidget/Select2BoxesAutocompleteListWidget.php
@@ -2,9 +2,11 @@
 
 namespace Drupal\select2boxes\Plugin\Field\FieldWidget;
 
+use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsSelectWidget;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\select2boxes\MinSearchLengthTrait;
 
 /**
@@ -31,17 +33,6 @@ class Select2BoxesAutocompleteListWidget extends OptionsSelectWidget {
   use MinSearchLengthTrait;
 
   /**
-   * Flags module's sub-modules list.
-   *
-   * @var array
-   */
-  protected static $flagsSubModules = [
-    'flags_country',
-    'flags_language',
-    'flags_languagefield',
-  ];
-
-  /**
    * {@inheritdoc}
    */
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
@@ -97,35 +88,26 @@ class Select2BoxesAutocompleteListWidget extends OptionsSelectWidget {
       && in_array($this->fieldDefinition->getType(), $types)
       && $this->getThirdPartySetting('select2boxes', 'enable_flags') == '1'
     ) {
-      // Enable flags only if at least one of the Flags sub-modules enabled.
-      $flag = FALSE;
-      foreach (static::$flagsSubModules as $module) {
-        if (\Drupal::moduleHandler()->moduleExists($module)) {
-          $flag = TRUE; break;
-        }
+      // Create a map of country or language dependent classes.
+      $flags = [];
+      $mapper = $this->fieldDefinition->getType() == 'country'
+        ? \Drupal::service('flags.mapping.country')
+        : \Drupal::service('flags.mapping.language');
+      foreach (array_keys($element['#options']) as $key) {
+        $flags[$key] = [
+          'flag',
+          'flag-' . $mapper->map($key),
+          $mapper->getExtraClasses()[0],
+        ];
       }
-      if ($flag) {
-        // Create a map of country or language dependent classes.
-        $flags = [];
-        $mapper = $this->fieldDefinition->getType() == 'country'
-          ? \Drupal::service('flags.mapping.country')
-          : \Drupal::service('flags.mapping.language');
-        foreach (array_keys($element['#options']) as $key) {
-          $flags[$key] = [
-            'flag',
-            'flag-' . $mapper->map($key),
-            $mapper->getExtraClasses()[0],
-          ];
-        }
-        // Merge these values to have all countries
-        // and languages flags in the same place to prevent missing flags icons.
-        if (!isset($element['#attached']['drupalSettings']['flagsClasses'])) {
-          $element['#attached']['drupalSettings']['flagsClasses'] = [];
-        }
-        $element['#attached']['drupalSettings']['flagsClasses'] += $flags;
-        $element['#attached']['drupalSettings']['flagsFields'][$this->fieldDefinition->getName()] = TRUE;
-        $element['#attached']['library'][] = 'flags/flags';
+      // Merge these values to have all countries
+      // and languages flags in the same place to prevent missing flags icons.
+      if (!isset($element['#attached']['drupalSettings']['flagsClasses'])) {
+        $element['#attached']['drupalSettings']['flagsClasses'] = [];
       }
+      $element['#attached']['drupalSettings']['flagsClasses'] += $flags;
+      $element['#attached']['drupalSettings']['flagsFields'][$this->fieldDefinition->getName()] = TRUE;
+      $element['#attached']['library'][] = 'flags/flags';
     }
   }
 
