diff --git a/chart.module b/chart.module
index 76e177b..cc36512 100644
--- a/chart.module
+++ b/chart.module
@@ -632,6 +632,7 @@ function _chart_append($attr, $value, &$data) {
       }
       // Generate regular labels
       if (count($regular)) {
+        $data['chxl'] = "";
         foreach ($regular as $axis => $indices) {
           if (count($indices)) {
             foreach ($indices as $i => $labels) {
@@ -641,6 +642,7 @@ function _chart_append($attr, $value, &$data) {
                 foreach ($labels as $j => $label) {
                   $data['chxl'] .= '|' . $label['#label'];
                   $positions[$index]['data'][] = isset($label['#position']) ? $label['#position'] : 0;
+                  $positions[$index]['set'] = FALSE;
                   if ($label['#position']) {
                     $positions[$index]['set'] = TRUE;
                   }
diff --git a/chart_views/views/chart_views_plugin_style_chart.inc b/chart_views/views/chart_views_plugin_style_chart.inc
index cd46714..a6cb6f2 100644
--- a/chart_views/views/chart_views_plugin_style_chart.inc
+++ b/chart_views/views/chart_views_plugin_style_chart.inc
@@ -20,7 +20,8 @@ class chart_views_plugin_style_chart extends views_plugin_style {
     $options['height'] = array('default' => 400);
     $options['color_scheme'] = array('default' => 'default');
     $options['label_append_value'] = array('default' => FALSE);
-
+    $options['axis_labels'] = array('default' => TRUE);
+    $options['gridlines'] = array('default' => FALSE);
     return $options;
   }
 
@@ -65,8 +66,220 @@ class chart_views_plugin_style_chart extends views_plugin_style {
       '#description' => t('If checked, calculated values will be appended in the chart legend.'),
       '#default_value' => $this->options['label_append_value'],
     );
+    $form['gridlines'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Append gridlines to the chart'),
+      '#description' => t('Check to display gridlines on the chart'),
+      '#default_value' => $this->options['gridlines'],
+    );
+    $form['gridlines_container'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Customize Gridlines'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+      $form['gridlines_container']['x_axis_step_size'] = array(
+        '#type' => 'textfield',
+        '#title' => t('X-Axis Step Size'),
+        '#description' => t('Used to calculate how many x grid lines to show on the chart. 100 / step_size = how many grid lines on the chart.'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['gridlines_container']['x_axis_step_size']) ? $this->options['gridlines_container']['x_axis_step_size'] : '25',
+      );
+      $form['gridlines_container']['y_axis_step_size'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Y-Axis Step Size'),
+        '#description' => t('Used to calculate how many y grid lines to show on the chart. 100 / step_size = how many grid lines on the chart.'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['gridlines_container']['y_axis_step_size']) ? $this->options['gridlines_container']['y_axis_step_size'] : '25',
+      );
+    $form['axis_labels'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Append axes to the charts'),
+      '#description' => t('Check to display values on the axis lines, or to change which axes are shown. Axes would not be displayed for Pie Charts.'),
+      '#default_value' => $this->options['axis_labels'],
+    );
+    $form['axis_labels_container'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Customize Axes'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+      $form['axis_labels_container']['x_bottom'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Customize Bottom X-Axis'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      );
+      $form['axis_labels_container']['x_bottom']['x_bottom_set'] = array(
+        '#type' => 'select',
+        '#title' => t('Set a Bottom X-Axis'),
+        '#description' => t('Select the Type of Axis Labels that you wish to display on the Bottom X-Axis'),
+        '#options' => array(
+          'range' => t('Value Range Labels'),
+          'field' => t('Custom Field Labels'),
+          'none' => t('None'),
+        ),
+        '#required' => TRUE,
+        '#default_value' => isset($this->options['axis_labels_container']['x_bottom']['x_bottom_set']) ? $this->options['axis_labels_container']['x_bottom']['x_bottom_set'] : variable_get('x_bottom_set','none'),
+      );
+      $form['axis_labels_container']['x_bottom']['x_bottom_min_value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Range Min value'),
+        '#description' => t('Set the minimum value for the Bottom X-Axis range, if you wish to set a Value Range Label'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['axis_labels_container']['x_bottom']['x_bottom_min_value']) ? $this->options['axis_labels_container']['x_bottom']['x_bottom_min_value'] : '0',
+      );
+      $form['axis_labels_container']['x_bottom']['x_bottom_max_value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Range Max Value'),
+        '#description' => t('Set the maximum value for the Bottom X-Axis range, if you wish to set a Value Range Label'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['axis_labels_container']['x_bottom']['x_bottom_max_value']) ? $this->options['axis_labels_container']['x_bottom']['x_bottom_max_value'] : '100',
+      );
+      $form['axis_labels_container']['x_bottom']['x_bottom_custom_field'] = array(
+        '#type' => 'select',
+        '#title' => t('Set the Custom Field'),
+        '#description' => t('Select the field to be displayed as Labels, if you wish to set a Custom Field Label'),
+        '#options' => $this->field_names(),
+        '#default_value' => isset($this->options['axis_labels_container']['x_bottom']['x_bottom_custom_field']) ? $this->options['axis_labels_container']['x_bottom']['x_bottom_custom_field'] : '',
+      );
+
+      $form['axis_labels_container']['x_top'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Customize Top X-Axis'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      );
+      $form['axis_labels_container']['x_top']['x_top_set'] = array(
+        '#type' => 'select',
+        '#title' => t('Set a Top X-Axis'),
+        '#description' => t('Select the Type of Axis Labels that you wish to display on the Top X-Axis'),
+        '#options' => array(
+          'range' => t('Value Range Labels'),
+          'field' => t('Custom Field Labels'),
+          'none' => t('None'),
+        ),
+        '#required' => TRUE,
+        '#default_value' => isset($this->options['axis_labels_container']['x_top']['x_top_set']) ? $this->options['axis_labels_container']['x_top']['x_top_set'] : variable_get('x_top_set','none'),
+      );
+      $form['axis_labels_container']['x_top']['x_top_min_value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Range Min value'),
+        '#description' => t('Set the minimum value for the Top X-Axis range, if you wish to set a Value Range Label'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['axis_labels_container']['x_top']['x_top_min_value']) ? $this->options['axis_labels_container']['x_top']['x_top_min_value'] : '0',
+      );
+      $form['axis_labels_container']['x_top']['x_top_max_value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Range Max Value'),
+        '#description' => t('Set the maximum value for the Top X-Axis range, if you wish to set a Value Range Label'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['axis_labels_container']['x_top']['x_top_max_value']) ? $this->options['axis_labels_container']['x_top']['x_top_max_value'] : '100',
+      );
+      $form['axis_labels_container']['x_top']['x_top_custom_field'] = array(
+        '#type' => 'select',
+        '#title' => t('Set the Custom Field'),
+        '#description' => t('Select the field to be displayed as Labels, if you wish to set a Custom Field Label'),
+        '#options' => $this->field_names(),
+        '#default_value' => isset($this->options['axis_labels_container']['x_top']['x_top_custom_field']) ? $this->options['axis_labels_container']['x_top']['x_top_custom_field'] : '',
+      );
+
+      $form['axis_labels_container']['y_left'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Customize Left Y-Axis'),
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+      );
+      $form['axis_labels_container']['y_left']['y_left_set'] = array(
+        '#type' => 'select',
+        '#title' => t('Set a Left Y-Axis'),
+        '#description' => t('Select the Type of Axis Labels that you wish to display on the Left Y-Axis'),
+        '#options' => array(
+          'range' => t('Value Range Labels'),
+          'field' => t('Custom Field Labels'),
+          'none' => t('None'),
+        ),
+        '#required' => TRUE,
+        '#default_value' => isset($this->options['axis_labels_container']['y_left']['y_left_set']) ? $this->options['axis_labels_container']['y_left']['y_left_set'] : variable_get('y_left_set','none'),
+      );
+      $form['axis_labels_container']['y_left']['y_left_min_value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Range Min value'),
+        '#description' => t('Set the minimum value for the Left Y-Axis range, if you wish to set a Value Range Label'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['axis_labels_container']['y_left']['y_left_min_value']) ? $this->options['axis_labels_container']['y_left']['y_left_min_value'] : '0',
+      );
+      $form['axis_labels_container']['y_left']['y_left_max_value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Range Max Value'),
+        '#description' => t('Set the maximum value for the Left Y-Axis range, if you wish to set a Value Range Label'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['axis_labels_container']['y_left']['y_left_max_value']) ? $this->options['axis_labels_container']['y_left']['y_left_max_value'] : '100',
+      );
+      $form['axis_labels_container']['y_left']['y_left_custom_field'] = array(
+        '#type' => 'select',
+        '#title' => t('Set the Custom Field'),
+        '#description' => t('Select the field to be displayed as Labels, if you wish to set a Custom Field Label'),
+        '#options' => $this->field_names(),
+        '#default_value' => isset($this->options['axis_labels_container']['y_left']['y_left_custom_field']) ? $this->options['axis_labels_container']['y_left']['y_left_custom_field'] : '',
+      );
+
+      $form['axis_labels_container']['y_right'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Customize Right Y-Axis'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      );
+      $form['axis_labels_container']['y_right']['y_right_set'] = array(
+        '#type' => 'select',
+        '#title' => t('Set a Right Y-Axis'),
+        '#description' => t('Select the Type of Axis Labels that you wish to display on the Right Y-Axis'),
+        '#options' => array(
+          'range' => t('Value Range Labels'),
+          'field' => t('Custom Field Labels'),
+          'none' => t('None'),
+        ),
+        '#required' => TRUE,
+        '#default_value' => isset($this->options['axis_labels_container']['y_right']['y_right_set']) ? $this->options['axis_labels_container']['y_right']['y_right_set'] : variable_get('y_right_set','none'),
+      );
+      $form['axis_labels_container']['y_right']['y_right_min_value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Range Min value'),
+        '#description' => t('Set the minimum value for the Right Y-Axis range, if you wish to set a Value Range Label'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['axis_labels_container']['y_right']['y_right_min_value']) ? $this->options['axis_labels_container']['y_right']['y_right_min_value'] : '0',
+      );
+      $form['axis_labels_container']['y_right']['y_right_max_value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Range Max Value'),
+        '#description' => t('Set the maximum value for the Right Y-Axis range, if you wish to set a Value Range Label'),
+        '#size' => 8,
+        '#default_value' => isset($this->options['axis_labels_container']['y_right']['y_right_max_value']) ? $this->options['axis_labels_container']['y_right']['y_right_max_value'] : '100',
+      );
+      $form['axis_labels_container']['y_right']['y_right_custom_field'] = array(
+        '#type' => 'select',
+        '#title' => t('Set the Custom Field'),
+        '#description' => t('Select the field to be displayed as Labels, if you wish to set a Custom Field Label'),
+        '#options' => $this->field_names(),
+        '#default_value' => isset($this->options['axis_labels_container']['y_right']['y_right_custom_field']) ? $this->options['axis_labels_container']['y_right']['y_right_custom_field'] : '',
+      );
   }
 
