diff --git a/views/handlers/geofield_handler_argument_proximity.inc b/views/handlers/geofield_handler_argument_proximity.inc
index cc76f71..c81c314 100644
--- a/views/handlers/geofield_handler_argument_proximity.inc
+++ b/views/handlers/geofield_handler_argument_proximity.inc
@@ -59,6 +59,21 @@ class geofield_handler_argument_proximity extends views_handler_argument {
     );
   }
 
+  public function get_default_argument($geocoded = TRUE) {
+    $def_arg_string = parent::get_default_argument();
+
+    // This adds any missing bits, i.e. default distance, default lat,lon.
+    $lat_lon_dist = $this->parseLatLonDistArg($def_arg_string);
+    
+    if (empty($lat_lon_dist) && $geocoded) {
+      $lat_lon_dist = $this->parseAddress(array($def_arg_string));
+    }
+    if (empty($lat_lon_dist)) {
+      return $def_arg_string;
+    }
+    return $lat_lon_dist['latitude'] . ',' . $lat_lon_dist['longitude'] . '_' . $lat_lon_dist['distance'];
+  }
+
   /**
    * Set up the where clause for the contextual filter argument.
    */
@@ -174,8 +189,8 @@ class geofield_handler_argument_proximity extends views_handler_argument {
    * @param array of arguments, e.g. result of arg()
    * @return array(lat, lon, dist) or FALSE if arguments could not be parsed.
    */
-  private function parseAddress($args) {
-    if (empty($args)) {
+  public function parseAddress($args) {
+    if (empty($args) || reset($args) == '') {
       return FALSE;
     }
     // Interpret the last arg as a distance, if it is numeric.
@@ -198,9 +213,8 @@ class geofield_handler_argument_proximity extends views_handler_argument {
   }
 
   private function getDefaultLatLonDist() {
-    return $default_arg = $this->get_default_argument()
-      ? array_filter(preg_split(GEOFIELD_PROXIMITY_REGEXP_PATTERN, $default_arg))
-      : array();
+    $default_arg = $this->get_default_argument();
+    return empty($default_arg) ? array() : array_filter(preg_split(GEOFIELD_PROXIMITY_REGEXP_PATTERN, $default_arg));
   }
 
   private function getDefaultDist() {
diff --git a/views/handlers/geofield_handler_filter.inc b/views/handlers/geofield_handler_filter.inc
index 980071f..f2e0f05 100644
--- a/views/handlers/geofield_handler_filter.inc
+++ b/views/handlers/geofield_handler_filter.inc
@@ -218,7 +218,7 @@ class geofield_handler_filter extends views_handler_filter_numeric {
     }
 
     $input_id = $this->options['expose']['identifier'];
-    if (empty($input[$input_id]) || $input[$input_id]['distance'] === '' || $input[$input_id]['origin'] === '') {
+    if (empty($input[$input_id]) /*|| $input[$input_id]['distance'] === '' || $input[$input_id]['origin'] === ''*/) {
       return FALSE;
     }
 
diff --git a/views/proximity_plugins/geofieldProximityContextualFilter.inc b/views/proximity_plugins/geofieldProximityContextualFilter.inc
index 7fff577..6348344 100644
--- a/views/proximity_plugins/geofieldProximityContextualFilter.inc
+++ b/views/proximity_plugins/geofieldProximityContextualFilter.inc
@@ -8,11 +8,29 @@
 class geofieldProximityContextualFilter extends geofieldProximityBase implements geofieldProximityPluginInterface {
 
   public function getSourceValue($views_plugin) {
-    $contextualFilter = $views_plugin->view->display_handler->get_handler('argument', 'field_geofield_distance');
-    if (isset($contextualFilter->view->argument['field_geofield_distance'])) {
-      $argument = $contextualFilter->view->argument['field_geofield_distance'];
-      return $contextualFilter->parseArg($argument);
+    $contextual_filter = $views_plugin->view->display_handler->get_handler('argument', 'field_geofield_distance');
+    if (!isset($contextual_filter)) {
+      return FALSE;
     }
-    return FALSE;
+    if (empty($views_plugin->value['origin'])) {
+      $argument = $contextual_filter->view->argument['field_geofield_distance'];
+      if (empty($contextual_filter->view->args[$argument->position])) {
+        $def_arg_string = $contextual_filter->get_default_argument();
+        $lat_lon_dist = $contextual_filter->parseLatLonDistArg($def_arg_string);
+      }
+      else {
+        $lat_lon_dist = $contextual_filter->parseArg($argument);
+      }
+    }
+    else {
+      $lat_lon_dist = $contextual_filter->parseAddress(array($views_plugin->value['origin']));
+    }
+    if (empty($lat_lon_dist)) {
+      return FALSE;
+    }
+    if (!empty($views_plugin->value['distance'])) {
+      $lat_lon_dist['distance'] = $views_plugin->value['distance'];
+    }
+    return $lat_lon_dist;
   }
-}
\ No newline at end of file
+}
