diff --git a/src/Plugin/EntityBrowser/SelectionDisplay/NoDisplay.php b/src/Plugin/EntityBrowser/SelectionDisplay/NoDisplay.php
index 7770166..05d8843 100644
--- a/src/Plugin/EntityBrowser/SelectionDisplay/NoDisplay.php
+++ b/src/Plugin/EntityBrowser/SelectionDisplay/NoDisplay.php
@@ -28,7 +28,11 @@ class NoDisplay extends SelectionDisplayBase {
    * {@inheritdoc}
    */
   public function submit(array &$form, FormStateInterface $form_state) {
-    $this->selectionDone($form_state);
+    // Only finish selection if the form was submitted using main submit
+    // element. This allows widgets to build multi-step workflows.
+    if (!empty($form_state->getTriggeringElement()['#eb_widget_main_submit'])) {
+      $this->selectionDone($form_state);
+    }
   }
 
 }
diff --git a/tests/modules/entity_browser_test/config/install/entity_browser.browser.multiple_submit_example.yml b/tests/modules/entity_browser_test/config/install/entity_browser.browser.multiple_submit_example.yml
new file mode 100644
index 0000000..6a96a8e
--- /dev/null
+++ b/tests/modules/entity_browser_test/config/install/entity_browser.browser.multiple_submit_example.yml
@@ -0,0 +1,25 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - entity_browser_test
+name: multiple_submit_example
+label: 'Multiple submit example'
+display: iframe
+display_configuration:
+  width: '650'
+  height: '500'
+  link_text: 'Select entities'
+  auto_open: false
+selection_display: no_display
+selection_display_configuration: {  }
+widget_selector: single
+widget_selector_configuration: {  }
+widgets:
+  726ded86-f5ab-458d-8556-989059287346:
+    settings:
+      submit_text: 'Select entities'
+    uuid: 726ded86-f5ab-458d-8556-989059287346
+    weight: 1
+    label: multiple_submit_test_widget
+    id: multiple_submit_test_widget
diff --git a/tests/modules/entity_browser_test/config/schema/entity_browser_test.schema.yml b/tests/modules/entity_browser_test/config/schema/entity_browser_test.schema.yml
index 3eb0256..12635dc 100644
--- a/tests/modules/entity_browser_test/config/schema/entity_browser_test.schema.yml
+++ b/tests/modules/entity_browser_test/config/schema/entity_browser_test.schema.yml
@@ -8,3 +8,11 @@ entity_browser.browser.widget.dummy:
     text:
       type: string
       label: 'Text'
+
+entity_browser.browser.widget.multiple_submit_test_widget:
+  type: mapping
+  label: 'Multiple submit widget configuration'
+  mapping:
+    submit_text:
+      type: string
+      label: 'Submit button text'
diff --git a/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/MultipleSubmitTestWidget.php b/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/MultipleSubmitTestWidget.php
new file mode 100644
index 0000000..51a982e
--- /dev/null
+++ b/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/MultipleSubmitTestWidget.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Drupal\entity_browser_test\Plugin\EntityBrowser\Widget;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\entity_browser\WidgetBase;
+
+/**
+ * Test widget with multiple submit buttons for test purposes.
+ *
+ * @EntityBrowserWidget(
+ *   id = "multiple_submit_test_widget",
+ *   label = @Translation("Multiple submit test widget"),
+ *   description = @Translation("Test widget with multiple submit buttons only for testing purposes.")
+ * )
+ */
+class MultipleSubmitTestWidget extends WidgetBase {
+
+  /**
+   * Entity to be returned.
+   *
+   * @var \Drupal\Core\Entity\EntityInterface
+   */
+  public $entity;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getForm(array &$original_form, FormStateInterface $form_state, array $additional_widget_parameters) {
+    $form = parent::getForm($original_form, $form_state, $additional_widget_parameters);
+
+    $form['submit_second'] = [
+      '#type' => 'submit',
+      '#value' => $this->t('Second submit button'),
+    ];
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function prepareEntities(array $form, FormStateInterface $form_state) {
+    return $form_state->getValue('dummy_entities', []);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submit(array &$element, array &$form, FormStateInterface $form_state) {
+    if ($this->entity) {
+      $this->selectEntities([$this->entity], $form_state);
+    }
+  }
+
+}
diff --git a/tests/src/FunctionalJavascript/EntityBrowserTest.php b/tests/src/FunctionalJavascript/EntityBrowserTest.php
index c0a8675..5662e24 100644
--- a/tests/src/FunctionalJavascript/EntityBrowserTest.php
+++ b/tests/src/FunctionalJavascript/EntityBrowserTest.php
@@ -167,4 +167,47 @@ class EntityBrowserTest extends EntityBrowserJavascriptTestBase {
 
   }
 
+  /**
+   * Tests NoDisplay selection display plugin.
+   */
+  public function testNoDisplaySelectionDisplay() {
+    /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */
+    $form_display = $this->container->get('entity_type.manager')
+      ->getStorage('entity_form_display')
+      ->load('node.article.default');
+
+    $form_display->setComponent('field_reference', [
+      'type' => 'entity_browser_entity_reference',
+      'settings' => [
+        'entity_browser' => 'multiple_submit_example',
+        'field_widget_display' => 'label',
+        'open' => TRUE,
+      ],
+    ])->save();
+
+    $account = $this->drupalCreateUser([
+      'access multiple_submit_example entity browser pages',
+      'create article content',
+      'access content',
+    ]);
+    $this->drupalLogin($account);
+
+    $this->drupalGet('node/add/article');
+    // Open the entity browser widget form.
+    $this->getSession()->getPage()->clickLink('Select entities');
+    $this->getSession()->switchToIFrame('entity_browser_iframe_multiple_submit_example');
+
+    // Click the second submit button to make sure the widget does not close.
+    $this->getSession()->getPage()->pressButton('Second submit button');
+
+    // Check that the entity browser widget is still open.
+    $this->getSession()->getPage()->hasButton('Second submit button');
+
+    // Click the primary submit button to close the widget.
+    $this->getSession()->getPage()->pressButton('Select entities');
+
+    // Check that the entity browser widget is closed.
+    $this->assertSession()->buttonNotExists('Second submit button');
+  }
+
 }
