diff --git a/geolocation.module b/geolocation.module
index 4ddd50c..de93710 100644
--- a/geolocation.module
+++ b/geolocation.module
@@ -15,8 +15,90 @@ function geolocation_field_info() {
       'description' => t('Geolocation input.'),
       'default_widget' => 'geolocation_latlng',
       'default_formatter' => 'geolocation_text',
+      'property_type' => 'geolocation',
+      'property_callbacks' => array('geolocation_property_info_callback'),
     ),
+
+  );
+}
+
+
+/**
+ * Callback to alter the property info of geolocation fields.
+ *
+ * @see geolocation_field_info().
+ */
+function geolocation_property_info_callback(&$info, $entity_type, $field, $instance, $field_type) {
+  $name = $field['field_name'];
+  $property = &$info[$entity_type]['bundles'][$instance['bundle']]['properties'][$name];
+
+  $property['type'] = ($field['cardinality'] != 1) ? 'list<geolocation>' : 'geolocation';
+  $property['getter callback'] = 'entity_metadata_field_verbatim_get';
+  $property['setter callback'] = 'entity_metadata_field_verbatim_set';
+  //  $property['auto creation'] = 'geolocation_default_values';
+  $property['property info'] = geolocation_data_property_info();
+
+  unset($property['query callback']);
+}
+
+/**
+ * Defines info for the properties of the geolocation field data structure.
+ */
+function geolocation_data_property_info() {
+  // Build an array of basic property information for the geolocation field.
+  $properties = array(
+    'lat' => array(
+      'label' => 'Latitude',
+      'type' => 'decimal',
+      'required' => TRUE,
+      'description' => '',
+      'getter callback' => 'entity_property_verbatim_get',
+  	),
+    'lng'=> array(
+      'label' => 'Longitude',
+      'type' => 'decimal',
+  		'description' => '',
+      'required' => TRUE,
+  		'getter callback' => 'entity_property_verbatim_get',
+  	),
+    'lat_sin' => array(
+      'label' => 'Left Latitude',
+  		'description' => '',
+      'type' => 'decimal',
+      'getter callback' => 'entity_property_verbatim_get',
+  	),
+    'lat_sin' => array(
+      'label' =>  'the sine of latitude',
+  		'description' => '',
+      'type' => 'decimal',
+      'getter callback' => 'entity_property_verbatim_get',
+  	),
+    'lat_sin' => array(
+      'label' =>'the sine of latitude',
+  		'description' => '',
+      'type' => 'decimal',
+      'getter callback' => 'entity_property_verbatim_get',
+  	),
+    'latlng' => array(
+      'label' => 'the latlng of point',
+  		'description' => '',
+      'type'  => 'string',
+      'getter callback' => 'geolocation_return_latlon',
+ 	   ),
   );
+
+  return $properties;
+}
+
+
+/**
+ * Gets the a latlong property.
+ */
+function geolocation_return_latlon($data, array $options, $name) {
+  if ((is_array($data) || (is_object($data) && $data instanceof ArrayAccess))) {
+    return $data['lat'] . ',' . $data['lng'];
+  }
+  return NULL;
 }
 
 /**
