diff --git a/js/entity_browser.multi_step_display.js b/js/entity_browser.multi_step_display.js
index 2360f02..69d7c4c 100644
--- a/js/entity_browser.multi_step_display.js
+++ b/js/entity_browser.multi_step_display.js
@@ -7,6 +7,13 @@
   'use strict';
 
   /**
+   * Queue container for loading of entities in selection display.
+   *
+   * @type {Array}
+   */
+  var load_entity_queue = [];
+
+  /**
    * Registers behaviours related to selected entities.
    */
   Drupal.behaviors.entityBrowserMultiStepDisplay = {
@@ -20,9 +27,10 @@
       var $toggle = $('.entity-browser-show-selection');
 
       function setToggleText() {
-        if($entities.css('display') == 'none') {
+        if ($entities.css('display') == 'none') {
           $toggle.val(Drupal.t('Show selected'));
-        } else {
+        }
+        else {
           $toggle.val(Drupal.t('Hide selected'));
         }
       }
@@ -33,6 +41,9 @@
       });
 
       setToggleText();
+
+      $entities.once()
+        .bind('load-entity', Drupal.entityBrowserMultiStepDisplay.loadEntity);
     }
   };
 
@@ -53,4 +64,101 @@
     }
   };
 
+  /**
+   * Handle load entity over Ajax Request in selection display.
+   *
+   * @param {object} event
+   *   Event object.
+   * @param {string} entity_id
+   *   Entity Id that should be loaded into selection list.
+   */
+  Drupal.entityBrowserMultiStepDisplay.loadEntity = function (event, entity_id) {
+    if (entity_id) {
+      Drupal.entityBrowserMultiStepDisplay.addEntityToQueue(this, entity_id);
+    }
+
+    Drupal.entityBrowserMultiStepDisplay.loadQueuedEntities(this, typeof entity_id !== 'undefined');
+  };
+
+  /**
+   * Queue entity for loading over Ajax.
+   *
+   * @param {object} entities_list_element
+   *   Object that represents entity list, that contains selected entities.
+   * @param {string} entity_id
+   *   Entity ID that should be added to selection.
+   */
+  Drupal.entityBrowserMultiStepDisplay.addEntityToQueue = function (entities_list_element, entity_id) {
+    var entities_list = $(entities_list_element);
+
+    // Add proxy element that will be replaced with returned Ajax Command.
+    var proxy_element = jQuery('<div></div>').uniqueId();
+    entities_list.append(proxy_element);
+
+    load_entity_queue.push(
+      {
+        entity_id: entity_id,
+        proxy_id: proxy_element.attr('id')
+      }
+    );
+  };
+
+  /**
+   * Trigger loading of entities over Ajax.
+   *
+   * @param {object} entities_list_element
+   *   Object that represents entity list, that contains selected entities.
+   * @param {boolean} entity_queued
+   *   Is that loading after new element is queued.
+   */
+  Drupal.entityBrowserMultiStepDisplay.loadQueuedEntities = function (entities_list_element, entity_queued) {
+    var entities_list = $(entities_list_element);
+
+    var handler_element = entities_list.siblings('[name=ajax_action_handler]');
+    var runningAjax = Drupal.entityBrowserMultiStepDisplay.isAjaxRunning(handler_element[0], 'selection_display_action');
+
+    if (!runningAjax && load_entity_queue.length > 0) {
+      // Create command for Backend (PHP) to handle Ajax Request.
+      var command = {
+        op: 'add',
+        entity_ids: load_entity_queue
+      };
+
+      handler_element.val(JSON.stringify(command));
+
+      // Clear Queue after command is set to handler element.
+      load_entity_queue = [];
+
+      // Trigger event to execute event with defined command.
+      handler_element.trigger('selection_display_action');
+    }
+    else {
+      if (!entity_queued && load_entity_queue.length > 0) {
+        setTimeout(jQuery.proxy(Drupal.entityBrowserMultiStepDisplay.loadEntity, entities_list_element), 200);
+      }
+    }
+  };
+
+  /**
+   * Search is there current Ajax request executing for current event.
+   *
+   * @param handler_element
+   *   Element on what event is triggered.
+   * @param event_name
+   *   Event name.
+   *
+   * @returns {boolean}
+   */
+  Drupal.entityBrowserMultiStepDisplay.isAjaxRunning = function (handler_element, event_name) {
+    var ajax_list = Drupal.ajax.instances;
+
+    for (var i = 0; i < ajax_list.length; i++) {
+      if (ajax_list[i] && ajax_list[i].event === event_name && ajax_list[i].element === handler_element && ajax_list[i].ajaxing) {
+        return true;
+      }
+    }
+
+    return false;
+  }
+
 }(jQuery, Drupal));
