diff --git a/field_collection/field_collection.install b/field_collection/field_collection.install
index 28c5bfb..c9b5da2 100644
--- a/field_collection/field_collection.install
+++ b/field_collection/field_collection.install
@@ -18,6 +18,11 @@ function field_collection_schema() {
         'not null' => TRUE,
         'description' => 'Primary Key: Unique field collection item ID.',
       ),
+      'revision_id' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'description' => 'Current revision ID.',
+      ),
       'field_name' => array(
         'description' => 'The name of the field on the host entity embedding this entity.',
         'type' => 'varchar',
@@ -27,6 +32,28 @@ function field_collection_schema() {
     ),
     'primary key' => array('item_id'),
   );
+  $schema['field_collection_item_revision'] = array(
+    'description' => 'Stores revision information about field collection items.',
+    'fields' => array(
+      'revision_id' => array(
+        'type' => 'serial',
+        'not null' => TRUE,
+        'description' => 'Primary Key: Unique revision ID.',
+      ),
+      'item_id' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'description' => 'Unique field collection item ID.',
+      ),
+      'field_name' => array(
+        'description' => 'The name of the field on the host entity embedding this entity.',
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+      ),
+    ),
+    'primary key' => array('revision_id'),
+  );
   return $schema;
 }
 
@@ -55,3 +82,72 @@ function field_collection_update_7000() {
     ->condition('permission', 'administer field-collections')
     ->execute();
 }
+
+/**
+ * Add the field_collection_item_revision table.
+ */
+function field_collection_update_7001() {
+
+  // Add revision_id field to field_collection_item table.
+  $spec = array(
+    'type' => 'int',
+    'not null' => TRUE,
+    'description' => 'Current revision ID.',
+    // Set default to 0 temporarily.
+    'initial' => 0,
+  );
+  db_add_field('field_collection_item', 'revision_id', $spec);
+
+  // Create the new table. It is important to explicitly define the schema here
+  // rather than use the hook_schema definition: http://drupal.org/node/150220.
+  $schema['field_collection_item_revision'] = array(
+    'description' => 'Stores revision information for field collection items.',
+    'fields' => array(
+      'revision_id' => array(
+        'type' => 'serial',
+        'not null' => TRUE,
+        'description' => 'Primary Key: Unique revision ID.',
+      ),
+      'item_id' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'description' => 'Unique field collection item ID.',
+      ),
+      'field_name' => array(
+        'description' => 'The name of the field on the host entity embedding this entity.',
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+      ),
+    ),
+    'primary key' => array('revision_id'),
+  );
+  db_create_table('field_collection_item_revision', $schema['field_collection_item_revision']);
+
+  // Fill the new field and table with the correct data.
+  $items = db_select('field_collection_item', 'fci')
+    ->fields('fci')
+    ->execute();
+  foreach ($items as $item) {
+
+    // Update field_collection_item.revision_id field.
+    $num_updated = db_update('field_collection_item')
+      ->fields(array(
+        'revision_id' => $item->item_id,
+      ))
+      ->condition('item_id', $item->item_id)
+      ->execute();
+
+    // Update field_collection_item_revision table.
+    $revision_id = db_insert('field_collection_item_revision')
+      ->fields(array(
+        'revision_id' => $item->item_id,
+        'item_id' => $item->item_id,
+        'field_name' => $item->field_name,
+      ))
+      ->execute();
+  }
+
+  return 'Add the field_collection_item_revision table for the field_collection module.';
+}
+
diff --git a/field_collection/field_collection.module b/field_collection/field_collection.module
index 6aeefc1..998ba50 100644
--- a/field_collection/field_collection.module
+++ b/field_collection/field_collection.module
@@ -29,10 +29,13 @@ function field_collection_entity_info() {
     'entity class' => 'FieldCollectionItemEntity',
     'controller class' => 'EntityAPIController',
     'base table' => 'field_collection_item',
+    'revision table' => 'field_collection_item_revision',
     'fieldable' => TRUE,
     'entity keys' => array(
       'id' => 'item_id',
+      'revision' => 'revision_id',
       'bundle' => 'field_name',
+      'set active revision' => 'set_active_revision',
     ),
     'module' => 'field_collection',
     'view modes' => array(
@@ -626,6 +629,14 @@ function field_collection_field_presave($entity_type, $entity, $field, $instance
       if (!empty($item['entity']->is_new)) {
         $item['entity']->setHostEntity($entity_type, $entity, LANGUAGE_NONE, FALSE);
       }
+
+      // If the host entity is set for new revision, use new revision for item.
+      // $entity->revision field is used for current core entities and
+      // $entity->is_new_revision is used for Entity API.
+      if (!empty($entity->revision) || !empty($entity->is_new_revision)) {
+        $item['entity']->is_new_revision = TRUE;
+      }
+
       $item['entity']->save(TRUE);
       $item = array('value' => $item['entity']->item_id);
     }
