diff --git a/modules/geolocation_views/geolocation_views.info b/modules/geolocation_views/geolocation_views.info
new file mode 100644
index 0000000..dbb547c
--- /dev/null
+++ b/modules/geolocation_views/geolocation_views.info
@@ -0,0 +1,7 @@
+name = Geolocation Views
+description = Provides a Views style plugin for geolocation field.
+package = Geolocation
+core = 7.x
+version = 7.x-1.x-dev
+dependencies[] = geolocation
+files[] = geolocation_views_plugin_style_google_map.inc
diff --git a/modules/geolocation_views/geolocation_views.js b/modules/geolocation_views/geolocation_views.js
new file mode 100644
index 0000000..46c7db3
--- /dev/null
+++ b/modules/geolocation_views/geolocation_views.js
@@ -0,0 +1,26 @@
+(function ($) {
+  Drupal.geolocationViews = Drupal.geolocationViews || {};
+  
+  Drupal.behaviors.geolocationViews = {
+    attach: function (context, settings) {
+      var mapCenter = Drupal.settings.geolocationViewsMapCenter.split(',');
+      Drupal.geolocationViews.map = new google.maps.Map(document.getElementById('geolocation-views-google-map'), {
+          center: new google.maps.LatLng(parseFloat(mapCenter[0]), parseFloat(mapCenter[1])),
+          zoom: Drupal.settings.geolocationViewsMapZoom,
+          mapTypeId: google.maps.MapTypeId.ROADMAP
+      });
+      
+      $.each(Drupal.settings.geolocationViewsMarkers, function(i) {
+        var marker = new google.maps.Marker({
+            position: new google.maps.LatLng(this.lat, this.lng),
+            map: Drupal.geolocationViews.map
+        })
+        marker.url = this.url;
+        
+        google.maps.event.addListener(marker, 'click', function() {
+          location = marker.url;
+        });
+      });
+    }
+  };
+})(jQuery);
\ No newline at end of file
diff --git a/modules/geolocation_views/geolocation_views.module b/modules/geolocation_views/geolocation_views.module
new file mode 100644
index 0000000..c82fd9b
--- /dev/null
+++ b/modules/geolocation_views/geolocation_views.module
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @file
+ * Views style plugin for Geolocation.
+ */
+
+/**
+ * Implements hook_views_api()
+ */
+function geolocation_views_views_api() {
+  return array('api' => 3);
+}
+
+/**
+ * Implementation of hook_views_plugins().
+ */
+function geolocation_views_views_plugins() {
+  return array(
+    'module' => 'geolocation_views',
+    'style' => array(
+      'google_map' => array(
+        'title' => t('Geolocation Map'),
+        'handler' => 'geolocation_views_plugin_style_google_map',
+        'uses row plugin' => TRUE,
+        'uses options' => TRUE,
+        'type' => 'normal',
+      ),
+    ),
+  );
+}
diff --git a/modules/geolocation_views/geolocation_views_plugin_style_google_map.inc b/modules/geolocation_views/geolocation_views_plugin_style_google_map.inc
new file mode 100644
index 0000000..6bfdde3
--- /dev/null
+++ b/modules/geolocation_views/geolocation_views_plugin_style_google_map.inc
@@ -0,0 +1,104 @@
+<?php
+
+class geolocation_views_plugin_style_google_map extends views_plugin_style {
+  /**
+   * Set default options
+   */
+  function option_definition() {
+    $options = parent::option_definition();
+    
+    $options['geolocation_field'] = array('default' => '');
+    $options['map_width'] = array('default' => '100%');
+    $options['map_height'] = array('default' => '400px');
+    $options['map_center'] = array('default' => '0,0');
+    $options['map_zoom'] = array('default' => '4');
+    
+    return $options;
+  }
+  
+  /**
+   * Options form.
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $field_options = array();
+    $fields = $this->display->handler->get_handlers('field');
+    foreach ($fields as $id => $handler) {
+      $field_options[$id] = $handler->ui_name(FALSE);
+    }
+
+    $form['geolocation_field'] = array(
+      '#title' => t('Geolocation field'),
+      '#type' => 'select',
+      '#options' => $field_options,
+      '#default_value' => $this->options['geolocation_field'],
+    );
+    
+    $form['map_width'] = array(
+      '#title' => t('Map width'),
+      '#type' => 'textfield',
+      '#default_value' => $this->options['map_width'],
+    );
+    
+    $form['map_center'] = array(
+      '#title' => t('Map center'),
+      '#type' => 'textfield',
+      '#default_value' => $this->options['map_center'],
+    );
+    
+    $form['map_zoom'] = array(
+      '#title' => t('Map zoom'),
+      '#type' => 'select',
+      '#options' => array(
+        1 => 1,
+        2 => 2,
+        3 => 3,
+        4 => 4,
+        5 => 5,
+        6 => 6,
+        7 => 7,
+        8 => 8,
+        9 => 9,
+        10 => 10,
+        11 => 11,
+        12 => 12,
+        13 => 13,
+        14 => 14,
+      ),
+      '#default_value' => $this->options['map_zoom'],
+    );
+  }
+  
+  /**
+   * Render the display in this style.
+   */
+  function render() {
+    if (isset($this->view->live_preview) && $this->view->live_preview) {
+      return t('Geolocation Views are not compatible with live preview.');
+    }
+    
+    $geolocation_field = 'field_' . $this->options['geolocation_field'];
+    $markers = array();
+    foreach ($this->view->result as $row) {
+      if (!$row->{$geolocation_field}) {
+        continue;
+      }
+      $markers[] = array(
+        'lat' => (float)$row->{$geolocation_field}[0]['raw']['lat'],
+        'lng' => (float)$row->{$geolocation_field}[0]['raw']['lng'],
+        'url' => url('node/' . $row->nid),
+      );
+    }
+    
+    drupal_add_js('http://maps.google.com/maps/api/js?sensor=false', array('type' => 'external'));
+    drupal_add_js(drupal_get_path('module', 'geolocation_views') . '/geolocation_views.js');
+    drupal_add_js(array(
+      'geolocationViewsMarkers' => $markers,
+      'geolocationViewsMapCenter' => $this->options['map_center'],
+      'geolocationViewsMapZoom' => (int)$this->options['map_zoom'],
+    ), 'setting');
+    
+    return '<div id="geolocation-views-google-map" style="width:' . $this->options['map_width'] . '; height:' . $this->options['map_height'] . ';">Map</div>';
+  }
+}
