diff --git a/nodeblock.module b/nodeblock.module
index d67a79c..85dd401 100755
--- a/nodeblock.module
+++ b/nodeblock.module
@@ -226,7 +226,27 @@ function _nodeblock_insert_update($node) {
     $tnid = $node->tnid ? $node->tnid : $node->nid;
     variable_set('nodeblock_translation_fallback_' . $tnid, $node->nodeblock['translation_fallback']);
   }
-  _block_rehash();
+  // Rehash block list for all active themes.
+  $themes = list_themes();
+  $operations = array();
+  foreach ($themes as $key => $theme) {
+    if ($theme->status) {
+      $operations[] = array('_block_rehash', array($theme->name));
+    }
+  }
+  // If there's only one active theme, we don't need a batch.
+  if (count($operations) == 1) {
+    _block_rehash($operations[0][1][0]);
+  }
+  else {
+    // Call a batch on all active themes.
+    // This will show a progress bar upon node save.
+    $batch = array(
+      'title' => t('Updating blocks list for all active themes'),
+      'operations' => $operations,
+    );
+    batch_set($batch);
+  }
 }
 
 /**
