diff --git a/core/ViewDataTable.php b/core/ViewDataTable.php
index 250fc81bec02a648944f6eb9c766ecd2e6327f9c..78cf0f4f573169bbd28996ab9086dabe9446c4a9 100644
--- a/core/ViewDataTable.php
+++ b/core/ViewDataTable.php
@@ -1118,6 +1118,7 @@ class ViewDataTable
             $this->executeAfterDataLoadedCallbacks();
 
             $visualization->afterLoadDataTable();
+            $visualization->beforeRender();
 
         } catch (NoAccessException $e) {
             throw $e;
@@ -1136,7 +1137,7 @@ class ViewDataTable
         $view->visualization = $visualization;
         $view->visualizationCssClass = $this->getDefaultDataTableCssClass();
 
-        if (!$this->dataTable === null) {
+        if (null === $this->dataTable) {
             $view->dataTable = null;
         } else {
             // TODO: this hook seems inappropriate. should be able to find data that is requested for (by site/date) and check if that
diff --git a/core/ViewDataTable/Graph.php b/core/ViewDataTable/Graph.php
index 609cdea2ac980aebfea61b0928580f078674ff8a..722e4f442f75fb86d379ab447265457c18f01627 100644
--- a/core/ViewDataTable/Graph.php
+++ b/core/ViewDataTable/Graph.php
@@ -125,12 +125,12 @@ abstract class Graph extends Visualization
 
     /**
      * Init.
-     *
-     * @param \Piwik\ViewDataTable $view
      */
-    public function init($view)
+    public function init()
     {
-        parent::init($view);
+        $view = $this->viewDataTable;
+
+        parent::init();
 
         if ($view->show_goals) {
             $view->translations['nb_conversions'] = Piwik::translate('Goals_ColumnConversions');
diff --git a/core/ViewDataTable/Visualization.php b/core/ViewDataTable/Visualization.php
index 2920638979e7464b89e1b4ec93faf6e44f300621..7a9ac26fa02f4cf84ede83f2bbf88a55a863b800 100644
--- a/core/ViewDataTable/Visualization.php
+++ b/core/ViewDataTable/Visualization.php
@@ -25,7 +25,6 @@ use Piwik\ViewDataTable;
  */
 abstract class Visualization extends View
 {
-
     const GET_AVAILABLE_EVENT = 'Visualization.addVisualizations';
 
     protected $templateFile = '';
@@ -40,10 +39,10 @@ abstract class Visualization extends View
         parent::__construct($this->templateFile);
 
         $this->viewDataTable = $view;
-        $this->init($view);
+        $this->init();
     }
 
-    protected function init($view)
+    protected function init()
     {
         // do your stuff here, do not overwrite constructor
     }
@@ -58,6 +57,11 @@ abstract class Visualization extends View
 
     }
 
+    final public function beforeRender()
+    {
+        // our stuff goes in here
+    }
+
     /**
      * Default implementation of getDefaultPropertyValues static function.
      *
diff --git a/plugins/CoreVisualizations/Visualizations/Cloud.php b/plugins/CoreVisualizations/Visualizations/Cloud.php
index 24958fa17e4ec37b4e31f068a6ffed91a43d03bd..0ef800f6fa28ca66697fdb531c18adb7e0a27d02 100644
--- a/plugins/CoreVisualizations/Visualizations/Cloud.php
+++ b/plugins/CoreVisualizations/Visualizations/Cloud.php
@@ -46,8 +46,9 @@ class Cloud extends Visualization
 
     protected $templateFile = "@CoreVisualizations/_dataTableViz_tagCloud.twig";
 
-    public function init($view)
+    public function init()
     {
+        $view = $this->viewDataTable;
         $self = $this;
         $view->after_data_loaded_functions[] = function ($dataTable, $view) use ($self) {
             if ($dataTable->getRowsCount() == 0) {
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable.php b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
index 205774c0d65ce6f77c022767843801a3bfc819c7..6acf7b892b6dfd61f772339efbacbfd3ab12af67 100644
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable.php
+++ b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
@@ -152,8 +152,10 @@ class HtmlTable extends Visualization
     /**
      * Init.
      */
-    public function init($view)
+    public function init()
     {
+        $view = $this->viewDataTable;
+
         if (Common::getRequestVar('idSubtable', false)
             && $view->visualization_properties->show_embedded_subtable
         ) {
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php b/plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php
index c3cef43e4917e8fc878bf6dba6b824e5957d6e1b..1abcdf939423b35dd0564471e5c7c0ff8d9e316b 100644
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php
+++ b/plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php
@@ -22,13 +22,11 @@ class AllColumns extends HtmlTable
 
     /**
      * Init.
-     *
-     * @param \Piwik\ViewDataTable $view
      */
-    public function init($view)
+    public function init()
     {
-        $view->visualization_properties->show_extra_columns = true;
+        $this->viewDataTable->visualization_properties->show_extra_columns = true;
 
-        parent::init($view);
+        parent::init();
     }
 }
\ No newline at end of file
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable/Goals.php b/plugins/CoreVisualizations/Visualizations/HtmlTable/Goals.php
index 5900d2d694b7802b188386c6e187f1c76cb34193..469e7b2bcf1a3f84fbbba54b00553d85b60ae05e 100644
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable/Goals.php
+++ b/plugins/CoreVisualizations/Visualizations/HtmlTable/Goals.php
@@ -21,14 +21,12 @@ class Goals extends HtmlTable
     const ID = 'tableGoals';
 
     /**
-     * Constructor.
-     *
-     * @param \Piwik\ViewDataTable $view
+     * Init
      */
-    public function init($view)
+    public function init()
     {
-        $view->visualization_properties->show_goals_columns = true;
+        $this->viewDataTable->visualization_properties->show_goals_columns = true;
 
-        parent::init($view);
+        parent::init();
     }
 }
\ No newline at end of file
diff --git a/plugins/CoreVisualizations/Visualizations/JqplotGraph.php b/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
index 21a17c7ffd445c7f8fd7f3dc1ba87b21ae712686..9c729bf7ae27c1ce12f0c001b3ac83ef9fdd87e2 100644
--- a/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
+++ b/plugins/CoreVisualizations/Visualizations/JqplotGraph.php
@@ -60,13 +60,13 @@ class JqplotGraph extends Graph
     protected $templateFile = "@CoreVisualizations/_dataTableViz_jqplotGraph.twig";
 
     /**
-     * Constructor.
-     *
-     * @param \Piwik\ViewDataTable $view
+     * Init.
      */
-    public function init($view)
+    public function init()
     {
-        parent::init($view);
+        $view = $this->viewDataTable;
+
+        parent::init();
 
         // do not sort if sorted column was initially "label" or eg. it would make "Visits by Server time" not pretty
         if ($view->filter_sort_column != 'label') {
diff --git a/plugins/Live/VisitorLog.php b/plugins/Live/VisitorLog.php
index c6e83ca695c95ee97a3b90c4b7f40eb4c2c5200c..894ba815f542765345ad471f3fd7e628b52bec5c 100644
--- a/plugins/Live/VisitorLog.php
+++ b/plugins/Live/VisitorLog.php
@@ -30,8 +30,8 @@ class VisitorLog extends Visualization
     /**
      * Init.
      */
-    public function init($view)
+    public function init()
     {
-        $view->datatable_js_type = 'VisitorLog';
+        $this->viewDataTable->datatable_js_type = 'VisitorLog';
     }
 }
\ No newline at end of file
diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization
index a5a2f9e5824a33b39e9e213197a218e854355969..20b9c84d6e7baf76ac6e1f5d80a720bacda31276 160000
--- a/plugins/TreemapVisualization
+++ b/plugins/TreemapVisualization
@@ -1 +1 @@
-Subproject commit a5a2f9e5824a33b39e9e213197a218e854355969
+Subproject commit 20b9c84d6e7baf76ac6e1f5d80a720bacda31276