diff --git a/geofield.module b/geofield.module
index 31d4a7d..5cd4738 100644
--- a/geofield.module
+++ b/geofield.module
@@ -39,11 +39,16 @@ function geofield_field_presave($entity_type, $entity, $field, $instance, $langc
 
 /**
  * Implements of hook_content_is_empty().
- * 
- * TODO: lat lon are optional, so this is broken.
  */
 function geofield_field_is_empty($item, $field) {
-  return (empty($item['wkt']));
+  switch ($item['master_column']){
+    case 'wkt';
+      return (empty($item['wkt']));
+    case 'latlon':
+      return (empty($item['lat']) && empty($item['lon']));
+    case 'bounds':
+      return (empty($item['left']) && empty($item['right']) && empty($item['top']) && empty($item['bottom']));
+  }
 }
 
 /**
@@ -372,7 +377,7 @@ function geofield_latlon_DMStoDEC($dms) {
   }
   
   // Strip all characters and replace them with empty space
-  $dms = strtr($dms, "°'\"NORTHSEAWnorthseaw'", " ");
+  $dms = strtr($dms, "ï¿½'\"NORTHSEAWnorthseaw'", " ");
   $dms = preg_replace('/\s\s+/', ' ', $dms);
   
   $dms = explode(" ",$dms);
diff --git a/geofield.widgets.inc b/geofield.widgets.inc
index 1e2213b..307e649 100644
--- a/geofield.widgets.inc
+++ b/geofield.widgets.inc
@@ -242,7 +242,13 @@ function geofield_element_validate($element, &$form_state) {
     'left' => $element['left']['#value'],
   );
   
-  geofield_compute_values($values, $master_column);    
+  $aux = $values;
+  $aux['master_column'] = $master_column;
+  geofield_compute_values($values, $master_column);      
+  if (empty($values) && !geofield_field_is_empty($aux, NULL)){
+    form_set_error($element['#field_name']. ']['. $element['#language'] .'][' . $element['#delta'], t('Unable to parse Geofield'));
+    return;
+  }   
   
   // Set form values from the $values array
   if (isset($values['wkt']))       form_set_value($element['wkt'], $values['wkt'], $form_state);