diff --git a/modules/example/config/install/core.entity_form_display.node.entity_browser_test.default.yml b/modules/example/config/install/core.entity_form_display.node.entity_browser_test.default.yml
index a12307c..8d0a73e 100644
--- a/modules/example/config/install/core.entity_form_display.node.entity_browser_test.default.yml
+++ b/modules/example/config/install/core.entity_form_display.node.entity_browser_test.default.yml
@@ -5,6 +5,7 @@ dependencies:
     - field.field.node.entity_browser_test.body
     - field.field.node.entity_browser_test.field_files
     - field.field.node.entity_browser_test.field_files1
+    - field.field.node.entity_browser_test.field_files_over_ajax
     - field.field.node.entity_browser_test.field_image_browser
     - field.field.node.entity_browser_test.field_nodes
     - node.type.entity_browser_test
@@ -55,6 +56,18 @@ content:
       field_widget_edit: true
       field_widget_remove: true
     third_party_settings: {  }
+  field_files_over_ajax:
+    weight: 36
+    settings:
+      entity_browser: test_files_ajax
+      field_widget_display: label
+      field_widget_edit: true
+      field_widget_remove: true
+      selection_mode: selection_edit
+      open: false
+      field_widget_display_settings: {  }
+    third_party_settings: {  }
+    type: entity_browser_entity_reference
   field_image_browser:
     weight: 35
     settings:
diff --git a/modules/example/config/install/core.entity_view_display.node.entity_browser_test.default.yml b/modules/example/config/install/core.entity_view_display.node.entity_browser_test.default.yml
index 12bb96b..c4b8a3b 100644
--- a/modules/example/config/install/core.entity_view_display.node.entity_browser_test.default.yml
+++ b/modules/example/config/install/core.entity_view_display.node.entity_browser_test.default.yml
@@ -5,6 +5,7 @@ dependencies:
     - field.field.node.entity_browser_test.body
     - field.field.node.entity_browser_test.field_files
     - field.field.node.entity_browser_test.field_files1
+    - field.field.node.entity_browser_test.field_files_over_ajax
     - field.field.node.entity_browser_test.field_image_browser
     - field.field.node.entity_browser_test.field_nodes
     - node.type.entity_browser_test
@@ -40,6 +41,13 @@ content:
       link: true
     third_party_settings: {  }
     type: entity_reference_label
+  field_files_over_ajax:
+    weight: 106
+    label: above
+    settings:
+      link: true
+    third_party_settings: {  }
+    type: entity_reference_label
   field_image_browser:
     weight: 105
     label: above
