diff --git a/src/Form/EntityInlineForm.php b/src/Form/EntityInlineForm.php
index 321dbed..70d59de 100644
--- a/src/Form/EntityInlineForm.php
+++ b/src/Form/EntityInlineForm.php
@@ -138,13 +138,28 @@ class EntityInlineForm implements InlineFormInterface {
   /**
    * {@inheritdoc}
    */
+  public static function getOperation($entity_form, $default_operation = 'default') {
+    $display_mode = $entity_form['#ief_display_mode']->getMode();
+    return empty($entity_form['#entity']->getEntityType()->getFormClass($display_mode)) ? $default_operation : $display_mode;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function entityForm($entity_form, FormStateInterface $form_state) {
-    $operation = 'default';
+    $display_mode = $entity_form['#ief_display_mode']->getMode();
+    $operation = static::getOperation($entity_form);
+
     $controller = $this->entityManager->getFormObject($entity_form['#entity']->getEntityTypeId(), $operation);
     $controller->setEntity($entity_form['#entity']);
     $child_form_state = $this->buildChildFormState($controller, $form_state, $entity_form['#entity'], $operation);
 
-    $entity_form = $controller->buildForm($entity_form, $child_form_state);
+    if ($operation === $display_mode) {
+      $entity_form = $controller->buildForm($entity_form, $child_form_state);
+    }
+    else {
+      $entity_form['#ief_display_mode']->buildForm($entity_form['#entity'], $entity_form, $child_form_state);
+    }
 
     if (!$entity_form['#display_actions']) {
       unset($entity_form['actions']);
@@ -187,7 +202,7 @@ class EntityInlineForm implements InlineFormInterface {
     if ($validate) {
       /** @var \Drupal\Core\Entity\EntityInterface $entity */
       $entity = $entity_form['#entity'];
-      $operation = 'default';
+      $operation = static::getOperation($entity_form);
 
       $controller = \Drupal::entityManager()
         ->getFormObject($entity->getEntityTypeId(), $operation);
@@ -226,7 +241,7 @@ class EntityInlineForm implements InlineFormInterface {
   public static function entityFormSubmit(&$entity_form, FormStateInterface $form_state) {
     /** @var \Drupal\Core\Entity\EntityInterface $entity */
     $entity = $entity_form['#entity'];
-    $operation = 'default';
+    $operation = static::getOperation($entity_form);
     $controller = \Drupal::entityManager()->getFormObject($entity->getEntityTypeId(), $operation);
     $controller->setEntity($entity);
 
diff --git a/src/InlineFormInterface.php b/src/InlineFormInterface.php
index ab39e3c..1be6a30 100644
--- a/src/InlineFormInterface.php
+++ b/src/InlineFormInterface.php
@@ -78,6 +78,14 @@ interface InlineFormInterface extends EntityHandlerInterface {
   public function entityTypeId();
 
   /**
+   * Returns the id of entity type managed by this handler.
+   *
+   * @return string
+   *   The [entity form] operation name
+   */
+  public static function getOperation($entity_form, $default_operation = 'default');
+
+  /**
    * Returns the entity form to be shown through the IEF widget.
    *
    * When adding data to $form_state it should be noted that there can be
diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php b/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
index 4cc2db4..d3949cd 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\inline_entity_form\Plugin\Field\FieldWidget;
 
+use Drupal\Core\Entity\Display\EntityFormDisplayInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
@@ -152,6 +153,7 @@ abstract class InlineEntityFormBase extends WidgetBase implements ContainerFacto
       'override_labels' => FALSE,
       'label_singular' => '',
       'label_plural' => '',
+      'display_mode' => NULL,
     ];
   }
 
@@ -187,6 +189,18 @@ abstract class InlineEntityFormBase extends WidgetBase implements ContainerFacto
       ),
     );
 
+    $entity_form_displays = $this->getDisplayModes();
+    $element['display_mode'] = array(
+      '#type' => 'select',
+      '#title' => $this->t('Display mode'),
+      '#default_value' => $this->getSetting('display_mode')
+        ? $this->getSetting('display_mode')
+        : key($entity_form_displays),
+      '#options' => array_map(function(EntityFormDisplayInterface $item) {
+        return $item->getMode();
+      },$entity_form_displays)
+    );
+
     return $element;
   }
 
@@ -209,6 +223,41 @@ abstract class InlineEntityFormBase extends WidgetBase implements ContainerFacto
   }
 
   /**
+   * Returns an array of entity form display entities to be used as options in
+   * the widget settings form.
+   *
+   * @return \Drupal\Core\Entity\Display\EntityFormDisplayInterface[]
+   */
+  protected function getDisplayModes() {
+    return $this->entityManager
+      ->getStorage('entity_form_display')
+      ->loadByProperties([
+        'targetEntityType' => $this->iefHandler->entityTypeId()
+      ]);
+  }
+
+  /**
+   * Returns the entity form display entity selected in the settings widget.
+   * If the display mode doesn't exist in the available modes list then return
+   * the first mode in the list.
+   *
+   * @return \Drupal\Core\Entity\Display\EntityFormDisplayInterface
+   */
+  protected function getDisplayMode() {
+    $display_mode_name = $this->getSetting('display_mode');
+    $display_modes = $this->getDisplayModes();
+    if (!isset($display_modes[$display_mode_name])) {
+      $display_mode = current($display_modes);
+      $display_mode_name = $display_mode->getMode();
+      $this->setSetting('display_mode', $display_mode_name);
+    }
+    else {
+      $display_mode = $display_modes[$display_mode_name];
+    }
+    return $display_mode;
+  }
+
+  /**
    * Returns an array of entity type labels to be included in the UI text.
    *
    * @return array
@@ -288,6 +337,8 @@ abstract class InlineEntityFormBase extends WidgetBase implements ContainerFacto
       // access to those in static callbacks (#process, ...) so let's add
       // them here.
       '#ief_labels' => $this->labels(),
+      // Pass the display mode to the entity form handler
+      '#ief_display_mode' => $this->getDisplayMode(),
       // Identifies the IEF widget to which the form belongs.
       '#ief_id' => $this->getIefId(),
       // Add the pre_render callback that powers the #fieldset form element key,
