diff --git a/inline_entity_form.module b/inline_entity_form.module
index 5922e0b..9197d9f 100644
--- a/inline_entity_form.module
+++ b/inline_entity_form.module
@@ -340,6 +340,7 @@ function inline_entity_form_settings($field, $instance) {
     'bundles' => array(),
     'create_bundles' => array(),
     'column' => NULL,
+    'column_revision' => NULL,
   );
 
   if ($field['type'] == 'commerce_product_reference') {
@@ -356,6 +357,11 @@ function inline_entity_form_settings($field, $instance) {
     $settings['entity_type'] = $field['settings']['target_type'];
     $settings['column'] = 'target_id';
 
+    // Support revision references in entityreference
+    if (!empty($field['settings']['handler_settings']['reference_revisions'])) {
+      $settings['column_revision'] = 'revision_id';
+    }
+
     if (!empty($field['settings']['handler_settings']['target_bundles'])) {
       $bundles = array_filter($field['settings']['handler_settings']['target_bundles']);
       if (!empty($bundles)) {
@@ -460,21 +466,52 @@ function inline_entity_form_field_widget_form(&$form, &$form_state, $field, $ins
     // Load the entities from the $items array and store them in the form
     // state for further manipulation.
     $form_state['inline_entity_form'][$ief_id]['entities'] = array();
-    $entity_ids = array();
-    foreach ($items as $item) {
-      $entity_ids[] = $item[$settings['column']];
+    if (!empty($settings['column_revision'])) {
+      foreach ($items as $delta => $item) {
+        // @todo Is there a way to load multiple revision at once?
+        // @fixme When using edit current, revision_id can be null the following
+        //   is a quick fix to avoid throwing an error but needs more thought
+        //   e.g. why is revision_id null ?
+        if ($item[$settings['column_revision']]) {
+          $entity = entity_revision_load($settings['entity_type'], $item[$settings['column_revision']]);
+        }
+        else {
+          $entity = entity_load_single($settings['entity_type'], $item[$settings['column']]);
+        }
+        // @note Only add form if we found the entity, otherwise we'll get a
+        //   fatal error when we use entity_extract_ids. An entity might not be
+        //   found if it has been deleted but the reference has not. Entity
+        //   Reference doesn't auto delete references to deleted entities or
+        //   revisions, see https://www.drupal.org/node/1368386
+        if ($entity) {
+          $form_state['inline_entity_form'][$ief_id]['entities'][$delta] = array(
+            'entity' => $entity,
+            'weight' => $delta,
+            'form' => NULL,
+            'needs_save' => FALSE,
+          );
+        }
+      }
     }
+    else {
+      $entity_ids = array();
+      foreach ($items as $item) {
+        $entity_ids[] = $item[$settings['column']];
+      }
 
-    $delta = 0;
-    foreach (entity_load($settings['entity_type'], $entity_ids) as $entity) {
-      $form_state['inline_entity_form'][$ief_id]['entities'][$delta] = array(
-        'entity' => $entity,
-        'weight' => $delta,
-        'form' => NULL,
-        'needs_save' => FALSE,
-      );
+      $delta = 0;
+      foreach (entity_load($settings['entity_type'], $entity_ids) as $entity) {
+        if ($entity) {
+          $form_state['inline_entity_form'][$ief_id]['entities'][$delta] = array(
+            'entity' => $entity,
+            'weight' => $delta,
+            'form' => NULL,
+            'needs_save' => FALSE,
+          );
 
-      $delta++;
+          $delta++;
+        }
+      }
     }
   }
 
@@ -1501,8 +1538,16 @@ function inline_entity_form_field_attach_submit($parent_entity_type, $parent_ent
           $need_reset = true;
         }
 
-        list($entity_id) = entity_extract_ids($entity_type, $item['entity']);
-        $entity_ids[] = array($values['settings']['column'] => $entity_id);
+        list($entity_id, $revision_id) = entity_extract_ids($entity_type, $item['entity']);
+        if (!empty($values['settings']['column_revision'])) {
+          $entity_ids[] = array(
+            $values['settings']['column'] => $entity_id,
+            $values['settings']['column_revision'] => $revision_id,
+          );
+        }
+        else {
+          $entity_ids[] = array($values['settings']['column'] => $entity_id);
+        }
       }
 
       // Prevent the entity from showing up in subsequent add forms.
