diff --git a/modules/block/block.module b/modules/block/block.module
index 70b1d42..effe1d7 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -848,16 +848,21 @@ function _block_render_blocks($region_blocks) {
   if ($cacheable) {
 
     $cids = array();
+    $keys = array();
     foreach ($region_blocks as $key => $block) {
       if (!isset($block->content)) {
         if (($cid = _block_get_cache_id($block))) {
           $cids[] = $cid;
+          $keys[$cid] = $key;
         }
       }
     }
 
     if ($cids) {
-      $cached_blocks = cache_get_multiple($cids, 'cache_block');
+      $cached_data = cache_get_multiple($cids, 'cache_block');
+      foreach ($cached_data as $cid => $data) {
+        $cached_blocks[$keys[$cid]] = $data;
+      }
     }
   }
 
@@ -869,8 +874,8 @@ function _block_render_blocks($region_blocks) {
       unset($region_blocks[$key]);
 
       // Try fetching the block from the previously loaded cache entries.
-      if (($cid = _block_get_cache_id($block)) && isset($cached_blocks[$cid])) {
-        $array = $cached_blocks[$cid]->data;
+      if (isset($cached_blocks[$key])) {
+        $array = $cached_blocks[$key]->data;
       }
       else {
         $array = module_invoke($block->module, 'block_view', $block->delta);
