diff --git a/core/Archive/DataTableFactory.php b/core/Archive/DataTableFactory.php
index 71eaa7a8c1b8db33f11be4dde542617a69c4ebab..59af8a4e0b01632c4f001c08b62ec098c04e06d6 100644
--- a/core/Archive/DataTableFactory.php
+++ b/core/Archive/DataTableFactory.php
@@ -10,6 +10,7 @@
 namespace Piwik\Archive;
 
 use Piwik\DataTable;
+use Piwik\DataTable\DataTableInterface;
 use Piwik\DataTable\Row;
 use Piwik\Site;
 
@@ -95,6 +96,23 @@ class DataTableFactory
         $this->defaultRow = $defaultRow;
     }
 
+    /**
+     * Returns the ID of the site a table is related to based on the 'site' metadata entry,
+     * or null if there is none.
+     *
+     * @param DataTable $table
+     * @return int|null
+     */
+    public static function getSiteIdFromMetadata(DataTable $table)
+    {
+        $site = $table->getMetadata('site');
+        if (empty($site)) {
+            return null;
+        } else {
+            return $site->getId();
+        }
+    }
+
     /**
      * Tells the factory instance to expand the DataTables that are created by
      * creating subtables and setting the subtable IDs of rows w/ subtables correctly.
@@ -345,10 +363,10 @@ class DataTableFactory
      * Converts site IDs and period string ranges into Site instances and
      * Period instances in DataTable metadata.
      */
