diff --git a/includes/Timeline.class.inc b/includes/Timeline.class.inc
index ed483da..edc3b60 100644
--- a/includes/Timeline.class.inc
+++ b/includes/Timeline.class.inc
@@ -119,31 +119,33 @@ class Timeline {
    * Last should also check if the event has an "end" date
    */
   function getDefinedDateField($option, $options_field = '') {
+    $timezone = timeline_get_timezone();
+
     // Make sure that if there is no result that a valid date (today) is getting served.
     if ($option != 'today' && $option != 'custom' && count($this->data['events']['events']) == 0) {
       $option = 'today';
     }
     switch ($option) {
       case 'today':
-        return timeline_convert_to_gregorian(REQUEST_TIME, 'timestamp');
+        return timeline_convert_to_gregorian(REQUEST_TIME, 'timestamp', $timezone, $timezone);
       case 'first':
-        return timeline_convert_to_gregorian($this->data['events']['events'][0]['start'], 'iso8601');
+        return timeline_convert_to_gregorian($this->data['events']['events'][0]['start'], 'iso8601', $timezone, $timezone);
       case 'last':
-        return timeline_convert_to_gregorian($this->data['events']['events'][count($this->data['events']['events']) - 1]['start'], 'iso8601');
+        return timeline_convert_to_gregorian($this->data['events']['events'][count($this->data['events']['events']) - 1]['start'], 'iso8601', $timezone, $timezone);
       case 'middle':
-        $end = timeline_convert_to_timestamp($this->data['events']['events'][count($this->data['events']['events']) - 1]['start'], 'iso8601');
-        $start = timeline_convert_to_timestamp($this->data['events']['events'][0]['start'], 'iso8601');
+        $end = timeline_convert_to_timestamp($this->data['events']['events'][count($this->data['events']['events']) - 1]['start'], 'iso8601', $timezone, $timezone);
+        $start = timeline_convert_to_timestamp($this->data['events']['events'][0]['start'], 'iso8601', $timezone, $timezone);
         $middle = ($start + $end) / 2;
-        return timeline_convert_to_gregorian($middle, 'timestamp');
+        return timeline_convert_to_gregorian($middle, 'timestamp', $timezone, $timezone);
       case 'median':
         foreach ($this->data['events']['events'] as $date) {
-          $t[] = timeline_convert_to_timestamp($date['start'], 'iso8601');
+          $t[] = timeline_convert_to_timestamp($date['start'], 'iso8601', $timezone, $timezone);
         }
         sort($t);
-        return timeline_convert_to_gregorian($t[round(count($t)/2)], 'timestamp');
+        return timeline_convert_to_gregorian($t[round(count($t)/2)], 'timestamp', $timezone, $timezone);
       case 'custom':
         if ($options_field != '') {
-          return timeline_convert_to_gregorian(strtotime($options_field), 'timestamp');
+          return timeline_convert_to_gregorian(strtotime($options_field), 'timestamp', $timezone, $timezone);
         }
     }
     return FALSE;
diff --git a/includes/TimelineEvent.class.inc b/includes/TimelineEvent.class.inc
index 697bebb..c784068 100644
--- a/includes/TimelineEvent.class.inc
+++ b/includes/TimelineEvent.class.inc
@@ -90,9 +90,25 @@ class TimelineEvent {
       $field = $this->getDefinedFieldUsage($event_field);
       if (isset($row->{$field['alias']})) {
         // Loading plugin to handle date format
+        $value = $this->view->field[$field['fieldname']]->get_value($row);
+        // If this is a date field, get_value() returns an array of values.
+        if (is_array($value)) {
+          // @TODO Need to confirm if this will retrieve the right value for multiple value fields.
+          $value = array_shift($value);
+          switch ($event_field) {
+            case 'start':
+            case 'earliestStart':
+              $value = $value['value'];
+              break;
+            case 'end':
+            case 'latestEnd':
+               $value = $value['value2'];
+               break;
+          }
+        }
         if ($conversion_callback = timeline_plugins_get_callback($field['handler'], 'date_sources')) {
-          $event[$event_field]['formated'] = call_user_func($conversion_callback, $row->{$field['alias']}, 'iso8601', array('field' => $field));
-          $event[$event_field]['timestamp'] = call_user_func($conversion_callback, $row->{$field['alias']}, 'timestamp', array('field' => $field));
+          $event[$event_field]['formated'] = call_user_func($conversion_callback, $value, 'iso8601', array('field' => $field));
+          $event[$event_field]['timestamp'] = call_user_func($conversion_callback, $value, 'timestamp', array('field' => $field));
         }
       }
     }
@@ -166,16 +182,16 @@ class TimelineEvent {
           'handler' => $this->view->field[$fieldname]->definition['handler'],
           'fieldname' => $fieldname,
         );
-        // check how to handle data from supported date fields
-        switch ($field_information['handler']) {
-          case 'views_handler_field_date': // 1. standard views node date fields (unix timestamp)
-            $field_information['date_format'] = 'timestamp';
-            break;
-          case 'date_handler_field_multiple': // 2. support for date module's date fields
-            $field_information['date_format'] = $this->view->field[$fieldname]->content_field['type'];
-            break;
+        if (!empty($this->view->field[$fieldname]->field_info)) {
+          $field_information['date_format'] = $this->view->field[$fieldname]->field_info['type'];
+          $field_information['tz_handling'] = $this->view->field[$fieldname]->field_info['settings']['tz_handling'];
+        }
+        else {
+          $field_information['date_format'] = 'timestamp';
+          $field_information['tz_handling'] = 'site';
         }
-      return $field_information;
+
+        return $field_information;
       }
     }
     else {
diff --git a/plugins/date_sources/date_field.inc b/plugins/date_sources/date_field.inc
index 27c3997..93b4154 100644
--- a/plugins/date_sources/date_field.inc
+++ b/plugins/date_sources/date_field.inc
@@ -25,14 +25,16 @@ $plugin = array(
  * 3. Drupal's gobal timezone settings are taken. Not the date field specific settings.
  */
 function timeline_date_source_date_field_conversion($date, $output_format, $options = array()) {
-
-  $input_format = $options['field']['date format'];
+  $input_format = $options['field']['date_format'];
+  $tz_handling = $options['field']['tz_handling'];
+  $timezone = date_get_timezone($tz_handling);
+  $db_timezone = date_get_timezone_db($tz_handling);
   switch ($output_format) {
     case 'iso8601':
-      return timeline_convert_to_iso($date, $input_format);
+      return timeline_convert_to_iso($date, $input_format, $timezone, $db_timezone);
     case 'gregorian':
-      return timeline_convert_to_gregorian($date, $input_format);
+      return timeline_convert_to_gregorian($date, $input_format, $timezone, $db_timezone);
     case 'timestamp':
-      return timeline_convert_to_timestamp($date, $input_format);
+      return timeline_convert_to_timestamp($date, $input_format, $timezone, $db_timezone);
   }
 }
diff --git a/plugins/date_sources/post_date.inc b/plugins/date_sources/post_date.inc
index 4ed716a..e296034 100644
--- a/plugins/date_sources/post_date.inc
+++ b/plugins/date_sources/post_date.inc
@@ -15,15 +15,16 @@ $plugin = array(
 
 
 function timeline_date_source_post_date_conversion($date, $output_format, $options = array()) {
-
   $input_format = 'timestamp';
+  $timezone = timeline_get_timezone();
+  $db_timezone = 'UTC';
   switch ($output_format) {
     case 'iso8601':
-      return timeline_convert_to_iso($date, $input_format);
+      return timeline_convert_to_iso($date, $input_format, $timezone, $db_timezone);
     case 'gregorian':
-      return timeline_convert_to_gregorian($date, $input_format);
+      return timeline_convert_to_gregorian($date, $input_format, $timezone, $db_timezone);
     case 'timestamp':
-      return timeline_convert_to_timestamp($date, $input_format);
+      return timeline_convert_to_timestamp($date, $input_format, $timezone, $db_timezone);
   }
 }
 
diff --git a/timeline.module b/timeline.module
index b69e9b2..1ef1a4f 100644
--- a/timeline.module
+++ b/timeline.module
@@ -36,15 +36,16 @@ function timeline_views_api() {
  * Implementation of hook_theme().
  */
 function timeline_theme() {
+  $base = array('file' => 'timeline.theme.inc');
   return array(
-    'timeline_nodata' => array(),
-    'timeline_bubble_title' => array(
+    'timeline_nodata' => $base + array(),
+    'timeline_bubble_title' => $base + array(
       'arguments' => array('row' => NULL, 'alias' => NULL),
     ),
-    'timeline_bubble_url' => array(
+    'timeline_bubble_url' => $base + array(
       'arguments' => array('row' => NULL, 'link_enabled' => NULL),
     ),
-    'timeline_debug' => array(
+    'timeline_debug' => $base + array(
       'arguments' => array('debug_array' => NULL),
     ),
   );
@@ -119,9 +120,9 @@ function timeline_get_timezone() {
     $user->timezone : variable_get('date_default_timezone', NULL);
 }
 
-function timeline_convert_to_gregorian($value, $date_format) {
-  $timezone = new DateTimezone(timeline_get_timezone());
-  $db_timezone = new DateTimezone('UTC');
+function timeline_convert_to_gregorian($value, $date_format, $timezone, $db_timezone) {
+  $timezone = new DateTimezone($timezone);
+  $db_timezone = new DateTimezone($db_timezone);
   switch ($date_format) {
     case 'timestamp':
       $date = new DateTime("@$value", $db_timezone);
@@ -134,9 +135,9 @@ function timeline_convert_to_gregorian($value, $date_format) {
   return $date->format('M d Y G:i:s');
 }
 
-function timeline_convert_to_iso($value, $date_format) {
-  $timezone = new DateTimezone(timeline_get_timezone());
-  $db_timezone = new DateTimezone('UTC');
+function timeline_convert_to_iso($value, $date_format, $timezone, $db_timezone) {
+  $timezone = new DateTimezone($timezone);
+  $db_timezone = new DateTimezone($db_timezone);
   switch ($date_format) {
     case 'timestamp':
       $date = new DateTime("@$value", $db_timezone);
@@ -149,9 +150,9 @@ function timeline_convert_to_iso($value, $date_format) {
   return $date->format('Y-m-d\TH:i:s\Z');
 }
 
-function timeline_convert_to_timestamp($value, $date_format) {
-  $timezone = new DateTimezone(timeline_get_timezone());
-  $db_timezone = new DateTimezone('UTC');
+function timeline_convert_to_timestamp($value, $date_format, $timezone, $db_timezone) {
+  $timezone = new DateTimezone($timezone);
+  $db_timezone = new DateTimezone($db_timezone);
   switch ($date_format) {
     case 'timestamp':
       $date = new DateTime("@$value", $db_timezone);
diff --git a/timeline.theme.inc b/timeline.theme.inc
index 2227915..c4e2c09 100644
--- a/timeline.theme.inc
+++ b/timeline.theme.inc
@@ -8,9 +8,16 @@
  * Implementation of template_process for views-view-timeline.
  */
 function template_preprocess_views_view_timeline(&$vars) {
+
+  if (!empty($vars['view']->live_preview)) {
+    drupal_set_message(t('The timeline cannot be viewed in the preview.'), 'warning');
+    return;
+  }
+
   if (isset($vars['options']['debug'])) {
     $vars['debug'] = theme('timeline_debug', array('debug_array' => $vars['options']['debug']));
   }
+    
   // check if data is available
   if ($vars['options']['timeline']['data_count'] > 0) {
     // create actual timeline
diff --git a/timeline_views_plugin_style.inc b/timeline_views_plugin_style.inc
index ca93376..c1e72e0 100644
--- a/timeline_views_plugin_style.inc
+++ b/timeline_views_plugin_style.inc
@@ -383,6 +383,7 @@ class timeline_views_plugin_style extends views_plugin_style {
     // Convert data to json and push them to drupal's js behaviors
     $data = array();
     $data['timeline'][$delta] = array($timeline->data['id'] . '_' . $delta => $timeline->data);
+
     drupal_add_js($data, 'setting');
 
     // Show debug textarea if enabled
