diff --git a/gmap.info b/gmap.info
old mode 100755
new mode 100644
diff --git a/gmap.install b/gmap.install
index 2e9f3be..1297f99 100644
--- a/gmap.install
+++ b/gmap.install
@@ -18,8 +18,6 @@ function gmap_uninstall() {
   variable_del('gmap_markerfiles');
   variable_del('gmap_node_markers');
   variable_del('gmap_private_markerfile');
-
-  variable_del('googlemap_api_key');
 }
 
 /**
@@ -110,4 +108,4 @@ function gmap_update_7000() {
   
   return $ret;
 }
-*/
\ No newline at end of file
+*/
diff --git a/gmap.module b/gmap.module
index ebc6a5d..1d4d7fc 100644
--- a/gmap.module
+++ b/gmap.module
@@ -17,7 +17,7 @@
  * See http://groups.google.com/group/Google-Maps-API/web/api-version-changes
  * for details on using other version numbers.
  */
-define('GMAP_API_VERSION', '2.115');
+define('GMAP_API_VERSION', '3');
 
 /**
  * Get the defaults for a gmap.
@@ -294,14 +294,15 @@ function _gmap_base_js() {
   $ret[$path . '/js/poly.js'] = array('weight' => 3);
 
   global $language;
+  $file = 'api/js';
   $query = array(
-    'file' => 'api',
     'v' => variable_get('gmap_api_version', GMAP_API_VERSION),
-    'key' => gmap_get_key(),
-    'hl' => $language->language,
+    'language' => $language->language,
+    'sensor' => 'false',
   );
-  $ret[url('http://maps.google.com/maps', array('query' => $query))] = array(
+  $ret[url('http://maps.google.com/maps/'.$file, array('query' => $query))] = array(
     'type' => 'external',
+    'weight' => 2
   );
 
   $ret[file_create_url('public://js/gmap_markers.js')] = array(
@@ -344,6 +345,18 @@ function _gmap_doheader() {
 //  drupal_add_js($gmap_path . '/js/highlight.js');
 //  drupal_add_js($gmap_path . '/js/' . $mm . '_marker.js');
   drupal_add_js(array('gmap_markermanager' => $mms[$mm]), 'setting');
+// @@@
+drupal_add_js($gmap_path . '/js/poly.js');
+
+  global $language;
+  $file = 'api/js';
+  $query = array(
+    'v' => variable_get('gmap_api_version', GMAP_API_VERSION),
+    'language' => $language->language,
+    'sensor' => 'false',
+  );
+  drupal_add_js(url('http://maps.google.com/maps/' . $file, array('query' => $query)));
+
   $gmap_initialized = TRUE;
 }
 
@@ -611,6 +624,8 @@ function gmap_element_info() {
         'js' => array(
           "$path/js/gmap_shapes.js" => array('weight' => 2),
           "$path/js/overlay_edit.js" => array('weight' => 2),
+          "$path/js/polylineEdit/src/polylineEdit_packed.js" => array('weight' => 3),
+          "$path/js/polygonEdit/src/polygonEdit_packed.js" => array('weight' =>3),
         ),
       ),
 //      '#theme' => 'select',
diff --git a/gmap_location.info b/gmap_location.info
old mode 100755
new mode 100644
diff --git a/gmap_macro_builder.module b/gmap_macro_builder.module
index dfcf073..e6ca53c 100644
--- a/gmap_macro_builder.module
+++ b/gmap_macro_builder.module
@@ -115,7 +115,7 @@ function gmap_macro_builder_form($form, &$form_state, $settings = array(), $hide
   $form['macroform']['controltype'] = array(
     '#type' => 'select',
     '#title' => t('Controls'),
-    '#options' => drupal_map_assoc(array('None', 'Small', 'Large')),
+    '#options' => drupal_map_assoc(array('None', 'Small', 'Large', 'Android')),
     '#required' => FALSE,
     '#default_value' => $defaults['controltype'],
   );
diff --git a/gmap_settings_ui.inc b/gmap_settings_ui.inc
index 6317c50..5e9cd5a 100644
--- a/gmap_settings_ui.inc
+++ b/gmap_settings_ui.inc
@@ -1,4 +1,5 @@
 <?php
+// $Id: gmap_settings_ui.inc,v 1.12.2.5 2010/06/08 20:49:13 bdragon Exp $
 
 /**
  * @file
@@ -9,7 +10,6 @@ function gmap_admin_settings($form, &$form_state) {
   // Reset the icondata cache.
   gmap_get_icondata(TRUE);
 
-  //note the same google api key variable name as in the googlemap module is used
   //note the name of the variable for center of the map is latlong although the format is actually longitude, latitude
 
   $form['initialization'] = array(
@@ -36,6 +36,15 @@ function gmap_admin_settings($form, &$form_state) {
   $form['initialization']['googlemap_api_key']['#title'] = t('Google Maps API Key');
   $form['initialization']['googlemap_api_key']['#description'] = t('Your personal Googlemaps API key.  You must get this for each separate website at <a href="http://code.google.com/apis/maps/signup.html">Google Map API website</a>.');
 
+  if (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) != FILE_DOWNLOADS_PUBLIC) {
+    $form['initialization']['gmap_private_markerfile'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Path to gmap_markers.js'),
+      '#description' => t('You are using the <em>Private</em> download method. For markers to work properly. you must press the <em>Regenerate</em> button, manually copy js/gmap_markers.js from the files directory to a location accessible by the webserver, and enter the file path relative to the Drupal root (including the filename) in this field. Example: <em>sites/default/misc/gmap_markers.js</em>'),
+      '#default_value' => variable_get('gmap_private_markerfile', ''),
+    );
+  }
+
   $form['initialization']['rebuild'] = array(
     '#type' => 'fieldset',
     '#title' => t('Regenerate marker cache'),
@@ -147,7 +156,7 @@ function gmap_admin_settings($form, &$form_state) {
   $form['gmap_default']['controltype'] = array(
     '#type' => 'select',
     '#title' => t('Default control type'),
-    '#options' => array('None' => t('None'), 'Micro' => t('Micro'), 'Small' => t('Small'), 'Large' => t('Large')),
+    '#options' => array('None' => t('None'), 'Small' => t('Small'), 'Large' => t('Large')),
     '#default_value' => $defaults['controltype'],
   );
   gmap_widget_setup($form['gmap_default']['controltype'], 'controltype', 'settings_default_map');
@@ -157,9 +166,9 @@ function gmap_admin_settings($form, &$form_state) {
     '#title' => t('Map Type Control'),
     '#options' => array(
       'none' => t('None'),
-      'standard' => t('Standard (GMapTypeControl)'),
-      'hier' => t('Hierarchical (GHierarchicalMapTypeControl)'),
-      'menu' => t('Dropdown (GMenuMapTypeControl)'),
+      'standard' => t('Standard (google.maps.MapTypeControlStyle.DEFAULT)'),
+      'horiz' => t('Horizontal bar (google.maps.MapTypeControlStyle.HORIZONTAL_BAR)'),
+      'menu' => t('Dropdown (google.maps.MapTypeControlStyle.DROPDOWN_MENU)'),
     ),
     '#default_value' => $defaults['mtc'],
   );
diff --git a/gmap_taxonomy.info b/gmap_taxonomy.info
index 4578aa5..c152a83 100644
--- a/gmap_taxonomy.info
+++ b/gmap_taxonomy.info
@@ -4,4 +4,4 @@ package = Location
 core = 7.x
 dependencies[] = taxonomy
 dependencies[] = gmap
-files[] = gmap_taxonomy.module
\ No newline at end of file
+files[] = gmap_taxonomy.module
diff --git a/js/address.js b/js/address.js
old mode 100755
new mode 100644
index 5e633e1..6489f7a
--- a/js/address.js
+++ b/js/address.js
@@ -13,7 +13,7 @@
 Drupal.gmap.geocoder = function () {
   var theGeocoder;
   if (!theGeocoder) {
-    theGeocoder = new GClientGeocoder();
+    theGeocoder = new google.maps.Geocoder();
   }
   return theGeocoder;
 };
@@ -22,10 +22,10 @@ Drupal.gmap.addHandler('gmap', function (elem) {
   var obj = this;
 
   obj.bind('geocode_pan', function (addr) {
-    Drupal.gmap.geocoder().getLatLng(addr, function (point) {
-      if (point) {
-        obj.vars.latitude = point.lat();
-        obj.vars.longitude = point.lng();
+    Drupal.gmap.geocoder().geocode({'address': addr}, function (results, status) {
+      if (status == google.maps.GeocoderStatus.OK) {
+        obj.vars.latitude = results[0].geometry.location.lat();
+        obj.vars.longitude = results[0].geometry.location.lng();
         obj.change("move", -1);
       }
       else {
@@ -35,11 +35,11 @@ Drupal.gmap.addHandler('gmap', function (elem) {
   });
 
   obj.bind('geocode_panzoom', function (addr) {
-    Drupal.gmap.geocoder().getLocations(addr, function (response) {
-      if (response && response.Status.code === 200) {
-        var place = response.Placemark[0];
-        obj.vars.latitude = place.Point.coordinates[1];
-        obj.vars.longitude = place.Point.coordinates[0];
+    Drupal.gmap.geocoder().geocode({'address': addr}, function (results, status) {
+      if (status == google.maps.GeocoderStatus.OK) {
+        var place = results[0];
+        obj.vars.latitude = results[0].geometry.location.lat();
+        obj.vars.longitude = results[0].geometry.location.lng();
 
         // This is, of course, temporary.
 
@@ -67,10 +67,10 @@ Drupal.gmap.addHandler('gmap', function (elem) {
 
   obj.bind('preparemarker', function (marker) {
     if (marker.address && (!marker.latitude || !marker.longitude)) {
-      Drupal.gmap.geocoder().getLatLng(marker.address, function (point) {
-        if (point) {
-          marker.latitude = point.lat();
-          marker.longitude = point.lng();
+      Drupal.gmap.geocoder().geocode({'address': marker.address}, function (results, status) {
+        if (status == google.maps.GeocoderStatus.OK) {
+          marker.latitude = results[0].geometry.lat();
+          marker.longitude = results[0].geometry.lng();
         }
       });
     }
@@ -98,10 +98,10 @@ Drupal.gmap.addHandler('address', function (elem) {
   // This happens ASYNC!!!
   jQuery(elem).change(function () {
     if (elem.value.length > 0) {
-      Drupal.gmap.geocoder().getLatLng(elem.value, function (point) {
-        if (point) {
-          obj.vars.latitude = point.lat();
-          obj.vars.longitude = point.lng();
+      Drupal.gmap.geocoder().geocode({'address': elem.value}, function (results, status) {
+        if (status == google.maps.GeocoderStatus.OK) {
+          obj.vars.latitude = results[0].geometry.location.lat();
+          obj.vars.longitude = results[0].geometry.location.lng();
           obj.change("move", binding);
         }
         else {
@@ -138,9 +138,9 @@ Drupal.gmap.addHandler('locpick_address', function (elem) {
   // This happens ASYNC!!!
   jQuery(elem).change(function () {
     if (elem.value.length > 0) {
-      Drupal.gmap.geocoder().getLatLng(elem.value, function (point) {
-        if (point) {
-          obj.locpick_coord = point;
+      Drupal.gmap.geocoder().geocode({'address': elem.value}, function (results, status) {
+        if (status == google.maps.GeocoderStatus.OK) {
+          obj.locpick_coord = results[0];
           obj.change("locpickchange", binding);
         }
         else {
diff --git a/js/align.js b/js/align.js
old mode 100755
new mode 100644
index e90420c..9f4be0d
--- a/js/align.js
+++ b/js/align.js
@@ -24,7 +24,7 @@ Drupal.gmap.addHandler('gmap', function (elem) {
   var obj = this;
   // Respond to incoming alignment changes.
   obj.bind("alignchange", function () {
-    var cont = obj.map.getContainer();
+    var cont = obj.map.getDiv();
     $(cont)
       .removeClass('gmap-left')
       .removeClass('gmap-center')
@@ -48,4 +48,4 @@ Drupal.gmap.addHandler('gmap', function (elem) {
     }
   });
 });
-})(jQuery);
\ No newline at end of file
+})(jQuery);
diff --git a/js/gmap.js b/js/gmap.js
old mode 100755
new mode 100644
index d122cd5..16aed55
--- a/js/gmap.js
+++ b/js/gmap.js
@@ -187,6 +187,20 @@ Drupal.gmap.map = function (v) {
       obj.change(name, id, userdata);
     }, 0);
   };
+  
+  this.getMapTypeName = function(type) {
+    if (type == 'map' || type == 'roadmap') return 'Map';
+    if (type == 'hybrid') return 'Hybrid';
+    if (type == 'physical' || type == 'terrain') return 'Physical';
+    if (type == 'satellite') return 'Satellite';
+  };  
+  
+  this.getMapTypeId = function(type) {
+    if (type == 'Map' || type == 'Roadmap') return google.maps.MapTypeId.ROADMAP;
+    if (type == 'Hybrid') return google.maps.MapTypeId.HYBRID;
+    if (type == 'Physical' || type == 'Terrain') return google.maps.MapTypeId.TERRAIN;
+    if (type == 'Satellite') return google.maps.MapTypeId.SATELLITE;
+  };  
 };
 
 ////////////////////////////////////////
@@ -194,107 +208,103 @@ Drupal.gmap.map = function (v) {
 ////////////////////////////////////////
 Drupal.gmap.addHandler('gmap', function (elem) {
   var obj = this;
-
   var _ib = {};
 
-
   // Respond to incoming zooms
-  _ib.zoom = obj.bind("zoom", function () {
+  _ib.zoom = obj.bind("zoom", function (zoom) {
     obj.map.setZoom(obj.vars.zoom);
   });
 
   // Respond to incoming moves
   _ib.move = obj.bind("move", function () {
-    obj.map.panTo(new GLatLng(obj.vars.latitude, obj.vars.longitude));
-  });
-
-  // Respond to incoming recenter commands.
-  _ib.recenter = obj.bind("recenter", function (vars) {
-    if (vars) {
-      if (vars.bounds) {
-        obj.vars.latitude = vars.bounds.getCenter().lat();
-        obj.vars.longitude = vars.bounds.getCenter().lng();
-        obj.vars.zoom = obj.map.getBoundsZoomLevel(vars.bounds);
-      }
-      else {
-        obj.vars.latitude = vars.latitude;
-        obj.vars.longitude = vars.longitude;
-        obj.vars.zoom = vars.zoom;
-      }
-    }
-    obj.map.setCenter(new GLatLng(obj.vars.latitude, obj.vars.longitude), obj.vars.zoom);
-  });
-
-  // Respond to incoming map type changes
-  _ib.mtc = obj.bind("maptypechange", function () {
-    var i;
-    for (i = 0; i < obj.opts.mapTypeNames.length; i++) {
-      if (obj.opts.mapTypeNames[i] === obj.vars.maptype) {
-        obj.map.setMapType(obj.opts.mapTypes[i]);
-        break;
-      }
-    }
+    obj.map.panTo(new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude));
   });
 
   // Respond to incoming width changes.
   _ib.width = obj.bind("widthchange", function (w) {
-    obj.map.getContainer().style.width = w;
-    obj.map.checkResize();
+    obj.map.getDiv().style.width = w;
+    google.maps.event.trigger(obj.map);
   });
   // Send out outgoing width changes.
   // N/A
   // Respond to incoming height changes.
   _ib.height = obj.bind("heightchange", function (h) {
-    obj.map.getContainer().style.height = h;
-    obj.map.checkResize();
+    obj.map.getDiv().style.height = h;
+    google.maps.event.trigger(obj.map);
   });
   // Send out outgoing height changes.
   // N/A
 
   // Respond to incoming control type changes.
   _ib.ctc = obj.bind("controltypechange", function () {
-    if (obj.currentcontrol) {
-      obj.map.removeControl(obj.currentcontrol);
-    }
-    if (obj.vars.controltype === 'Micro') {
-      obj.map.addControl(obj.currentcontrol = new GSmallZoomControl());
-    }
-    else if (obj.vars.controltype === 'Small') {
-      obj.map.addControl(obj.currentcontrol = new GSmallMapControl());
+    if (obj.vars.controltype === 'Small') {
+      obj.map.setOptions({navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}});
     }
     else if (obj.vars.controltype === 'Large') {
-      obj.map.addControl(obj.currentcontrol = new GLargeMapControl());
+      obj.map.setOptions({navigationControlOptions: {style: google.maps.NavigationControlStyle.ZOOM_PAN}});
+    }
+    else if (obj.vars.controltype === 'Android') {
+      obj.map.setOptions({navigationControlOptions: {style: google.maps.NavigationControlStyle.ANDROID}});
     }
   });
   // Send out outgoing control type changes.
   // N/A
+  
+  // Respond to incoming map type changes.
+  _ib.mtc = obj.bind("maptypechange", function () {
+    obj.map.setMapTypeId(obj.getMapTypeId(obj.vars.maptype));
+  });
+  // Send out outgoing map type changes.
+  // N/A  
 
   obj.bind("bootstrap_options", function () {
     // Bootup options.
-    var opts = {}; // Object literal GMapOptions
+    var opts = {}; // Object literal google.maps.MapOptions
     obj.opts = opts;
 
+    // Disable default UI for custom options
+    opts.disableDefaultUI = true;
+    
+    // Set draggable property
+    if (obj.vars.behavior.nodrag) {
+      opts.draggable = false;
+    }
+    else if (obj.vars.behavior.nokeyboard) {
+      opts.keyboardShortcuts = false;
+    }
+
+    // Set default map type (set to road map if nothing selected)
+    switch (obj.vars.maptype) {
+      case 'Hybrid':
+        opts.mapTypeId = google.maps.MapTypeId.HYBRID;
+        break;
+      case 'Physical':
+        opts.mapTypeId = google.maps.MapTypeId.TERRAIN;
+        break;
+      case 'Satellite':
+        opts.mapTypeId = google.maps.MapTypeId.SATELLITE;
+        break;
+      case 'Map':
+      default:
+        opts.mapTypeId = google.maps.MapTypeId.ROADMAP;
+        break;
+    }
+
     // Null out the enabled types.
-    opts.mapTypes = [];
-    opts.mapTypeNames = [];
+    opts.mapTypeIds = [];
 
-    // Load google map types.
     if (obj.vars.baselayers.Map) {
-      opts.mapTypes.push(G_NORMAL_MAP);
-      opts.mapTypeNames.push('Map');
-    }
-    if (obj.vars.baselayers.Satellite) {
-      opts.mapTypes.push(G_SATELLITE_MAP);
-      opts.mapTypeNames.push('Satellite');
+      opts.mapTypeIds.push(google.maps.MapTypeId.ROADMAP);
     }
     if (obj.vars.baselayers.Hybrid) {
-      opts.mapTypes.push(G_HYBRID_MAP);
-      opts.mapTypeNames.push('Hybrid');
+      opts.mapTypeIds.push(google.maps.MapTypeId.HYBRID);
     }
     if (obj.vars.baselayers.Physical) {
-      opts.mapTypes.push(G_PHYSICAL_MAP);
-      opts.mapTypeNames.push('Physical');
+      opts.mapTypeIds.push(google.maps.MapTypeId.TERRAIN);
     }
+    if (obj.vars.baselayers.Satellite) {
+      opts.mapTypeIds.push(google.maps.MapTypeId.SATELLITE);
+    }    
 
     if (obj.vars.draggableCursor) {
       opts.draggableCursor = obj.vars.draggableCursor;
@@ -305,44 +315,64 @@ Drupal.gmap.addHandler('gmap', function (elem) {
     if (obj.vars.backgroundColor) {
       opts.backgroundColor = obj.vars.backgroundColor;
     }
-  });
-
-  obj.bind("boot", function () {
-    obj.map = new GMap2(elem, obj.opts);
-  });
-
-  obj.bind("init", function () {
-    var map = obj.map;
 
     // Map type control
+    opts.mapTypeControl = true;
+    opts.mapTypeControlOptions = {};    
     if (obj.vars.mtc === 'standard') {
-      map.addControl(new GMapTypeControl());
+      opts.mapTypeControlOptions.style = google.maps.MapTypeControlStyle.DEFAULT;
     }
-    else if (obj.vars.mtc === 'hier') {
-      map.addControl(new GHierarchicalMapTypeControl());
+    else if (obj.vars.mtc === 'horiz') {
+      opts.mapTypeControlOptions.style = google.maps.MapTypeControlStyle.HORIZONTAL_BAR;
     }
     else if (obj.vars.mtc === 'menu') {
-      map.addControl(new GMenuMapTypeControl());
+      opts.mapTypeControlOptions.style = google.maps.MapTypeControlStyle.DROPDOWN_MENU;
     }
 
-    if (obj.vars.behavior.overview) {
-      map.addControl(new GOverviewMapControl());
+    // Navigation control type
+    if (obj.vars.controltype !== 'None') {
+      opts.navigationControl = true;
     }
-    if (obj.vars.behavior.googlebar) {
-      map.enableGoogleBar();
+    if (obj.vars.controltype === 'Small') {
+      opts.navigationControlOptions = {style: google.maps.NavigationControlStyle.SMALL};
     }
-    if (obj.vars.behavior.scale) {
-      map.addControl(new GScaleControl());
+    else if (obj.vars.controltype === 'Large') {
+      opts.navigationControlOptions = {style: google.maps.NavigationControlStyle.ZOOM_PAN};
     }
-    if (obj.vars.behavior.nodrag) {
-      map.disableDragging();
+
+    // Set scale control visibility
+    opts.scaleControl = obj.vars.behavior.scale;
+
+    // Scroll wheel control
+    if (obj.vars.behavior.nomousezoom) {
+      opts.scrollwheel = false;
     }
-    else if (!obj.vars.behavior.nokeyboard) {
-      obj._kbdhandler = new GKeyboardHandler(map);
+    // Disable double-click zoom
+    if (obj.vars.behavior.nocontzoom) {
+      opts.disableDoubleClickZoom = true;
     }
+
+  });
+
+  obj.bind("boot", function () {
+    obj.map = new google.maps.Map(elem, obj.opts);
+    //console.log(obj.map);
+  });
+
+  obj.bind("init", function () {
+    var map = obj.map;
+
+    // Not implemented in API v3
+    // if (obj.vars.behavior.overview) {
+    //   map.addControl(new GOverviewMapControl());
+    // }
+    // if (obj.vars.behavior.googlebar) {
+    //   map.enableGoogleBar();
+    // }
+   
     if (obj.vars.extent) {
       var c = obj.vars.extent;
-      var extent = new GLatLngBounds(new GLatLng(c[0][0], c[0][1]), new GLatLng(c[1][0], c[1][1]));
+      var extent = new google.maps.LatLngBounds(new google.maps.LatLng(c[0][0], c[0][1]), new google.maps.LatLng(c[1][0], c[1][1]));
       obj.vars.latitude = extent.getCenter().lat();
       obj.vars.longitude = extent.getCenter().lng();
       obj.vars.zoom = map.getBoundsZoomLevel(extent);
@@ -353,32 +383,25 @@ Drupal.gmap.addHandler('gmap', function (elem) {
       // hence it being a behavior.
       setTimeout(function () {
         var r = function () {
-          map.checkResize();
-          map.setCenter(new GLatLng(obj.vars.latitude, obj.vars.longitude), obj.vars.zoom);
+          google.maps.event.trigger(map);
+          map.setCenter(new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude), obj.vars.zoom);
         };
         jQuery(elem).parents('fieldset.collapsible').children('legend').children('a').click(r);
         // Would be nice, but doesn't work.
         //$(elem).parents('fieldset.collapsible').children('.fieldset-wrapper').scroll(r);
       }, 0);
     }
-    map.setCenter(new GLatLng(obj.vars.latitude, obj.vars.longitude), obj.vars.zoom);
-
-    if (!obj.vars.nocontzoom) {
-      map.enableDoubleClickZoom();
-      map.enableContinuousZoom();
-    }
-    if (!obj.vars.behavior.nomousezoom) {
-      map.enableScrollWheelZoom();
-    }
+    map.setCenter(new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude));
+    map.setZoom(obj.vars.zoom);
 
     // Send out outgoing zooms
-    GEvent.addListener(map, "zoomend", function (oldzoom, newzoom) {
-      obj.vars.zoom = newzoom;
+    google.maps.event.addListener(map, "zoom_changed", function () {
+      obj.vars.zoom = map.getZoom();
       obj.change("zoom", _ib.zoom);
     });
 
     // Send out outgoing moves
-    GEvent.addListener(map, "moveend", function () {
+    google.maps.event.addListener(map, "center_changed", function () {
       var coord = map.getCenter();
       obj.vars.latitude = coord.lat();
       obj.vars.longitude = coord.lng();
@@ -386,21 +409,27 @@ Drupal.gmap.addHandler('gmap', function (elem) {
     });
 
     // Send out outgoing map type changes.
-    GEvent.addListener(map, "maptypechanged", function () {
+    google.maps.event.addListener(map, "maptypeid_changed", function () {
       // If the map isn't ready yet, ignore it.
       if (obj.ready) {
-        var type = map.getCurrentMapType();
-        var i;
-        for (i = 0; i < obj.opts.mapTypes.length; i++) {
-          if (obj.opts.mapTypes[i] === type) {
-            obj.vars.maptype = obj.opts.mapTypeNames[i];
-          }
-        }
+        obj.vars.maptype = obj.getMapTypeName(map.getMapTypeId());
         obj.change("maptypechange", _ib.mtc);
       }
     });
-
-  });
+    
+    /*
+    google.maps.event.addListener(map, 'click', function(event) {
+      alert(Drupal.gmap.getIcon("big blue", 0));
+      var marker = new google.maps.Marker({
+        position: event.latLng, 
+        map: map
+      });
+      google.maps.event.addListener(marker, 'click', function() {
+        marker.setMap(null);
+      });
+    });
+    */
+  });  
 });
 
 ////////////////////////////////////////
