diff --git a/core/modules/block/js/block.js b/core/modules/block/js/block.js
index d6157e7..c133c0c 100644
--- a/core/modules/block/js/block.js
+++ b/core/modules/block/js/block.js
@@ -88,16 +88,18 @@
           // back to from where the user tried to drag it.
           regionField.trigger('change');
         }
-        else if ($rowElement.prev('tr').is('.region-message')) {
+
+        // Update the region and weight fields if the region has been changed.
+        if (!regionField.is('.block-region-' + regionName)) {
           var weightField = $rowElement.find('select.block-weight');
           var oldRegionName = weightField[0].className.replace(/([^ ]+[ ]+)*block-weight-([^ ]+)([ ]+[^ ]+)*/, '$2');
-
-          if (!regionField.is('.block-region-' + regionName)) {
-            regionField.removeClass('block-region-' + oldRegionName).addClass('block-region-' + regionName);
-            weightField.removeClass('block-weight-' + oldRegionName).addClass('block-weight-' + regionName);
-            regionField.val(regionName);
-          }
+          regionField.removeClass('block-region-' + oldRegionName).addClass('block-region-' + regionName);
+          weightField.removeClass('block-weight-' + oldRegionName).addClass('block-weight-' + regionName);
+          regionField.val(regionName);
         }
+
+        // Update the block weights
+        updateBlockweights(table, regionName);
       };
 
       // Add the behavior to each region select list.
@@ -106,11 +108,12 @@
           // Make our new row and select field.
           var row = $(this).closest('tr');
           var select = $(this);
-          tableDrag.rowObject = new tableDrag.row(row);
 
           // Find the correct region and insert the row as the last in the region.
           table.find('.region-' + select[0].value + '-message').nextUntil('.region-message').eq(-1).before(row);
 
+          // Update the block weights
+          updateBlockweights(table, select[0].value);
           // Modify empty regions with added or removed fields.
           checkEmptyRegions(table, row);
           // Remove focus from selectbox.
@@ -118,6 +121,16 @@
         });
       });
 
+      var updateBlockweights = function (table, region) {
+        // Calculate minimum weight.
+        var weight = -Math.round(table.find('.draggable').length / 2);
+        // Update the block weights.
+        table.find('.region-' + region + '-message').nextUntil('.region-title').each(function () {
+            $(this).find('select.block-weight').val(++weight);
+          }
+        );
+      };
+
       var checkEmptyRegions = function (table, rowObject) {
         table.find('tr.region-message').each(function () {
           var $this = $(this);
