diff --git a/modules/geolocation_googlemaps/geolocation_googlemaps.module b/modules/geolocation_googlemaps/geolocation_googlemaps.module
index 5c24286..2311852 100644
--- a/modules/geolocation_googlemaps/geolocation_googlemaps.module
+++ b/modules/geolocation_googlemaps/geolocation_googlemaps.module
@@ -18,8 +18,18 @@ function geolocation_googlemaps_field_formatter_info() {
         'map_zoomlevel' => '7',
         'map_imageformat' => 'png8',
         '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,20 +54,23 @@ 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',
     '#title' => t('Map Type'),
@@ -64,7 +79,7 @@ function geolocation_googlemaps_field_formatter_settings_form($field, $instance,
       'satellite' => 'Satellite',
       'terrain' => 'Terrain',
       'hybrid' => 'Hybrid',
-    ),
+  ),
     '#description' => t('Choose map type. <em>roadmap</em> (default) specifies a standard roadmap image, as is normally shown on the Google Maps website. <em>satellite</em> specifies a satellite image. <em>terrain</em> specifies a physical relief map image, showing terrain and vegetation. <em>hybrid</em> specifies a hybrid of the satellite and roadmap image, showing a transparent layer of major streets and place names on the satellite image.'),
     '#default_value' => $settings['map_maptype'],
   );
@@ -92,7 +107,7 @@ function geolocation_googlemaps_field_formatter_settings_form($field, $instance,
       '17' => '17',
       '18' => '18',
       '19' => '19',
-    ),
+  ),
     '#description' => t('Choose a custom zoom level - the higher the number the closer. <em>High zoom warning:</em> Google might not return images for any combination of Map Type and Zoom Level.'),
     '#default_value' => $settings['map_zoomlevel'],
   );
@@ -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'] .' ('. $settings['map_imageformat'] .')<br />';
+  $summary = '<strong>Map:</strong> '. $settings['map_dimensions'];
+  
+  if ($type == 'geolocation_googlemaps_static') {
+  	$summary .= ' ('. $settings['map_imageformat'] .')';
+  }
+  $summary .= '<br />';
+  
   $summary .= '<strong>Type:</strong> '. $settings['map_maptype'] .'<br />';
   $summary .= '<strong>Zoom:</strong> '. $settings['map_zoomlevel'];
   return $summary;
@@ -128,12 +150,55 @@ function geolocation_googlemaps_field_formatter_view($entity_type, $entity, $fie
             '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 +219,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'];
 
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..fec852c
--- /dev/null
+++ b/modules/geolocation_googlemaps/geolocation_googlemaps_dynamic_formatter.js
@@ -0,0 +1,63 @@
+/**
+ * @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();
+
+  // Work on each map
+  $.each(Drupal.settings.geolocation,function(i, mapDefaults) {
+    
+    // Only make this once ;)
+    $("#geolocation-googlemaps-dynamic-" + i).once('procesadooooo', 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);