@@ -423,32 +452,32 @@ Drupal.gmap.addHandler('zoom', function (elem) {
 //          Latitude widget           //
 ////////////////////////////////////////
 Drupal.gmap.addHandler('latitude', function (elem) {
-  var obj = this;
-  // Respond to incoming movements.
-  var binding = obj.bind("move", function () {
-    elem.value = '' + obj.vars.latitude;
-  });
-  // Send out outgoing movements.
-  jQuery(elem).change(function () {
-    obj.vars.latitude = Number(this.value);
-    obj.change("move", binding);
-  });
+//  var obj = this;
+//  // Respond to incoming movements.
+//  var binding = obj.bind("move", function () {
+//    elem.value = '' + obj.vars.latitude;
+//  });
+//  // Send out outgoing movements.
+//  $(elem).change(function () {
+//    obj.vars.latitude = Number(this.value);
+//    obj.change("move", binding);
+//  });
 });
 
 ////////////////////////////////////////
 //         Longitude widget           //
 ////////////////////////////////////////
 Drupal.gmap.addHandler('longitude', function (elem) {
-  var obj = this;
-  // Respond to incoming movements.
-  var binding = obj.bind("move", function () {
-    elem.value = '' + obj.vars.longitude;
-  });
-  // Send out outgoing movements.
-  jQuery(elem).change(function () {
-    obj.vars.longitude = Number(this.value);
-    obj.change("move", binding);
-  });
+//  var obj = this;
+//  // Respond to incoming movements.
+//  var binding = obj.bind("move", function () {
+//    elem.value = '' + obj.vars.longitude;
+//  });
+//  // Send out outgoing movements.
+//  $(elem).change(function () {
+//    obj.vars.longitude = Number(this.value);
+//    obj.change("move", binding);
+//  });
 });
 
 ////////////////////////////////////////
@@ -470,27 +499,6 @@ Drupal.gmap.addHandler('latlon', function (elem) {
 });
 
 ////////////////////////////////////////
-//          Extent widget             //
-////////////////////////////////////////
-Drupal.gmap.addHandler('extent', function (elem) {
-  var obj = this;
-  // Respond to incoming extent changes.
-  var binding = obj.bind("move", function () {
-    var b = obj.map.getBounds();
-    elem.value = '' + b.getSouthWest().lng() + ',' + b.getSouthWest().lat() + ',' + b.getNorthEast().lng() + ',' + b.getNorthEast().lat();
-  });
-  // Send out outgoing extent changes.
-  jQuery(elem).change(function () {
-    var t = this.value.split(',');
-    var b = new GLatLngBounds(new GLatLng(Number(t[1]), Number(t[0])), new GLatLng(Number(t[3]), Number(t[2])));
-    obj.vars.latitude = b.getCenter().lat();
-    obj.vars.longitude = b.getCenter().lng();
-    obj.vars.zoom = obj.map.getBoundsZoomLevel(b);
-    obj.map.setCenter(new GLatLng(obj.vars.latitude, obj.vars.longitude), obj.vars.zoom);
-  });
-});
-
-////////////////////////////////////////
 //          Maptype widget            //
 ////////////////////////////////////////
 Drupal.gmap.addHandler('maptype', function (elem) {
@@ -505,7 +513,7 @@ Drupal.gmap.addHandler('maptype', function (elem) {
     obj.change("maptypechange", binding);
   });
 });
-
+ 
 (function () { // BEGIN CLOSURE
   var re = /([0-9.]+)\s*(em|ex|px|in|cm|mm|pt|pc|%)/;
   var normalize = function (str) {
@@ -515,6 +523,7 @@ Drupal.gmap.addHandler('maptype', function (elem) {
     }
     return null;
   };
+
   ////////////////////////////////////////
   //           Width widget             //
   ////////////////////////////////////////
@@ -536,7 +545,7 @@ Drupal.gmap.addHandler('maptype', function (elem) {
       jQuery(elem).change();
     });
   });
-
+ 
   ////////////////////////////////////////
   //           Height widget            //
   ////////////////////////////////////////
@@ -558,7 +567,6 @@ Drupal.gmap.addHandler('maptype', function (elem) {
       jQuery(elem).change();
     });
   });
-
 })(); // END CLOSURE
 
 ////////////////////////////////////////
