diff --git a/inline_entity_form.module b/inline_entity_form.module
index d5fb20a..9b7ad71 100644
--- a/inline_entity_form.module
+++ b/inline_entity_form.module
@@ -467,32 +467,71 @@ function inline_entity_form_field_widget_form(&$form, &$form_state, $field, $ins
       return array();
     }
 
-    $form_state['inline_entity_form'][$ief_id]['form settings'] = array(
-      'bundle' => $bundle,
-    );
+    // Multiple blundles handling : Choose the bundle first.
+    if (empty($items) && empty($form_state['inline_entity_form'][$ief_id]['form']) && count($settings['create_bundles']) && count($settings['create_bundles']) > 1) {
+      $element['actions'] = array(
+        '#attributes' => array('class' => array('container-inline')),
+        '#type' => 'container',
+        '#weight' => 100,
+      );
+
+      $bundles = array();
+      foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) {
+        if (in_array($bundle_name, $settings['create_bundles'])) {
+          $bundles[$bundle_name] = $bundle_info['label'];
+        }
+      }
+
+      $element['actions']['bundle'] = array(
+        '#type' => 'select',
+        '#options' => $bundles,
+      );
+
+      $element['actions']['ief_add'] = array(
+        '#type' => 'submit',
+        '#value' => t('Add new @type_singular', array('@type_singular' => $labels['singular'])),
+        '#name' => 'ief-' . $ief_id . '-add',
+        '#limit_validation_errors' => array(array_merge($parents, array('actions'))),
+        '#ajax' => array(
+          'callback' => 'inline_entity_form_get_element',
+          'wrapper' => $wrapper,
+        ),
+        '#submit' => array('inline_entity_form_open_form'),
+        '#ief_form' => 'add',
+      );
 
-    $element['form'] = array(
-      '#type' => 'container',
-      '#op' => 'add',
-      // Used by Field API and controller methods to find the relevant
-      // values in $form_state.
-      '#parents' => array_merge($parents, array('form')),
-      // Pass the current entity type.
-      '#entity_type' => $settings['entity_type'],
-      // Pass the langcode of the parent entity,
-      '#parent_language' => $parent_langcode,
-      // Identifies the IEF widget to which the form belongs.
-      '#ief_id' => $ief_id,
-    );
-    if (!empty($form_state['inline_entity_form'][$ief_id]['entities'])) {
-      $element['form']['#op'] = 'edit';
-      $element['form']['#entity'] = $form_state['inline_entity_form'][$ief_id]['entities'][0]['entity'];
-      $element['form']['#ief_row_delta'] = 0;
     }
+    else {
+      // There's a form open, show it.
+      if (!isset($form_state['inline_entity_form'][$ief_id]['form settings'])) {
+        $form_state['inline_entity_form'][$ief_id]['form settings'] = array(
+          'bundle' => $bundle,
+        );
+      }
+
+      $element['form'] = array(
+        '#type' => 'container',
+        '#op' => 'add',
+        // Used by Field API and controller methods to find the relevant
+        // values in $form_state.
+        '#parents' => array_merge($parents, array('form')),
+        // Pass the current entity type.
+        '#entity_type' => $settings['entity_type'],
+        // Pass the langcode of the parent entity,
+        '#parent_language' => $parent_langcode,
+        // Identifies the IEF widget to which the form belongs.
+        '#ief_id' => $ief_id,
+      );
+      if (!empty($form_state['inline_entity_form'][$ief_id]['entities'])) {
+        $element['form']['#op'] = 'edit';
+        $element['form']['#entity'] = $form_state['inline_entity_form'][$ief_id]['entities'][0]['entity'];
+        $element['form']['#ief_row_delta'] = 0;
+      }
 
-    $element['form'] = inline_entity_form_entity_form($controller, $element['form'], $form_state);
-    // Hide all actions, the widget form behaves like a part of the main form.
-    $element['form']['actions']['#access'] = FALSE;
+      $element['form'] = inline_entity_form_entity_form($controller, $element['form'], $form_state);
+      // Hide all actions, the widget form behaves like a part of the main form.
+      $element['form']['actions']['#access'] = FALSE;
+    }
   }
   else {
     // Build the "Multiple value" widget.
