diff --git a/includes/datasource_entity.inc b/includes/datasource_entity.inc
index 3ebbab2..3ee4615 100644
--- a/includes/datasource_entity.inc
+++ b/includes/datasource_entity.inc
@@ -281,7 +281,6 @@ public function configurationForm(array $form, array &$form_state) {
       '#description' => t('Restrict the entity bundles that will be included in this index. Leave blank to include all bundles. This setting cannot be changed for existing indexes.'),
       '#options' => array_map('check_plain', $options),
       '#attributes' => array('class' => array('search-api-checkboxes-list')),
-      '#disabled' => !empty($form_state['index']),
     );
     if (!empty($form_state['index']->options['datasource'])) {
       $form['bundles']['#default_value'] = drupal_map_assoc($form_state['index']->options['datasource']['bundles']);
@@ -296,6 +295,33 @@ public function configurationFormSubmit(array $form, array &$values, array &$for
     if (!empty($values['bundles'])) {
       $values['bundles'] = array_keys(array_filter($values['bundles']));
     }
+    else {
+      $values['bundles'] = array();
+    }
+
+    // Get the old bundle settings.
+    $index = $form_state['index'];
+    if (isset($index->options['datasource']['bundles'])) {
+      $old_bundles = $index->options['datasource']['bundles'];
+    }
+    else {
+      $old_bundles = array();
+    }
+
+    // Compare the old and new bundle settings.
+    if ($old_bundles != $values['bundles']) {
+      // Now, go through all the bundles and start/stop tracking for them
+      // accordingly.
+      $actions['trackItemsInserted'] = array_diff_key($values['bundles'], $old_bundles);
+      $actions['trackItemsDeleted'] = array_diff_key($old_bundles, $values['bundles']);
+
+      $actions = array_filter($actions);
+      foreach ($actions as $action => $bundles) {
+        if ($entity_ids = $this->getBundleItemIds(array_keys($bundles))) {
+          $this->getIndex()->$action($this->getPluginId(), $entity_ids);
+        }
+      }
+    }
   }
 
   /**
