Index: includes/openlayers.render.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/openlayers/includes/openlayers.render.inc,v
retrieving revision 1.3.2.16
diff -u -p -r1.3.2.16 openlayers.render.inc
--- includes/openlayers.render.inc	27 Apr 2010 15:50:15 -0000	1.3.2.16
+++ includes/openlayers.render.inc	8 Sep 2010 10:24:06 -0000
@@ -20,10 +20,12 @@
 function _openlayers_layers_process($layers = array(), &$map = array()) {
   $layer_data = array();
 
+  $weight = 0;
   foreach ($layers as $layer) {
     if ($layer_object = openlayers_layer_load($layer)) {
       $layer_object->render($map);
       $layer_object->data['title'] = $layer_object->title;
+      $layer_object->data['weight'] = ++$weight;
       $layer_data[$layer_object->name] = $layer_object->data;
     }
   }
Index: js/openlayers.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/openlayers/js/openlayers.js,v
retrieving revision 1.47.2.36
diff -u -p -r1.47.2.36 openlayers.js
--- js/openlayers.js	6 Aug 2010 20:35:15 -0000	1.47.2.36
+++ js/openlayers.js	8 Sep 2010 10:24:07 -0000
@@ -151,8 +151,19 @@ Drupal.openlayers = {
    * @param openlayers OpenLayers Map Object
    */
   'addLayers': function(map, openlayers) {
+
+    var sorted = [];
     for (var name in map.layers) {
+      sorted.push({'name': name, 'weight': map.layers[name].weight });
+    };
+    sorted.sort(function(a, b) {
+      var x = a.weight; var y = b.weight;
+      return ((x < y) ? -1 : ((x > y) ? 1 : 0));
+    });
+
+    for (var i=0; i<sorted.length; ++i) {
       var layer;      
+      var name = sorted[i].name;
       var options = map.layers[name];
       
       // Add reference to our layer ID
Index: modules/openlayers_ui/includes/openlayers_ui.presets.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/openlayers/modules/openlayers_ui/includes/Attic/openlayers_ui.presets.inc,v
retrieving revision 1.1.2.29
diff -u -p -r1.1.2.29 openlayers_ui.presets.inc
--- modules/openlayers_ui/includes/openlayers_ui.presets.inc	5 Sep 2010 14:35:10 -0000	1.1.2.29
+++ modules/openlayers_ui/includes/openlayers_ui.presets.inc	8 Sep 2010 10:24:07 -0000
@@ -298,15 +298,33 @@ function openlayers_ui_presets_form(&$fo
   $overlay_options = openlayers_ui_get_layer_options('overlay', $defaults['projection']);
   $form['layerstyles']['layers']['overlaylabels'] = array();
   if (!empty($overlay_options)) {
-    foreach ($overlay_options as $id => $description) {
+
+    // Have enabled layers maintain their order
+    $available = array_keys($overlay_options);
+    $enabled = array_intersect(array_keys($defaults['layers']), $available);
+    $enabled = array_reverse($enabled);
+    $disabled = array_diff($available, $enabled);
+    $overlay_options_keys = array_merge($enabled, $disabled);
+
+    $nextweight = -10;
+    $form['layerstyles']['layer_styles']['#tree'] = TRUE;
+    $form['layerstyles']['layer_weight']['#tree'] = TRUE;
+    foreach ($overlay_options_keys as $id) {
+      $description = $overlay_options[$id];
       $form['layerstyles']['layers']['overlaylabels'][$id] = array('#type' => 'markup', '#value' => $description);
-      $form['layerstyles']['layer_styles']['#tree'] = TRUE;
       $form['layerstyles']['layer_styles'][$id] = array(
         '#type' => 'select',
         '#options' => array('-- '. t('Default style') .' --') + openlayers_ui_get_style_options(),
         '#default_value' => !empty($defaults['layer_styles'][$id]) ?
           $defaults['layer_styles'][$id] : '',
       );
+      $form['layerstyles']['layer_weight'][$id] = array(
+        '#type' => 'weight',
+        '#default_value' => $nextweight++,
+        '#attributes' => array(
+          'class' => 'layer-weight'
+        )
+      );
     }
   }
   $form['layerstyles']['layers']['overlays'] = array(
@@ -578,7 +596,7 @@ function openlayers_ui_presets_form_proc
 
         // Merge our different layer sections together
         $baselayers = array_filter($values['layers']['baselayers']);
-        $overlays = array_filter($values['layers']['overlays']);
+        $overlays = array_reverse(array_filter($values['layers']['overlays']));
         $processed['layers'] = array_merge($baselayers, $overlays);
         break;
 
Index: modules/openlayers_ui/includes/openlayers_ui.theme.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/openlayers/modules/openlayers_ui/includes/Attic/openlayers_ui.theme.inc,v
retrieving revision 1.1.2.9
diff -u -p -r1.1.2.9 openlayers_ui.theme.inc
--- modules/openlayers_ui/includes/openlayers_ui.theme.inc	5 Sep 2010 14:35:11 -0000	1.1.2.9
+++ modules/openlayers_ui/includes/openlayers_ui.theme.inc	8 Sep 2010 10:24:07 -0000
@@ -97,13 +97,16 @@ function theme_openlayers_ui_presets_for
     unset($form['layer_switcher'][$key]['#title']);
 
     $row[] = drupal_render($form['layers']['overlaylabels'][$key]);
+    $row[] = drupal_render($form['layer_weight'][$key]); 
     $row[] = drupal_render($form['layers']['overlays'][$key]);
     $row[] = drupal_render($form['layer_activated'][$key]);
     $row[] = drupal_render($form['layer_switcher'][$key]);
     $row[] = drupal_render($form['layer_styles'][$key]);
-    $rows[] = $row;
+    $rows[] = array( 'data' => $row, 'class' => 'draggable' );
   }
-  $output .= theme('table', array(t('Overlay layers'), t('Enabled'), t('Activated'), t('In Switcher'), t('Style')), $rows);
+  $output .= theme('table', array(t('Overlay layers'), t('Weight'), t('Enabled'), t('Activated'), t('In Switcher'), t('Style')), $rows, array('id' => 'overlay-layer-table'));
+
+  drupal_add_tabledrag('overlay-layer-table', 'order', 'sibling', 'layer-weight');
   $output .= drupal_render($form);
   return $output;
 }
