diff --git a/context_blockcache_alter.inc b/context_blockcache_alter.inc
new file mode 100644
index 0000000..5262296
--- /dev/null
+++ b/context_blockcache_alter.inc
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Implementation of *_reaction_block->build_block
+ */
+function _context_blockcache_alter_build_block($block, $reset = FALSE) {
+  // Change, 1 line.
+  // We
+  // preserve the submission of forms in blocks, by fetching from cache
+  // only if the request method is 'GET'.
+  static $cacheable;
+  if (!isset($cacheable) || $reset) {
+    // Change, 1 line.
+    $cacheable = $_SERVER['REQUEST_METHOD'] == 'GET';
+  }
+  if (!isset($block->content)) {
+    $block->content = '';
+    // Try fetching the block from cache.
+    // Change, 3 lines including comment.
+    // Can't use _block_get_cache_id() because context doesn't fetch block cache value from db.
+    if ($cacheable && ($cid = _blockcache_alter_get_cache_id($block->module, $block->delta))) {
+      if (($cache = cache_get($cid, 'cache_block')) && (_blockcache_alter_check_expire($cache, time()))) {
+        $array = $cache->data;
+      }
+      else {
+        // Change, 1 line.
+        $array = module_invoke('blockcache_alter', 'block', 'view', $block->module . ',' . $block->delta);
+        cache_set($cid, $array, 'cache_block', CACHE_TEMPORARY);
+      }
+    }
+    // Otherwise build block.
+    else {
+      // Change, 1 line.
+      $array = module_invoke('blockcache_alter', 'block', 'view', $block->module . ',' . $block->delta);
+    }
+    if (isset($array) && is_array($array)) {
+      foreach ($array as $k => $v) {
+        $block->$k = $v;
+      }
+    }
+  }
+  if (!empty($block->content)) {
+    // Only query for custom block title if block core compatibility is enabled.
+    if (!variable_get('context_reaction_block_disable_core', FALSE)) {
+      global $user, $theme_key;
+      $block->title = db_result(db_query("SELECT title FROM {blocks} WHERE module = '%s' AND delta = '%s' AND theme = '%s'", $block->module, $block->delta, $theme_key));
+    }
+    // Override default block title if a custom display title is present.
+    if (!empty($block->title)) {
+      // Check plain here to allow module generated titles to keep any markup.
+      $block->subject = $block->title == '<none>' ? '' : check_plain($block->title);
+    }
+    if (!isset($block->subject)) {
+      $block->subject = '';
+    }
+  }
+  return $block;
+}
+
diff --git a/context_blockcache_alter.info b/context_blockcache_alter.info
index a39c28f..19ff165 100755
--- a/context_blockcache_alter.info
+++ b/context_blockcache_alter.info
@@ -1,4 +1,4 @@
-name = "Context layouts"
+name = "Context Block Cache Alter"
 description = "Allow context to use the block caching provided by the Blockcache alter module."
 dependencies[] = "context"
 dependencies[] = "blockcache_alter"
diff --git a/context_blockcache_alter.install b/context_blockcache_alter.install
index a6afa82..3b7b118 100644
--- a/context_blockcache_alter.install
+++ b/context_blockcache_alter.install
@@ -1,20 +1,14 @@
 <?php
 
+/**
+ * Implementation of hook_alter_requirements().
+ * Mention that this module may cause trouble with node access control
+ */
 function context_blockcache_alter_requirements($phase) {
   $requirements = array();
   // Ensure translations don't break at install time
   $t = get_t();
 
-  if (module_exists('context_layouts')) {
-    $requirements['context_layouts'] = array(
-      'title' => $t('Context layouts'), 
-      'value' => $t('Context layouts present'),
-      'description' => $t('Context blockcache alter is incompatible with the Context layouts module.'),
-      'severity' => REQUIREMENT_ERROR,
-      'weight' => -10,
-    );
-
-  }
   if (count(module_implements('node_grants'))) {
     $requirements['node_access'] = array(
       'title' => $t('Node access'), 
@@ -27,3 +21,12 @@ function context_blockcache_alter_requirements($phase) {
   return $requirements;
 }
 
+/**
+ * Implementation of hook_install().
+ * Ensure that this module is loaded after context_layouts
+ */
+function context_blockcache_alter_install() {
+  // context_layouts weight 0 for now, we set this module's to 5
+  db_query("UPDATE {system} SET weight = %d WHERE type = 'module' AND name = 'context_blockcache_alter'", 5);
+}
+
diff --git a/context_blockcache_alter.module b/context_blockcache_alter.module
index 60ab15a..78c9d39 100755
--- a/context_blockcache_alter.module
+++ b/context_blockcache_alter.module
@@ -15,6 +15,14 @@ function context_blockcache_alter_context_plugins() {
         'parent' => 'context_reaction_block',
       ),
     ),
+    'context_layouts_blockcache_alter_reaction_block' => array(
+      'handler' => array(
+        'path' => drupal_get_path('module', 'context_blockcache_alter') .'/plugins',
+        'file' => 'context_layouts_blockcache_alter_reaction_block.inc',
+        'class' => 'context_layouts_blockcache_alter_reaction_block',
+        'parent' => 'context_layouts_reaction_block',
+      ),
+    ),
   );
 }
 
