diff --git a/composer.json b/composer.json
index 2174fcb..64d42f4 100644
--- a/composer.json
+++ b/composer.json
@@ -27,10 +27,14 @@
   },
   "license": "GPL-2.0+",
   "minimum-stability": "dev",
-  "require": { },
-  "extra": {
-    "branch-alias": {
-      "dev-8.x-1.x": "8.1.x-dev"
-    }
+  "require": {
+    "drupal/core": "~8.4"
+  },
+  "require-dev": {
+    "drupal/token": "~1.0",
+    "drupal/inline_entity_form": "~1.0",
+    "drupal/paragraphs": "~1.0",
+    "drupal/embed": "~1.0",
+    "drupal/entity_embed": "~1.0"
   }
 }
diff --git a/config/schema/entity_browser.schema.yml b/config/schema/entity_browser.schema.yml
index a45229e..ae111ae 100644
--- a/config/schema/entity_browser.schema.yml
+++ b/config/schema/entity_browser.schema.yml
@@ -233,3 +233,17 @@ field.widget.settings.entity_browser_file:
 views.display.entity_browser:
   type: views_display
   label: 'Entity browser display options'
+
+views.argument_default.entity_browser_widget_context:
+  type: mapping
+  label: 'Entity Browser Context'
+  mapping:
+    context_key:
+      type: string
+      label: 'Context key'
+    fallback:
+      type: string
+      label: 'Fallback value'
+    multiple:
+      type: string
+      label: 'Multiple values'
diff --git a/entity_browser.info.yml b/entity_browser.info.yml
index 2ae55d6..3369d75 100644
--- a/entity_browser.info.yml
+++ b/entity_browser.info.yml
@@ -8,4 +8,6 @@ test_dependencies:
   - inline_entity_form:inline_entity_form
   - drupal:media (>= 8.4)
   - paragraphs:paragraphs
+  - embed:embed
+  - entity_embed:entity_embed
 configure: entity.entity_browser.collection
diff --git a/entity_browser.module b/entity_browser.module
index d87b874..baa0de5 100644
--- a/entity_browser.module
+++ b/entity_browser.module
@@ -168,3 +168,29 @@ function entity_browser_file_validate_image_resolution(FileInterface $file, $max

   return $errors;
 }
+
+/**
+ * Implements hook_form_BASE_FORM_ID_alter().
+ */
+function entity_browser_form_entity_embed_dialog_alter(&$form, FormStateInterface $form_state) {
+
+  // Add contextual information to entity browser's widget context array.
+  if (!empty($form['entity_browser']['#entity_browser'])) {
+    $embed_button = $form_state->get('embed_button');
+    $form['entity_browser']['#widget_context']['embed_button_id'] = $embed_button->id();
+
+    if (empty($form['entity_browser']['#widget_context'])) {
+      $form['entity_browser']['#widget_context'] = [];
+    }
+
+    $type_settings = $embed_button->getTypeSettings();
+
+    if (!empty($type_settings['entity_type'])) {
+      $form['entity_browser']['#widget_context']['target_entity_type'] = $type_settings['entity_type'];
+    }
+
+    if (!empty($type_settings['bundles'])) {
+      $form['entity_browser']['#widget_context']['target_bundles'] = $type_settings['bundles'];
+    }
+  }
+}
diff --git a/modules/entity_form/entity_browser_entity_form.module b/modules/entity_form/entity_browser_entity_form.module
index 08088b3..32db1cb 100644
--- a/modules/entity_form/entity_browser_entity_form.module
+++ b/modules/entity_form/entity_browser_entity_form.module
@@ -51,11 +51,20 @@ function entity_browser_entity_form_inline_entity_form_reference_form_alter(&$re
     $cardinality = $instance->getFieldStorageDefinition()->get('cardinality') - $count_existing_selection;
   }

+  $bundles = $reference_form['entity_id']['#selection_settings']['target_bundles'];
+  $target_entity_type = $reference_form['entity_id']['#target_type'];
   unset($reference_form['entity_id']);
   $reference_form['entity_browser'] = [
     '#type' => 'entity_browser',
     '#entity_browser' => $entity_browser_id,
     '#cardinality' => $cardinality,
+    '#entity_browser_validators' => [
+      'entity_type' => ['type' => $target_entity_type],
+    ],
+    '#widget_context' => [
+      'target_bundles' => $bundles,
+      'target_entity_type' => $target_entity_type,
+    ],
   ];
   $reference_form['#attached']['library'][] = 'entity_browser_entity_form/ief_autocomplete';
   $reference_form['actions']['ief_reference_save']['#ajax']['event'] = 'entities-selected';
