diff --git a/plugins/behaviors/openlayers_behavior_zoomtolayer.inc b/plugins/behaviors/openlayers_behavior_zoomtolayer.inc
index 079472f..3139e2b 100644
--- a/plugins/behaviors/openlayers_behavior_zoomtolayer.inc
+++ b/plugins/behaviors/openlayers_behavior_zoomtolayer.inc
@@ -9,7 +9,7 @@
  */
 $plugin = array(
   'title' => t('Zoom to Layer'),
-  'description' => t('Zooms to the extent of a given layer on map loading.'),
+  'description' => t('Zooms to the extent of a given layer(s) on map loading. If multiple layers are chosen, zooms to the extent that includes all chosen layers.'),
   'type' => 'layer',
   'behavior' => array(
     'file' => 'openlayers_behavior_zoomtolayer.inc',
@@ -35,19 +35,20 @@ class openlayers_behavior_zoomtolayer extends openlayers_behavior {
   function options_form($defaults = array()) {
     return array(
       'zoomtolayer' => array(
-        '#type' => 'select',
+        '#type' => 'checkboxes',
         '#options' => $this->map['layers'],
-        '#description' => t('Select layer to zoom to when the map is loaded'),
+        '#description' => t('Select layer(s) to which to zoom when the map is loaded.'),
         '#default_value' => isset($defaults['zoomtolayer']) ? $defaults['zoomtolayer'] : NULL
       ),
       'point_zoom_level' => array(
+        '#title' => t('Point Zoom Level'),
         '#type' => 'textfield',
         '#default_value' => (isset($defaults['point_zoom_level'])) ?
           $defaults['point_zoom_level'] : 5,
         '#size' => 5,
-        '#title' => t('Point Zoom Level')
       ),
       'zoomtolayer_scale' => array(
+        '#title' => t('Zoom to Layer Scale'),
         '#type' => 'textfield',
         '#size' => 5,
         '#description' => t('Additional scaling to apply to the calculated bounds before zooming.  See <a href="http://dev.openlayers.org/docs/files/OpenLayers/BaseTypes/Bounds-js.html#OpenLayers.Bounds.scale">OpenLayers docs</a>.'),
diff --git a/plugins/behaviors/openlayers_behavior_zoomtolayer.js b/plugins/behaviors/openlayers_behavior_zoomtolayer.js
index 678c72e..a513383 100644
--- a/plugins/behaviors/openlayers_behavior_zoomtolayer.js
+++ b/plugins/behaviors/openlayers_behavior_zoomtolayer.js
@@ -8,9 +8,19 @@
  */
 Drupal.openlayers.addBehavior('openlayers_behavior_zoomtolayer', function (data, options) {
   var map = data.openlayers;
-  var layers = map.getLayersBy('drupalID', options.zoomtolayer);
+  var layers = map.getLayersBy('drupalID', {
+    test: function(id) {
+      for (var i in options.zoomtolayer) {
+        if (options.zoomtolayer[i] == id) {
+          return true;
+        }
+      }
+      return false;
+    }
+  });
 
   // Go through selected layers to get full extent.
+  map.fullExtent = new OpenLayers.Bounds();
   for (var i in layers) {
     if (layers[i].features !== undefined) {
       var zoomtolayer_scale = data.map.behaviors['openlayers_behavior_zoomtolayer'].zoomtolayer_scale;
@@ -20,22 +30,26 @@ Drupal.openlayers.addBehavior('openlayers_behavior_zoomtolayer', function (data,
       if (layers[i].layer_handler == 'kml') {
         layers[i].events.register('loadend', layers[i], function() {
           layerextent = layers[i].getDataExtent().scale(zoomtolayer_scale);
-          map.zoomToExtent(layerextent);
+          map.fullExtent.extend(layerextent);
+          map.zoomToExtent(map.fullExtent);
         });
       }
       else {
         layerextent = layers[i].getDataExtent();
         // Check for valid layer extent
         if (layerextent != null) {
-          map.zoomToExtent(layerextent.scale(zoomtolayer_scale));
-
-          // If unable to find width due to single point,
-          // zoom in with point_zoom_level option.
-          if (layerextent.getWidth() == 0.0) {
-            map.zoomTo(options.point_zoom_level);
-          }
+          map.fullExtent.extend(layerextent);
         }
       }
     }
   }
+
+  // If unable to find width due to single point,
+  // zoom in with point_zoom_level option.
+  if (map.fullExtent.getWidth() == 0.0) {
+    map.zoomTo(options.point_zoom_level);
+  }
+  else {
+    map.zoomToExtent(map.fullExtent.scale(zoomtolayer_scale));
+  }
 });
