diff --git a/includes/openlayers.render.inc b/includes/openlayers.render.inc
index 5e018cd..30dd6f7 100644
--- a/includes/openlayers.render.inc
+++ b/includes/openlayers.render.inc
@@ -64,7 +64,8 @@ function _openlayers_behaviors_render($behaviors = array(), &$map = array()) {
  * @param $styles
  *   Array of map styles ( <style_role> : <style_name> | <style_array> )
  * @param $layer_styles
- *   Array of layer styles ( <layer_name> : <style_name> )
+ *   Array of layer styles ( <layer_name> : <style_name> | <by_role_array> )
+ *   The <by_role_array> is an array of <style_name> indexed by <style_role>
  * @param $map
  *   Map array
  * @return $processed
@@ -89,11 +90,18 @@ function _openlayers_styles_process($styles = array(),
   }
 
   // Add layer styles
-  foreach ($layer_styles as $style) {
-    if (!isset($processed[$style]) && 
-        !empty($styles_info[$style]) && 
-        $info = $styles_info[$style]->data) {
-      $processed[$style] = $info;
+  foreach ($layer_styles as $stylename) {
+    // UPGRADE NOTE:
+    // Presets up to 6.x-2.x-alpha10 always had a single style
+    // per layer specified. Newer ones have them splitted by role
+    $stylenames = is_array($stylename) ? array_values($stylename)
+      : array($stylename);
+    foreach ($stylenames as $style) {
+      if (!isset($processed[$style]) && 
+          !empty($styles_info[$style]) && 
+          $info = $styles_info[$style]->data) {
+        $processed[$style] = $info;
+      }
     }
   }
 
diff --git a/js/openlayers.js b/js/openlayers.js
index e8d1589..e50987f 100644
--- a/js/openlayers.js
+++ b/js/openlayers.js
@@ -284,14 +284,23 @@ Drupal.openlayers = {
   'getStyleMap': function(map, layername) {
     if (map.styles) {
       var stylesAdded = {};
+      var roles = ['default', 'delete', 'select', 'temporary'];
       // Grab and map base styles.
-      for (var style in map.styles) {
-        stylesAdded[style] = new OpenLayers.Style(map.styles[style]);
+      for (var i=0; i<roles.length; ++i) {
+        role = roles[i];
+        if ( map.styles[role] ) {
+          stylesAdded[role] = new OpenLayers.Style(map.styles[role]);
+        }
       }
-      // Implement layer-specific styles.
+      // Override with layer-specific styles.
       if (map.layer_styles !== undefined && map.layer_styles[layername]) {
-        var style = map.layer_styles[layername];
-        stylesAdded['default'] = new OpenLayers.Style(map.styles[style]);
+        var layer_styles = map.layer_styles[layername];
+        for (var i=0; i<roles.length; ++i) {
+          role = roles[i];
+          if ( layer_styles[role] ) {
+            stylesAdded[role] = new OpenLayers.Style(layer_styles[role]);
+          }
+        }
       }
       return new OpenLayers.StyleMap(stylesAdded);
     }
diff --git a/modules/openlayers_ui/includes/openlayers_ui.presets.inc b/modules/openlayers_ui/includes/openlayers_ui.presets.inc
index 49d1b34..478af9e 100644
--- a/modules/openlayers_ui/includes/openlayers_ui.presets.inc
+++ b/modules/openlayers_ui/includes/openlayers_ui.presets.inc
@@ -313,12 +313,24 @@ function openlayers_ui_presets_form(&$form_state, $preset = NULL, $edit = FALSE)
     foreach ($overlay_options_keys as $id) {
       $description = $overlay_options[$id];
       $form['layerstyles']['layers']['overlaylabels'][$id] = array('#type' => 'markup', '#value' => $description);
-      $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_styles'][$id]['#tree'] = TRUE;
+      $roles = array('default', 'select', 'temporary');
+      foreach ($roles as $role) {
+        $form['layerstyles']['layer_styles'][$id][$role] = array(
+          '#type' => 'select',
+          '#title' => $role,
+          '#options' => array('-- '. t('Default style') .' --') + openlayers_ui_get_style_options(),
+          // UPGRADE NOTE:
+          // Presets up to 6.x-2.x-alpha10 always had a single style
+          // per layer specified. Newer ones have them splitted by role
+          '#default_value' => is_array($defaults['layer_styles'][$id]) ?
+            ( !empty($defaults['layer_styles'][$id][$role]) ?
+              $defaults['layer_styles'][$id][$role] : '' )
+            : 
+            ( !empty($defaults['layer_styles'][$id]) ?
+              $defaults['layer_styles'][$id] : '' )
+        );
+      }
       $form['layerstyles']['layer_weight'][$id] = array(
         '#type' => 'weight',
         '#default_value' => $nextweight++,
@@ -612,6 +624,16 @@ function openlayers_ui_presets_form_process($values = array()) {
 
         break;
 
+      case 'layer_styles':
+        $processed['layer_styles'] = array();
+        foreach ($values['layer_styles'] as $layer => $stylespec) {
+          $layerarray = array_filter($stylespec);
+          if ( ! empty($layerarray) ) {
+            $processed['layer_styles'][$layer] = $layerarray;
+          }
+        }
+        break;
+
       default:
         $processed[$key] = is_array($values[$key]) ? array_filter($values[$key]) : $values[$key];
         break;
diff --git a/openlayers.module b/openlayers.module
index c730349..dca1732 100644
--- a/openlayers.module
+++ b/openlayers.module
@@ -115,8 +115,24 @@ function openlayers_build_map($map = array()) {
   // styles and layer styles are not required parameters
   $map['styles'] = isset($map['styles']) ? 
     $map['styles'] : array();
-  $map['layer_styles'] = isset($map['layer_styles']) ? 
-    $map['layer_styles'] : array();
+
+  $map['layer_styles'] = array();
+  if ( isset($map['layer_styles']) ) {
+    foreach ($map['layer_styles'] as $layer => $style) {
+      // UPGRADE NOTE:
+      // Presets up to 6.x-2.x-alpha10 always had a single style
+      // per layer specified. Newer ones have them splitted by role
+      if ( is_array($style) ) {
+        $map['layer_styles'][$layer] = $style;
+      } else {
+        $map['layer_styles'][$layer] = array(
+          'default' => $style,
+          'select' => $style,
+          'temporary' => $style
+        );
+      }
+    }
+  }
 
   $map['layers'] = _openlayers_layers_process($map['layers'], $map);
   $map['behaviors'] = _openlayers_behaviors_render($map['behaviors'], $map);
