diff --git a/modules/block/block.module b/modules/block/block.module
index 9eecda7..c74d012 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -503,6 +503,7 @@ function block_list($region) {
     $blocks[$region] = array();
   }
 
+  $time = time();
   foreach ($blocks[$region] as $key => $block) {
     // Render the block content if it has not been created already.
     if (!isset($block->content)) {
@@ -515,13 +516,23 @@ function block_list($region) {
           // Try fetching the block from cache. Block caching is not compatible with
           // node_access modules. We also preserve the submission of forms in blocks,
           // by fetching from cache only if the request method is 'GET'.
-          if (!count(module_implements('node_grants')) && $_SERVER['REQUEST_METHOD'] == 'GET' && ($cid = _block_get_cache_id($block)) && ($cache = cache_get($cid, 'cache_block'))) {
+          if ($_SERVER['REQUEST_METHOD'] == 'GET' && ($cid = _block_get_cache_id($block)) && ($cache = cache_get($cid, 'cache_block')) && (_blockcache_alter_check_expire($cache, $time))) {
             $array = $cache->data;
           }
           else {
             $array = module_invoke($block->module, 'block', 'view', $block->delta);
             if (isset($cid)) {
-              cache_set($cid, $array, 'cache_block', CACHE_TEMPORARY);
+              $blocklife = variable_get('bc_life_' . $block->module .'_' . $block->delta, '');
+              $blocklife = (int)$blocklife;
+              if (!empty($blocklife)) {
+                cache_set($cid, $array, 'cache_block', $blocklife + time());
+              }
+              else {
+                cache_set($cid, $array, 'cache_block', CACHE_PERMANENT);
+              }
+              if (variable_get('bca_debug', FALSE) && user_access('administer site configuration')) {
+                drupal_set_message('Block re-cached: ' . $block->title . '_' .$block->module . '_' . $block->delta . '_' . $blocklife . '_' . time());
+              }
             }
           }
 
