diff --git a/geofield.module b/geofield.module
index f167fe1..5af800d 100644
--- a/geofield.module
+++ b/geofield.module
@@ -702,3 +702,9 @@ function geofield_haversine($options = array()) {
 
   return $formula;
 }
+
+function get_geofield() {
+  $sql = "SELECT field_name FROM {field_config} WHERE type = 'geofield'";
+  $geofield_list = db_query($sql);
+  return $geofield_list;
+  }
diff --git a/views/handlers/geofield_handler_field.inc b/views/handlers/geofield_handler_field.inc
index 454208a..c15df95 100644
--- a/views/handlers/geofield_handler_field.inc
+++ b/views/handlers/geofield_handler_field.inc
@@ -10,6 +10,57 @@ class geofield_handler_field extends views_handler_field_numeric {
     $this->ensure_my_table();
 
     switch ($this->options['source']) {
+	  case 'current_user':
+	    if(!empty($this->definition['field_name'])) {
+		global $user;
+		$user_fields = user_load($user->uid);
+		$position = field_get_items('user', $user_fields, $this->definition['field_name']);
+		if(!empty($position)) {
+		$this->options['source_lat'] = $position[0]['lat'];
+		$this->options['source_lon'] = $position[0]['lon'];
+		}
+		break;
+		}
+
+	  case 'node_and_currentuser':
+	    if(!empty($this->definition['field_name'])) {
+		$node_fields = node_load($this->options['nidtext']);
+        global $user;
+		$user_fields = user_load($user->uid);
+		$geofield_list = get_geofield();
+		$id = 1;
+		while ($line = $geofield_list->fetchAssoc()) {
+		if($id == $this->options['proximity_field_selected'] && $line['field_name'] != $this->definition['field_name']) {
+	    $name_proximty_field = $line['field_name'];
+		}
+		if($line['field_name'] != $this->definition['field_name']) {
+		$id = $id + 1;
+		}
+		}   
+		$position = field_get_items('user', $user_fields, $name_proximty_field);
+		if(!empty($position)) {
+		$this->options['source_lat'] = $position[0]['lat'];
+		$this->options['source_lon'] = $position[0]['lon'];
+		break;
+		}
+		}
+	  case 'node_from_url':
+	    if(!empty($this->definition['field_name'])) {
+  
+		$nodeobject = menu_get_object();
+		if(!empty($nodeobject)) {
+		$nid = $nodeobject->nid;
+		$node_fields = node_load($nid);
+		}
+		if(!empty($node_fields)) {
+		$position = field_get_items('node', $node_fields, $this->definition['field_name']);
+		}
+		if(!empty($position)) {
+		$this->options['source_lat'] = $position[0]['lat'];
+		$this->options['source_lon'] = $position[0]['lon'];
+		break;
+		}
+		}
       case 'geocode':
         $geocoded_data_raw = geocoder($this->options['geocoder'], $this->options['geocoder_location']);
         if ($geocoded_data_raw) {
@@ -63,6 +114,8 @@ class geofield_handler_field extends views_handler_field_numeric {
       $options['geocoder'] = array('default' => 'google'); // @TODO: load from geocoder list of available plugins, pull first.
       $options['geocoder_location'] = array('default' => '');
     }
+	// Current user field
+	$options['proximity_field_selected'] = array('default' => '');
     // Other geofield
     $options['other_geofield'] = array('default' => '');
     // Raw origin point values.
@@ -80,6 +133,9 @@ class geofield_handler_field extends views_handler_field_numeric {
       '#title' => t('Source of Origin Point'),
       '#description' => t('How do you want to enter your origin point?'),
       '#options' => array(
+	    'current_user' => t('Current User'),
+		'node_and_currentuser' => t('Node and User'),
+		'node_from_url' => t('Node from URL'),
         'manual' => t('Manually Enter Point'),
         'other_geofield' => t('Other Geofield'),
         'exposed_filter' => t('Exposed Filter'),
@@ -109,6 +165,29 @@ class geofield_handler_field extends views_handler_field_numeric {
         'edit-options-source' => array('manual'),
       ),
     );
+	
+	$geofield_list = get_geofield();
+	
+	$id = 1;
+	$proximty_fields_options = array();
+	
+	while ($line = $geofield_list->fetchAssoc()) {
+	if($line['field_name'] != $this->definition['field_name']) {
+	$proximty_fields_options[$id] = $line['field_name'];
+	$id = $id + 1;
+	}
+	}
+	
+	$form['proximity_field_selected'] = array(
+      '#type' => 'select',
+      '#title' => t('Field to select for proximity.'),
+      '#description' => t(''),
+	  '#options' => $proximty_fields_options,
+	  '#default_value' => $this->options['proximity_field_selected'],
+      '#dependency' => array(
+        'edit-options-source' => array('node_and_currentuser'),
+      ),
+    );
 
     if (module_exists('geocoder')) {
       $geocoders_raw = geocoder_handler_info('text');
diff --git a/views/handlers/geofield_handler_sort.inc b/views/handlers/geofield_handler_sort.inc
index fa427ff..5cfc5fe 100644
--- a/views/handlers/geofield_handler_sort.inc
+++ b/views/handlers/geofield_handler_sort.inc
@@ -10,6 +10,57 @@ class geofield_handler_sort extends views_handler_sort {
     $this->ensure_my_table();
 
     switch ($this->options['source']) {
+	  case 'current_user':
+	    if(!empty($this->definition['field_name'])) {
+		global $user;
+		$user_fields = user_load($user->uid);
+		$position = field_get_items('user', $user_fields, $this->definition['field_name']);
+		if(!empty($position)) {
+		$this->options['source_lat'] = $position[0]['lat'];
+		$this->options['source_lon'] = $position[0]['lon'];
+		}
+		break;
+		}
+
+	  case 'node_and_currentuser':
+	    if(!empty($this->definition['field_name'])) {
+		$node_fields = node_load($this->options['nidtext']);
+        global $user;
+		$user_fields = user_load($user->uid);
+		$geofield_list = get_geofield();
+		$id = 1;
+		while ($line = $geofield_list->fetchAssoc()) {
+		if($id == $this->options['proximity_field_selected'] && $line['field_name'] != $this->definition['field_name']) {
+	    $name_proximty_field = $line['field_name'];
+		}
+		if($line['field_name'] != $this->definition['field_name']) {
+		$id = $id + 1;
+		}
+		}   
+		$position = field_get_items('user', $user_fields, $name_proximty_field);
+		if(!empty($position)) {
+		$this->options['source_lat'] = $position[0]['lat'];
+		$this->options['source_lon'] = $position[0]['lon'];
+		break;
+		}
+		}
+	  case 'node_from_url':
+	    if(!empty($this->definition['field_name'])) {
+  
+		$nodeobject = menu_get_object();
+		if(!empty($nodeobject)) {
+		$nid = $nodeobject->nid;
+		$node_fields = node_load($nid);
+		}
+		if(!empty($node_fields)) {
+		$position = field_get_items('node', $node_fields, $this->definition['field_name']);
+		}
+		if(!empty($position)) {
+		$this->options['source_lat'] = $position[0]['lat'];
+		$this->options['source_lon'] = $position[0]['lon'];
+		break;
+		}
+		}
       case 'manual':
         break;
       case 'geocode':
@@ -62,6 +113,8 @@ class geofield_handler_sort extends views_handler_sort {
       $options['geocoder'] = array('default' => 'google'); // @TODO: load from geocoder list of available plugins, pull first.
       $options['geocoder_location'] = array('default' => '');
     }
+	// Current user field
+	$options['proximity_field_selected'] = array('default' => '');
     // Other geofield
     $options['other_geofield'] = array('default' => '');
     // Raw origin point values.
@@ -77,6 +130,9 @@ class geofield_handler_sort extends views_handler_sort {
       '#title' => t('Source of Origin Point'),
       '#description' => t('How do you want to enter your origin point?'),
       '#options' => array(
+	    'current_user' => t('Current User'),
+		'node_and_currentuser' => t('Node and User'),
+		'node_from_url' => t('Node from URL'),
         'manual' => t('Manually Enter Point'),
         'other_geofield' => t('Other Geofield'),
         'exposed_filter' => t('Exposed Filter'),
@@ -87,6 +143,29 @@ class geofield_handler_sort extends views_handler_sort {
     if (module_exists('geocoder')) {
       $form['source']['#options']['geocode'] = t('Geocode');
     }
+	
+	$geofield_list = get_geofield();
+	
+	$id = 1;
+	$proximty_fields_options = array();
+	
+	while ($line = $geofield_list->fetchAssoc()) {
+	if($line['field_name'] != $this->definition['field_name']) {
+	$proximty_fields_options[$id] = $line['field_name'];
+	$id = $id + 1;
+	}
+	}
+	
+	$form['proximity_field_selected'] = array(
+      '#type' => 'select',
+      '#title' => t('Field to select for proximity.'),
+      '#description' => t(''),
+	  '#options' => $proximty_fields_options,
+	  '#default_value' => $this->options['proximity_field_selected'],
+      '#dependency' => array(
+        'edit-options-source' => array('node_and_currentuser'),
+      ),
+    );
 
     if (module_exists('geocoder')) {
       $geocoders_raw = geocoder_handler_info('text');
