diff --git a/plugins/context_reaction_block.css b/plugins/context_reaction_block.css
index ce7d8ef..6404af9 100644
--- a/plugins/context_reaction_block.css
+++ b/plugins/context_reaction_block.css
@@ -165,6 +165,12 @@ div.block div.context-block-empty {
 #context-blockform td.blocks div.form-item,
 #context-blockform td.blocks input.block-weight { display:none; }
 
+#context-blockform td.blocks div.exposed div.form-item,
+#context-blockform td.blocks div.exposed input.block-weight {
+    display: block;
+    clear: left;
+}
+
 #context-ui-items #context-blockform {
   font-size:11px;
   line-height:15px;
diff --git a/plugins/context_reaction_block.inc b/plugins/context_reaction_block.inc
index 7aaedae..2f4673d 100644
--- a/plugins/context_reaction_block.inc
+++ b/plugins/context_reaction_block.inc
@@ -65,12 +65,16 @@ class context_reaction_block extends context_reaction {
       );
       foreach ($this->get_blocks($region, $context) as $block) {
         if (!empty($block->context)) {
+          $weight_form = array('#type' => 'weight', '#delta' => $weight_delta, '#default_value' => 0);
+          if(variable_get('context_reaction_block_expose_weights', FALSE)) {
+            $weight_form = array('#type' => 'weight', '#title' => t('Weight'), '#delta' => $weight_delta, '#default_value' => $block->weight, '#prefix' => '<div class="exposed">', '#suffix' => '</div>');
+          }
           $form['blocks'][$region][$block->bid] = array(
             '#value' => check_plain($block->info),
             '#weight' => $block->weight,
             '#type' => 'markup',
             '#tree' => TRUE,
-            'weight' => array('#type' => 'weight', '#delta' => $weight_delta, '#default_value' => 0),
+            'weight' => $weight_form,
           );
         }
       }
@@ -96,11 +100,15 @@ class context_reaction_block extends context_reaction {
     foreach ($edited as $region => $bids) {
       foreach ($bids as $position => $bid) {
         if (isset($block_info[$bid])) {
+          $weight_submitted = $position;
+          if(variable_get('context_reaction_block_expose_weights', FALSE)) {
+            $weight_submitted = $values['blocks'][$region][$block_info[$bid]->module.'-'.$block_info[$bid]->delta][weight];
+          }
           $blocks[$bid] = array(
             'module' => $block_info[$bid]->module,
             'delta' => $block_info[$bid]->delta,
             'region' => $region,
-            'weight' => $position,
+            'weight' => $weight_submitted,
           );
         }
       }
@@ -202,6 +210,12 @@ class context_reaction_block extends context_reaction {
       '#default_value' => variable_get('context_reaction_block_all_regions', FALSE),
       '#description' => t('Show all regions including those that are empty. Enable if you are administering your site using the inline editor.')
     );
+    $form['context_reaction_block_expose_weights'] = array(
+      '#title' => t('Expose numeric block weights'),
+      '#type' => 'checkbox',
+      '#default_value' => variable_get('context_reaction_block_expose_weights', FALSE),
+      '#description' => t('Expose block weights allowing you to set them manually. This can be useful if you have complex overlapping contexts that place blocks in the same regions. Note that newly added blocks must be saved before their weights are exposed. Also note that any manual settings will be overridden when using the inline editor.')
+    );
     return $form;
   }
 