diff --git a/modules/example/config/install/entity_browser.browser.test_files_ajax.yml b/modules/example/config/install/entity_browser.browser.test_files_ajax.yml
new file mode 100644
index 0000000..426c132
--- /dev/null
+++ b/modules/example/config/install/entity_browser.browser.test_files_ajax.yml
@@ -0,0 +1,45 @@
+langcode: und
+status: true
+dependencies:
+  enforced:
+    module:
+      - entity_browser_example
+  module:
+    - views
+name: test_files_ajax
+label: 'Test entity browser for files (with auto loading)'
+display: iframe
+display_configuration:
+  width: '650'
+  height: '500'
+  link_text: 'Select entities'
+  auto_open: false
+selection_display: multi_step_display
+selection_display_configuration:
+  entity_type: node
+  display: label
+  display_settings: {  }
+  select_text: 'Use selected'
+  selection_hidden: false
+widget_selector: tabs
+widget_selector_configuration: {  }
+widgets:
+  a4ad947c-9669-497c-9988-24351955a02f:
+    settings:
+      view: files_entity_browser_ajax
+      view_display: entity_browser_1
+      submit_text: 'Select entities'
+      auto_submit: '1'
+    uuid: a4ad947c-9669-497c-9988-24351955a02f
+    weight: -10
+    label: 'Files listing'
+    id: view
+  735d146c-a4b2-4327-a057-d109e0905e05:
+    settings:
+      upload_location: 'public://'
+      submit_text: 'Select files'
+      auto_submit: 0
+    uuid: 735d146c-a4b2-4327-a057-d109e0905e05
+    weight: -9
+    label: 'Upload files'
+    id: upload
diff --git a/modules/example/config/install/field.field.node.entity_browser_test.field_files_over_ajax.yml b/modules/example/config/install/field.field.node.entity_browser_test.field_files_over_ajax.yml
new file mode 100644
index 0000000..291ad83
--- /dev/null
+++ b/modules/example/config/install/field.field.node.entity_browser_test.field_files_over_ajax.yml
@@ -0,0 +1,24 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - field.storage.node.field_files_over_ajax
+    - node.type.entity_browser_test
+id: node.entity_browser_test.field_files_over_ajax
+field_name: field_files_over_ajax
+entity_type: node
+bundle: entity_browser_test
+label: 'Files (with auto loading)'
+description: ''
+required: false
+translatable: false
+default_value: {  }
+default_value_callback: ''
+settings:
+  handler: 'default:file'
+  handler_settings:
+    target_bundles: null
+    sort:
+      field: _none
+    auto_create: false
+field_type: entity_reference
diff --git a/modules/example/config/install/field.storage.node.field_files_over_ajax.yml b/modules/example/config/install/field.storage.node.field_files_over_ajax.yml
new file mode 100644
index 0000000..bb8a800
--- /dev/null
+++ b/modules/example/config/install/field.storage.node.field_files_over_ajax.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - file
+    - node
+id: node.field_files_over_ajax
+field_name: field_files_over_ajax
+entity_type: node
+type: entity_reference
+settings:
+  target_type: file
+module: core
+locked: false
+cardinality: -1
+translatable: true
+indexes: {  }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/modules/example/config/install/views.view.files_entity_browser_ajax.yml b/modules/example/config/install/views.view.files_entity_browser_ajax.yml
new file mode 100644
index 0000000..9bf93cd
--- /dev/null
+++ b/modules/example/config/install/views.view.files_entity_browser_ajax.yml
@@ -0,0 +1,467 @@
+langcode: en
+status: true
+dependencies:
+  enforced:
+    module:
+      - entity_browser_example
+  module:
+    - entity_browser
+    - file
+    - user
+id: files_entity_browser_ajax
+label: 'Files entity browser (with auto loading)'
+module: views
+description: ''
+tag: ''
+base_table: file_managed
+base_field: fid
+core: 8.x
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: 0
+    display_options:
+      access:
+        type: perm
+        options:
+          perm: 'access content'
+      cache:
+        type: none
+        options: {  }
+      query:
+        type: views_query
+        options:
+          disable_sql_rewrite: false
+          distinct: false
+          replica: false
+          query_comment: ''
+          query_tags: {  }
+      exposed_form:
+        type: basic
+        options:
+          submit_button: Apply
+          reset_button: false
+          reset_button_label: Reset
+          exposed_sorts_label: 'Sort by'
+          expose_sort_order: true
+          sort_asc_label: Asc
+          sort_desc_label: Desc
+      pager:
+        type: full
+        options:
+          items_per_page: 10
+          offset: 0
+          id: 0
+          total_pages: null
+          expose:
+            items_per_page: false
+            items_per_page_label: 'Items per page'
+            items_per_page_options: '5, 10, 25, 50'
+            items_per_page_options_all: false
+            items_per_page_options_all_label: '- All -'
+            offset: false
+            offset_label: Offset
+          tags:
+            previous: '‹ previous'
+            next: 'next ›'
+            first: '« first'
+            last: 'last »'
+          quantity: 9
+      style:
+        type: table
+        options:
+          grouping: {  }
+          row_class: ''
+          default_row_class: true
+          override: true
+          sticky: false
+          caption: ''
+          summary: ''
+          description: ''
+          columns:
+            filename: filename
+            created: created
+            entity_browser_select: entity_browser_select
+            filesize: filesize
+            status: status
+          info:
+            filename:
+              sortable: false
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            created:
+              sortable: false
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            entity_browser_select:
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            filesize:
+              sortable: false
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            status:
+              sortable: false
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+          default: '-1'
+          empty_table: false
+      row:
+        type: fields
+        options:
+          inline: {  }
+          separator: ''
+          hide_empty: false
+          default_field_elements: true
+      fields:
+        entity_browser_select:
+          id: entity_browser_select
+          table: file_managed
+          field: entity_browser_select
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: ''
+          exclude: false
+          alter:
+            alter_text: false
+            text: "<input type=\"hidden\" value=\"bbb\">\naaa\n</input>"
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: null
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: '<script><input>'
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: false
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          entity_type: file
+          plugin_id: entity_browser_select
+        filename:
+          id: filename
+          table: file_managed
+          field: filename
+          entity_type: file
+          entity_field: filename
+          label: ''
+          alter:
+            alter_text: false
+            make_link: false
+            absolute: false
+            trim: false
+            word_boundary: false
+            ellipsis: false
+            strip_tags: false
+            html: false
+          hide_empty: false
+          empty_zero: false
+          link_to_file: true
+          plugin_id: file
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exclude: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_alter_empty: true
+        created:
+          id: created
+          table: file_managed
+          field: created
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: Created
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: null
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          date_format: fallback
+          custom_date_format: ''
+          timezone: ''
+          entity_type: file
+          entity_field: created
+          plugin_id: date
+        filesize:
+          id: filesize
+          table: file_managed
+          field: filesize
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: 'File size'
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: null
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          file_size_display: formatted
+          entity_type: file
+          entity_field: filesize
+          plugin_id: file_size
+        status:
+          id: status
+          table: file_managed
+          field: status
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: Status
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: null
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          entity_type: file
+          entity_field: status
+          plugin_id: file_status
+      filters:
+        filename:
+          id: filename
+          table: file_managed
+          field: filename
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: contains
+          value: ''
+          group: 1
+          exposed: true
+          expose:
+            operator_id: filename_op
+            label: Filename
+            description: ''
+            use_operator: false
+            operator: filename_op
+            identifier: filename
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+              anonymous: '0'
+              administrator: '0'
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          entity_type: file
+          entity_field: filename
+          plugin_id: string
+      sorts:
+        created:
+          id: created
+          table: file_managed
+          field: created
+          order: DESC
+          entity_type: file
+          entity_field: created
+          plugin_id: date
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exposed: false
+          expose:
+            label: ''
+          granularity: second
+      header: {  }
+      footer: {  }
+      empty: {  }
+      relationships: {  }
+      arguments: {  }
+      display_extenders: {  }
+      field_langcode: '***LANGUAGE_language_content***'
+      field_langcode_add_to_query: null
+    cache_metadata:
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url
+        - url.query_args
+        - user.permissions
+      cacheable: false
+      max-age: 0
+      tags: {  }
+  entity_browser_1:
+    display_plugin: entity_browser
+    id: entity_browser_1
+    display_title: 'Entity browser'
+    position: 2
+    display_options:
+      display_extenders: {  }
+      field_langcode: '***LANGUAGE_language_content***'
+      field_langcode_add_to_query: null
+    cache_metadata:
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url
+        - url.query_args
+        - user.permissions
+      cacheable: false
+      max-age: 0
+      tags: {  }
diff --git a/modules/example/entity_browser_example.libraries.yml b/modules/example/entity_browser_example.libraries.yml
new file mode 100644
index 0000000..c9dbb1c
--- /dev/null
+++ b/modules/example/entity_browser_example.libraries.yml
@@ -0,0 +1,4 @@
+multi_step_display_ajax:
+  version: VERSION
+  js:
+    js/multistep-display-ajax.js: {}
diff --git a/modules/example/entity_browser_example.module b/modules/example/entity_browser_example.module
new file mode 100644
index 0000000..0a975c7
--- /dev/null
+++ b/modules/example/entity_browser_example.module
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @file
+ * Hooks for showing tests for entity browser.
+ */
+
+use Drupal\views\ViewExecutable;
+
+/**
+ * Implements hook_views_pre_render().
+ *
+ * Attach event handlers for clicking on view row.
+ */
+function entity_browser_example_views_pre_render(ViewExecutable $view) {
+  if (isset($view) && ($view->storage->id() == 'files_entity_browser_ajax')) {
+    $view->element['#attached']['library'][] = 'entity_browser_example/multi_step_display_ajax';
+  }
+}
diff --git a/modules/example/js/multistep-display-ajax.js b/modules/example/js/multistep-display-ajax.js
new file mode 100644
index 0000000..6bc83a5
--- /dev/null
+++ b/modules/example/js/multistep-display-ajax.js
@@ -0,0 +1,38 @@
+/**
+ * @file
+ *
+ * Adds handling of click event for view in order to demonstrate Ajax actions
+ * for multistep selection display.
+ */
+
+(function ($) {
+
+  'use strict';
+
+  /**
+   * Attaches the behavior of the media entity browser view.
+   */
+  Drupal.behaviors.multiStepAjaxSelection = {
+    attach: function () {
+      jQuery('.view-id-files_entity_browser_ajax td.views-field-filename')
+        .parents('tr')
+        .once()
+        .click(function () {
+          var $row = $(this);
+          var $input = $row.find('input');
+
+          // Here is way, how to trigger loading of entity for multipstep
+          // display over ajax. On multistep display element, "load-entity"
+          // event should be triggered with value for entity that should be
+          // loaded. Value is in format: type:id - for example: file:3
+          $row.parents('form')
+            .find('.entities-list')
+            .trigger('load-entity', $input.val());
+        });
+
+      // Hide Checkboxes -> to make example more compaling.
+      jQuery('.view-id-files_entity_browser_ajax .views-field-entity-browser-select').hide();
+    }
+  };
+
+}(jQuery, Drupal));
diff --git a/src/Plugin/EntityBrowser/SelectionDisplay/MultiStepDisplay.php b/src/Plugin/EntityBrowser/SelectionDisplay/MultiStepDisplay.php
index 1080a21..a9399a5 100644
--- a/src/Plugin/EntityBrowser/SelectionDisplay/MultiStepDisplay.php
+++ b/src/Plugin/EntityBrowser/SelectionDisplay/MultiStepDisplay.php
@@ -2,6 +2,9 @@
 
 namespace Drupal\entity_browser\Plugin\EntityBrowser\SelectionDisplay;
 