+  function field_names() {
+    $field_names = array();
+    $handlers = $this->display->handler->get_handlers('field');
+    foreach ($handlers as $field => $handler) {
+      if ($label = $handler->label()) {
+        $field_names[$field] = $label;
+      }
+      else {
+        $field_names[$field] = $handler->ui_name();
+      }
+    }
+    return $field_names;
+  }
+
+
   function render() {
     $charts = array();
     $sets = $this->render_grouping($this->view->result, $this->options['grouping']);
@@ -88,21 +301,43 @@ class chart_views_plugin_style_chart extends views_plugin_style {
         '#data' => array(),
         '#labels' => array(),
         '#data_colors' => array(),
+        '#mixed_axis_labels' => array(),
+        '#grid_lines' => $this->options['gridlines'] ? array(
+          '#x_axis_step_size' => $this->options['gridlines_container']['x_axis_step_size'],
+          '#y_axis_step_size' => $this->options['gridlines_container']['y_axis_step_size'],
+        ) : '',
       );
 
       foreach ($records as $row_index => $row) {
         foreach ($this->view->field as $key => $field) {
+          if($this->options['axis_labels']) {
+            if($field->options['field'] == $this->options['axis_labels_container']['x_bottom']['x_bottom_custom_field'])
+		          $chart['#mixed_axis_labels'][CHART_AXIS_X_BOTTOM][0][] = ($this->options['axis_labels_container']['x_bottom']['x_bottom_set'] == "field" ? chart_mixed_axis_label($row->{$field->field_alias}) : '');
+            if($field->options['field'] == $this->options['axis_labels_container']['x_top']['x_top_custom_field'])
+		          $chart['#mixed_axis_labels'][CHART_AXIS_X_TOP][0][] = ($this->options['axis_labels_container']['x_top']['x_top_set'] == "field" ? chart_mixed_axis_label($row->{$field->field_alias}) : '');
+            if($field->options['field'] == $this->options['axis_labels_container']['y_left']['y_left_custom_field'])
+		          $chart['#mixed_axis_labels'][CHART_AXIS_Y_LEFT][0][] = ($this->options['axis_labels_container']['y_left']['y_left_set'] == "field" ? chart_mixed_axis_label($row->{$field->field_alias}) : '');
+            if($field->options['field'] == $this->options['axis_labels_container']['y_right']['y_right_custom_field'])
+		          $chart['#mixed_axis_labels'][CHART_AXIS_Y_RIGHT][0][] = ($this->options['axis_labels_container']['y_right']['y_right_set'] == "field" ? chart_mixed_axis_label($row->{$field->field_alias}) : '');
+          }
           if (!$field->options['exclude']) {
             $chart['#data'][$field->field_alias][] = (int) $row->{$field->field_alias};
-            $chart['#labels'][] = $field->options['label'] . ($this->options['label_append_value'] ? ': ' . $row->{$field->field_alias} : ''); // @TODO Provide a way to change format.
+            $chart['#labels'][] = ($this->options['label_append_value'] ? ': ' . $row->{$field->field_alias} : ''); // @TODO Provide a way to change format.
             $chart['#data_colors'][$field->field_alias] = chart_unique_color($field->field_alias, $this->options['color_scheme']);
           }
         }
       }
 
+      if($this->options['axis_labels']) {
+        $chart['#mixed_axis_labels'][CHART_AXIS_X_BOTTOM][0][] = $this->options['axis_labels_container']['x_bottom']['x_bottom_set'] == "range" ? chart_mixed_axis_range_label($this->options['axis_labels_container']['x_bottom']['x_bottom_min_value'], $this->options['axis_labels_container']['x_bottom']['x_bottom_max_value']) : '';
+        $chart['#mixed_axis_labels'][CHART_AXIS_Y_LEFT][0][] = $this->options['axis_labels_container']['y_left']['y_left_set'] == "range" ? chart_mixed_axis_range_label($this->options['axis_labels_container']['y_left']['y_left_min_value'], $this->options['axis_labels_container']['y_left']['y_left_max_value']) : '';
+        $chart['#mixed_axis_labels'][CHART_AXIS_X_TOP][0][] = $this->options['axis_labels_container']['x_top']['x_top_set'] == "range" ? chart_mixed_axis_range_label($this->options['axis_labels_container']['x_top']['x_top_min_value'], $this->options['axis_labels_container']['x_top']['x_top_max_value']) : '';
+        $chart['#mixed_axis_labels'][CHART_AXIS_Y_RIGHT][0][] = $this->options['axis_labels_container']['y_right']['y_right_set'] == "range" ? chart_mixed_axis_range_label($this->options['axis_labels_container']['y_right']['y_right_min_value'], $this->options['axis_labels_container']['y_right']['y_right_max_value']) : '';
+      }
+      
       // Allow modules to alter the chart based on views context.
       drupal_alter('chart_views', $chart, $this->view->name, $this->display->id);
-
+  
       // Since view expects string output we can't save render array for later.
       $charts[$chart['#chart_id']] = drupal_render($chart);
     }
