diff --git a/webform_gchart.info b/webform_gchart.info
index daf3375..5827695 100644
--- a/webform_gchart.info
+++ b/webform_gchart.info
@@ -1 +1,6 @@
 name = Webform GChart
+version = "7.x-1.x-dev"
+description = Webform GChart (Google Charts) is a bridge between the Google Chart API and Webform to display Google Charts about your Webform submissions in your result pages.
+core = 7.x
+package = Webform
+dependencies[] = chart
\ No newline at end of file
diff --git a/webform_gchart.module b/webform_gchart.module
index 6a4f224..658bc39 100644
--- a/webform_gchart.module
+++ b/webform_gchart.module
@@ -56,6 +56,52 @@ function webform_gchart_theme() {
 
 
 /**
+ * Implements _webform_analysis_component().
+ */
+function _webform_gchart_analysis_grid($component, $sids = array()) {
+  // Generate the list of options and questions.
+  $options = _webform_select_options_from_text($component['extra']['options'], TRUE);
+  $questions = _webform_select_options_from_text($component['extra']['questions'], TRUE);
+
+  // Generate a lookup table of results.
+  $query = db_select('webform_submitted_data', 'wsd')
+    ->fields('wsd', array('no', 'data'))
+    ->condition('nid', $component['nid'])
+    ->condition('cid', $component['cid'])
+    ->condition('data', '', '<>')
+    ->groupBy('no')
+    ->groupBy('data');
+  $query->addExpression('COUNT(sid)', 'datacount');
+
+  if (count($sids)) {
+    $query->condition('sid', $sids, 'IN');
+  }
+
+  $result = $query->execute();
+  $counts = array();
+  foreach ($result as $data) {
+    $counts[$data->no][$data->data] = $data->datacount;
+  }
+
+  // Create an entire table to be put into the returned row.
+  $rows = array();
+  $answer_set = array();
+  $question_set = array();
+  // Add questions as each row.
+  foreach ($questions as $qkey => $question) {
+    $answers = array();
+    $question_set[] = array('name' => _webform_filter_xss($question));
+    foreach ($options as $okey => $option) {
+      $answers[] = array(_webform_filter_xss($option), !empty($counts[$qkey][$okey]) ? $counts[$qkey][$okey] : 0);
+    }
+    $answer_set[$qkey] = $answers;
+  }
+
+
+  return array('question_set' => $question_set, 'answer_set' => $answer_set);
+}
+
+/**
  * Provides a simple analysis of all submissions to a webform.
  *
  * @param $node
@@ -78,17 +124,28 @@ function webform_results_gchart($node, $sids = array(), $analysis_component = NU
     $item = menu_get_item('node/' . $node->nid . '/webform-results/gchart');
     menu_set_item(NULL, $item);
   }
-
   $components = isset($analysis_component) ? array($analysis_component['cid'] => $analysis_component) : $node->webform['components'];
   $data = array();
   foreach ($components as $cid => $component) {
+    $type = $component['type'];
+    $callback = 'analysis';
     // Do component specific call.
-    if ($row_data = webform_component_invoke($component['type'], 'analysis', $component, $sids, isset($analysis_component))) {
-      $data[$cid] = $row_data;
+    if($type == 'grid'){
+      $callback = 'gchart_analysis';
     }
+    if ($row_data = webform_component_invoke($type, $callback, $component, $sids, isset($analysis_component))) {
+      if($type == 'grid'){
+        foreach($row_data['question_set'] as $grid_key => $qa_set){
+          $data[$cid.'_'.$grid_key] = array('row_data' => $row_data['answer_set'][$grid_key], 'component_data' => $qa_set);
+        }
+      }
+      else
+        $data[$cid] = array('row_data' => $row_data, 'component_data' => $component);
+    }
+
+    
   }
-  
-  return theme('webform_results_gchart', array('node' => $node, 'data' => $data, 'sids' => $sids, 'component' => $analysis_component));
+  return theme('webform_results_gchart', array('node' => $node, 'data' => $data, 'sids' => $sids, 'component' => $analysis_component, 'components' => $components));
  
 }
 
@@ -103,20 +160,24 @@ function theme_webform_results_gchart($variables) {
   $data = $variables['data'];
   $sids = $variables['sids'];
   $analysis_component = $variables['component'];
-
+  $components = $variables['components'];
   $rows = array();
   $question_number = 0;
   $single = isset($analysis_component);
   
-  foreach ($data as $cid => $row_data) {
+  foreach ($data as $cid => $question) {
     $question_number++;
+    $row_data = $question['row_data'];
+    $component_data = $question['component_data'];
 
     if (is_array($row_data)) {
-            
       if (!$single) {
+        $name = $component_data['name'];
+        if(array_key_exists('extra', $component_data) && array_key_exists('description', $component_data['extra']))
+            $name =  t('@name @desc', array('@name' => $component_data['name'], '@desc' => $component_data['extra']['description']));
         ${'chart' . $question_number}= array(
           '#chart_id' => "chart_" . $question_number,
-          '#title' => check_plain($node->webform['components'][$cid]['name']),
+          '#title' => check_plain($name),
           '#type' => CHART_TYPE_PIE,
           '#size' => chart_size(658, 250),
         );	