+use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Ajax\InvokeCommand;
+use Drupal\Core\Ajax\ReplaceCommand;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\entity_browser\FieldWidgetDisplayManager;
@@ -80,6 +83,12 @@ class MultiStepDisplay extends SelectionDisplayBase {
    * {@inheritdoc}
    */
   public function getForm(array &$original_form, FormStateInterface $form_state) {
+
+    // Check if trigger element is dedicated to handle front-end commands.
+    if (($triggering_element = $form_state->getTriggeringElement()) && $triggering_element['#name'] === 'ajax_action_handler' && !empty($triggering_element['#value'])) {
+      $this->executeJsCommand($form_state);
+    }
+
     $selected_entities = $form_state->get(['entity_browser', 'selected_entities']);
 
     $form = [];
@@ -126,25 +135,145 @@ class MultiStepDisplay extends SelectionDisplayBase {
         ],
       ];
     }
+
+    // Add hidden element used to make execution of front-end commands.
+    $form['ajax_action_handler'] = [
+      '#type' => 'hidden',
+      '#name' => 'ajax_action_handler',
+      '#id' => 'ajax_action_handler',
+      '#attributes' => ['id' => 'ajax_action_handler'],
+      '#ajax' => [
+        'callback' => [get_class($this), 'handleAjaxCommand'],
+        'wrapper' => 'edit-selected',
+        'event' => 'selection_display_action',
+        'progress' => [
+          'type' => 'fullscreen',
+        ],
+      ],
+    ];
+
     $form['use_selected'] = [
       '#type' => 'submit',
       '#value' => $this->t($this->configuration['select_text']),
       '#name' => 'use_selected',
-      '#access' => empty($selected_entities) ? FALSE : TRUE,
     ];
