diff --git a/views_timelinejs_plugin_style_timelinejs.inc b/views_timelinejs_plugin_style_timelinejs.inc
index 627901a..f6a6934 100644
--- a/views_timelinejs_plugin_style_timelinejs.inc
+++ b/views_timelinejs_plugin_style_timelinejs.inc
@@ -16,7 +16,12 @@ class views_timelinejs_plugin_style_timelinejs extends views_plugin_style {
         'headline' => array('default' => '', 'translatable' => FALSE),
         'bodytext' => array('default' => '', 'translatable' => FALSE),
         'media' => array('default' => '', 'translatable' => FALSE),
+        'caption' => array('default' => '', 'translatable' => FALSE),
+        'credit' => array('default' => '', 'translatable' => FALSE),
+        'thumbnail' => array('default' => '', 'translatable' => FALSE),
         'date' => array('default' => '', 'translatable' => FALSE),
+        'era' => array('default' => '', 'translatable' => FALSE),
+        'tag' => array('default' => '', 'translatable' => FALSE),
       ),
       'timeline_config' => array(
         'link_to_entity' => array('default' => '', 'translatable' => FALSE),
@@ -47,6 +52,7 @@ class views_timelinejs_plugin_style_timelinejs extends views_plugin_style {
     $text_fields = $fields;
     $date_fields = $fields;
     $media_fields = $fields;
+    $bool_fields = $fields;
 
     $form['timeline_config'] = array(
       '#type' => 'fieldset',
@@ -100,13 +106,48 @@ class views_timelinejs_plugin_style_timelinejs extends views_plugin_style {
       '#description' => t('Only image fields are currently supported'),
       '#default_value' => isset($this->options['timeline_fields']['media']) ? $this->options['timeline_fields']['media'] : '',
     );
+    $form['timeline_fields']['caption'] = array(
+      '#type' => 'select',
+      '#options' => $text_fields,
+      '#title' => 'Select field for media caption',
+      '#description' => t('This field should be a text-like field'),
+      '#default_value' => isset($this->options['timeline_fields']['caption']) ? $this->options['timeline_fields']['caption'] : '',
+    );
+    $form['timeline_fields']['credit'] = array(
+      '#type' => 'select',
+      '#options' => $text_fields,
+      '#title' => 'Select field for media credit',
+      '#description' => t('This field should be a text-like field'),
+      '#default_value' => isset($this->options['timeline_fields']['credit']) ? $this->options['timeline_fields']['credit'] : '',
+    );
+    $form['timeline_fields']['thumbnail'] = array(
+      '#type' => 'select',
+      '#options' => $media_fields,
+      '#title' => 'Select field for thumbnail',
+      '#description' => t('Only image fields are currently supported'),
+      '#default_value' => isset($this->options['timeline_fields']['thumbnail']) ? $this->options['timeline_fields']['thumbnail'] : '',
+    );
     $form['timeline_fields']['date'] = array(
       '#type' => 'select',
       '#options' => $date_fields,
       '#title' => 'Select field for date element',
-      '#description' => t('Only UNIX timestamp-like date fields are currently supported (node created, updated, etc...)'),
+      '#description' => t('Only UNIX timestamp-like date fields are currently supported (node created, updated, date module datestamp, etc...)'),
       '#default_value' => isset($this->options['timeline_fields']['date']) ? $this->options['timeline_fields']['date'] : '',
     );
+    $form['timeline_fields']['era'] = array(
+      '#type' => 'select',
+      '#options' => $bool_fields,
+      '#title' => 'Select field for type (era or title)',
+      '#description' => t('This field should be a boolean (true/false) field'),
+      '#default_value' => isset($this->options['timeline_fields']['era']) ? $this->options['timeline_fields']['era'] : '',
+    );
+    $form['timeline_fields']['tag'] = array(
+      '#type' => 'select',
+      '#options' => $text_fields,
+      '#title' => 'Select field for tag',
+      '#description' => t('This field should be a text-like field'),
+      '#default_value' => isset($this->options['timeline_fields']['tag']) ? $this->options['timeline_fields']['tag'] : '',
+    );
   }
 
   /**
@@ -125,9 +166,15 @@ class views_timelinejs_plugin_style_timelinejs extends views_plugin_style {
       'headline' => 'headline',
       'text' => 'bodytext',
       'media' => 'media',
+      'caption' => 'caption',
+      'credit' => 'credit',
+      'era' => 'era',
+      'thumbnail' => 'thumbnail',
+      'tag' => 'tag',
     );
     $link_text = isset($this->options['timeline_config']['link_text']) ? $this->options['timeline_config']['link_text'] : 'Read more';
-    $rows = array();
+    $date = array();
+    $era = array();
 
     // TODO: Figure out how to detect field types and different rendering methods for them
     $media_field_type = isset($this->options['timeline_fields']['media']) ? $view->field[$this->options['timeline_fields']['media']]->field_info['type'] : NULL;
@@ -145,7 +192,7 @@ class views_timelinejs_plugin_style_timelinejs extends views_plugin_style {
 
       // Get basic data for each timeline entry field based on display handler settings
       foreach($field_mapping as $target_field => $source_field) {
-        if(isset($this->options['timeline_fields'][$source_field])) {
+        if(isset($this->options['timeline_fields'][$source_field]) && $this->options['timeline_fields'][$source_field]) {
           // Get field alias, so we can check agains $row if all fields have data
           $field_alias = $view->field[$this->options['timeline_fields'][$source_field]]->field_alias;
           if(isset($row->$field_alias)) {
@@ -164,6 +211,17 @@ class views_timelinejs_plugin_style_timelinejs extends views_plugin_style {
       // TODO: Maybe it's not worth using general field mapping loop above,
       // since most of the fields require field-level processing
       if(isset($fields['startDate'])) {
+        if (is_array($fields['startDate'])) {
+          // Processing for datestamp fields from the Date module
+          $date_tmp = array_shift($fields['startDate']);
+          $fields['startDate'] = $date_tmp['value'];
+          if (isset($date_tmp['value2'])) {
+            $fields['endDate'] = $date_tmp['value2'];
+          }
+          else {
+            $fields['endDate'] = $fields['startDate'];
+          }
+        }
         $fields['startDate'] = format_date($fields['startDate'], 'custom', 'Y,m,d');
       }
       if(isset($fields['endDate'])) {
@@ -175,18 +233,40 @@ class views_timelinejs_plugin_style_timelinejs extends views_plugin_style {
           $fields['media'] = file_create_url($field_tmp['uri']);
         }
       }
+      // TODO: this should be normalized with the above code.
+      if(isset($fields['thumbnail']) && is_array($fields['thumbnail'])) {
+        $field_tmp = array_shift($fields['thumbnail']);
+        if(isset($field_tmp['uri'])) {
+          $fields['thumbnail'] = file_create_url($field_tmp['uri']);
+        }
+      }
+      if(isset($fields['era'])) {
+        $field_tmp = array_shift($fields['era']);
+        $fields['era'] = $field_tmp['value'];
+      }
       // We want to use rendered output for bodytext, because of
       // field level processing provided by views (trimming, etc)
       // Remove all markup, so that we don't get any broken HTML
       if(isset($fields['text'])) {
         $fields['text'] = strip_tags($this->view->style_plugin->rendered_fields[$count][$this->options['timeline_fields']['bodytext']]);
       }
-
+      // TODO: this should be normalized with the above code.
+      if(isset($fields['caption'])) {
+        $fields['caption'] = strip_tags($this->view->style_plugin->rendered_fields[$count][$this->options['timeline_fields']['caption']]);
+      }
+      // TODO: this should be normalized with the above code.
+      if(isset($fields['credit'])) {
+        $fields['credit'] = strip_tags($this->view->style_plugin->rendered_fields[$count][$this->options['timeline_fields']['credit']]);
+      }
+      // TODO: this should be normalized with the above code.
+      if(isset($fields['tag'])) {
+        $fields['tag'] = strip_tags($this->view->style_plugin->rendered_fields[$count][$this->options['timeline_fields']['tag']]);
+      }
       // Loop through fields if there are arrays and deassemble them to get value
       foreach($fields as $name => $field) {
         if(is_array($field)) {
           $field_tmp = array_shift($field);
-          $fields[$name] = $field_tmp['value'];
+          $fields[$name] = isset($field_tmp['value']) ? $field_tmp['value'] : '';
         }
 
         // Sanitize all user inputted output
@@ -204,31 +284,52 @@ class views_timelinejs_plugin_style_timelinejs extends views_plugin_style {
       }
 
       // Combine the results array with processed row data
-      $rows[$count]['startDate'] = isset($fields['startDate']) ? $fields['startDate'] : '';
-      $rows[$count]['endDate'] = isset($fields['endDate']) ? $fields['endDate'] : '';
-      $rows[$count]['headline'] = isset($fields['headline']) ? $fields['headline'] : '';
-      $rows[$count]['text'] = isset($fields['text']) ? $fields['text'] : '';
-      $rows[$count]['asset']['media'] = isset($fields['media']) ? $fields['media'] : '';
+      if (isset($fields['era']) && ($fields['era'] == TRUE || $fields['era'] == 'era')) {
+        $era[] = array(
+          'startDate' => isset($fields['startDate']) ? $fields['startDate'] : '',
+          'endDate' => isset($fields['endDate']) ? $fields['endDate'] : '',
+          'headline' => isset($fields['headline']) ? $fields['headline'] : '',
+          'text' => isset($fields['text']) ? $fields['text'] : '',
+          'tag' => isset($fields['tag']) ? $fields['tag'] : '',
+        );
+      }
+      else {
+        $date[] = array(
+          'startDate' => isset($fields['startDate']) ? $fields['startDate'] : '',
+          'endDate' => isset($fields['endDate']) ? $fields['endDate'] : '',
+          'headline' => isset($fields['headline']) ? $fields['headline'] : '',
+          'text' => isset($fields['text']) ? $fields['text'] : '',
+          'asset' => array(
+            'media' => isset($fields['media']) ? $fields['media'] : '',
+            'thumbnail' => isset($fields['thumbnail']) ? $fields['thumbnail'] : '',
+            'credit' => isset($fields['credit']) ? $fields['credit'] : '',
+            'caption' => isset($fields['caption']) ? $fields['caption'] : '',
+          ),
+          'tag' => isset($fields['tag']) ? $fields['tag'] : '',
+        );
+      }
     }
 
     // Let modules alter timeline data before rendering by implementing
     // hook_views_timelinejs_data_alter(&$rows, $view)
     drupal_alter('views_timelinejs_data', $rows, clone $view);
 
+    // Prepare data array that TimelineJS understands
+    $data = array(
+      'timeline' => array(
+        'headline' => 'Title',
+        'type' => 'default',
+        'date' => $date,
+        'era' => $era,
+      ),
+    );
+
     // Skip rendering if view is being edited or previewed
     if(!$view->editing) {
-      // Prepare data array that TimelineJS understands
-      $data = array(
-        'timeline' => array(
-          'headline' => 'Title',
-          'type' => 'default',
-          'date' => $rows,
-        ),
-      );
       return theme('views_timelinejs', array('view' => $view, 'options' => $this->options, 'rows' => $data));
     }