-    private function transformMetadata($table)
+    private function transformMetadata(DataTableInterface $table)
     {
         $periods = $this->periods;
-        $table->filter(function ($table) use ($periods) {
+        $table->filter(function (DataTable $table) use ($periods) {
             $table->setMetadata(DataTableFactory::TABLE_METADATA_SITE_INDEX, new Site($table->getMetadata(DataTableFactory::TABLE_METADATA_SITE_INDEX)));
             $table->setMetadata(DataTableFactory::TABLE_METADATA_PERIOD_INDEX, $periods[$table->getMetadata(DataTableFactory::TABLE_METADATA_PERIOD_INDEX)]);
         });
@@ -373,7 +391,7 @@ class DataTableFactory
      * @param $keyMetadata
      * @param $result
      */
-    private function setTableMetadata($keyMetadata, $result)
+    private function setTableMetadata($keyMetadata, DataTableInterface $result)
     {
         if (!isset($keyMetadata[DataTableFactory::TABLE_METADATA_SITE_INDEX])) {
             $keyMetadata[DataTableFactory::TABLE_METADATA_SITE_INDEX] = reset($this->sitesId);
@@ -385,7 +403,7 @@ class DataTableFactory
         }
 
         // Note: $result can be a DataTable\Map
-        $result->filter(function ($table) use ($keyMetadata) {
+        $result->filter(function (DataTable $table) use ($keyMetadata) {
             foreach ($keyMetadata as $name => $value) {
                 $table->setMetadata($name, $value);
             }
@@ -423,5 +441,4 @@ class DataTableFactory
         $result = $table;
         return $result;
     }
-}
-
+}
\ No newline at end of file
diff --git a/core/DataTable.php b/core/DataTable.php
index bdb7ef4f992220f573950fc19af7d6ede0862b98..61e8abb1eb29224b1903811b8e0b961aea780db0 100644
--- a/core/DataTable.php
+++ b/core/DataTable.php
@@ -1679,21 +1679,4 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess
     {
         $this->deleteRow($offset);
     }
-
-    /**
-     * Returns the ID of the site a table is related to based on the 'site' metadata entry,
-     * or null if there is none.
-     *
-     * @param DataTable $table
-     * @return int|null
-     */
-    public static function getSiteIdFromMetadata(DataTable $table)
-    {
-        $site = $table->getMetadata('site');
-        if (empty($site)) {
-            return null;
-        } else {
-            return $site->getId();
-        }
-    }
 }
\ No newline at end of file
diff --git a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
index accd8dbf010126c2bd6c44c20aef4ca1c3152edd..100aa134ed13c7a9a5357bb7e2be4219543f5fec 100644
--- a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
+++ b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
@@ -8,6 +8,7 @@
  */
 namespace Piwik\DataTable\Filter;
 
+use Piwik\Archive\DataTableFactory;
 use Piwik\DataTable;
 use Piwik\DataTable\Row;
 use Piwik\Piwik;
@@ -110,7 +111,7 @@ class AddColumnsProcessedMetricsGoal extends AddColumnsProcessedMetrics
             sort($goals);
         }
 
-        $idSite = DataTable::getSiteIdFromMetadata($table);
+        $idSite = GoalSpecificRevenuePerVisit::getSiteIdFromMetadata($table);
 
         $extraProcessedMetrics = $table->getMetadata(DataTable::EXTRA_PROCESSED_METRICS_METADATA_NAME);
 
diff --git a/plugins/Goals/Columns/Metrics/AverageOrderRevenue.php b/plugins/Goals/Columns/Metrics/AverageOrderRevenue.php
index a25d64c7e9dd5bcd4254c7b5f322c9b960060140..053477bf60733787b442b3fef1f90c57bfeb5dd7 100644
--- a/plugins/Goals/Columns/Metrics/AverageOrderRevenue.php
+++ b/plugins/Goals/Columns/Metrics/AverageOrderRevenue.php
@@ -7,6 +7,7 @@
  */
 namespace Piwik\Plugins\Goals\Columns\Metrics;
 
+use Piwik\Archive\DataTableFactory;
 use Piwik\DataTable;
 use Piwik\DataTable\Row;
 use Piwik\Metrics\Formatter;
@@ -54,7 +55,7 @@ class AverageOrderRevenue extends ProcessedMetric
 
     public function beforeFormat($report, DataTable $table)
     {
-        $this->idSite = DataTable::getSiteIdFromMetadata($table);
+        $this->idSite = DataTableFactory::getSiteIdFromMetadata($table);
         return !empty($this->idSite); // skip formatting if there is no site to get currency info from
     }
 }
\ No newline at end of file
diff --git a/plugins/Goals/Columns/Metrics/AveragePrice.php b/plugins/Goals/Columns/Metrics/AveragePrice.php
index 0ca06201e928dd73c726fa8ac95620a6d4a9bbe4..521ca15d17f7f5a89dfef41bd1b0b56431470dfa 100644
--- a/plugins/Goals/Columns/Metrics/AveragePrice.php
+++ b/plugins/Goals/Columns/Metrics/AveragePrice.php
@@ -8,6 +8,7 @@
 
 namespace Piwik\Plugins\Goals\Columns\Metrics;
 
+use Piwik\Archive\DataTableFactory;
 use Piwik\DataTable;
 use Piwik\DataTable\Row;
 use Piwik\Metrics\Formatter;
@@ -57,7 +58,7 @@ class AveragePrice extends ProcessedMetric
 
     public function beforeFormat($report, DataTable $table)
     {
-        $this->idSite = DataTable::getSiteIdFromMetadata($table);
+        $this->idSite = DataTableFactory::getSiteIdFromMetadata($table);
         return !empty($this->idSite); // skip formatting if there is no site to get currency info from
     }
 }
\ No newline at end of file
diff --git a/plugins/Goals/Columns/Metrics/GoalSpecific/AverageOrderRevenue.php b/plugins/Goals/Columns/Metrics/GoalSpecific/AverageOrderRevenue.php
index 19c23a5eff5581ba6222e9b4c04adb92b681e4ed..845310e39ca864e158e291a0056fcc084d091384 100644
--- a/plugins/Goals/Columns/Metrics/GoalSpecific/AverageOrderRevenue.php
+++ b/plugins/Goals/Columns/Metrics/GoalSpecific/AverageOrderRevenue.php
@@ -7,6 +7,7 @@
  */
 namespace Piwik\Plugins\Goals\Columns\Metrics\GoalSpecific;
 
+use Piwik\Archive\DataTableFactory;
 use Piwik\DataTable;
 use Piwik\DataTable\Row;
 use Piwik\Metrics;
@@ -61,7 +62,7 @@ class AverageOrderRevenue extends GoalSpecificProcessedMetric
 
     public function beforeFormat($report, DataTable $table)
     {
-        $this->idSite = DataTable::getSiteIdFromMetadata($table);
+        $this->idSite = DataTableFactory::getSiteIdFromMetadata($table);
         return !empty($this->idSite); // skip formatting if there is no site to get currency info from
     }
 }
