diff --git a/modules/geolocation_googlemaps/geolocation_googlemaps.module b/modules/geolocation_googlemaps/geolocation_googlemaps.module
index 5c24286..d36c9ad 100644
--- a/modules/geolocation_googlemaps/geolocation_googlemaps.module
+++ b/modules/geolocation_googlemaps/geolocation_googlemaps.module
@@ -20,6 +20,16 @@ function geolocation_googlemaps_field_formatter_info() {
         'map_maptype' => 'roadmap',
       ),
     ),
+    'geolocation_googlemaps_dynamic' => array(
+      'label' => t('Dynamic Google Map'),
+      'field types' => array('geolocation_latlng'),
+      'settings' => array(
+        'map_dimensions' => '300x300',
+        'map_zoomlevel' => '7',
+        'map_imageformat' => 'png8',
+        'map_maptype' => 'roadmap',
+      ),
+    ),
   );
 }
 
@@ -27,7 +37,9 @@ function geolocation_googlemaps_field_formatter_info() {
  * Implements hook_field_formatter_settings_form().
  */
 function geolocation_googlemaps_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
+
   $display = $instance['display'][$view_mode];
+  $type = $display['type'];
   $settings = $display['settings'];
 
   $element = array();
@@ -42,19 +54,22 @@ function geolocation_googlemaps_field_formatter_settings_form($field, $instance,
     '#default_value' => $settings['map_dimensions'],
   );
 
-  $element['map_imageformat'] = array(
-    '#type' => 'select',
-    '#title' => t('Image format'),
-    '#options' => array(
-      'png8' => '8-bit PNG (default)',
-      'png32' => '32-bit PNG',
-      'gif' => 'GIF',
-      'jpg' => 'JPEG',
-      'jpg-baseline' => 'JPEG (non-progressive)',
-    ),
-    '#description' => t('Choose an Image Format. jpg and jpg-baseline typically provide the smallest image size, though they do so through "lossy" compression which may degrade the image. gif, png8 and png32 provide lossless compression.'),
-    '#default_value' => $settings['map_imageformat'],
-  );
+  // image format is used only for static maps
+  if ($type == 'geolocation_googlemaps_static') {
+    $element['map_imageformat'] = array(
+      '#type' => 'select',
+      '#title' => t('Image format'),
+      '#options' => array(
+        'png8' => '8-bit PNG (default)',
+        'png32' => '32-bit PNG',
+        'gif' => 'GIF',
+        'jpg' => 'JPEG',
+        'jpg-baseline' => 'JPEG (non-progressive)',
+        ),
+      '#description' => t('Choose an Image Format. jpg and jpg-baseline typically provide the smallest image size, though they do so through "lossy" compression which may degrade the image. gif, png8 and png32 provide lossless compression.'),
+      '#default_value' => $settings['map_imageformat'],
+    );
+  }
 
   $element['map_maptype'] = array(
     '#type' => 'select',
@@ -106,8 +121,15 @@ function geolocation_googlemaps_field_formatter_settings_form($field, $instance,
 function geolocation_googlemaps_field_formatter_settings_summary($field, $instance, $view_mode) {
   $display = $instance['display'][$view_mode];
   $settings = $display['settings'];
+  $type = $display['type'];
+
+  $summary = '<strong>Map:</strong> '. $settings['map_dimensions'];
+
+  if ($type == 'geolocation_googlemaps_static') {
+    $summary .= ' ('. $settings['map_imageformat'] .')';
+  }
+  $summary .= '<br />';
 
-  $summary = '<strong>Map:</strong> '. $settings['map_dimensions'] .' ('. $settings['map_imageformat'] .')<br />';
   $summary .= '<strong>Type:</strong> '. $settings['map_maptype'] .'<br />';
   $summary .= '<strong>Zoom:</strong> '. $settings['map_zoomlevel'];
   return $summary;
@@ -125,15 +147,63 @@ function geolocation_googlemaps_field_formatter_view($entity_type, $entity, $fie
     case 'geolocation_googlemaps_static':
       foreach ($items as $delta => $item) {
         $variables = array(
-            'path' => 'http://maps.google.com/maps/api/staticmap?zoom='. $settings['map_zoomlevel'] .'&size='. $settings['map_dimensions'] .'&format='. $settings['map_imageformat'] .'&maptype='. $settings['map_maptype'] .'&markers=size:mid|color:red|' . $item['lat'] . ',' . $item['lng'] . '&sensor=false',
-            'alt' => 'Geolocation',
-            'attributes' => array('class' => 'geolocation-googlemaps-static'),
-            );
+          'path' => 'http://maps.google.com/maps/api/staticmap?zoom='. $settings['map_zoomlevel'] .'&size='. $settings['map_dimensions'] .'&format='. $settings['map_imageformat'] .'&maptype='. $settings['map_maptype'] .'&markers=size:mid|color:red|' . $item['lat'] . ',' . $item['lng'] . '&sensor=false',
+          'alt' => 'Geolocation',
+          'attributes' => array('class' => 'geolocation-googlemaps-static'),
+        );
         $map_img = theme('image', $variables);
         $element[$delta]['#markup'] = '<div>' . $map_img . '</div>';
       }
       break;
 
+    case 'geolocation_googlemaps_dynamic':
+      foreach ($items as $delta => $item) {
+
+        $width = strtok($settings['map_dimensions'], 'x') . "px";
+        $height = strtok('') . "px";
+
+        $mapElement['googlemap'] = array(
+          '#prefix' => '<div id="geolocation-googlemaps-dynamic-'
+            . $delta . '" class="geolocation-map geolocation-googlemaps-dynamic" '
+            . ' style="width:' . htmlentities($width)
+            . ';height:' . htmlentities($height) . ';">',
+          '#suffix' => '</div>',
+        );
+
+        // Attach CSS and JS files via FAPI '#attached'.
+        $mapElement['googlemap']['#attached']['css'][] = drupal_get_path('module', 'geolocation_googlemaps') . '/geolocation_googlemaps.css';
+        $mapElement['googlemap']['#attached']['js'][] = array('data' => 'http://maps.google.com/maps/api/js?sensor=false', 'type' => 'external');
+        $mapElement['googlemap']['#attached']['js'][] = array('data' => 'http://www.google.com/jsapi', 'type' => 'external');
+        $mapElement['googlemap']['#attached']['js'][] = array(
+          'data' => drupal_get_path('module', 'geolocation_googlemaps') . '/geolocation_googlemaps_dynamic_formatter.js',
+          'type' => 'file',
+          'scope' => 'footer',
+        );
+
+        // Make defaults available as javascript settings. In JS files use:
+        // Drupal.settings.mapDefaults.lat
+
+        $position = array(
+          'lat' => $item['lat'],
+          'lng' => $item['lng'],
+        );
+
+        $data = array(
+          $delta => array (
+            "settings" => $settings,
+            "position" => $position
+          ),
+        );
+
+        $mapElement['googlemap']['#attached']['js'][] = array(
+          'data' => array('geolocation' => $data),
+          'type' => 'setting'
+        );
+
+        $element[$delta] = $mapElement;
+      }
+      break;
+
   }
   return $element;
 }
@@ -154,6 +224,7 @@ function geolocation_googlemaps_field_widget_info() {
  * Implements hook_field_widget_settings_form().
  */
 function geolocation_googlemaps_field_widget_settings_form($field, $instance) {
+
   $widget = $instance['widget'];
   $settings = $widget['settings'];
 
@@ -310,4 +381,4 @@ function geolocation_googlemaps_field_widget_error($element, $error, $form, &$fo
       form_error($element, $error['message']);
       break;
   }
-}
\ No newline at end of file
+}
diff --git a/modules/geolocation_googlemaps/geolocation_googlemaps_dynamic_formatter.js b/modules/geolocation_googlemaps/geolocation_googlemaps_dynamic_formatter.js
new file mode 100644
index 0000000..688d118
--- /dev/null
+++ b/modules/geolocation_googlemaps/geolocation_googlemaps_dynamic_formatter.js
@@ -0,0 +1,70 @@
+/**
+ * @file Javascript for Goole Map Dynamic API Formatter javascript code.
+ * 
+ * @author Lukasz Klimek http://www.klimek.ws
+ */
+(function($) {
+
+  Drupal.Geolocation = new Object();
+  Drupal.Geolocation.maps = new Array();
+  Drupal.Geolocation.markers = new Array();
+
+  Drupal.behaviors.geolocationDynamicMapFormatter = {
+
+    attach : function(context, settings) {
+
+      // Work on each map
+      $.each(settings.geolocation, function(i, mapDefaults) {
+
+        // Only make this once ;)
+        $("#geolocation-googlemaps-dynamic-" + i).once(
+            'geolocationDynamicMapFormatter',
+            function() {
+
+              lat = mapDefaults.position.lat;
+              lng = mapDefaults.position.lng;
+              latLng = new google.maps.LatLng(lat, lng);
+
+              var map_type;
+              switch (mapDefaults.settings.map_zoomlevel) {
+                case 'satellite':
+                  map_type = google.maps.MapTypeId.SATELLITE;
+                  break;
+
+                case 'terrain':
+                  map_type = google.maps.MapTypeId.TERRAIN;
+                  break;
+
+                case 'hybrid':
+                  map_type = google.maps.MapTypeId.HYBRID;
+                  break;
+
+                default:
+                  map_type = google.maps.MapTypeId.ROADMAP;
+                  break;
+              }
+
+              myOptions = {
+                zoom : parseInt(mapDefaults.settings.map_zoomlevel) + 0,
+                center : latLng,
+                mapTypeId : map_type,
+                scrollwheel : true
+              };
+
+              // Create map
+              Drupal.Geolocation.maps[i] = new google.maps.Map(document
+                  .getElementById("geolocation-googlemaps-dynamic-" + i),
+                  myOptions);
+
+              // create and place marker
+              Drupal.Geolocation.markers[i] = new google.maps.Marker({
+                map : Drupal.Geolocation.maps[i],
+                draggable : false,
+                position : latLng
+              });
+
+            });
+      });
+    },
+  };
+}(jQuery));