@@ -572,21 +580,23 @@ Drupal.gmap.addHandler('controltype', function (elem) {
   });
   // Send out outgoing height changes.
   jQuery(elem).change(function () {
-    obj.vars.controltype = elem.value;
+    obj.vars.controltype = elem.value
     obj.change("controltypechange", binding);
   });
 });
 
-// Map cleanup.
-jQuery(document).unload(GUnload);
+// // Map cleanup.
+// if (Drupal.jsEnabled) {
+//   $(document).unload(GUnload);
+// }
 
 Drupal.behaviors.GMap = {
   attach: function (context, settings) {
-    if (Drupal.settings && Drupal.settings['gmap_remap_widgets']) {
-      jQuery.each(Drupal.settings['gmap_remap_widgets'], function(key, val) {
+  if (Drupal.settings && Drupal.settings['gmap_remap_widgets']) {
+    jQuery.each(Drupal.settings['gmap_remap_widgets'], function(key, val) {
         jQuery('#'+ key).addClass('gmap-control');
-      });
-    }
+    });
+  }
     jQuery('.gmap-gmap:not(.gmap-processed)', context).addClass('gmap-processed').each(function () {Drupal.gmap.setup.call(this)});
     jQuery('.gmap-control:not(.gmap-processed)', context).addClass('gmap-processed').each(function () {Drupal.gmap.setup.call(this)});
   }
diff --git a/js/gmap_marker.js b/js/gmap_marker.js
old mode 100755
new mode 100644
index ebed9a6..9aa8ffc
--- a/js/gmap_marker.js
+++ b/js/gmap_marker.js
@@ -1,4 +1,3 @@
-
 /**
  * @file
  * GMap Markers
@@ -8,23 +7,29 @@
 /*global Drupal, GMarker */
 
 // Replace to override marker creation
-Drupal.gmap.factory.marker = function (loc, opts) {
-  return new GMarker(loc, opts);
+Drupal.gmap.factory.marker = function (opts) {
+  return new google.maps.Marker(opts);
 };
 
 Drupal.gmap.addHandler('gmap', function (elem) {
   var obj = this;
 
   obj.bind('addmarker', function (marker) {
-    obj.map.addOverlay(marker.marker);
+	if ( !obj.map.markers ) obj.map.markers = new Array();
+    marker.marker.setMap(obj.map);
+	obj.map.markers.push( marker.marker );
   });
 
   obj.bind('delmarker', function (marker) {
-    obj.map.removeOverlay(marker.marker);
+    marker.marker.setMap(null);
   });
 
   obj.bind('clearmarkers', function () {
     // @@@ Maybe don't nuke ALL overlays?
-    obj.map.clearOverlays();
+	if ( obj.map.markers ) {
+		for(var i=0; i < obj.map.markers.length; i++){
+			obj.map.markers[i].setMap(null);
+		}
+	}
   });
-});
+});
\ No newline at end of file
diff --git a/js/icon.js b/js/icon.js
index 14e6224..fe58ca4 100644
--- a/js/icon.js
+++ b/js/icon.js
@@ -1,4 +1,3 @@
-
 /**
  * @file
  * GIcon manager for GMap.
@@ -17,11 +16,14 @@ Drupal.gmap.getIcon = function (setname, sequence) {
   var othimg = ['printImage', 'mozPrintImage', 'printShadow', 'transparent'];
   // If no setname, return google's default icon.
   if (!setname) {
-    return G_DEFAULT_ICON;
+    return;
   }
   if (!this.gicons) {
     this.gicons = {};
   }
+  if (!this.gshadows) {
+    this.gshadows = {};
+  }
 
   // If no sequence, synthesise one.
   if (!sequence) {
@@ -41,9 +43,11 @@ Drupal.gmap.getIcon = function (setname, sequence) {
       alert('Request for invalid marker set ' + setname + '!');
     }
     this.gicons[setname] = [];
+    this.gshadows[setname] = [];
     var q = Drupal.gmap.icons[setname];
     var p, t;
     for (var i = 0; i < q.sequence.length; i++) {
+      /*
       t = new GIcon();
       p = Drupal.gmap.iconpath + q.path;
       t.image = p + q.sequence[i].f;
@@ -54,6 +58,24 @@ Drupal.gmap.getIcon = function (setname, sequence) {
       t.iconSize = new GSize(q.sequence[i].w, q.sequence[i].h);
       t.iconAnchor = new GPoint(q.anchorX, q.anchorY);
       t.infoWindowAnchor = new GPoint(q.infoX, q.infoY);
+      */
+      p = Drupal.gmap.iconpath + q.path;
+      t = new google.maps.MarkerImage(p + q.sequence[i].f,
+        new google.maps.Size(q.sequence[i].w, q.sequence[i].h),
+        null,
+        new google.maps.Point(q.anchorX, q.anchorY)
+      );
+      if (q.shadow.f !== '') {
+        this.gshadows[setname][i] = new google.maps.MarkerImage(p + q.shadow.f,
+          new google.maps.Size(q.shadow.w, q.shadow.h),
+          null,
+          new google.maps.Point(q.anchorX, q.anchorY)
+        );
+      }
+      else {
+        this.gshadows[setname][i] = null;
+      }
+      
       for (var j = 0; j < othimg.length; j++) {
         if (q[othimg[j]] !== '') {
           t[othimg[j]] = p + q[othimg[j]];
@@ -68,6 +90,10 @@ Drupal.gmap.getIcon = function (setname, sequence) {
   return this.gicons[setname][sequence % this.gicons[setname].length];
 };
 
+Drupal.gmap.getShadow = function (setname, sequence) {
+  if (this.gshadows) return this.gshadows[setname][sequence % this.gicons[setname].length];
+};
+
 /**
  * JSON callback to set up the icon defs.
  * When doing the JSON call, the data comes back in a packed format.
@@ -202,6 +228,7 @@ Drupal.gmap.addHandler('gmap', function (elem) {
     // Provide icons to markers.
     obj.bind('preparemarker', function (marker) {
       marker.opts.icon = Drupal.gmap.getIcon(marker.markername, marker.offset);
+      marker.opts.shadow = Drupal.gmap.getShadow(marker.markername, marker.offset);
     });
   }
 });
diff --git a/js/locpick.js b/js/locpick.js
index d3720dd..2eb37f8 100644
--- a/js/locpick.js
+++ b/js/locpick.js
@@ -11,13 +11,14 @@ Drupal.gmap.addHandler('gmap', function (elem) {
   var obj = this;
 
   var binding = obj.bind("locpickchange", function () {
-    if (obj.locpick_coord) {
-      GEvent.trigger(obj.map, "click", null, obj.locpick_coord);
+    if (obj.locpick_point && obj.locpick_coord) {
+      obj.locpick_point.setPosition(obj.locpick_coord);
     }
   });
 
   obj.bind("locpickremove", function () {
-    obj.map.removeOverlay(obj.locpick_point);
+    //obj.map.removeOverlay(obj.locpick_point);
+    if (obj.locpick_point) obj.locpick_point.setMap(null);
     obj.locpick_point = null;
     obj.locpick_coord = null;
     obj.change('locpickchange', -1);
@@ -25,25 +26,33 @@ Drupal.gmap.addHandler('gmap', function (elem) {
 
   obj.bind("init", function () {
     if (obj.vars.behavior.locpick) {
-      obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude);
+      obj.locpick_coord = new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude);
 
-      GEvent.addListener(obj.map, "click", function (overlay, point) {
-        obj.map.checkResize();
-        if (!overlay) {
+      google.maps.event.addListener(obj.map, "click", function (event) {
+        google.maps.event.trigger(obj.map, "resize");
+        if (event) {
           if (!obj.locpick_point) {
-            obj.map.addOverlay(obj.locpick_point = new GMarker(point, {draggable: true}));
+            obj.locpick_point = new google.maps.Marker({
+              position: event.latLng, 
+              map: obj.map,
+              draggable: true
+            });
+          }
+          else {
+            obj.locpick_point.setPosition(event.latLng);
           }
-          obj.locpick_point.setLatLng(point);
-          GEvent.addListener(obj.locpick_point, 'drag', function () {
-            obj.locpick_coord = obj.locpick_point.getLatLng();
+          google.maps.event.addListener(obj.locpick_point, 'drag', function () {
+            //obj.locpick_coord = obj.locpick_point.getLatLng();
+            obj.locpick_coord = new google.maps.LatLng(obj.locpick_point.position.lat(), obj.locpick_point.position.lng());
             obj.change('locpickchange', binding);
           });
-          GEvent.addListener(obj.locpick_point, 'dragend', function () {
-            obj.locpick_coord = obj.locpick_point.getLatLng();
+          google.maps.event.addListener(obj.locpick_point, 'dragend', function () {
+            //obj.locpick_coord = obj.locpick_point.getLatLng();
+            obj.locpick_coord = new google.maps.LatLng(obj.locpick_point.position.lat(), obj.locpick_point.position.lng());
             obj.change('locpickchange', binding);
           });
-          obj.locpick_coord = point;
-          obj.map.panTo(point);
+          obj.locpick_coord = event.latLng;
+          obj.map.panTo(event.latLng);
           obj.change('locpickchange', binding);
         }
         else {
@@ -71,7 +80,8 @@ Drupal.gmap.addHandler('locpick_latitude', function (elem) {
   obj.bind("init", function () {
     if (elem.value !== '') {
       obj.vars.latitude = Number(elem.value);
-      obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude);
+      //obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude);
+      obj.locpick_coord = new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude);
     }
     else {
       obj.locpick_coord = null;
@@ -91,11 +101,13 @@ Drupal.gmap.addHandler('locpick_latitude', function (elem) {
   $(elem).change(function () {
     if (elem.value !== '') {
       if (obj.locpick_coord) {
-        obj.locpick_coord = new GLatLng(Number(elem.value), obj.locpick_coord.lng());
+        //obj.locpick_coord = new GLatLng(Number(elem.value), obj.locpick_coord.lng());
+        obj.locpick_coord = new google.maps.LatLng(Number(elem.value), obj.locpick_coord.lng());
         obj.change('locpickchange', binding);
       }
       else {
-        obj.locpick_coord = new GLatLng(Number(elem.value), 0.0);
+        //obj.locpick_coord = new GLatLng(Number(elem.value), 0.0);
+        obj.locpick_coord = new google.maps.LatLng(Number(elem.value), 0.0);
       }
     }
     else {
@@ -110,7 +122,8 @@ Drupal.gmap.addHandler('locpick_longitude', function (elem) {
   obj.bind("init", function () {
     if (elem.value !== '') {
       obj.vars.longitude = Number(elem.value);
-      obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude);
+      //obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude);
+      obj.locpick_coord = new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude);
     }
     else {
       obj.locpick_invalid = true;
@@ -129,11 +142,13 @@ Drupal.gmap.addHandler('locpick_longitude', function (elem) {
   $(elem).change(function () {
     if (elem.value !== '') {
       if (obj.locpick_coord) {
-        obj.locpick_coord = new GLatLng(obj.locpick_coord.lat(), Number(elem.value));
+        //obj.locpick_coord = new GLatLng(obj.locpick_coord.lat(), Number(elem.value));
+        obj.locpick_coord = new google.maps.LatLng(obj.locpick_coord.lat(), Number(elem.value));
         obj.change('locpickchange', binding);
       }
       else {
-        obj.locpick_coord = new GLatLng(0.0, Number(elem.value));
+        //obj.locpick_coord = new GLatLng(0.0, Number(elem.value));
+        obj.locpick_coord = new google.maps.LatLng(0.0, Number(elem.value));
       }
     }
     else {
diff --git a/js/macro.js b/js/macro.js
old mode 100755
new mode 100644
diff --git a/js/marker.js b/js/marker.js
index aef247f..14fc5f0 100644
--- a/js/marker.js
+++ b/js/marker.js
@@ -1,4 +1,5 @@
 
+
 /**
  * @file
  * Common marker routines.
@@ -11,33 +12,35 @@ Drupal.gmap.addHandler('gmap', function (elem) {
 
   obj.bind('init', function () {
     if (obj.vars.behavior.autozoom) {
-      obj.bounds = new GLatLngBounds();
+      obj.bounds = new google.maps.LatLngBounds();
     }
   });
 
   obj.bind('addmarker', function (marker) {
-    var m = Drupal.gmap.factory.marker(new GLatLng(marker.latitude, marker.longitude), marker.opts);
+    marker.opts.position = new google.maps.LatLng(marker.latitude, marker.longitude);
+    marker.opts.map = obj.map;
+    var m = Drupal.gmap.factory.marker(marker.opts);
     marker.marker = m;
-    GEvent.addListener(m, 'click', function () {
+    google.maps.event.addListener(m, 'click', function () {
       obj.change('clickmarker', -1, marker);
     });
     if (obj.vars.behavior.highlight) {
-      GEvent.addListener(m, 'mouseover', function () {
+      google.maps.event.addListener(m, 'mouseover', function () {
         var highlightColor = '#' + obj.vars.styles.highlight_color;
         highlightMarker(obj.map, marker, 'hoverHighlight', highlightColor);
       });
-      GEvent.addListener(m, 'mouseout', function () {
+      google.maps.event.addListener(m, 'mouseout', function () {
         unHighlightMarker(obj.map, marker, 'hoverHighlight');
       });
     }
     if (obj.vars.behavior.extramarkerevents) {
-      GEvent.addListener(m, 'mouseover', function () {
+      google.maps.event.addListener(m, 'mouseover', function () {
         obj.change('mouseovermarker', -1, marker);
       });
-      GEvent.addListener(m, 'mouseout', function () {
+      google.maps.event.addListener(m, 'mouseout', function () {
         obj.change('mouseoutmarker', -1, marker);
       });
-      GEvent.addListener(m, 'dblclick', function () {
+      google.maps.event.addListener(m, 'dblclick', function () {
         obj.change('dblclickmarker', -1, marker);
       });
     }
@@ -129,7 +132,7 @@ Drupal.gmap.addHandler('gmap', function (elem) {
     // Reset bounds if autozooming
     // @@@ Perhaps we should have a bounds for both markers and shapes?
     if (obj.vars.behavior.autozoom) {
-      obj.bounds = new GLatLngBounds();
+      obj.bounds = new google.maps.LatLngBounds();
     }
   });
 
diff --git a/js/markerloader_static.js b/js/markerloader_static.js
index 774708c..133a062 100644
--- a/js/markerloader_static.js
+++ b/js/markerloader_static.js
@@ -1,3 +1,4 @@
+/* $Id: markerloader_static.js,v 1.3 2009/02/11 19:30:22 bdragon Exp $ */
 
 /**
  * @file
diff --git a/js/overlay_edit.js b/js/overlay_edit.js
old mode 100755
new mode 100644
index 36895d4..aa3435a
--- a/js/overlay_edit.js
+++ b/js/overlay_edit.js
@@ -126,7 +126,7 @@ Drupal.gmap.addHandler('gmap', function (elem) {
               if (!markers[n.marker]) {
                 markers[n.marker] = [];
               }
-              var pt = n.overlay.getLatLng();
+              var pt = n.overlay.getPosition();
               var ptxt = '';
               if (n.html) {
                 ptxt = ':' + n.html;
@@ -156,7 +156,7 @@ Drupal.gmap.map.prototype.status = function (text) {
 };
 
 // Extend markers to store type info.
-GMarker.prototype.gmapMarkerData = function (data) {
+google.maps.Marker.prototype.gmapMarkerData = function (data) {
   if (data) {
     this._gmapdata = data;
   }
@@ -188,9 +188,10 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
       obj._oe.featuresRef = {};
       obj._oe.editing = false;
       obj._oe.markerseq = {};
-      GEvent.addListener(obj.map, 'click', function (overlay, point) {
+      google.maps.event.addListener(obj.map, 'click', function (event) {
         var ctx, s, p;
-        if (overlay) {
+        var point = event.latLng;
+        if (0 && overlay) {
           if (obj._oe.editing) {
             // Work around problem where double clicking to finish a poly fires a click event.
             obj._oe.editing = false;
@@ -207,8 +208,13 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
                 obj._oe.markerseq[m] = -1;
               }
               obj._oe.markerseq[m] = obj._oe.markerseq[m] + 1;
-              p = new GMarker(point, {icon: Drupal.gmap.getIcon(m, obj._oe.markerseq[m])});
-              obj.map.addOverlay(p);
+              //p = new GMarker(point, {icon: Drupal.gmap.getIcon(m, obj._oe.markerseq[m])});
+              //obj.map.addOverlay(p);
+              var p = new google.maps.Marker({
+                position: point, 
+                map: obj.map,
+                icon: Drupal.gmap.getIcon(m, obj._oe.markerseq[m]).ra
+              });
               ctx = {
                 'type' : 'point',
                 'marker' : m,
@@ -216,19 +222,19 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
               };
               var offset = obj._oe.features.push(ctx) - 1;
               obj._oe.editing = false;
-              GEvent.addListener(p, "click", function () {
+              google.maps.event.addListener(p, "click", function () {
                 switch (obj.vars.overlay_del_mode) {
                   case 'Remove':
                     obj._oe.markerseq[m] = obj._oe.markerseq[m] - 1;
                     ctx.type = 'deleted';
-                    obj.map.removeOverlay(p);
+                    p.setMap(null);
                     ctx.overlay = null;
                     var tmpcnt = 0;
                     // Renumber markers in set.
                     jQuery.each(obj._oe.features, function (i, n) {
                       if (n.type && n.type === 'point' && n.marker === m) {
                         var pt = n.overlay.getLatLng();
-                        n.overlay.setImage(Drupal.gmap.getIcon(n.marker, tmpcnt).image);
+                        n.overlay.setImage(Drupal.gmap.getIcon(n.marker, tmpcnt).ra);
                         tmpcnt = tmpcnt + 1;
                       }
                     });
@@ -253,20 +259,26 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
                 ctx.style = obj.vars.styles.overlayline.slice();
                 s = ctx.style;
               }
+              /*
               p = new GPolyline([point], '#' + s[0], Number(s[1]), s[2] / 100);
               obj.map.addOverlay(p);
+              */
+              var coord = [ new google.maps.LatLng(point) ];
+              var p = new google.maps.Polyline({path:coord, strokeColor:"#"+s[0], strokeOpacity:s[2]/100, strokeWeight:Number(s[1])});
+              p.setMap(obj.map);
+              
               ctx.overlay = p;
               obj._oe.featuresRef[p] = obj._oe.features.push(ctx) - 1;
 
-              p.enableDrawing();
-              p.enableEditing({onEvent: "mouseover"});
-              p.disableEditing({onEvent: "mouseout"});
-              GEvent.addListener(p, "endline", function () {
+              p.runEdit( true );
+              google.maps.event.addListener( p, "mouseover", function(){p.runEdit( true );} );
+              google.maps.event.addListener( p, "mouseout", function(){p.stopEdit();} );
+              google.maps.event.addListener(p, "endline", function () {
                 //obj._oe.editing = false;
-                GEvent.addListener(p, "lineupdated", function () {
+                google.maps.event.addListener(p, "lineupdated", function () {
                   obj.change('mapedited', -1);
                 });
-                GEvent.addListener(p, "click", function (latlng, index) {
+                google.maps.event.addListener(p, "click", function (latlng, index) {
                   if (typeof index === "number") {
                     // Delete vertex on click.
                     p.deleteVertex(index);
@@ -297,15 +309,14 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
               ctx.overlay = p;
               obj._oe.featuresRef[p] = obj._oe.features.push(ctx) - 1;
 
-              p.enableDrawing();
-              p.enableEditing({onEvent: "mouseover"});
-              p.disableEditing({onEvent: "mouseout"});
-              GEvent.addListener(p, "endline", function () {
+              google.maps.event.addListener( p, "mouseover", function(){p.runEdit( true );} );
+              google.maps.event.addListener( p, "mouseout", function(){p.stopEdit();} );
+              google.maps.event.addListener(p, "endline", function () {
                 //obj._oe.editing = false;
-                GEvent.addListener(p, "lineupdated", function () {
+                google.maps.event.addListener(p, "lineupdated", function () {
                   obj.change('mapedited', -1);
                 });
-                GEvent.addListener(p, "click", function (latlng, index) {
+                google.maps.event.addListener(p, "click", function (latlng, index) {
                   if (typeof index === "number") {
                     p.deleteVertex(index);
                   }
@@ -326,7 +337,7 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
               // @@@ Translate
               obj.status("Drawing circle. Click a point on the rim to place.");
 
-              var handle = GEvent.addListener(obj.map, 'click', function (overlay, point) {
+              var handle = google.maps.event.addListener(obj.map, 'click', function (overlay, point) {
                 if (point) {
                   var ctx = {
                     'type' : 'circle',
@@ -346,7 +357,7 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
                   obj.map.addOverlay(p);
                   ctx.overlay = p;
                   obj._oe.featuresRef[p] = obj._oe.features.push(ctx) - 1;
-                  GEvent.addListener(p, "click", function () {
+                  google.maps.event.addListener(p, "click", function () {
                     switch (obj.vars.overlay_del_mode) {
                       case 'Remove':
                         ctx.type = 'deleted';
@@ -364,7 +375,7 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
                   // @@@ Uh, do cleanup I suppose..
                 }
                 obj._oe.editing = false;
-                GEvent.removeListener(handle);
+                google.maps.event.removeListener(handle);
                 obj.change('mapedited', -1);
               });
               break;
@@ -373,4 +384,4 @@ Drupal.gmap.addHandler('overlayedit', function (elem) {
       });
     }
   });
-});
\ No newline at end of file
+});
diff --git a/markers/days.ini b/markers/days.ini
old mode 100755
new mode 100644
diff --git a/markers/route.ini b/markers/route.ini
old mode 100755
new mode 100644
diff --git a/thirdparty/README.txt b/thirdparty/README.txt
old mode 100755
new mode 100644
