diff --git fullcalendar.module fullcalendar.module
index e092fa2..8207a36 100644
--- fullcalendar.module
+++ fullcalendar.module
@@ -189,11 +189,12 @@
  * Prepare variables for template file invoked for node row type
  */
 function template_preprocess_views_view_node_fullcalendar(&$vars) {
+
   if (isset($vars['view']->empty_text)) {
     $vars['empty_text'] = $vars['view']->empty_text;
     return;
   }
-  $nid = $vars['row']->{$vars['field_alias']};
+  $nid = $vars['view']['row']->{$vars['view']['field_alias']};
   if (!is_numeric($nid)) {
     return;
   }
@@ -201,41 +202,42 @@
   if (empty($node)) {
     return;
   }
-
+
   // Allow resize/drag/drop of an event if user has proper permissions.
   $node->editable = _fullcalendar_update_access($node);
   $node->class = theme('fullcalendar_classname', $node);
+
   $vars['node'] = $node;
   $vars['data'] = array(); // Contains the start, end & allDay values.
+
+  // Default URL.
   $node->url = 'node/' . $nid;
-  if ($url_field = $vars['options']['fullcalendar_url_field']) {
-    if (isset($node->{$url_field}[0]['value'])) {
-      $node->url = $node->{$url_field}[0]['value'];
+
+  // Fetch custom URL if needed.
+  if (!empty($vars['view']['options']['custom']['fullcalendar_custom_url'])) {
+    if ($url_field = $vars['view']['options']['custom']['fullcalendar_url_field']) {
+      if (isset($node->{$url_field})) {
+        $node->url = $node->{$url_field};
+      }
     }
   }
 
-  $title_field = $vars['options']['fullcalendar_title_field'];
-  if (!empty($title_field) && !empty($node->{$title_field}[0]['value'])) {
-    $node->title = $node->{$title_field}[0]['value'];
+  // Fetch custom title if needed.
+  if (!empty($vars['view']['options']['custom']['fullcalendar_custom_title'])) {
+    $title_field = $vars['view']['options']['custom']['fullcalendar_title_field'];
+    if (!empty($title_field) && !empty($node->{$title_field})) {
+      $node->title = $node->{$title_field};
+    }
   }
+
   $display_field = fullcalendar_date_fields($node);
-  $field_names = trim(strip_tags($vars['options']['fullcalendar_date_fields']));
-  if (!empty($field_names)) {
-    foreach (explode("\n", $field_names) as $field_name) {
-      $field_name = trim(strip_tags($field_name));
-      if (($field_name == 'created') || ($field_name == 'changed')) {
-        $attributes = _fullcalendar_set_display_times($node, $field_name);
-        $vars['data'][] = theme('fullcalendar_link', $node, $attributes);
-        $display_field = array();
-        break;
-      }
-      // If a date_type field exists
-      if ($display_field[$field_name]) {
-        $display_field = array($field_name => $display_field[$field_name]);
-        break;
-      }
-    }
+
+  // Fetch custom dates if needed.
+  if (!empty($vars['view']['options']['custom']['fullcalendar_custom_date'])) {
+  	$fields = fullcalendar_strip_value_from_fields($vars['view']['options']['custom']['fullcalendar_date_fields']);
+    $display_field = array_intersect_key($display_field, $fields);
   }
+
   // Iterate through available fields, using the first one found.
   foreach ($display_field as $field_name => $field) {
     foreach ($node->$field_name as $index => $item) {
@@ -328,8 +330,32 @@
   foreach ($type['fields'] as $field_name => $field) {
     if (in_array($field['type'], array('date', 'datestamp', 'datetime'))) {
       $fields[$field_name] = $field;
+    }
+  }
+  return $fields;
+}
+
+/**
+ * TODO
+ */
+function fullcalendar_date_fields_from_view($view_fields) {
+  $fields = array();
+  foreach ($view_fields as $field_name => $type) {
+    if (in_array($type, array('Date', 'Datestamp', 'Datetime'))) {	
+      $fields[str_replace("_value", "", $field_name)] = $type;
     }
   }
+  return $fields;
+}
+
+/**
+ * TODO
+ */
+function fullcalendar_strip_value_from_fields($view_fields) {
+  $fields = array();
+  foreach ($view_fields as $field_name => $x) {
+    $fields[str_replace("_value", "", $field_name)] = $x;
+  }
   return $fields;
 }
 
diff --git fullcalendar.views.inc fullcalendar.views.inc
index c1b0ad5..a0b493c 100644
--- fullcalendar.views.inc
+++ fullcalendar.views.inc
@@ -55,11 +55,11 @@
         'parent' => '',
       ),
       'fullcalendar_node' => array(
-        'title' => t('Node - FullCalendar'),
+        'title' => t('Fields (FullCalendar)'),
         'help' => t('For use with FullCalendar style'),
         'handler' => 'views_plugin_node_fullcalendar',
         'theme' => 'views_view_node_fullcalendar',
-        'uses fields' => FALSE,
+        'uses fields' => TRUE,
         'uses options' => TRUE,
         'type' => 'normal',
       ),
diff --git fullcalendar_plugin_display_page.inc fullcalendar_plugin_display_page.inc
index 9f5b8e6..2f6e9ea 100644
--- fullcalendar_plugin_display_page.inc
+++ fullcalendar_plugin_display_page.inc
@@ -17,4 +17,17 @@
     }
     return parent::render();
   }
+
+  function validate() {
+    $errors = parent::validate();
+
+    $field_options = $this->display->handler->get_field_labels();
+    $date_fields = fullcalendar_date_fields_from_view($field_options);
+
+    if (empty($date_fields)) {
+      $errors[] = t('Display "@display" requires at least one date field.', array('@display' => $this->display->display_title));
+    }
+
+    return $errors;
+  }
 }
diff --git views_plugin_node_fullcalendar.inc views_plugin_node_fullcalendar.inc
index 6120cfd..d9e21a6 100644
--- views_plugin_node_fullcalendar.inc
+++ views_plugin_node_fullcalendar.inc
@@ -18,35 +18,84 @@
 
   function option_definition() {
     $options = parent::option_definition();
-    $options['fullcalendar_url_field'] = array('default' => '');
-    $options['fullcalendar_date_fields'] = array('default' => '');
-    $options['fullcalendar_title_field'] = array('default' => '');
+    $options['custom'] = array(
+      'contains' => array(
+        'fc_title_field' => array('default' => ''),
+        'fc_title_field' => array('default' => ''),
+        'fc_url_field' => array('default' => ''),
+        'fc_date' => array('default' => FALSE),
+        'fc_url' => array('default' => FALSE),
+        'fc_date' => array('default' => FALSE),
+      ),
+    );
     return $options;
   }
 
   function options_form(&$form, &$form_state) {
     parent::options_form($form, $form_state);
-    $form['fullcalendar_date_fields'] = array(
-      '#type' => 'textarea',
-      '#title' => t('Date Fields'),
-      '#default_value' => $this->options['fullcalendar_date_fields'],
-      '#description' => t('Normally this plugin uses the first node field that is either a date or a datetime field type. However, if you wish to override this behavior, please enter the names of the fields to use instead. For example "field_scheduled_for". Enter one per line. They will be searched in the order listed. Enter "created" or "changed" to use the respective node timestamps.'),
+    $field_options = $this->display->handler->get_field_labels();
+    $date_fields = fullcalendar_date_fields_from_view($field_options);
+
+    $form['custom'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Customize fields'),
+      '#description' => t('Add fields to the view in order to customize fields below.'),
+      '#attributes' => array(
+        'class' => 'clear-block',
+      ),
+     );
+    $form['custom']['fullcalendar_custom_title'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Use a custom event title.'),
+      '#default_value' => $this->options['custom']['fullcalendar_custom_title'],
     );
-    $form['fullcalendar_title_field'] = array(
-      '#type' => 'textfield',
+    $form['custom']['fullcalendar_title_field'] = array(
+      '#type' => 'select',
       '#title' => t('Title Field'),
-      '#default_value' => $this->options['fullcalendar_title_field'],
-      '#description' => t('The title of the event to be displayed. If blank, the node title will be used. For example: "field_event_title".'),
+      '#options' => $field_options,
+      '#default_value' => $this->options['custom']['fullcalendar_title_field'],
+      '#description' => t('Choose the field with the custom title.'),
+      '#process' => array('form_process_select', 'ctools_dependent_process'),
+      '#dependency' => array('edit-row-options-fullcalendar-custom-title' => array(1)),
+    );
+    $form['custom']['fullcalendar_custom_url'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Use a custom event redirect URL.'),
+      '#default_value' => $this->options['custom']['fullcalendar_custom_url'],
     );
-    $form['fullcalendar_url_field'] = array(
-      '#type' => 'textfield',
+    $form['custom']['fullcalendar_url_field'] = array(
+      '#type' => 'select',
       '#title' => t('URL Field'),
-      '#default_value' => $this->options['fullcalendar_url_field'],
-      '#description' => t('If the calendar items should not link directly to the node, enter the name of the cck field to use for the url instead. For example: "field_url".'),
+      '#options' => $field_options,
+      '#default_value' => $this->options['custom']['fullcalendar_url_field'],
+      '#description' => t('Choose the field with the custom link.'),
+      '#process' => array('form_process_select', 'ctools_dependent_process'),
+      '#dependency' => array('edit-row-options-fullcalendar-custom-url' => array(1)),
+    );
+    $form['custom']['fullcalendar_custom_date'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Use a custom date field.'),
+      '#default_value' => $this->options['custom']['fullcalendar_custom_date'],
+    );
+    $form['custom']['fullcalendar_date_fields'] = array(
+      '#type' => 'select',
+      '#title' => t('Date Fields'),
+      '#options' => $date_fields,
+      '#default_value' => $this->options['custom']['fullcalendar_date_fields'],
+      '#description' => t('Select one or more date fields.'),
+      '#multiple' => TRUE,
+      '#size' => count($date_fields),
+      '#process' => array('form_process_select', 'ctools_dependent_process'),
+      '#dependency' => array('edit-row-options-fullcalendar-custom-date' => array(1)),
     );
   }
 
   function render($row) {
-    return theme($this->theme_functions(), $this->view, $this->options, $row, $this->field_alias);
+    return theme($this->theme_functions(), array(
+      'view' => $this->view,
+      'options' => $this->options,
+      'row' => $row,
+      'field_alias' => $this->field_alias,
+    ));
   }
 }
diff --git views_plugin_style_fullcalendar.inc views_plugin_style_fullcalendar.inc
index 1672753..d5ff6cc 100644
--- views_plugin_style_fullcalendar.inc
+++ views_plugin_style_fullcalendar.inc
@@ -29,17 +29,16 @@
         'fc_right' => array('default' => 'month agendaWeek agendaDay'),
       ),
     );
-    $options['defaults'] = array(
-      'contains' => array(
-        'fc_year' => array('default' => ''),
-        'fc_month' => array('default' => ''),
-        'fc_day' => array('default' => ''),
-      ),
-    );
     $options['times'] = array(
       'contains' => array(
         'fc_timeformat' => array('default' => 'h:mm{ - h:mm}'),
         'fc_clock' => array('default' => FALSE),
+        'fc_default_date' => array('default' => FALSE),
+        'fc_date' => array('default' => array(
+          'year' => '',
+          'month' => '',
+          'day' => '',
+        )),
       ),
     );
     return $options;
@@ -49,7 +48,6 @@
     $form['display'] = array(
       '#type' => 'fieldset',
       '#title' => t('Display settings'),
-      '#description' => 'Blank values will use the current day, month, or year.',
       '#attributes' => array(
         'class' => 'clear-block',
       ),
@@ -64,20 +62,19 @@
         'agendaDay' => 'Day (Agenda)',
         'basicDay' => 'Day (Basic)',
       ),
+      '#description' => l(t('More info'), 'http://arshaw.com/fullcalendar/docs/views/Available_Views', array('attributes' => array('target' => '_blank'))),
       '#default_value' => $this->options['display']['fc_view'],
-      '#description' => l(t('Default timespan displayed.'), 'http://arshaw.com/fullcalendar/docs/views/Available_Views', array('attributes' => array('target' => '_blank'))),
       '#prefix' => '<div class="views-left-30">',
       '#suffix' => '</div>',
     );
     $form['display']['fc_firstday'] = array(
       '#type' => 'select',
-      '#title' => t('First day'),
+      '#title' => t('Week starts on'),
       '#options' => array(
-        '0' => 'Sunday',
-        '1' => 'Monday',
+        '0' => t('Sunday'),
+        '1' => t('Monday'),
       ),
       '#default_value' => $this->options['display']['fc_firstday'],
-      '#description' => l(t('The day each week begins.'), 'http://arshaw.com/fullcalendar/docs/display/firstDay', array('attributes' => array('target' => '_blank'))),
       '#prefix' => '<div class="views-left-30">',
       '#suffix' => '</div>',
     );
@@ -90,21 +87,21 @@
         'variable' => 'Variable',
       ),
       '#default_value' => $this->options['display']['fc_weekmode'],
