diff --git a/css/webform-admin.css b/css/webform-admin.css
index 396df34..5a42ffb 100644
--- a/css/webform-admin.css
+++ b/css/webform-admin.css
@@ -125,6 +125,7 @@ tr.webform-add-form .tabledrag-changed {
   position: relative;
   padding-left: 1em;
   padding-right: 8em;
+  margin-left: 3em;
   max-width: 500px;
 }
 
diff --git a/includes/webform.conditionals.inc b/includes/webform.conditionals.inc
index a930419..e8738ae 100644
--- a/includes/webform.conditionals.inc
+++ b/includes/webform.conditionals.inc
@@ -44,9 +44,10 @@ function webform_conditionals_form($form, &$form_state, $node) {
 
   $source_list = webform_component_list($node, 'conditional', TRUE, TRUE);
   $target_list = webform_component_list($node, TRUE);
-  $weight = 0;
+  $delta = count($conditionals) > 10 ? count($conditionals) : 10;
+  $weight = -$delta - 1;
   foreach ($conditionals as $rgid => $conditional_group) {
-    $weight++;
+    $weight = $conditional_group['weight'];
     $form['conditionals'][$rgid] = array(
       '#type' => 'webform_conditional',
       '#default_value' => $conditional_group,
@@ -60,17 +61,21 @@ function webform_conditionals_form($form, &$form_state, $node) {
       '#weight' => $weight,
     );
     $form['conditionals'][$rgid]['weight'] = array(
-      '#type' => 'hidden',
-      '#size' => 4,
-      '#default_value' => $conditional_group['weight'],
+      '#type' => 'weight',
+      '#title' => t('Weight for rule group !rgid', array('!rgid' => $rgid)),
+      '#title_display' => 'invisible',
+      '#default_value' => $weight,
+      '#delta' => $delta,
     );
   }
 
   $form['conditionals']['new']['#weight'] = $weight + 1;
   $form['conditionals']['new']['weight'] = array(
-    '#type' => 'hidden',
-    '#size' => 4,
+    '#type' => 'weight',
+    '#title' => t('Weight for new rule group'),
+    '#title_display' => 'invisible',
     '#default_value' => $weight + 1,
+    '#delta' => $delta,
   );
   $form['conditionals']['new']['new'] = array(
     '#type' => 'submit',
@@ -102,12 +107,13 @@ function webform_conditionals_form($form, &$form_state, $node) {
  */
 function webform_conditionals_form_add($form, &$form_state) {
   // Build a default new conditional.
-  $weight = 0;
+  unset($form_state['values']['conditionals']['new']);
+  $weight = count($form_state['values']['conditionals']) > 10 ? -count($form_state['values']['conditionals']) : -10;
   foreach ($form_state['values']['conditionals'] as $key => $conditional) {
     $weight = max($weight, $conditional['weight']);
   }
 
-  $conditional['weight'] = count($form_state['values']['conditionals']);
+  $conditional['weight'] = $weight + 1;
   $conditional['rules'][0] = array(
     'source' => NULL,
     'operator' => NULL,
@@ -165,7 +171,7 @@ function webform_conditionals_ajax($form, $form_state) {
  */
 function theme_webform_conditional_groups($variables) {
   $element = $variables['element'];
-  drupal_add_tabledrag('webform-conditionals-table', 'order', 'sibling', 'webform-conditional-weight', NULL, NULL, FALSE);
+  drupal_add_tabledrag('webform-conditionals-table', 'order', 'sibling', 'webform-conditional-weight');
   drupal_add_js('Drupal.theme.prototype.tableDragChangedMarker = function() { return ""; }', 'inline');
   drupal_add_js('Drupal.theme.prototype.tableDragChangedWarning = function() { return "<span>&nbsp;</span>"; }', 'inline');
 
@@ -176,17 +182,12 @@ function theme_webform_conditional_groups($variables) {
   $element_count = count($element_children);
   foreach ($element_children as $key) {
     $row = array();
-    $element[$key]['weight']['#attributes']['class'] = array('webform-conditional-weight');
-    $row[] = array(
-      'width' => 1,
-      'data' => drupal_render($element[$key]['weight']),
-    );
     if ($key === 'new') {
       $data = '';
       if ($element_count === 1) {
         $data = t('There are conditional actions on this form.') . ' ';
       }
-      $data = '<div class="webform-conditional-new">' . $data . t('Add a new condition: ') . drupal_render($element[$key]) . '</div>';
+      $data = '<div class="webform-conditional-new">' . $data . t('Add a new condition: ') . drupal_render($element[$key]['new']) . '</div>';
     }
     else {
       $data = drupal_render($element[$key]);
@@ -194,6 +195,10 @@ function theme_webform_conditional_groups($variables) {
     $row[] = array(
       'data' => $data,
     );
+    $element[$key]['weight']['#attributes']['class'] = array('webform-conditional-weight');
+    $row[] = array(
+      'data' => drupal_render($element[$key]['weight']),
+    );
     $classes = ($key === 'new') ? array() : array('draggable');
     if (!empty($element[$key]['#ajax_added'])) {
       $classes[] = 'ajax-new-content';
diff --git a/webform.module b/webform.module
index d142178..90e236b 100644
--- a/webform.module
+++ b/webform.module
@@ -1449,7 +1449,7 @@ function webform_node_load($nodes, $types) {
     $nodes[$nid]->webform['conditionals'] = db_select('webform_conditional')
       ->fields('webform_conditional')
       ->condition('nid', $nid)
-      ->orderBy('rgid')
+      ->orderBy('weight')
       ->execute()
       ->fetchAllAssoc('rgid', PDO::FETCH_ASSOC);
     if ($nodes[$nid]->webform['conditionals']) {