+
     $form['show_selection'] = [
       '#type' => 'button',
       '#value' => $this->t('Show selected'),
       '#attributes' => [
         'class' => ['entity-browser-show-selection'],
       ],
-      '#access' => empty($selected_entities) ? FALSE : TRUE,
     ];
 
     return $form;
   }
 
   /**
+   * Execute command generated by front-end.
+   *
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   Form state object.
+   */
+  protected function executeJsCommand(FormStateInterface $form_state) {
+    $triggering_element = $form_state->getTriggeringElement();
+
+    $command = json_decode($triggering_element['#value'], TRUE);
+    if ($command['op'] === 'add') {
+      $entity_ids = $command['entity_ids'];
+
+      $entities_to_add = [];
+      $added_entities = [];
+
+      // Generate list of entities grouped by type, to speed up loadMultiple.
+      foreach ($entity_ids as $entity_pair_info) {
+        $entity_info = explode(':', $entity_pair_info['entity_id']);
+
+        if (!isset($entities_to_add[$entity_info[0]])) {
+          $entities_to_add[$entity_info[0]] = [];
+        }
+
+        $entities_to_add[$entity_info[0]][] = $entity_info[1];
+      }
+
+      // Load Entities and add into $added_entities, so that we have list of
+      // entities with key - "type:id".
+      foreach ($entities_to_add as $entity_type => $entity_type_ids) {
+        $indexed_entities = $this->entityTypeManager->getStorage($entity_type)
+          ->loadMultiple($entity_type_ids);
+
+        foreach ($indexed_entities as $entity_id => $entity) {
+          $added_entities[implode(':', [
+            $entity_type,
+            $entity_id,
+          ])] = $entity;
+        }
+      }
+
+      // Array is accessed as reference, so that changes are propagated.
+      $selected_entities = &$form_state->get([
+        'entity_browser',
+        'selected_entities',
+      ]);
+
+      // Fill list of selected entities in correct order with loaded entities.
+      // In this case, order is preserved and multiple entities with same ID
+      // can be selected properly.
+      foreach ($entity_ids as $entity_pair_info) {
+        $selected_entities[] = $added_entities[$entity_pair_info['entity_id']];
+      }
+    }
+  }
+
+  /**
+   * Handler to generate Ajax response, after command is executed.
+   *
+   * @param array $form
+   *   Form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   Form state object.
+   *
+   * @return \Drupal\Core\Ajax\AjaxResponse
+   *   Return Ajax response with commands.
+   */
+  public static function handleAjaxCommand(array $form, FormStateInterface $form_state) {
+    $ajax = new AjaxResponse();
+
+    if (($triggering_element = $form_state->getTriggeringElement()) && $triggering_element['#name'] === 'ajax_action_handler' && !empty($triggering_element['#value'])) {
+      $command = json_decode($triggering_element['#value'], TRUE);
+
+      // Entity IDs that are affected by this command.
+      $entity_ids = $command['entity_ids'];
+
+      $selected_entities = &$form_state->get([
+        'entity_browser',
+        'selected_entities',
+      ]);
+
+      // Get entities added by this command and generate JS commands for them.
+      $last_index = count($selected_entities) - count($entity_ids);
+      foreach ($entity_ids as $entity_pair_info) {
+        $last_entity_id = $selected_entities[$last_index]->id();
+
+        $html = drupal_render($form['selection_display']['selected']['items_' . $last_entity_id . '_' . $last_index]);
+        $ajax->addCommand(
+          new ReplaceCommand('div[id="' . $entity_pair_info['proxy_id'] . '"]', trim($html))
+        );
+
+        $last_index++;
+      }
+
+      // Add Invoke command to trigger loading of entities that are queued
+      // during execution of current Ajax request.
+      $ajax->addCommand(
+        new InvokeCommand('.entities-list', 'trigger', ['load-entity'])
+      );
+    }
+
+    return $ajax;
+  }
+
+  /**
    * Submit callback for remove buttons.
    *
    * @param array $form
diff --git a/src/Plugin/EntityBrowser/Widget/View.php b/src/Plugin/EntityBrowser/Widget/View.php
index 2e75b2d..cf34871 100644
--- a/src/Plugin/EntityBrowser/Widget/View.php
+++ b/src/Plugin/EntityBrowser/Widget/View.php
@@ -257,6 +257,7 @@ class View extends WidgetBase implements ContainerFactoryPluginInterface {
   public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
     $values = $form_state->getValues()['table'][$this->uuid()]['form'];
     $this->configuration['submit_text'] = $values['submit_text'];
+    $this->configuration['auto_submit'] = $values['auto_submit'];
     if (!empty($values['view'])) {
       list($view_id, $display_id) = explode('.', $values['view']);
       $this->configuration['view'] = $view_id;
diff --git a/src/WidgetBase.php b/src/WidgetBase.php
index a7c8fb7..d6622d7 100644
--- a/src/WidgetBase.php
+++ b/src/WidgetBase.php
@@ -109,6 +109,8 @@ abstract class WidgetBase extends PluginBase implements WidgetInterface, Contain
    * {@inheritdoc}
    */
   public function getForm(array &$original_form, FormStateInterface $form_state, array $additional_widget_parameters) {
+    $form = [];
+
     // Allow configuration overrides at runtime based on form state to enable
     // use cases where the instance of a widget may have contextual
     // configuration like field settings. "widget_context" doesn't have to be
@@ -116,34 +118,40 @@ abstract class WidgetBase extends PluginBase implements WidgetInterface, Contain
     // overwritten it can not call this method and implement its own logic.
     foreach ($this->defaultConfiguration() as $key => $value) {
       if ($form_state->has(['entity_browser', 'widget_context', $key]) && isset($this->configuration[$key])) {
-        $this->configuration[$key] = $form_state->get(['entity_browser', 'widget_context', $key]);
+        $this->configuration[$key] = $form_state->get([
+          'entity_browser',
+          'widget_context',
+          $key,
+        ]);
       }
     }
 
-    $form['actions'] = [
-      '#type' => 'actions',
-      'submit' => [
-        '#type' => 'submit',
-        '#value' => $this->configuration['submit_text'],
-        '#eb_widget_main_submit' => TRUE,
-        '#attributes' => ['class' => ['is-entity-browser-submit']],
-      ],
-    ];
+    // In case of auto submitting, widget will handle adding entities in JS.
+    if (!$this->configuration['auto_submit']) {
+      $form['actions'] = [
+        '#type' => 'actions',
+        'submit' => [
+          '#type' => 'submit',
+          '#value' => $this->configuration['submit_text'],
+          '#eb_widget_main_submit' => TRUE,
+          '#attributes' => ['class' => ['is-entity-browser-submit']],
+        ],
+      ];
+    }
 
     return $form;
   }
 
-
   /**
    * {@inheritdoc}
    */
   public function defaultConfiguration() {
     return [
       'submit_text' => $this->t('Select entities'),
+      'auto_submit' => 0,
     ];
   }
 
-
   /**
    * {@inheritdoc}
    */
@@ -196,6 +204,12 @@ abstract class WidgetBase extends PluginBase implements WidgetInterface, Contain
       '#default_value' => $this->configuration['submit_text'],
     ];
 
+    $form['auto_submit'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Automatically submit selection'),
+      '#default_value' => $this->configuration['auto_submit'],
+    ];
+
     return $form;
   }
 