-      '#description' => l(t('Number of weeks displayed.'), 'http://arshaw.com/fullcalendar/docs/display/weekMode', array('attributes' => array('target' => '_blank'))),
+      '#description' => l(t('More info'), 'http://arshaw.com/fullcalendar/docs/display/weekMode', array('attributes' => array('target' => '_blank'))),
       '#prefix' => '<div class="views-left-30">',
       '#suffix' => '</div>',
     );
     $form['header'] = array(
       '#type' => 'fieldset',
-      '#title' => t('Header elements'),
-      '#description' => l(t('Buttons and title to be shown in header.'), 'http://arshaw.com/fullcalendar/docs/display/header', array('attributes' => array('target' => '_blank'))),
+      '#title' => t('Header settings'),
+      '#description' => l(t('More info'), 'http://arshaw.com/fullcalendar/docs/display/header', array('attributes' => array('target' => '_blank'))),
       '#attributes' => array(
         'class' => 'clear-block',
       ),
     );
     $form['header']['fc_left'] = array(
       '#type' => 'textfield',
-      '#title' => t('Left header'),
+      '#title' => t('Left'),
       '#default_value' => $this->options['header']['fc_left'],
       '#prefix' => '<div class="views-left-30">',
       '#suffix' => '</div>',
@@ -112,7 +109,7 @@
     );
     $form['header']['fc_center'] = array(
       '#type' => 'textfield',
-      '#title' => t('Center header'),
+      '#title' => t('Center'),
       '#default_value' => $this->options['header']['fc_center'],
       '#prefix' => '<div class="views-left-30">',
       '#suffix' => '</div>',
@@ -120,51 +117,15 @@
     );
     $form['header']['fc_right'] = array(
       '#type' => 'textfield',
-      '#title' => t('Right header'),
+      '#title' => t('Right'),
       '#default_value' => $this->options['header']['fc_right'],
       '#prefix' => '<div class="views-left-40">',
       '#suffix' => '</div>',
       '#size' => '30',
-    );
-    $form['defaults'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('Default values'),
-      '#description' => 'Blank values will use the current day, month, or year.',
-      '#attributes' => array(
-        'class' => 'clear-block',
-      ),
-    );
-    $form['defaults']['fc_year'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Year'),
-      '#default_value' => $this->options['defaults']['fc_year'],
-      '#description' => t('Full 4 digits.'),
-      '#prefix' => '<div class="views-left-30">',
-      '#suffix' => '</div>',
-      '#size' => '20',
-    );
-    $form['defaults']['fc_month'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Month'),
-      '#default_value' => $this->options['defaults']['fc_month'],
-      '#description' => t('No leading zeros.'),
-      '#prefix' => '<div class="views-left-30">',
-      '#suffix' => '</div>',
-      '#size' => '20',
-    );
-    $form['defaults']['fc_day'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Day'),
-      '#default_value' => $this->options['defaults']['fc_day'],
-      '#description' => t('No leading zeros.'),
-      '#prefix' => '<div class="views-left-30">',
-      '#suffix' => '</div>',
-      '#size' => '20',
     );
     $form['times'] = array(
       '#type' => 'fieldset',
-      '#title' => t('Time display'),
-      '#description' => l(t('Formatting options for time.'), 'http://arshaw.com/fullcalendar/docs/utilities/formatDate', array('attributes' => array('target' => '_blank'))),
+      '#title' => t('Time/date settings'),
       '#attributes' => array(
         'class' => 'clear-block',
       ),
@@ -172,19 +133,34 @@
     $form['times']['fc_timeformat'] = array(
       '#type' => 'textfield',
       '#title' => t('Time format'),
+      '#description' => l(t('More info'), 'http://arshaw.com/fullcalendar/docs/utilities/formatDate', array('attributes' => array('target' => '_blank'))),
       '#default_value' => $this->options['times']['fc_timeformat'],
-      '#description' => 'Format of time display on each event.',
     );
     $form['times']['fc_clock'] = array(
       '#type' => 'checkbox',
       '#title' => t('Use 24 hour display'),
       '#default_value' => $this->options['times']['fc_clock'],
-      '#description' => 'Use 24 display (ignores custom time format).',
+    );
+    /**
+    $form['times']['fc_default_date'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Use a custom default date'),
+      '#default_value' => $this->options['times']['fc_default_date'],
+    );
+    $form['times']['fc_date'] = array(
+      '#type' => 'date',
+      '#title' => t('Custom default date'),
+      '#default_value' => $this->options['times']['fc_date'],
+
+      '#prefix' => '<div id="edit-style-options-times-fc-date-wrapper"><div id="edit-style-options-times-fc-date">',
+      '#suffix' => '</div></div>',
+      '#process' => array('form_process_date', 'ctools_dependent_process'),
+      '#dependency' => array('edit-style-options-times-fc-default-date' => array(1)),
     );
+    */
     $form['modules'] = array(
       '#type' => 'fieldset',
-      '#title' => t('Module integration'),
-      '#description' => 'Settings for integration with other modules.',
+      '#title' => t('Visual settings'),
       '#attributes' => array(
         'class' => 'clear-block',
       ),
@@ -193,13 +169,13 @@
       '#type' => 'checkbox',
       '#title' => t('Use jQuery UI Theme'),
       '#default_value' => $this->options['modules']['fc_theme'],
-      '#description' => t('If checked, the calendar will use any loaded jQuery UI themes.'),
     );
-    $form['modules']['fc_url_colorbox'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Open events in colorbox'),
-      '#default_value' => $this->options['modules']['fc_url_colorbox'],
-      '#description' => t('If checked, each event will open in colorbox (if it is installed).'),
-    );
+    if (module_exists('colorbox')) {
+      $form['modules']['fc_url_colorbox'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Open events in colorbox'),
+        '#default_value' => $this->options['modules']['fc_url_colorbox'],
+      );
+    }
   }
 }
