Index: location.module
===================================================================
--- location.module	(revision 3937)
+++ location.module	(working copy)
@@ -245,7 +245,7 @@
   // Fill in missing defaults, etc.
   location_normalize_settings($settings, $element['#required']);
 
-  $defaults = location_empty_location($settings);
+  $defaults = location_default_location($settings);
 
   if (isset($element['lid']['#value']) && $element['lid']['#value']) {
     $defaults = location_load_location($element['lid']['#value']);
@@ -1066,7 +1066,7 @@
   }
 
   // If there's already a lid, we're editing an old location. Load it in.
-  $oldloc = location_empty_location($location['location_settings']);
+  $oldloc = array();
   if (isset($location['lid']) && !empty($location['lid'])) {
     $oldloc = (array)location_load_location($location['lid']);
   }
@@ -1098,7 +1098,8 @@
       return FALSE;
     }
   }
-
+  $default = location_default_location($location['location_settings']);
+  $location = array_merge($default, $location);
   // Perform geocoding logic, coordinate normalization, etc.
   _location_geo_logic($location, $changed, $filled, $inhibit_geocode);
 
@@ -1226,9 +1227,9 @@
 }
 
 /**
- * Returns an empty location object based on the given settings.
+ * Returns an default values location object based on the given settings.
  */
-function location_empty_location($settings) {
+function location_default_location($settings) {
   $location = array();
   $defaults = location_invoke_locationapi($location, 'defaults');
   if (isset($settings['form']['fields'])) {
@@ -1248,6 +1249,18 @@
 }
 
 /**
+ * Returns an empty location object based on the given settings.
+ */
+function location_empty_location($settings) {
+  $location = array();
+  $fields = location_invoke_locationapi($location, 'fields');
+  foreach ($fields as $k => $v) {
+    $location[$k] = '';
+  }
+  return $location;
+}
+
+/**
  * Strip junk out of a location.
  */
 function location_strip(&$location) {
Index: contrib/location_cck/location_cck.module
===================================================================
--- contrib/location_cck/location_cck.module	(revision 3937)
+++ contrib/location_cck/location_cck.module	(working copy)
@@ -241,7 +241,7 @@
     else if (isset($items[$delta]) && is_array($items[$delta]) && !empty($items[$delta])) {
 
       // Initialize empty location.
-      $location = location_empty_location($settings);
+      $location = location_default_location($settings);
       foreach ($items[$delta] as $k => $v) {
         $location[$k] = $v;
       }