diff --git a/src/Plugin/Field/FieldWidget/EntityReferenceBrowserWidget.php b/src/Plugin/Field/FieldWidget/EntityReferenceBrowserWidget.php
index 62b2335..e476868 100644
--- a/src/Plugin/Field/FieldWidget/EntityReferenceBrowserWidget.php
+++ b/src/Plugin/Field/FieldWidget/EntityReferenceBrowserWidget.php
@@ -617,11 +617,16 @@ class EntityReferenceBrowserWidget extends WidgetBase implements ContainerFactor
    *   Data that should persist after the Entity Browser is rendered.
    */
   protected function getPersistentData() {
+    $settings = $this->fieldDefinition->getSettings();
+    $handler = $settings['handler_settings'];
     return [
       'validators' => [
-        'entity_type' => ['type' => $this->fieldDefinition->getFieldStorageDefinition()->getSetting('target_type')],
+        'entity_type' => ['type' => $settings['target_type']],
+      ],
+      'widget_context' => [
+        'target_bundles' => !empty($handler['target_bundles']) ? $handler['target_bundles'] : [],
+        'target_entity_type' => $settings['target_type'],
       ],
-      'widget_context' => [],
     ];
   }

diff --git a/src/Plugin/views/argument_default/EntityBrowserWidgetContext.php b/src/Plugin/views/argument_default/EntityBrowserWidgetContext.php
new file mode 100644
index 0000000..97604f9
--- /dev/null
+++ b/src/Plugin/views/argument_default/EntityBrowserWidgetContext.php
@@ -0,0 +1,126 @@
+<?php
+
+namespace Drupal\entity_browser\Plugin\views\argument_default;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface;
+use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * The entity browser widget context argument default handler.
+ *
+ * @ViewsArgumentDefault(
+ *   id = "entity_browser_widget_context",
+ *   title = @Translation("Entity Browser Context")
+ * )
+ */
+class EntityBrowserWidgetContext extends ArgumentDefaultPluginBase {
+
+  /**
+   * The selection storage.
+   *
+   * @var \Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface
+   */
+  protected $selectionStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, KeyValueStoreExpirableInterface $selection_storage) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->selectionStorage = $selection_storage;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity_browser.selection_storage')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['context_key'] = ['default' => 'target_bundles'];
+    $options['fallback'] = ['default' => 'all'];
+    $options['multiple'] = ['default' => 'or'];
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    parent::buildOptionsForm($form, $form_state);
+    $form['context_key'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Context key'),
+      '#description' => $this->t('The key within the widget context.'),
+      '#default_value' => $this->options['context_key'],
+    ];
+    $form['fallback'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Fallback value'),
+      '#description' => $this->t('The fallback value to use when the context is not present. (ex: "all")'),
+      '#default_value' => $this->options['fallback'],
+    ];
+    $form['multiple'] = [
+      '#type' => 'radios',
+      '#title' => $this->t('Multiple values'),
+      '#description' => $this->t('Conjunction to use when handling multiple values. NOTE: for multiple values to work, at the bottom of this form expand the "More" fieldset and and check "Allow multiple values".'),
+      '#default_value' => $this->options['multiple'],
+      '#options' => [
+        'or' => $this->t('OR'),
+        'and' => $this->t('AND'),
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access() {
+    return $this->view->getDisplay()->pluginId === 'entity_browser';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getArgument() {
+    $current_request = $this->view->getRequest();
+    $context_key = $this->options['context_key'];
+    $argument = $this->options['fallback'];
+    // Check if the widget context is available.
+    if (!empty($context_key) && $current_request->query->has('uuid')) {
+      $uuid = $current_request->query->get('uuid');
+      if ($storage = $this->selectionStorage->get($uuid)) {
+        if (isset($storage['widget_context']) && !empty($storage['widget_context'][$context_key])) {
+          $value = $storage['widget_context'][$context_key];
+          if (is_string($value)) {
+            $argument = $value;
+          }
+          // If the context value is an array, test that it can be imploded.
+          elseif (is_array($value)) {
+            $non_scalar = array_filter($value, function ($item) {
+              return !is_scalar($item);
+            });
+            if (empty($non_scalar)) {
+              $conjunction = ($this->options['multiple'] == 'and') ? ',' : '+';
+              $argument = implode($conjunction, $value);
+            }
+          }
+        }
+      }
+    }
+    return $argument;
+  }
+
+}
