diff --git a/plugins/context_respect_reaction_block.inc b/plugins/context_respect_reaction_block.inc
index 78987ed..5736bd3 100644
--- a/plugins/context_respect_reaction_block.inc
+++ b/plugins/context_respect_reaction_block.inc
@@ -39,8 +39,29 @@ class context_respect_reaction_block extends context_reaction_block {
             $block->context = $context->name;
             $block->bid = "{$block->module}-{$block->delta}";
             $block->cache = isset($info[$block->bid]->cache) ? $info[$block->bid]->cache : BLOCK_NO_CACHE;
-            $page_match = TRUE;
-            $role_match = TRUE;
+            
+            // set up an array to accompany all the access settings
+            $matches = array();
+            
+            $matches['page'] = TRUE;
+            $matches['role'] = TRUE;
+            
+            // check multilingual block visibility
+            if(module_exists('i18nblocks')) {
+              
+              global $language;
+              
+              // default to true, so that blocks that don't have language set would be visible
+              $matches['lang'] = TRUE;
+              $block_lang = db_result(db_query("SELECT language FROM {i18n_blocks} WHERE module = '%s' AND delta = '%s'", $block->module, $block->delta));
+              
+              // set visibility to false only if the block has language set
+              // and it's different than the active language
+              if( !empty($block_lang) && $language->language != $block_lang ) {
+                $matches['lang'] = FALSE;  
+              }
+            }
+            
 
             // check role access
             if (!drupal_match_path($_GET['q'], 'admin/build/context/*')) {
@@ -48,12 +69,12 @@ class context_respect_reaction_block extends context_reaction_block {
               while ($block_rid = db_result($block_rids)) {
                 if (in_array($block_rid, $rids)) {
                   // found a matching role
-                  $role_match = TRUE;
+                  $matches['role'] = TRUE;
                   break;
                 }
                 else {
                   // didn't match the role
-                  $role_match = FALSE;
+                  $matches['role'] = FALSE;
                 }
               }
             }
@@ -64,22 +85,22 @@ class context_respect_reaction_block extends context_reaction_block {
               if ($block_data->visibility < 2) {
                 $path = drupal_get_path_alias($_GET['q']);
                 // Compare with the internal and path alias (if any).
-                $page_match = drupal_match_path($path, $block_data->pages);
+                $matches['page'] = drupal_match_path($path, $block_data->pages);
                 if ($path != $_GET['q']) {
-                  $page_match = $page_match || drupal_match_path($_GET['q'], $block_data->pages);
+                  $matches['page'] = $matches['page'] || drupal_match_path($_GET['q'], $block_data->pages);
                 }
                 // When $block->visibility has a value of 0, the block is displayed on
                 // all pages except those listed in $block->pages. When set to 1, it
                 // is displayed only on those pages listed in $block->pages.
-                $page_match = !($block_data->visibility xor $page_match);
+                $matches['page'] = !($block_data->visibility xor $matches['page']);
               }
               else {
-                $page_match = drupal_eval($block_data->pages);
+                $matches['page'] = drupal_eval($block_data->pages);
               }
             }
 
             // add to region
-            if ($page_match && $role_match) {
+            if (!in_array(FALSE, $matches)) {
               $build_queue[$block->region][] = $block;
             }
           }
@@ -154,9 +175,12 @@ class context_respect_reaction_block extends context_reaction_block {
               $block->module = $module;
               $block->delta = $delta;
               $block->bid = "{$block->module}-{$block->delta}";
+              
+              // set up an array to accompany all the access settings
+              $matches = array();
 
-              $page_match = TRUE;
-              $role_match = TRUE;
+              $matches['page'] = TRUE;
+              $matches['role'] = TRUE;
 
               // check role access
               if (!drupal_match_path($_GET['q'], 'admin/build/context/*')) {
@@ -164,12 +188,12 @@ class context_respect_reaction_block extends context_reaction_block {
                 while ($block_rid = db_result($block_rids)) {
                   if (in_array($block_rid, $rids)) {
                     // found a matching role
-                    $role_match = TRUE;
+                    $matches['role'] = TRUE;
                     break;
                   }
                   else {
                     // didn't match the role
-                    $role_match = FALSE;
+                    $matches['role'] = FALSE;
                   }
                 }
               }
@@ -180,22 +204,22 @@ class context_respect_reaction_block extends context_reaction_block {
                 if ($block_data->visibility < 2) {
                   $path = drupal_get_path_alias($_GET['q']);
                   // Compare with the internal and path alias (if any).
-                  $page_match = drupal_match_path($path, $block_data->pages);
+                  $matches['page'] = drupal_match_path($path, $block_data->pages);
                   if ($path != $_GET['q']) {
-                    $page_match = $page_match || drupal_match_path($_GET['q'], $block_data->pages);
+                    $matches['page'] = $matches['page'] || drupal_match_path($_GET['q'], $block_data->pages);
                   }
                   // When $block->visibility has a value of 0, the block is displayed on
                   // all pages except those listed in $block->pages. When set to 1, it
                   // is displayed only on those pages listed in $block->pages.
-                  $page_match = !($block_data->visibility xor $page_match);
+                  $matches['page'] = !($block_data->visibility xor $matches['page']);
                 }
                 else {
-                  $page_match = drupal_eval($block_data->pages);
+                  $matches['page'] = drupal_eval($block_data->pages);
                 }
               }
 
               // add to region
-              if ($page_match && $role_match) {
+              if (!in_array(FALSE, $matches)) {
                 $block_info[$block->bid] = $block;
               }
             }
