diff --git a/plugins/views_simplechart_plugin_style.inc b/plugins/views_simplechart_plugin_style.inc
index 11aa590..29ba9cc 100644
--- a/plugins/views_simplechart_plugin_style.inc
+++ b/plugins/views_simplechart_plugin_style.inc
@@ -27,9 +27,6 @@ class ViewsSimplechartPluginStyle extends views_plugin_style {
     return $options;
   }
 
-  /**
-   * Render the given style.
-   */
   function options_form(&$form, &$form_state) {
     parent::options_form($form, $form_state);
     $form['chart_title'] = array(
@@ -77,7 +74,10 @@ class ViewsSimplechartPluginStyle extends views_plugin_style {
       '#default_value' => $this->options['chart_height'],
     );
   }
-  
+
+  /**
+   * Render the given style.
+   */
   function render() {
     $barchart = $this->render_fields($this->view->result);
     $chartdata[] = explode(',', $this->options['chart_axis_mapping']);
@@ -88,6 +88,10 @@ class ViewsSimplechartPluginStyle extends views_plugin_style {
     if ($this->options['chart_type'] == 'Timeline') {
       $chartdata = preg_replace('/"(\d+)-(\d+)-(\d+)"/i', 'new Date(\'$1-$2-$3\')', $chartdata);
     }
-    return theme('views_simplechart_graph', array('barchart' => $chartdata, 'metadata' => $this->options));
+    $settings = $this->options;
+    $settings['data'] = $chartdata;
+    $id = drupal_html_id('views-simplechart-graph');
+    drupal_add_js(array('views_simplechart' => array($id => $settings)), 'setting');
+    return theme('views_simplechart_graph', array('chart_id' => $id));
   }
 }
diff --git a/views-simplechart-graph.tpl.php b/views-simplechart-graph.tpl.php
index 4012c04..fd4d73c 100644
--- a/views-simplechart-graph.tpl.php
+++ b/views-simplechart-graph.tpl.php
@@ -1,20 +1,3 @@
-<div id="views-simplechart-<?php print $id ?>" class="<?php print $classes ?>">
-  <script type="text/javascript">
-    google.charts.setOnLoadCallback(function(){
-      var data = new google.visualization.arrayToDataTable(<?php print $barchart;?>);
-      var options = {
-        <?php (in_array($metadata['chart_type'],array('BarChart','ColumnChart')) && $metadata['chart_type_stacked'] == 'yes') ? print("'isStacked':true,") : NULL;?>
-        'is3D':true,
-        'legend':'<?php print $metadata['chart_legend_position'];?>',
-        'title':'<?php print $metadata['chart_title'];?>',
-        'width':<?php print $metadata['chart_width'];?>,
-        'height':<?php print $metadata['chart_height'];?>,
-        'allowHtml':true
-      };
-      var container = document.getElementById('views-simplechart-graph-<?php print $id ?>');
-      var chart = new google.visualization.<?php print $metadata['chart_type'];?>(container);
-      chart.draw(data, options);
-    });
-  </script>
-  <div id="views-simplechart-graph-<?php print $id ?>"></div>
-</div>
\ No newline at end of file
+<div class="views-simplechart <?php print $classes ?>">
+  <div id="<?php print $chart_id ?>"></div>
+</div>
diff --git a/views_simplechart.js b/views_simplechart.js
new file mode 100644
index 0000000..345d813
--- /dev/null
+++ b/views_simplechart.js
@@ -0,0 +1,35 @@
+(function($) {
+  Drupal.behaviors.views_simplechart = {
+    attach: function(context, settings) {
+      google.charts.load('current', {
+        'packages': ['corechart','timeline','orgchart']
+      });
+
+      function views_simplechart_render_chart(settings, id) {
+        google.charts.setOnLoadCallback(function() {
+          var data = new google.visualization.arrayToDataTable(JSON.parse(settings.data));
+          var options = {
+            is3D: true,
+            legend: settings.chart_legend_position,
+            title: settings.chart_title,
+            width: settings.chart_width,
+            height: settings.chart_height,
+            allowHtml: true
+          };
+          if ($.inArray(settings.chart_type, ['BarChart', 'ColumnChart']) && settings.chart_type_stacked == 'yes') {
+            options['isStacked'] = true;
+          }
+          var container = document.getElementById(id);
+          if (container) {
+            var chart = new google.visualization[settings.chart_type](container);
+            chart.draw(data, options);
+          }
+        });
+      }
+      for (var id in Drupal.settings.views_simplechart) {
+        views_simplechart_render_chart(Drupal.settings.views_simplechart[id], id);
+      }
+
+    }
+  }
+})(jQuery);
diff --git a/views_simplechart.module b/views_simplechart.module
index 9d06f2f..69b3398 100644
--- a/views_simplechart.module
+++ b/views_simplechart.module
@@ -1,23 +1,23 @@
 <?php
 
 /**
- * Implements hook_views_api()
+ * Implements hook_views_api().
  */
 function views_simplechart_views_api() {
   return array(
-    'api' => '3.0'
+    'api' => '3.0',
   );
 }
 
 /**
  * Implements hook_theme().
  */
-function views_simplechart_theme(){
+function views_simplechart_theme() {
   return array(
     'views_simplechart_graph' => array(
       'template' => 'views-simplechart-graph',
       'variables' => array(
-        'barchart' => NULL
+        'chart_id' => NULL
       ),
     ),
   );
@@ -28,5 +28,5 @@ function views_simplechart_theme(){
  */
 function views_simplechart_html_head_alter(&$head_elements) {
   drupal_add_js('https://www.gstatic.com/charts/loader.js', 'external');
-  drupal_add_js('jQuery(document).ready(function () { google.charts.load(\'current\', {\'packages\':[\'corechart\',\'timeline\',\'orgchart\']}); });', 'inline');
-}
\ No newline at end of file
+  drupal_add_js(drupal_get_path('module', 'views_simplechart') . '/views_simplechart.js');
+}
diff --git a/views_simplechart.views.inc b/views_simplechart.views.inc
index 9636fb5..f252355 100644
--- a/views_simplechart.views.inc
+++ b/views_simplechart.views.inc
@@ -1,24 +1,20 @@
 <?php
 
 /**
- * Implements of hook_views_plugins(). 
+ * Implements hook_views_plugins().
  */
 function views_simplechart_views_plugins() {
   $module_path = drupal_get_path('module', 'views_simplechart');
-  return array(
-    'style' => array(
-      'views_simplechart_plugin_style' => array(
-        'title' => t('Views Simple Chart'),
-        'help' => t('Simple Chart Visualization'),
-        'path' => $module_path . '/plugins',
-        'handler' => 'ViewsSimplechartPluginStyle',
-        'parent' => 'default',
-        'uses row plugin' => FALSE,
-        'uses grouping' => FALSE,
-        'uses fields' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal'
-      )
-    )
+  $plugins['style']['views_simplechart_plugin_style'] = array(
+    'title' => t('Views Simple Chart'),
+    'help' => t('Simple Chart Visualization'),
+    'path' => $module_path . '/plugins',
+    'handler' => 'ViewsSimplechartPluginStyle',
+    'uses row plugin' => FALSE,
+    'uses grouping' => FALSE,
+    'uses fields' => TRUE,
+    'uses options' => TRUE,
+    'type' => 'normal'
   );
-}
\ No newline at end of file
+  return $plugins;
+}