@@ -23,7 +31,12 @@ function context_blockcache_alter_context_plugins() {
  */
 function context_blockcache_alter_context_registry_alter(&$registry) {
   if (isset($registry['reactions']['block'])) {
-    $registry['reactions']['block']['plugin'] = 'context_blockcache_alter_reaction_block';
+    if (module_exists('context_layouts')) {
+      $registry['reactions']['block']['plugin'] = 'context_layouts_blockcache_alter_reaction_block';
+    }
+    else {
+      $registry['reactions']['block']['plugin'] = 'context_blockcache_alter_reaction_block';
+    }
   }
 }
 
diff --git a/plugins/context_blockcache_alter_reaction_block.inc b/plugins/context_blockcache_alter_reaction_block.inc
index b91502b..19b6025 100755
--- a/plugins/context_blockcache_alter_reaction_block.inc
+++ b/plugins/context_blockcache_alter_reaction_block.inc
@@ -6,56 +6,7 @@ class context_blockcache_alter_reaction_block extends context_reaction_block {
    * Override of build_block() to add blockcache_alter functionality.
    */
   protected function build_block($block, $reset = FALSE) {
-    // Change, 1 line.
-    // We
-    // preserve the submission of forms in blocks, by fetching from cache
-    // only if the request method is 'GET'.
-    static $cacheable;
-    if (!isset($cacheable) || $reset) {
-      // Change, 1 line.
-      $cacheable = $_SERVER['REQUEST_METHOD'] == 'GET';
-    }
-    if (!isset($block->content)) {
-      $block->content = '';
-      // Try fetching the block from cache.
-      // Change, 3 lines including comment.
-      // Can't use _block_get_cache_id() because context doesn't fetch block cache value from db.
-      if ($cacheable && ($cid = _blockcache_alter_get_cache_id($block->module, $block->delta))) {
-        if (($cache = cache_get($cid, 'cache_block')) && (_blockcache_alter_check_expire($cache, time()))) {
-          $array = $cache->data;
-        }
-        else {
-          // Change, 1 line.
-          $array = module_invoke('blockcache_alter', 'block', 'view', $block->module . ',' . $block->delta);
-          cache_set($cid, $array, 'cache_block', CACHE_TEMPORARY);
-        }
-      }
-      // Otherwise build block.
-      else {
-        // Change, 1 line.
-        $array = module_invoke('blockcache_alter', 'block', 'view', $block->module . ',' . $block->delta);
-      }
-      if (isset($array) && is_array($array)) {
-        foreach ($array as $k => $v) {
-          $block->$k = $v;
-        }
-      }
-    }
-    if (!empty($block->content)) {
-      // Only query for custom block title if block core compatibility is enabled.
-      if (!variable_get('context_reaction_block_disable_core', FALSE)) {
-        global $user, $theme_key;
-        $block->title = db_result(db_query("SELECT title FROM {blocks} WHERE module = '%s' AND delta = '%s' AND theme = '%s'", $block->module, $block->delta, $theme_key));
-      }
-      // Override default block title if a custom display title is present.
-      if (!empty($block->title)) {
-        // Check plain here to allow module generated titles to keep any markup.
-        $block->subject = $block->title == '<none>' ? '' : check_plain($block->title);
-      }
-      if (!isset($block->subject)) {
-        $block->subject = '';
-      }
-    }
-    return $block;
+    module_load_include('inc', 'context_blockcache_alter', 'context_blockcache_alter');
+    return _context_blockcache_alter_build_block($block, $reset);
   }
 }
diff --git a/plugins/context_layouts_blockcache_alter_reaction_block.inc b/plugins/context_layouts_blockcache_alter_reaction_block.inc
new file mode 100644
index 0000000..4b22113
--- /dev/null
+++ b/plugins/context_layouts_blockcache_alter_reaction_block.inc
@@ -0,0 +1,13 @@
+<?php
+
+class context_layouts_blockcache_alter_reaction_block extends context_layouts_reaction_block {
+
+  /**
+   * Override of build_block() to add blockcache_alter functionality.
+   */
+  protected function build_block($block, $reset = FALSE) {
+    module_load_include('inc', 'context_blockcache_alter', 'context_blockcache_alter');
+    return _context_blockcache_alter_build_block($block, $reset);
+  }
+}
+