\ No newline at end of file
diff --git a/plugins/Goals/Columns/Metrics/GoalSpecific/Revenue.php b/plugins/Goals/Columns/Metrics/GoalSpecific/Revenue.php
index 3d7e419a5de67eaf8d47325a10a98c8a6dd35ec9..27b5b9dad548150eef06eee6d08e6e78d73bd70c 100644
--- a/plugins/Goals/Columns/Metrics/GoalSpecific/Revenue.php
+++ b/plugins/Goals/Columns/Metrics/GoalSpecific/Revenue.php
@@ -7,6 +7,7 @@
  */
 namespace Piwik\Plugins\Goals\Columns\Metrics\GoalSpecific;
 
+use Piwik\Archive\DataTableFactory;
 use Piwik\DataTable;
 use Piwik\DataTable\Row;
 use Piwik\Metrics;
@@ -54,7 +55,7 @@ class Revenue extends GoalSpecificProcessedMetric
 
     public function beforeFormat($report, DataTable $table)
     {
-        $this->idSite = DataTable::getSiteIdFromMetadata($table);
+        $this->idSite = DataTableFactory::getSiteIdFromMetadata($table);
         return !empty($this->idSite); // skip formatting if there is no site to get currency info from
     }
 }
\ No newline at end of file
diff --git a/plugins/Goals/Columns/Metrics/GoalSpecific/RevenuePerVisit.php b/plugins/Goals/Columns/Metrics/GoalSpecific/RevenuePerVisit.php
index 5daceeb9c942551e3262f2c79561003f6344520f..a90c1058d69d443cfe358b778ee45d540bf75c4b 100644
--- a/plugins/Goals/Columns/Metrics/GoalSpecific/RevenuePerVisit.php
+++ b/plugins/Goals/Columns/Metrics/GoalSpecific/RevenuePerVisit.php
@@ -7,6 +7,7 @@
  */
 namespace Piwik\Plugins\Goals\Columns\Metrics\GoalSpecific;
 
+use Piwik\Archive\DataTableFactory;
 use Piwik\DataTable;
 use Piwik\DataTable\Row;
 use Piwik\Metrics;
@@ -69,7 +70,7 @@ class RevenuePerVisit extends GoalSpecificProcessedMetric
 
     public function beforeFormat($report, DataTable $table)
     {
-        $this->idSite = DataTable::getSiteIdFromMetadata($table);
+        $this->idSite = DataTableFactory::getSiteIdFromMetadata($table);
         return !empty($this->idSite); // skip formatting if there is no site to get currency info from
     }
 }
\ No newline at end of file
diff --git a/plugins/Goals/Columns/Metrics/RevenuePerVisit.php b/plugins/Goals/Columns/Metrics/RevenuePerVisit.php
index b1912fe4e278066f9e8dee88b429eb0a387e5425..488d65c20a17e838c8c92ad78077bc4256864eb3 100644
--- a/plugins/Goals/Columns/Metrics/RevenuePerVisit.php
+++ b/plugins/Goals/Columns/Metrics/RevenuePerVisit.php
@@ -7,6 +7,7 @@
  */
 namespace Piwik\Plugins\Goals\Columns\Metrics;
 
+use Piwik\Archive\DataTableFactory;
 use Piwik\DataTable;
 use Piwik\DataTable\Row;
 use Piwik\Metrics;
@@ -77,7 +78,7 @@ class RevenuePerVisit extends ProcessedMetric
 
     public function beforeFormat($report, DataTable $table)
     {
-        $this->idSite = DataTable::getSiteIdFromMetadata($table);
+        $this->idSite = DataTableFactory::getSiteIdFromMetadata($table);
         return !empty($this->idSite); // skip formatting if there is no site to get currency info from
     }
 }
\ No newline at end of file