diff --git a/search_api.drush.inc b/search_api.drush.inc
index 9a02106a2f7dba076ef90165e57ca7cb3cb7bdeb..57be500a830db59195696959da49d24ee161951b 100644
--- a/search_api.drush.inc
+++ b/search_api.drush.inc
@@ -180,8 +180,20 @@ function drush_search_api_index($index_id = NULL, $limit = NULL) {
       $limit = -1;
       $limit_string = t('all');
     }
-    drush_print(dt('Indexing a maximum number of !limit items for index !index.', array('!index' => $index->name, '!limit' => $limit_string)));
-    search_api_index_items($index, $limit);
+    
+    $status = search_api_index_status($index);
+    while ($status['total'] > $status['indexed']) {
+      drush_print(dt('Indexing a maximum number of !limit items for index !index.', array('!index' => $index->name, '!limit' => $limit_string)));
+      
+      $indexed = search_api_index_items($index, $limit);
+
+      $status = search_api_index_status($index);
+      $complete = ($status['total'] > 0) ? 100 * round($status['indexed'] / $status['total'], 3) . '%' : '-';
+      drush_print(dt('Indexed !count items, !id !complete indexed', array('!count'=>$indexed, '!id'=>$index_id, '!complete'=>$complete)));
+
+      entity_get_controller($index->item_type)->resetCache();
+    }
+    
   }
 }
 
